resourcethread redraw speedup/fixes, replace vectorscope graticule IQ
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / resourcepixmap.C
index 9ed12d9357dc71fdef5f83de4f277ec43e408f33..53c116d6bf93f2a1994398d97c7cd9c5286e4212 100644 (file)
@@ -155,7 +155,7 @@ void ResourcePixmap::draw_data(TrackCanvas *canvas,
        int refresh_w = 0;
 
 // Ignore if called by resourcethread.
-//     if( mode == IGNORE_THREAD ) return;
+       if( mode == IGNORE_THREAD ) return;
 
        int y = 0;
        if( edit->track->show_titles() )
@@ -238,6 +238,8 @@ VFrame *ResourcePixmap::change_title_color(VFrame *title_bg, int color)
        VFrame *title_bar = new VFrame(tw, th, colormodel);
        uint8_t **bar_rows = title_bar->get_rows();
        const uint8_t gap_grey = 0x4a;
+       union { unsigned rgba; struct { uint8_t r,g,b,a; }; } c;
+       c.r = color>>16;  c.g = color>>8;  c.b = color>>0;  c.a = 0xff;
        if( BC_CModels::has_alpha(colormodel) && // fast path
            BC_CModels::calculate_pixelsize(colormodel) == sizeof(unsigned) ) {
                const unsigned gap_rgba = (0xff<<24) |
@@ -246,16 +248,14 @@ VFrame *ResourcePixmap::change_title_color(VFrame *title_bg, int color)
                        unsigned *bp = (unsigned *)bar_rows[0];
                        for( int i=tw; --i>=0; ) *bp++ = gap_rgba;
                }
-               unsigned rgba = (0xff<<24) | (color & 0xffffff);
                for( int y=1; y<th; ++y ) {
                        unsigned *bp = (unsigned *)bar_rows[y];
                        if( tw > 0 ) *bp++ = gap_rgba;
-                       for( int i=tw1; --i>0; ++bp ) *bp = rgba;
+                       for( int i=tw1; --i>0; ++bp ) *bp = c.rgba;
                        if( tw > 1 ) *bp = gap_rgba;
                }
        }
        else {
-               uint8_t cr = (color>>16), cg = (color>>8), cb = (color>>0);
                if( th > 0 ) {
                        uint8_t *cp = bar_rows[0];
                        for( int x=0; x<tw; ++x ) {
@@ -272,7 +272,7 @@ VFrame *ResourcePixmap::change_title_color(VFrame *title_bg, int color)
                                cp += bpp;
                        }
                        for( int x=1; x<tw1; ++x ) {
-                               cp[0] = cr; cp[1] = cg; cp[2] = cb;
+                               cp[0] = c.r; cp[1] = c.g; cp[2] = c.b;
                                if( bpp > 3 ) cp[3] = 0xff;
                                cp += bpp;
                        }
@@ -523,9 +523,9 @@ void ResourcePixmap::draw_audio_source(TrackCanvas *canvas, Edit *edit, int x, i
                                y2 = CLIP(y1, 0, y_max);
 //printf("ResourcePixmap::draw_audio_source %d %d %d\n", __LINE__, y1, y2);
                                if( !rect_audio )
-                                       canvas->draw_line(x1, y0, x2, y2, this);
+                                       canvas->draw_bline(x1, y0, x2, y2, this);
                                else
-                                       canvas->draw_line(x2, center_pixel, x2, y2, this);
+                                       canvas->draw_bline(x2, center_pixel, x2, y2, this);
                        }
                }
 
@@ -595,7 +595,7 @@ void ResourcePixmap::draw_wave(TrackCanvas *canvas,
 {
        int rect_audio = mwindow->preferences->rectify_audio;
        if( rect_audio ) { low = fabs(low);  high = fabs(high); }
-       int top_pixel =  mwindow->edl->session->show_titles ? 0 :
+       int top_pixel = !mwindow->edl->session->show_titles ? 0 :
                mwindow->theme->get_image("title_bg_data")->get_h();
        int center_pixel = !rect_audio ?
                mwindow->edl->local_session->zoom_track / 2 + top_pixel :