X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcmenupopup.C;h=c35b2fa5a60c44750ae4dc120a76be5cb11cca56;hb=5616fa8528aa382cef440a88ffd0d87ed3bbfda2;hp=c47e699a4be00cb8fe89bb555231568271605bb7;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/guicast/bcmenupopup.C b/cinelerra-5.1/guicast/bcmenupopup.C index c47e699a..c35b2fa5 100644 --- a/cinelerra-5.1/guicast/bcmenupopup.C +++ b/cinelerra-5.1/guicast/bcmenupopup.C @@ -144,14 +144,16 @@ int BC_MenuPopup::total_items() return menu_items.size(); } + int BC_MenuPopup::dispatch_button_press() { int result = 0; if(popup) { - for(int i = 0; i < menu_items.total && !result && popup; i++) - { - result = menu_items.values[i]->dispatch_button_press(); + for(int i = 0; i < menu_items.total && !result && popup; i++) { + BC_MenuItem *item = menu_items[i]; + if( !item->enabled ) continue; + result = item->dispatch_button_press(); } if(result) draw_items(); } @@ -163,9 +165,10 @@ int BC_MenuPopup::dispatch_button_release() int result = 0, redraw = 0; if(popup) { - for(int i = 0; i < menu_items.total && !result && popup; i++) - { - result = menu_items.values[i]->dispatch_button_release(redraw); + for(int i = 0; i < menu_items.total && !result && popup; i++) { + BC_MenuItem *item = menu_items[i]; + if( !item->enabled ) continue; + result = item->dispatch_button_release(redraw); } if(redraw) draw_items(); } @@ -175,9 +178,10 @@ int BC_MenuPopup::dispatch_button_release() int BC_MenuPopup::dispatch_key_press() { int result = 0; - for(int i = 0; i < menu_items.total && !result; i++) - { - result = menu_items.values[i]->dispatch_key_press(); + for(int i = 0; i < menu_items.total && !result; i++) { + BC_MenuItem *item = menu_items[i]; + if( !item->enabled ) continue; + result = item->dispatch_key_press(); } return result; } @@ -189,9 +193,10 @@ int BC_MenuPopup::dispatch_motion_event() if(popup) { // Try submenus and items - for(i = 0; i < menu_items.total; i++) - { - result |= menu_items.values[i]->dispatch_motion_event(redraw); + for(i = 0; i < menu_items.total; i++) { + BC_MenuItem *item = menu_items[i]; + if( !item->enabled ) continue; + result |= item->dispatch_motion_event(redraw); } if(redraw) draw_items(); @@ -221,9 +226,10 @@ int BC_MenuPopup::dispatch_translation_event() this->x = new_x; this->y = new_y; - for(int i = 0; i < menu_items.total; i++) - { - menu_items.values[i]->dispatch_translation_event(); + for(int i = 0; i < menu_items.total; i++) { + BC_MenuItem *item = menu_items[i]; + if( !item->enabled ) continue; + item->dispatch_translation_event(); } } return 0; @@ -236,9 +242,10 @@ int BC_MenuPopup::dispatch_cursor_leave() if(popup) { - for(int i = 0; i < menu_items.total; i++) - { - result |= menu_items.values[i]->dispatch_cursor_leave(); + for(int i = 0; i < menu_items.total; i++) { + BC_MenuItem *item = menu_items[i]; + if( !item->enabled ) continue; + result |= item->dispatch_cursor_leave(); } if(result) draw_items(); } @@ -289,7 +296,7 @@ int BC_MenuPopup::activate_menu(int x, if(this->y + this->h > top_y1) this->y -= this->h + h; // Bottom justify // Avoid top of menu going out of screen if(this->y < 0) - this->y = 2; + this->y = yS(2); } else { @@ -300,7 +307,7 @@ int BC_MenuPopup::activate_menu(int x, if(this->x + this->w > top_x1) this->x = new_x - this->w; if(this->y + this->h > top_y1) this->y = new_y + h - this->h; } - top_x0 += 2; top_y0 += 2; + top_x0 += xS(2); top_y0 += yS(2); if( this->x < top_x0 ) this->x = top_x0; if( this->y < top_y0 ) this->y = top_y0; @@ -308,16 +315,12 @@ int BC_MenuPopup::activate_menu(int x, if(menu_bar) { popup = new BC_Popup(menu_bar, this->x, this->y, this->w, this->h, - top_level->get_resources()->menu_up, - 1, - menu_bar->bg_pixmap); + top_level->get_resources()->menu_up, 1, menu_bar->bg_pixmap); } else { popup = new BC_Popup(top_level, this->x, this->y, this->w, this->h, - top_level->get_resources()->menu_up, - 1, - 0); + top_level->get_resources()->menu_up, 1, 0); // popup->set_background(top_level->get_resources()->menu_bg); } draw_items(); @@ -327,9 +330,10 @@ int BC_MenuPopup::activate_menu(int x, int BC_MenuPopup::deactivate_submenus(BC_MenuPopup *exclude) { - for(int i = 0; i < menu_items.total; i++) - { - menu_items.values[i]->deactivate_submenus(exclude); + for(int i = 0; i < menu_items.total; i++) { + BC_MenuItem *item = menu_items[i]; + if( !item->enabled ) continue; + item->deactivate_submenus(exclude); } return 0; } @@ -365,9 +369,10 @@ int BC_MenuPopup::draw_items() BLACK); } - for(int i = 0; i < menu_items.total; i++) - { - menu_items.values[i]->draw(); + for(int i = 0; i < menu_items.total; i++) { + BC_MenuItem *item = menu_items[i]; + if( !item->enabled ) continue; + item->draw(); } popup->flash(); @@ -377,42 +382,44 @@ int BC_MenuPopup::draw_items() int BC_MenuPopup::get_dimensions() { - int widest_text = 10, widest_key = 10; + int xs10 = xS(10), xs20 = xS(20); + int ys4 = yS(4), ys5 = yS(10); + int widest_text = xs10, widest_key = xs10; int text_w, key_w; int i = 0; // pad for border - h = 2; + h = yS(2); // Set up parameters in each item and get total h. - for(i = 0; i < menu_items.total; i++) - { - text_w = 10 + top_level->get_text_width(MEDIUMFONT, menu_items.values[i]->text); - if(menu_items.values[i]->checked) text_w += check->get_w() + 1; + for(i = 0; i < menu_items.total; i++) { + BC_MenuItem *item = menu_items[i]; + if( !item->enabled ) continue; + text_w = xs10 + top_level->get_text_width(MEDIUMFONT, item->text); + if(item->checked) text_w += check->get_w() + xS(1); - key_w = 10 + top_level->get_text_width(MEDIUMFONT, menu_items.values[i]->hotkey_text); + key_w = xs10 + top_level->get_text_width(MEDIUMFONT, item->hotkey_text); if(text_w > widest_text) widest_text = text_w; if(key_w > widest_key) widest_key = key_w; - if(!strcmp(menu_items.values[i]->text, "-")) - menu_items.values[i]->h = 5; - else - { - menu_items.values[i]->h = item_bg[0] ? item_bg[0]->get_h() : - top_level->get_text_height(MEDIUMFONT) + 4; + if(!strcmp(item->text, "-")) + item->h = ys5; + else { + item->h = item_bg[0] ? item_bg[0]->get_h() : + top_level->get_text_height(MEDIUMFONT) + ys4; } - menu_items.values[i]->y = h; - menu_items.values[i]->highlighted = 0; - menu_items.values[i]->down = 0; - h += menu_items.values[i]->h; + item->y = h; + item->highlighted = 0; + item->down = 0; + h += item->h; } - w = widest_text + widest_key + 10; + w = widest_text + widest_key + xs20; w = MAX(w, top_level->get_resources()->min_menu_w); // pad for division - key_x = widest_text + 5; + key_x = widest_text + xS(16); // pad for border - h += 2; + h += yS(2); return 0; } @@ -431,8 +438,9 @@ int BC_MenuPopup::cursor_inside() if( !popup ) return 0; if( popup->cursor_above() ) return 1; for( int i=0; isubmenu ) continue; - if( menu_items[i]->submenu->cursor_inside() ) return 1; + BC_MenuItem *item = menu_items[i]; + if( !item->enabled || !item->submenu ) continue; + if( item->submenu->cursor_inside() ) return 1; } return 0; }