The following commit has been merged in the master branch:
commit cbccf5d5e48632510be69cfbe39be1a81058e80a
Author: andrei zavada <[email protected]>
Date:   Thu Apr 18 16:58:56 2013 +0000

    WIP

diff --git a/src/libsigfile/edf.cc b/src/libsigfile/edf.cc
index bc9ca10..f59c753 100644
--- a/src/libsigfile/edf.cc
+++ b/src/libsigfile/edf.cc
@@ -196,9 +196,9 @@ CEDFFile (const string& fname_, int flags_)
                                continue;
 
                        while ( !thomas.eof() ) {
-                               size_t aa = (size_t)-1, az = (size_t)-1;
+                               double aa = NAN, az = NAN;
                                thomas >> aa >> az;
-                               if ( aa == (size_t)-1 || az == (size_t)-1 )
+                               if ( not isfinite(aa) || not isfinite(az) )
                                        break;
                                H.artifacts.mark_artifact( aa, az);
                        }
@@ -210,19 +210,20 @@ CEDFFile (const string& fname_, int flags_)
                        if ( not fd.good() )
                                continue;
                        int type = -1;
-                       size_t aa = -1, az = -1;
+                       double aa = NAN, az = NAN;
                        string an;
                        while ( fd.good() and not fd.eof() ) {
                                fd >> type >> aa >> az;
                                getline( fd, an, EOA);
-                               if ( aa < az and az < n_data_records * 
H.samples_per_record
+                               if ( isfinite(aa) and isfinite(az) and
+                                    aa < az and az < n_data_records * 
data_record_size
                                     and type < 
SAnnotation<size_t>::TType_total and type >= 0 )
                                        H.annotations.emplace_back(
                                                aa, az,
                                                trim(an),
                                                
(SAnnotation<double>::TType)type);
                                else {
-                                       fprintf( stderr, "Bad annotation: (%d 
%zu %zu %50s)\n", type, aa, az, an.c_str());
+                                       fprintf( stderr, "Bad annotation: (%d 
%g %g %50s)\n", type, aa, az, an.c_str());
                                        break;
                                }
                        }
diff --git a/src/ui/sf/montage.cc b/src/ui/sf/montage.cc
index e0904c5..8b6051e 100644
--- a/src/ui/sf/montage.cc
+++ b/src/ui/sf/montage.cc
@@ -439,12 +439,10 @@ draw_page( cairo_t *cr,
                }
        }
 
-       size_t  half_pad = wd * _p.skirting_run_per1,
-               ef = wd + 2*half_pad;
+       double  half_pad = _p.pagesize() * _p.skirting_run_per1;
 
-       int     half_pad_samples = _p.skirting_run_per1 * _p.vpagesize() * 
samplerate(),
-               cvpa = _p.cur_vpage_start() * samplerate() - half_pad_samples,
-               cvpe = _p.cur_vpage_end()   * samplerate() + half_pad_samples,
+       double  cvpa = _p.cur_vpage_start() - half_pad,
+               cvpe = _p.cur_vpage_end()   + half_pad,
                evpz = cvpe - cvpa;
       // artifacts (changed bg)
        {
@@ -454,22 +452,23 @@ draw_page( cairo_t *cr,
                                                                                
       .4);
                        for ( auto &A : Aa() ) {
                                if ( agh::alg::overlap(
-                                            (int)A.a, (int)A.z,
+                                            A.a, A.z,
                                             cvpa, cvpe) ) {
-                                       int     aa = (int)A.a - cvpa,
-                                               ae = (int)A.z - cvpa;
-                                       if ( aa < 0 )    aa = 0;
+                                       double  aa = A.a - cvpa,
+                                               ae = A.z - cvpa;
+                                       if ( aa < 0.   ) aa = 0.;
                                        if ( ae > evpz ) ae = evpz;
-                                       cairo_rectangle( cr,
-                                                        (float)(aa % evpz) / 
evpz * wd, ptop + _p.interchannel_gap * 1./3,
-                                                        (float)(ae - aa) / 
evpz * wd,          _p.interchannel_gap * 1./3);
+                                       cairo_rectangle(
+                                               cr,
+                                               fmod(aa, evpz) / evpz * wd, 
ptop + _p.interchannel_gap * 1./3,
+                                               (ae - aa)      / evpz * wd,     
   _p.interchannel_gap * 1./3);
                                        cairo_fill( cr);
                                        cairo_stroke( cr);
-                               } else if ( (int)A.a > cvpe )  // no more 
artifacts up to and on current page
+                               } else if ( A.a > cvpe )  // no more artifacts 
up to and on current page
                                        break;
                        }
                        
_p._p.CwB[SExpDesignUI::TColour::sf_labels].set_source_rgb( cr);
-                       cairo_move_to( cr, ef-70, y0 + 15);
+                       cairo_move_to( cr, wd-70, y0 + 15);
                        cairo_set_font_size( cr, 8);
                        snprintf_buf( "%4.2f %% dirty", percent_dirty);
                        cairo_show_text( cr, __buf__);
@@ -480,21 +479,21 @@ draw_page( cairo_t *cr,
       // annotations
        if ( _p.mode == aghui::SScoringFacility::TMode::scoring
             and not annotations.empty() ) {
-               int last_z = 0;
+               double 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);
+                       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 = (float)(aa % evpz) / evpz * wd,
-                                       ww = (float)(ae - aa) / evpz * wd;
+                               auto    wa = fmod(aa, evpz) / evpz * wd,
+                                       ww = (ae - aa) / evpz * wd;
 
                                if ( A.type == 
sigfile::SAnnotation<double>::TType::plain ) {
                                        int disp = ptop +
-                                               ((last_z > (int)A.span.a)
+                                               ((last_z > A.span.a)
                                                 ? ++overlap_count * 5
                                                 : (overlap_count = 0));
                                        last_z = A.span.z;
@@ -512,7 +511,7 @@ draw_page( cairo_t *cr,
                                        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, (float)(aa % evpz) / 
evpz * wd, disp + 12);
+                                       cairo_move_to( cr, fmod(aa, evpz) / 
evpz * wd, disp + 12);
                                        cairo_show_text( cr, A.label.c_str());
 
                                } else if ( A.type == 
sigfile::SAnnotation<double>::TType::phasic_event_spindle

-- 
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