projects
/
goodguy
/
cinelerra.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix opengl transform translate (again), update shell btns, tweak lv2-blacklist, Makef...
[goodguy/cinelerra.git]
/
cinelerra-5.1
/
guicast
/
bcpopupmenu.C
diff --git
a/cinelerra-5.1/guicast/bcpopupmenu.C
b/cinelerra-5.1/guicast/bcpopupmenu.C
index 2fb69d1cb2ecd8010a8b634a07691e8f6d0409d5..ee78dbb371179e6770f8e73a97ab376c71d10798 100644
(file)
--- a/
cinelerra-5.1/guicast/bcpopupmenu.C
+++ b/
cinelerra-5.1/guicast/bcpopupmenu.C
@@
-41,13
+41,8
@@
#define TRIANGLE_H 10
#define TRIANGLE_H 10
-BC_PopupMenu::BC_PopupMenu(int x,
- int y,
- int w,
- const char *text,
- int use_title,
- VFrame **data,
- int margin)
+BC_PopupMenu::BC_PopupMenu(int x, int y, int w, const char *text,
+ int use_title, VFrame **data, int margin)
: BC_SubWindow(x, y, 0, 0, -1)
{
highlighted = popup_down = 0;
: BC_SubWindow(x, y, 0, 0, -1)
{
highlighted = popup_down = 0;
@@
-57,21
+52,15
@@
BC_PopupMenu::BC_PopupMenu(int x,
BC_WindowBase::get_resources()->popupmenu_margin;
this->use_title = use_title;
strcpy(this->text, text);
BC_WindowBase::get_resources()->popupmenu_margin;
this->use_title = use_title;
strcpy(this->text, text);
- for(int i = 0; i < TOTAL_IMAGES; i++)
- {
- images[i] = 0;
- }
+ for( int i=0; i<TOTAL_IMAGES; ++i ) images[i] = 0;
this->data = data;
this->w_argument = w;
status = BUTTON_UP;
pending = 0;
}
this->data = data;
this->w_argument = w;
status = BUTTON_UP;
pending = 0;
}
-BC_PopupMenu::BC_PopupMenu(int x,
- int y,
- const char *text,
- int use_title,
- VFrame **data)
+BC_PopupMenu::BC_PopupMenu(int x, int y, const char *text,
+ int use_title, VFrame **data)
: BC_SubWindow(x, y, 0, -1, -1)
{
highlighted = popup_down = 0;
: BC_SubWindow(x, y, 0, -1, -1)
{
highlighted = popup_down = 0;
@@
-80,10
+69,7
@@
BC_PopupMenu::BC_PopupMenu(int x,
this->margin = BC_WindowBase::get_resources()->popupmenu_margin;
this->use_title = use_title;
strcpy(this->text, text);
this->margin = BC_WindowBase::get_resources()->popupmenu_margin;
this->use_title = use_title;
strcpy(this->text, text);
- for(int i = 0; i < TOTAL_IMAGES; i++)
- {
- images[i] = 0;
- }
+ for( int i=0; i<TOTAL_IMAGES; ++i ) images[i] = 0;
this->data = data;
this->w_argument = -1;
status = BUTTON_UP;
this->data = data;
this->w_argument = -1;
status = BUTTON_UP;
@@
-95,10
+81,7
@@
BC_PopupMenu::~BC_PopupMenu()
use_title = 0;
deactivate();
delete menu_popup;
use_title = 0;
deactivate();
delete menu_popup;
- for(int i = 0; i < TOTAL_IMAGES; i++)
- {
- if(images[i]) delete images[i];
- }
+ for( int i=0; i<TOTAL_IMAGES; ++i ) delete images[i];
}
char* BC_PopupMenu::get_text()
}
char* BC_PopupMenu::get_text()
@@
-108,8
+91,7
@@
char* BC_PopupMenu::get_text()
void BC_PopupMenu::set_text(const char *text)
{
void BC_PopupMenu::set_text(const char *text)
{
- if(use_title)
- {
+ if( use_title ) {
strcpy(this->text, text);
draw_title(1);
}
strcpy(this->text, text);
draw_title(1);
}
@@
-117,87
+99,70
@@
void BC_PopupMenu::set_text(const char *text)
void BC_PopupMenu::set_icon(BC_Pixmap *icon)
{
void BC_PopupMenu::set_icon(BC_Pixmap *icon)
{
- if(use_title)
- {
+ if( use_title ) {
this->icon = icon;
this->icon = icon;
- if(
menu_popup
) draw_title(1);
+ if(
menu_popup
) draw_title(1);
}
}
int BC_PopupMenu::initialize()
{
}
}
int BC_PopupMenu::initialize()
{
- if(use_title)
- {
- if(data)
+ if( use_title ) {
+ if( data )
set_images(data);
else
set_images(data);
else
- if(
BC_WindowBase::get_resources()->popupmenu_images
)
+ if(
BC_WindowBase::get_resources()->popupmenu_images
)
set_images(BC_WindowBase::get_resources()->popupmenu_images);
else
set_images(BC_WindowBase::get_resources()->generic_button_images);
}
set_images(BC_WindowBase::get_resources()->popupmenu_images);
else
set_images(BC_WindowBase::get_resources()->generic_button_images);
}
- else
+ else
{
// Move outside window if no title
// Move outside window if no title
- {
- x = -10;
- y = -10;
- w = 10;
- h = 10;
+ x = -10; y = -10;
+ w = 10; h = 10;
}
BC_SubWindow::initialize();
menu_popup = new BC_MenuPopup;
}
BC_SubWindow::initialize();
menu_popup = new BC_MenuPopup;
- menu_popup->initialize(top_level,
- 0,
- 0,
- 0,
- this);
+ menu_popup->initialize(top_level, 0, 0, 0, this);
- if(
use_title
) draw_title(0);
+ if(
use_title
) draw_title(0);
return 0;
}
int BC_PopupMenu::set_images(VFrame **data)
{
return 0;
}
int BC_PopupMenu::set_images(VFrame **data)
{
- BC_Resources *resources = get_resources();
- for(int i = 0; i < 3; i++)
- {
- if(images[i]) delete images[i];
+ for( int i=0; i<3; ++i ) {
+ delete images[i];
images[i] = new BC_Pixmap(parent_window, data[i], PIXMAP_ALPHA);
}
images[i] = new BC_Pixmap(parent_window, data[i], PIXMAP_ALPHA);
}
- if(w_argument >= 0)
- w = w_argument +
- margin +
- resources->popupmenu_triangle_margin;
- else
- w = get_text_width(MEDIUMFONT, text) +
- margin +
- resources->popupmenu_triangle_margin;
-
+ w = w_argument > 0 ? w_argument :
+ calculate_w(margin, get_text_width(MEDIUMFONT, text), use_title);
h = images[BUTTON_UP]->get_h();
return 0;
}
h = images[BUTTON_UP]->get_h();
return 0;
}
-int BC_PopupMenu::calculate_w(int
w_argument
)
+int BC_PopupMenu::calculate_w(int
margin, int text_width, int use_title
)
{
{
- return w_argument +
- BC_WindowBase::get_resources()->popupmenu_margin +
- BC_WindowBase::get_resources()->popupmenu_triangle_margin;
+ BC_Resources *resources = get_resources();
+ int l = margin >= 0 ? margin : resources->popupmenu_margin;
+ int r = use_title < 0 ? l : l + resources->popupmenu_triangle_margin;
+ return l + text_width + r;
}
}
-int BC_PopupMenu::calculate_
h(VFrame **data
)
+int BC_PopupMenu::calculate_
w(int text_width
)
{
{
- if(data)
- ;
- else
- if(BC_WindowBase::get_resources()->popupmenu_images)
- data = BC_WindowBase::get_resources()->popupmenu_images;
- else
- data = BC_WindowBase::get_resources()->generic_button_images;
+ return calculate_w(-1, text_width, 0);
+}
+int BC_PopupMenu::calculate_h(VFrame **data)
+{
+ if( !data ) data = BC_WindowBase::get_resources()->popupmenu_images ?
+ BC_WindowBase::get_resources()->popupmenu_images :
+ BC_WindowBase::get_resources()->generic_button_images ;
return data[BUTTON_UP]->get_h();
}
return data[BUTTON_UP]->get_h();
}
@@
-230,57
+195,65
@@
BC_MenuItem* BC_PopupMenu::get_item(int i)
return menu_popup->menu_items.values[i];
}
return menu_popup->menu_items.values[i];
}
-int BC_PopupMenu::
draw_title(int flush
)
+int BC_PopupMenu::
get_margin(
)
{
{
- if(!use_title) return 0;
- BC_Resources *resources = get_resources();
+ return margin;
+}
+
+int BC_PopupMenu::draw_face(int dx, int color)
+{
+ if( !use_title ) return 0;
// Background
draw_top_background(parent_window, 0, 0, w, h);
draw_3segmenth(0, 0, w, images[status]);
// Overlay text
// Background
draw_top_background(parent_window, 0, 0, w, h);
draw_3segmenth(0, 0, w, images[status]);
// Overlay text
-
set_color(get_resources()->popup_title_text)
;
-
int offset = 0
;
- if(status == BUTTON_DN)
-
offset = 1
;
- i
f(!icon)
- {
- set_font(MEDIUMFONT);
+
if( color < 0 ) color = get_resources()->popup_title_text
;
+
set_color(color)
;
+
+
int offset = status == BUTTON_DN ? 1 : 0
;
+ i
nt available_w = get_w() - calculate_w(margin, 0, use_title);
+
+ if( !icon ) {
char truncated[BCTEXTLEN];
char truncated[BCTEXTLEN];
- int available_w = get_w() - margin * 2 - resources->popupmenu_triangle_margin;
truncate_text(truncated, text, available_w);
truncate_text(truncated, text, available_w);
-
+ set_font(MEDIUMFONT);
BC_WindowBase::draw_center_text(
BC_WindowBase::draw_center_text(
-
available_w /
2 + margin + offset,
- (int)((float)get_h()
/ 2 + get_text_ascent(MEDIUMFONT) /
2 - 2) + offset,
+
dx + available_w/
2 + margin + offset,
+ (int)((float)get_h()
/2 + get_text_ascent(MEDIUMFONT)/
2 - 2) + offset,
truncated);
}
truncated);
}
- if(icon)
- {
+ if( icon ) {
draw_pixmap(icon,
draw_pixmap(icon,
-
(get_w() - margin * 2 - resources->popupmenu_triangle_margin) / 2 + margin + offset - icon->get_w() /
2 ,
- get_h()
/ 2 - icon->get_h() /
2 + offset);
+
available_w/ 2 + margin + offset - icon->get_w()/
2 ,
+ get_h()
/2 - icon->get_h()/
2 + offset);
}
}
- if( use_title >= 0 )
- draw_triangle_down_flat(get_w() - margin - resources->popupmenu_triangle_margin,
- get_h() / 2 - TRIANGLE_H / 2, TRIANGLE_W, TRIANGLE_H);
+ if( use_title >= 0 ) {
+ int tx = get_w() - margin - get_resources()->popupmenu_triangle_margin;
+ int ty = get_h()/2 - TRIANGLE_H/2;
+ draw_triangle_down_flat(tx, ty, TRIANGLE_W, TRIANGLE_H);
+ }
+ return 1;
+}
+int BC_PopupMenu::draw_title(int flush)
+{
+ draw_face(0, -1);
flash(flush);
return 0;
}
int BC_PopupMenu::deactivate()
{
flash(flush);
return 0;
}
int BC_PopupMenu::deactivate()
{
- if(popup_down)
- {
+ if( popup_down ) {
top_level->active_popup_menu = 0;
popup_down = 0;
menu_popup->deactivate_menu();
top_level->active_popup_menu = 0;
popup_down = 0;
menu_popup->deactivate_menu();
- if(
use_title
) draw_title(1); // draw the title
+ if(
use_title
) draw_title(1); // draw the title
}
return 0;
}
}
return 0;
}
@@
-297,23
+270,20
@@
int BC_PopupMenu::activate_menu()
int BC_PopupMenu::menu_activate()
{
pending = 0;
int BC_PopupMenu::menu_activate()
{
pending = 0;
- if( !popup_down )
- {
+ if( !popup_down ) {
int x = this->x;
int y = this->y;
top_level->deactivate();
top_level->active_popup_menu = this;
int x = this->x;
int y = this->y;
top_level->deactivate();
top_level->active_popup_menu = this;
- if(!use_title)
- {
+ if( !use_title ) {
x = top_level->get_abs_cursor_x(0) - get_w();
y = top_level->get_abs_cursor_y(0) - get_h();
button_press_x = top_level->cursor_x;
button_press_y = top_level->cursor_y;
}
x = top_level->get_abs_cursor_x(0) - get_w();
y = top_level->get_abs_cursor_y(0) - get_h();
button_press_x = top_level->cursor_x;
button_press_y = top_level->cursor_y;
}
- if(use_title)
- {
+ if( use_title ) {
Window tempwin;
int new_x, new_y;
XTranslateCoordinates(top_level->display,
Window tempwin;
int new_x, new_y;
XTranslateCoordinates(top_level->display,
@@
-325,8
+295,10
@@
int BC_PopupMenu::menu_activate()
else
menu_popup->activate_menu(x+3, y+3, w, h, 0, 1);
popup_down = 1;
else
menu_popup->activate_menu(x+3, y+3, w, h, 0, 1);
popup_down = 1;
- if(
use_title
) draw_title(1);
+ if(
use_title
) draw_title(1);
}
}
+ else
+ deactivate_menu();
return 1;
}
return 1;
}
@@
-357,8
+329,7
@@
int BC_PopupMenu::repeat_event(int64_t duration)
{
if( status == BUTTON_HI &&
tooltip_text && tooltip_text[0] != 0 &&
{
if( status == BUTTON_HI &&
tooltip_text && tooltip_text[0] != 0 &&
- duration == top_level->get_resources()->tooltip_delay )
- {
+ duration == top_level->get_resources()->tooltip_delay ) {
show_tooltip();
return 1;
}
show_tooltip();
return 1;
}
@@
-368,37
+339,33
@@
int BC_PopupMenu::repeat_event(int64_t duration)
int BC_PopupMenu::button_press_event()
{
int result = 0;
int BC_PopupMenu::button_press_event()
{
int result = 0;
- if(get_buttonpress() == 1 &&
- is_event_win() &&
- use_title)
- {
+ if( get_buttonpress() == 1 && is_event_win() && use_title ) {
top_level->hide_tooltip();
top_level->hide_tooltip();
- if(
status == BUTTON_HI || status == BUTTON_UP
) status = BUTTON_DN;
+ if(
status == BUTTON_HI || status == BUTTON_UP
) status = BUTTON_DN;
activate_menu();
draw_title(1);
return 1;
}
// Scrolling section
activate_menu();
draw_title(1);
return 1;
}
// Scrolling section
- if
(
is_event_win()
+ if
(
is_event_win()
&& (get_buttonpress() == 4 || get_buttonpress() == 5)
&& (get_buttonpress() == 4 || get_buttonpress() == 5)
- && menu_popup->total_items() > 1 )
- {
+ && menu_popup->total_items() > 1 ) {
int theval = -1;
int theval = -1;
- for
(int i = 0; i < menu_popup->total_items(); i++
) {
- if
(!strcmp(menu_popup->menu_items.values[i]->get_text(),get_text())
) {
- theval
=
i;
+ for
( int i=0; i<menu_popup->total_items(); ++i
) {
+ if
( !strcmp(menu_popup->menu_items.values[i]->get_text(),get_text())
) {
+ theval
=
i;
break;
}
}
break;
}
}
- if
(theval == -1) theval=
0;
- else if
(get_buttonpress() == 4) theval--
;
- else if
(get_buttonpress() == 5) theval++
;
+ if
( theval == -1 ) theval =
0;
+ else if
( get_buttonpress() == 4 ) --theval
;
+ else if
( get_buttonpress() == 5 ) ++theval
;
- if
(theval < 0
)
- theval
=
0;
-
if (theval >= menu_popup->total_items()
)
+ if
( theval < 0
)
+ theval
=
0;
+
else if( theval >= menu_popup->total_items()
)
theval = menu_popup->total_items() - 1;
BC_MenuItem *tmp = menu_popup->menu_items.values[theval];
theval = menu_popup->total_items() - 1;
BC_MenuItem *tmp = menu_popup->menu_items.values[theval];
@@
-407,8
+374,7
@@
int BC_PopupMenu::button_press_event()
if( !result )
result = this->handle_event();
}
if( !result )
result = this->handle_event();
}
- if(popup_down)
- {
+ if( popup_down ) {
// Menu is down so dispatch to popup.
menu_popup->dispatch_button_press();
result = 1;
// Menu is down so dispatch to popup.
menu_popup->dispatch_button_press();
result = 1;
@@
-422,11
+388,9
@@
int BC_PopupMenu::button_release_event()
// try the title
int result = 0;
// try the title
int result = 0;
- if(is_event_win() && use_title)
- {
+ if( is_event_win() && use_title ) {
hide_tooltip();
hide_tooltip();
- if(status == BUTTON_DN)
- {
+ if( status == BUTTON_DN ) {
status = BUTTON_HI;
draw_title(1);
}
status = BUTTON_HI;
draw_title(1);
}
@@
-455,15
+419,14
@@
int BC_PopupMenu::button_release_event()
int BC_PopupMenu::translation_event()
{
//printf("BC_PopupMenu::translation_event 1\n");
int BC_PopupMenu::translation_event()
{
//printf("BC_PopupMenu::translation_event 1\n");
- if(
popup_down
) menu_popup->dispatch_translation_event();
+ if(
popup_down
) menu_popup->dispatch_translation_event();
return 0;
}
int BC_PopupMenu::cursor_leave_event()
{
return 0;
}
int BC_PopupMenu::cursor_leave_event()
{
- if(status == BUTTON_HI && use_title)
- {
+ if( status == BUTTON_HI && use_title ) {
status = BUTTON_UP;
draw_title(1);
hide_tooltip();
status = BUTTON_UP;
draw_title(1);
hide_tooltip();
@@
-484,14
+447,12
@@
int BC_PopupMenu::cursor_leave_event()
int BC_PopupMenu::cursor_enter_event()
{
int BC_PopupMenu::cursor_enter_event()
{
- if(is_event_win() && use_title)
- {
- if(top_level->button_down)
- {
+ if( is_event_win() && use_title ) {
+ if( top_level->button_down ) {
status = BUTTON_DN;
}
else
status = BUTTON_DN;
}
else
- if(
status == BUTTON_UP
)
+ if(
status == BUTTON_UP
)
status = BUTTON_HI;
draw_title(1);
}
status = BUTTON_HI;
draw_title(1);
}
@@
-504,19
+465,19
@@
int BC_PopupMenu::cursor_motion_event()
int result = 0;
// This menu is down.
int result = 0;
// This menu is down.
- if(
popup_down
) {
+ if(
popup_down
) {
result = menu_popup->dispatch_motion_event();
}
result = menu_popup->dispatch_motion_event();
}
- if(
!result && use_title && is_event_win()
) {
- if(
highlighted
) {
- if(
!cursor_inside()
) {
+ if(
!result && use_title && is_event_win()
) {
+ if(
highlighted
) {
+ if(
!cursor_inside()
) {
highlighted = 0;
draw_title(1);
}
}
else {
highlighted = 0;
draw_title(1);
}
}
else {
- if(
cursor_inside()
) {
+ if(
cursor_inside()
) {
highlighted = 1;
draw_title(1);
result = 1;
highlighted = 1;
draw_title(1);
result = 1;
@@
-530,25
+491,19
@@
int BC_PopupMenu::cursor_motion_event()
int BC_PopupMenu::drag_start_event()
{
//printf("BC_PopupMenu::drag_start_event %d\n", popup_down);
int BC_PopupMenu::drag_start_event()
{
//printf("BC_PopupMenu::drag_start_event %d\n", popup_down);
- if(
popup_down
) return 1;
+ if(
popup_down
) return 1;
return 0;
}
int BC_PopupMenu::drag_stop_event()
{
return 0;
}
int BC_PopupMenu::drag_stop_event()
{
- if(
popup_down
) return 1;
+ if(
popup_down
) return 1;
return 0;
}
int BC_PopupMenu::drag_motion_event()
{
return 0;
}
int BC_PopupMenu::drag_motion_event()
{
- if(
popup_down
) return 1;
+ if(
popup_down
) return 1;
return 0;
}
return 0;
}
-
-
-
-
-
-