prevent popup deactivation while button_down
[goodguy/history.git] / cinelerra-5.0 / guicast / bcmenupopup.C
index e465d01f1315790e2f0b919b2ad3682a46559f7a..0d418cb8c4f442b3657d55eea63fb4a87cb42b38 100644 (file)
@@ -19,6 +19,7 @@
  *
  */
 
+#include "bcdisplayinfo.h"
 #include "bcmenubar.h"
 #include "bcmenuitem.h"
 #include "bcmenupopup.h"
@@ -45,6 +46,7 @@ BC_MenuPopup::BC_MenuPopup()
        item_bg[0] = 0;
        item_bg[1] = 0;
        item_bg[2] = 0;
+       check = 0;
 }
 
 BC_MenuPopup::~BC_MenuPopup()
@@ -59,6 +61,7 @@ BC_MenuPopup::~BC_MenuPopup()
        delete item_bg[0];
        delete item_bg[1];
        delete item_bg[2];
+       delete check;
 }
 
 int BC_MenuPopup::initialize(BC_WindowBase *top_level,
@@ -86,6 +89,7 @@ int BC_MenuPopup::initialize(BC_WindowBase *top_level,
        {
                window_bg = new BC_Pixmap(top_level, resources->menu_popup_bg);
        }
+       
        if(resources->menu_item_bg)
        {
                item_bg[0] = new BC_Pixmap(top_level, resources->menu_item_bg[0], PIXMAP_ALPHA);
@@ -93,6 +97,11 @@ int BC_MenuPopup::initialize(BC_WindowBase *top_level,
                item_bg[2] = new BC_Pixmap(top_level, resources->menu_item_bg[2], PIXMAP_ALPHA);
        }
 
+       if(resources->check)
+       {
+               check = new BC_Pixmap(top_level, resources->check, PIXMAP_ALPHA);
+       }
+
        return 0;
 }
 
@@ -185,13 +194,11 @@ int BC_MenuPopup::dispatch_translation_event()
        if(popup)
        {
                int new_x = x +
-                       (top_level->last_translate_x -
-                       top_level->prev_x -
-                       top_level->get_resources()->get_left_border());
+                       (top_level->last_translate_x - top_level->prev_x -
+                       BC_DisplayInfo::get_left_border());
                int new_y = y +
-                       (top_level->last_translate_y -
-                       top_level->prev_y -
-                       top_level->get_resources()->get_top_border());
+                       (top_level->last_translate_y - top_level->prev_y -
+                       BC_DisplayInfo::get_top_border());
 
 // printf("BC_MenuPopup::dispatch_translation_event %d %d %d %d\n",
 // top_level->prev_x,
@@ -369,7 +376,7 @@ int BC_MenuPopup::get_dimensions()
        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 += 20;
+               if(menu_items.values[i]->checked) text_w += check->get_w() + 1;
 
                key_w = 10 + top_level->get_text_width(MEDIUMFONT, menu_items.values[i]->hotkey_text);
                if(text_w > widest_text) widest_text = text_w;
@@ -378,7 +385,10 @@ int BC_MenuPopup::get_dimensions()
                if(!strcmp(menu_items.values[i]->text, "-"))
                        menu_items.values[i]->h = 5;
                else
-                       menu_items.values[i]->h = top_level->get_text_height(MEDIUMFONT) + 4;
+               {
+                       menu_items.values[i]->h = item_bg[0] ? item_bg[0]->get_h() :
+                               top_level->get_text_height(MEDIUMFONT) + 4;
+               }
 
                menu_items.values[i]->y = h;
                menu_items.values[i]->highlighted = 0;