[med-svn] [SCM] aghermann branch, master, updated. f0d4c0fd35bf09e7dff56ddb9a2d798ae916c2ef

Andrei Zavada johnhommer at gmail.com
Sun Feb 3 12:53:16 UTC 2013


The following commit has been merged in the master branch:
commit 405a67f3099c3763b7e98bd7c6b731fdc9323ad2
Author: Andrei Zavada <johnhommer at gmail.com>
Date:   Sun Feb 3 12:50:55 2013 +0200

    draw phasic events individually on montage page

diff --git a/src/ui/sf/montage.cc b/src/ui/sf/montage.cc
index a4ca92a..410fac3 100644
--- a/src/ui/sf/montage.cc
+++ b/src/ui/sf/montage.cc
@@ -225,7 +225,8 @@ draw_page( cairo_t *cr,
 	}
 
       // marquee, goes first, not to obscure waveforms
-	if ( draw_marquee // possibly undesired (such as when drawing for unfazer (what unfazer?))
+	if ( _p.mode != aghui::SScoringFacility::TMode::shuffling_channels
+	     and draw_marquee // possibly undesired (such as when drawing for unfazer (what unfazer?))
 	     && agh::alg::overlap(
 		     selection_start_time, selection_end_time,
 		     _p.cur_xvpage_start(), _p.cur_xvpage_end()) ) {
@@ -476,59 +477,34 @@ draw_page( cairo_t *cr,
 		}
 	}
 
-      // phasic events
-	if ( _p.mode == TMode::scoring and
-	     draw_phasic_spindle and
-	     not phasic_events.at(metrics::phasic::TEventTypes::spindle).empty() ) {
-		cairo_pattern_t *cp = cairo_pattern_create_linear( 0., ptop+10, 0., ptop+30);
-		for ( auto &cA : phasic_events.at(metrics::phasic::TEventTypes::spindle) ) {
-			agh::alg::SSpan<size_t> A = cA * samplerate();
-			if ( agh::alg::overlap( (int)A.a, (int)A.z, cvpa, cvpe) ) {
-				_p._p.CwB[SExpDesignUI::TColour::sf_phasic_spindle].pattern_add_color_stop_rgba( cp, 0., 1.);
-				_p._p.CwB[SExpDesignUI::TColour::sf_phasic_spindle].pattern_add_color_stop_rgba( cp, .1, 0.3);
-				_p._p.CwB[SExpDesignUI::TColour::sf_phasic_spindle].pattern_add_color_stop_rgba( cp, 1., 0.);
-				cairo_set_source( cr, cp);
-
-				int	aa = (int)A.a - cvpa,
-					ae = (int)A.z - cvpa;
-				if ( aa < 0 )    aa = 0;
-				if ( ae > evpz ) ae = evpz;
-				cairo_rectangle( cr,
-						 (float)(aa % evpz) / evpz * wd, ptop+10,
-						 (float)(ae - aa) / evpz * wd, ptop+30);
-				cairo_fill( cr);
-				cairo_stroke( cr);
-			} else if ( (int)A.a > cvpe )  // no more spindles up to and on current page
-				break;
-		}
-		cairo_pattern_destroy( cp);
-	}
-	if ( _p.mode == TMode::scoring and
-	     draw_phasic_Kcomplex and
-	     not phasic_events.at(metrics::phasic::TEventTypes::K_complex).empty() ) {
-		
-	}
-
       // annotations
-	{
-		if ( not annotations.empty() ) {
-			int on_this_page = 0;
-			for ( auto &A : annotations ) {
-				if ( agh::alg::overlap( (int)A.span.a, (int)A.span.z, cvpa, cvpe) ) {
-					int disp = ptop + ++on_this_page * 5;
+	if ( _p.mode == aghui::SScoringFacility::TMode::scoring
+	     and not annotations.empty() ) {
+		int last_z = 0;
+		int overlap_count = 0;
+		for ( auto &A : annotations ) {
+			if ( agh::alg::overlap( (int)A.span.a, (int)A.span.z, cvpa, cvpe) ) {
+				int	aa = (int)A.span.a - cvpa,
+					ae = (int)A.span.z - cvpa;
+				agh::alg::ensure_within( aa, -half_pad_samples, -half_pad_samples + evpz);
+				agh::alg::ensure_within( ae, -half_pad_samples, -half_pad_samples + evpz);
+
+				auto	wa = (float)(aa % evpz) / evpz * wd,
+					ww = (float)(ae - aa) / evpz * wd;
+
+				if ( A.type == sigfile::SAnnotation::TType::plain ) {
+					int disp = ptop +
+						((last_z > (int)A.span.a)
+						 ? ++overlap_count * 5
+						 : (overlap_count = 0));
+					last_z = A.span.z;
 					cairo_pattern_t *cp = cairo_pattern_create_linear( 0., disp, 0., pbot);
 					_p._p.CwB[SExpDesignUI::TColour::sf_annotations].pattern_add_color_stop_rgba( cp, 0., 1.);
 					_p._p.CwB[SExpDesignUI::TColour::sf_annotations].pattern_add_color_stop_rgba( cp, .1, 0.3);
 					_p._p.CwB[SExpDesignUI::TColour::sf_annotations].pattern_add_color_stop_rgba( cp, 1., 0.);
 					cairo_set_source( cr, cp);
 
-					int	aa = (int)A.span.a - cvpa,
-						ae = (int)A.span.z - cvpa;
-					if ( aa < 0 )    aa = 0;
-					if ( ae > evpz ) ae = evpz;
-					cairo_rectangle( cr,
-							 (float)(aa % evpz) / evpz * wd, disp,
-							 (float)(ae - aa) / evpz * wd, pbot-ptop);
+					cairo_rectangle( cr, wa, disp, ww, pbot-ptop);
 					cairo_fill( cr);
 					cairo_stroke( cr);
 					cairo_pattern_destroy( cp);
@@ -538,9 +514,49 @@ draw_page( cairo_t *cr,
 					cairo_set_source_rgb( cr, 0., 0., 0.);
 					cairo_move_to( cr, (float)(aa % evpz) / evpz * wd, disp + 12);
 					cairo_show_text( cr, A.label.c_str());
-				} else if ( (int)A.span.a > cvpe )  // no more artifacts up to and on current page
-					break;
-			}
+
+				} else if ( A.type == sigfile::SAnnotation::TType::phasic_event_spindle
+					    and draw_phasic_spindle ) {
+					cairo_pattern_t *cp = cairo_pattern_create_linear( wa, 0., wa + ww, 0.);
+					_p._p.CwB[SExpDesignUI::TColour::sf_phasic_spindle].pattern_add_color_stop_rgba( cp, 0., 0.);
+					_p._p.CwB[SExpDesignUI::TColour::sf_phasic_spindle].pattern_add_color_stop_rgba( cp, .5, 0.3);
+					_p._p.CwB[SExpDesignUI::TColour::sf_phasic_spindle].pattern_add_color_stop_rgba( cp, 1., 0.);
+					cairo_set_source( cr, cp);
+
+					cairo_rectangle( cr, wa, ptop, ww, pbot-ptop);
+					cairo_fill( cr);
+					cairo_stroke( cr);
+					cairo_pattern_destroy( cp);
+
+				} else if ( A.type == sigfile::SAnnotation::TType::phasic_event_K_complex
+					    and draw_phasic_Kcomplex ) {
+					cairo_pattern_t *cp = cairo_pattern_create_linear( 0., ptop, 0., pbot);
+					_p._p.CwB[SExpDesignUI::TColour::sf_phasic_Kcomplex].pattern_add_color_stop_rgba( cp, 0., 0.);
+					_p._p.CwB[SExpDesignUI::TColour::sf_phasic_Kcomplex].pattern_add_color_stop_rgba( cp, .5, 0.4);
+					_p._p.CwB[SExpDesignUI::TColour::sf_phasic_Kcomplex].pattern_add_color_stop_rgba( cp, 1., 0.);
+					cairo_set_source( cr, cp);
+
+					cairo_rectangle( cr, wa, ptop, ww, pbot-ptop);
+					cairo_fill( cr);
+					cairo_stroke( cr);
+					cairo_pattern_destroy( cp);
+
+				} else if ( A.type == sigfile::SAnnotation::TType::eyeblink
+					    and draw_phasic_eyeblink ) {
+					cairo_pattern_t *cp = cairo_pattern_create_linear( 0., ptop, 0., pbot);
+					_p._p.CwB[SExpDesignUI::TColour::sf_phasic_eyeblink].pattern_add_color_stop_rgba( cp, 0., 0.);
+					_p._p.CwB[SExpDesignUI::TColour::sf_phasic_eyeblink].pattern_add_color_stop_rgba( cp, .5, 0.4);
+					_p._p.CwB[SExpDesignUI::TColour::sf_phasic_eyeblink].pattern_add_color_stop_rgba( cp, 1., 0.);
+					cairo_set_source( cr, cp);
+
+					cairo_rectangle( cr, wa, ptop, ww, pbot-ptop);
+					cairo_fill( cr);
+					cairo_stroke( cr);
+					cairo_pattern_destroy( cp);
+				}
+
+			} else if ( (int)A.span.a > cvpe )  // no more artifacts up to and on current page
+				break;
 		}
 	}
 

-- 
Sleep experiment manager



More information about the debian-med-commit mailing list