X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbctheme.C;h=99e40e0fe5012d70830e3d977827f1a725c4feb3;hp=2c5410a5bbc16c9908c30e16a0636a6b5ae4a2c5;hb=0fbaff5c59fa1a3b93f5f9d344451f6aa57778d4;hpb=01aef1f53e8f5a3996ad3bf09acade859bab7324 diff --git a/cinelerra-5.1/guicast/bctheme.C b/cinelerra-5.1/guicast/bctheme.C index 2c5410a5..99e40e0f 100644 --- a/cinelerra-5.1/guicast/bctheme.C +++ b/cinelerra-5.1/guicast/bctheme.C @@ -33,7 +33,6 @@ BC_Theme::BC_Theme() { last_image = 0; - images_dirty = 0; } BC_Theme::~BC_Theme() @@ -397,6 +396,7 @@ void BC_Theme::set_data(unsigned char *ptr) int hdr_sz = *(int*)ptr - sizeof(int); unsigned char *cp = ptr + sizeof(int); unsigned char *dp = cp + hdr_sz; + int start_item = images.size(); while( cp < dp ) { char *nm = (char *)cp; @@ -408,7 +408,9 @@ void BC_Theme::set_data(unsigned char *ptr) cp += sizeof(unsigned); } - images_dirty = 1; + int items = images.size() - start_item; + data_items.append(items); + qsort(&images[start_item], items, sizeof(images[0]), images_cmpr); } int BC_Theme::images_cmpr(const void *ap, const void *bp) @@ -419,29 +421,29 @@ int BC_Theme::images_cmpr(const void *ap, const void *bp) unsigned char* BC_Theme::get_image_data(const char *name, int log_errs) { - if( images_dirty ) { - images_dirty = 0; - qsort(&images[0], images.size(), sizeof(images[0]), images_cmpr); - last_image = 0; - } - // Image is the same as the last one if( last_image && !strcasecmp(last_image->name, name) ) return last_image->data; -// Search for image anew. - int l = -1, r = images.size(); - int m = 0, n = -1; - while( r-l > 1 ) { - m = (l + r) / 2; - image_item *item = images[m]; - if( !(n=strcasecmp(name, item->name)) ) { - item->used = 1; - last_image = item; - return item->data; +// look forwards thru data sets for name + int start_item = 0; + for( int i=0,n=data_items.size(); i 1 ) { + m = (l + r) / 2; + image_item *item = images[m]; + if( !(v=strcasecmp(name, item->name)) ) { + item->used = 1; + last_image = item; + return item->data; + } + if( v > 0 ) l = m; else r = m; } - if( n > 0 ) l = m; else r = m; - } + start_item = end_item; + } if( log_errs ) fprintf(stderr, _("Theme::get_image: %s not found.\n"), name);