The following commit has been merged in the master branch:
commit eceb9941250fe2c1deb436e874bd3b93d587bc1e
Author: Andrei Zavada <[email protected]>
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

_______________________________________________
debian-med-commit mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit

Reply via email to