X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fresourcepixmap.C;h=86fb5023d384252047453b4b89918e035dad38dd;hp=2ffd86ca58287ecc74747ca45926331e82f4f38f;hb=2778975bea06a53d8165a5e37bdacde1ae5f3320;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/cinelerra/resourcepixmap.C b/cinelerra-5.1/cinelerra/resourcepixmap.C index 2ffd86ca..86fb5023 100644 --- a/cinelerra-5.1/cinelerra/resourcepixmap.C +++ b/cinelerra-5.1/cinelerra/resourcepixmap.C @@ -46,6 +46,7 @@ #include "localsession.h" #include "mwindow.h" #include "mwindowgui.h" +#include "preferences.h" #include "renderengine.h" #include "resourcethread.h" #include "resourcepixmap.h" @@ -193,16 +194,13 @@ void ResourcePixmap::draw_data(TrackCanvas *canvas, refresh_w = pixmap_w; // Draw background image - if( refresh_w > 0 ) - mwindow->theme->draw_resource_bg(canvas, - this, - edit_x, - edit_w, - pixmap_x, - refresh_x, - y, - refresh_x + refresh_w, - mwindow->edl->local_session->zoom_track + y); + if( refresh_w > 0 ) { + int x1 = refresh_x, x2 = x1 + refresh_w; + int y1 = y, y2 = y1 + mwindow->edl->local_session->zoom_track; + int color = mwindow->get_title_color(edit); + mwindow->theme->draw_resource_bg(canvas, this, color, + edit_x, edit_w, pixmap_x, x1,y1, x2,y2); + } //printf("ResourcePixmap::draw_data 70\n"); @@ -213,34 +211,81 @@ void ResourcePixmap::draw_data(TrackCanvas *canvas, { case TRACK_AUDIO: draw_audio_resource(canvas, - edit, - refresh_x, - refresh_w); + edit, refresh_x, refresh_w); break; case TRACK_VIDEO: - draw_video_resource(canvas, - edit, - edit_x, - edit_w, - pixmap_x, - pixmap_w, - refresh_x, - refresh_w, + draw_video_resource(canvas, edit, edit_x, edit_w, + pixmap_x, pixmap_w, refresh_x, refresh_w, mode); break; case TRACK_SUBTITLE: - draw_subttl_resource(canvas, - edit, - refresh_x, - refresh_w); + draw_subttl_resource(canvas, edit, + refresh_x, refresh_w); break; } } SET_TRACE } + +VFrame *ResourcePixmap::change_title_color(VFrame *title_bg, int color) +{ + int colormodel = title_bg->get_color_model(); + int bpp = BC_CModels::calculate_pixelsize(colormodel); + int tw = title_bg->get_w(), tw1 = tw-1, th = title_bg->get_h(); + VFrame *title_bar = new VFrame(tw, th, colormodel); + uint8_t cr = (color>>16), cg = (color>>8), cb = (color>>0); + uint8_t **bar_rows = title_bar->get_rows(); + const uint8_t gap_grey = 0x4a; + if( th > 0 ) { + uint8_t *cp = bar_rows[0]; + for( int x=0; x 3 ) cp[3] = 0xff; + cp += bpp; + } + } + for( int y=1; y 0 ) { + cp[0] = cp[1] = cp[2] = gap_grey; + if( bpp > 3 ) cp[3] = 0xff; + cp += bpp; + } + for( int x=1; x 3 ) cp[3] = 0xff; + cp += bpp; + } + if( tw > 1 ) { + cp[0] = cp[1] = cp[2] = gap_grey; + if( bpp > 3 ) cp[3] = 0xff; + } + } + return title_bar; +} + +VFrame *ResourcePixmap::change_picon_alpha(VFrame *picon_frame, int alpha) +{ + uint8_t **picon_rows = picon_frame->get_rows(); + int w = picon_frame->get_w(), h = picon_frame->get_h(); + int color_model = picon_frame->get_color_model(); + int bpp = BC_CModels::calculate_pixelsize(color_model); + VFrame *frame = new VFrame(w, h, BC_RGBA8888); + uint8_t **rows = frame->get_rows(); + for( int y=0; y pixmap_w ) w -= w - pixmap_w; - canvas->draw_3segmenth(x, 0, w, total_x, total_w, - mwindow->theme->get_image("title_bg_data"), this); + VFrame *title_bg = mwindow->theme->get_image("title_bg_data"); + int color = mwindow->get_title_color(edit); + VFrame *title_bar = !color ? title_bg : + change_title_color(title_bg, color); + canvas->draw_3segmenth(x, 0, w, total_x, total_w, title_bar, this); + if( title_bar != title_bg ) delete title_bar; -// if( total_x > -BC_INFINITY ) { - char title[BCTEXTLEN]; - edit->get_title(title); - canvas->set_color(mwindow->theme->title_color); - canvas->set_font(mwindow->theme->title_font); + char title[BCTEXTLEN]; + edit->get_title(title); + canvas->set_color(mwindow->theme->title_color); + canvas->set_font(mwindow->theme->title_font); // Justify the text on the left boundary of the edit if it is visible. // Otherwise justify it on the left side of the screen. - int text_x = total_x + left_margin; - text_x = MAX(left_margin, text_x); + int text_x = total_x + left_margin; + text_x = MAX(left_margin, text_x); //printf("ResourcePixmap::draw_title 1 %d\n", text_x); - canvas->draw_text(text_x, - canvas->get_text_ascent(mwindow->theme->title_font) + 2, - title, strlen(title), this); -// } + canvas->draw_text(text_x, // 2, + canvas->get_text_ascent(mwindow->theme->title_font) + 2, + title, strlen(title), this); } @@ -334,22 +381,6 @@ SET_TRACE } - - - - - - - - - - - - - - - - void ResourcePixmap::draw_audio_source(TrackCanvas *canvas, Edit *edit, int x, int w) { w++; @@ -582,8 +613,20 @@ void ResourcePixmap::draw_video_resource(TrackCanvas *canvas, mwindow->frame_cache->get_frame_ptr(speed_position, edit->channel, mwindow->edl->session->frame_rate, BC_RGB888, picon_w, picon_h, indexable->id); + int bg_color = gui->get_bg_color(); if( picon_frame ) { - draw_vframe(picon_frame, x, y, picon_w, picon_h, 0, 0); + VFrame *frame = picon_frame; + int color = mwindow->get_title_color(edit); + if( color ) { + int alpha = (~color >> 24) & 0xff; + frame = change_picon_alpha(picon_frame, alpha); + gui->set_bg_color(color & 0xffffff); + } + draw_vframe(frame, x, y, picon_w, picon_h, 0, 0); + if( frame != picon_frame ) { + delete frame; + gui->set_bg_color(bg_color); + } mwindow->frame_cache->unlock(); } else if( mode != IGNORE_THREAD ) {