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

Andrei Zavada johnhommer at gmail.com
Wed May 1 00:09:37 UTC 2013


The following commit has been merged in the master branch:
commit eceb9941250fe2c1deb436e874bd3b93d587bc1e
Author: Andrei Zavada <johnhommer at gmail.com>
Date:   Fri Apr 26 01:49:49 2013 +0300

    better, but still not optimal, stacking of ann. labels on montage

diff --git a/src/ui/sf/montage.cc b/src/ui/sf/montage.cc
index 71fb38d..67af5e7 100644
--- a/src/ui/sf/montage.cc
+++ b/src/ui/sf/montage.cc
@@ -761,44 +761,53 @@ draw_montage( cairo_t* cr)
 		}
 	}
       // recording-wide annotations
-	for ( auto &SA : common_annotations ) {
-		auto &S = *SA.first;
-		auto &A = *SA.second;
+	if ( not common_annotations.empty() ) {
+		cairo_select_font_face( cr, "serif", CAIRO_FONT_SLANT_ITALIC, CAIRO_FONT_WEIGHT_NORMAL);
+		cairo_set_font_size( cr, 10);
+		cairo_text_extents_t extents;
+
+		double last_label_end = 0.;
+		int overlap_count = 0;
+
 		double	cvpa = cur_xvpage_start(),
 			cvpe = cur_xvpage_end(),
 			evpz = cvpe - cvpa;
-		double last_z = 0;
-		int overlap_count = 0;
-		if ( agh::alg::overlap( A.span.a, A.span.z, cvpa, cvpe) ) {
-			double	aa = A.span.a - cvpa,
-				ae = A.span.z - cvpa;
-			agh::alg::ensure_within( aa, -half_pad, -half_pad + evpz);
-			agh::alg::ensure_within( ae, -half_pad, -half_pad + evpz);
-
-			auto	wa = fmod(aa, evpz) / evpz * da_wd,
-				ww = (ae - aa) / evpz * da_wd;
-
-			int disp = 0 +
-				((last_z > A.span.a)
-				 ? ++overlap_count * 5
-				 : (overlap_count = 0));
-			last_z = A.span.z;
-
-			_p.CwB[SExpDesignUI::TColour::sf_embedded_annotations].set_source_rgba( cr, .9);
-			cairo_set_line_width( cr, 2.5);
-			cairo_rectangle( cr, wa, 0, ww, da_ht);
-			cairo_stroke( cr);
 
-			_p.CwB[SExpDesignUI::TColour::sf_embedded_annotations].set_source_rgba( cr);
-			cairo_rectangle( cr, wa, 0, ww, da_ht);
-			cairo_fill( cr);
-			cairo_stroke( cr);
+		for ( auto &SA : common_annotations ) {
+			auto &S = *SA.first;
+			auto &A = *SA.second;
+			if ( agh::alg::overlap( A.span.a, A.span.z, cvpa, cvpe) ) {
+				double	aa = A.span.a - cvpa,
+					ae = A.span.z - cvpa;
+				agh::alg::ensure_within( aa, -half_pad, -half_pad + evpz);
+				agh::alg::ensure_within( ae, -half_pad, -half_pad + evpz);
 
-			cairo_select_font_face( cr, "serif", CAIRO_FONT_SLANT_ITALIC, CAIRO_FONT_WEIGHT_NORMAL);
-			cairo_set_font_size( cr, 11);
-			cairo_set_source_rgb( cr, 0., 0., 0.);
-			cairo_move_to( cr, fmod(aa, evpz) / evpz * da_wd, da_ht - 12 - disp);
-			cairo_show_text( cr, A.label.c_str());
+				auto	wa = fmod(aa, evpz) / evpz * da_wd,
+					ww = (ae - aa) / evpz * da_wd;
+
+				cairo_text_extents( cr, A.label.c_str(), &extents);
+
+				int disp = 0 +
+					(last_label_end > wa)
+					? ++overlap_count * 12
+					: (overlap_count = 0);
+				last_label_end = wa + extents.width + 3;
+
+				_p.CwB[SExpDesignUI::TColour::sf_embedded_annotations].set_source_rgba( cr, .9);
+				cairo_set_line_width( cr, 2.5);
+				cairo_rectangle( cr, wa, 0, ww, da_ht);
+				cairo_stroke( cr);
+
+				_p.CwB[SExpDesignUI::TColour::sf_embedded_annotations].set_source_rgba( cr);
+				cairo_rectangle( cr, wa, 0, ww, da_ht);
+				cairo_fill( cr);
+				cairo_stroke( cr);
+
+				cairo_set_source_rgb( cr, 0., 0., 0.);
+				cairo_move_to( cr, wa, da_ht - 12 - disp);
+				cairo_show_text( cr, A.label.c_str());
+				cairo_stroke( cr);
+			}
 		}
 	}
 	case TMode::showing_remixed:

-- 
Sleep experiment manager



More information about the debian-med-commit mailing list