diff options
Diffstat (limited to 'src/FbTk/Menu.cc')
-rw-r--r-- | src/FbTk/Menu.cc | 79 |
1 files changed, 37 insertions, 42 deletions
diff --git a/src/FbTk/Menu.cc b/src/FbTk/Menu.cc index bb0b352..47dd372 100644 --- a/src/FbTk/Menu.cc +++ b/src/FbTk/Menu.cc | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: Menu.cc,v 1.50 2003/12/17 00:43:22 fluxgen Exp $ | 25 | // $Id: Menu.cc,v 1.51 2003/12/18 18:03:23 fluxgen Exp $ |
26 | 26 | ||
27 | //use GNU extensions | 27 | //use GNU extensions |
28 | #ifndef _GNU_SOURCE | 28 | #ifndef _GNU_SOURCE |
@@ -89,9 +89,9 @@ Menu::Menu(MenuTheme &tm, ImageControl &imgctrl): | |||
89 | torn = | 89 | torn = |
90 | visible = false; | 90 | visible = false; |
91 | 91 | ||
92 | menu.x = | 92 | |
93 | menu.y = | 93 | |
94 | menu.x_shift = | 94 | menu.x_shift = |
95 | menu.y_shift = | 95 | menu.y_shift = |
96 | menu.x_move = | 96 | menu.x_move = |
97 | menu.y_move = 0; | 97 | menu.y_move = 0; |
@@ -600,8 +600,6 @@ void Menu::internal_hide() { | |||
600 | 600 | ||
601 | void Menu::move(int x, int y) { | 601 | void Menu::move(int x, int y) { |
602 | 602 | ||
603 | menu.x = x; | ||
604 | menu.y = y; | ||
605 | menu.window.move(x, y); | 603 | menu.window.move(x, y); |
606 | 604 | ||
607 | if (which_sub != -1) | 605 | if (which_sub != -1) |
@@ -663,47 +661,47 @@ void Menu::drawSubmenu(unsigned int index) { | |||
663 | if (item->submenu()->m_parent != this) | 661 | if (item->submenu()->m_parent != this) |
664 | item->submenu()->m_parent = this; | 662 | item->submenu()->m_parent = this; |
665 | 663 | ||
666 | int sbl = index / menu.persub, i = index - (sbl * menu.persub), | 664 | int sbl = index / menu.persub, i = index - (sbl * menu.persub); |
667 | x = menu.x + | 665 | int new_x = x() + ((menu.item_w * (sbl + 1)) + menu.window.borderWidth()); |
668 | ((menu.item_w * (sbl + 1)) + menu.window.borderWidth()), y; | 666 | int new_y; |
669 | 667 | ||
670 | if (m_alignment == ALIGNTOP) { | 668 | if (m_alignment == ALIGNTOP) { |
671 | y = (((shifted) ? menu.y_shift : menu.y) + | 669 | new_y = (((shifted) ? menu.y_shift : y()) + |
672 | ((title_vis) ? menu.title_h + menu.title.borderWidth() : 0) - | 670 | ((title_vis) ? menu.title_h + menu.title.borderWidth() : 0) - |
673 | ((item->submenu()->title_vis) ? | 671 | ((item->submenu()->title_vis) ? |
674 | item->submenu()->menu.title_h + menu.window.borderWidth() : 0)); | 672 | item->submenu()->menu.title_h + menu.window.borderWidth() : 0)); |
675 | } else { | 673 | } else { |
676 | y = (((shifted) ? menu.y_shift : menu.y) + | 674 | new_y = (((shifted) ? menu.y_shift : y()) + |
677 | (menu.item_h * i) + | 675 | (menu.item_h * i) + |
678 | ((title_vis) ? menu.title_h + menu.window.borderWidth() : 0) - | 676 | ((title_vis) ? menu.title_h + menu.window.borderWidth() : 0) - |
679 | ((item->submenu()->title_vis) ? | 677 | ((item->submenu()->title_vis) ? |
680 | item->submenu()->menu.title_h + menu.window.borderWidth() : 0)); | 678 | item->submenu()->menu.title_h + menu.window.borderWidth() : 0)); |
681 | } | 679 | } |
682 | 680 | ||
683 | if (m_alignment == ALIGNBOTTOM && | 681 | if (m_alignment == ALIGNBOTTOM && |
684 | (y + item->submenu()->height()) > ((shifted) ? menu.y_shift : | 682 | (new_y + item->submenu()->height()) > ((shifted) ? menu.y_shift : |
685 | menu.y) + height()) { | 683 | y()) + height()) { |
686 | y = (((shifted) ? menu.y_shift : menu.y) + | 684 | new_y = (((shifted) ? menu.y_shift : y()) + |
687 | height() - item->submenu()->height()); | 685 | height() - item->submenu()->height()); |
688 | } | 686 | } |
689 | 687 | ||
690 | if ((x + item->submenu()->width()) > m_screen_width) { | 688 | if ((new_x + item->submenu()->width()) > m_screen_width) { |
691 | x = ((shifted) ? menu.x_shift : menu.x) - | 689 | new_x = ((shifted) ? menu.x_shift : x()) - |
692 | item->submenu()->width() - menu.window.borderWidth(); | 690 | item->submenu()->width() - menu.window.borderWidth(); |
693 | } | 691 | } |
694 | 692 | ||
695 | if (x < 0) | 693 | if (new_x < 0) |
696 | x = 0; | 694 | new_x = 0; |
697 | 695 | ||
698 | if ((y + item->submenu()->height()) > m_screen_height) { | 696 | if ((new_y + item->submenu()->height()) > m_screen_height) { |
699 | y = m_screen_height - item->submenu()->height() - | 697 | new_y = m_screen_height - item->submenu()->height() - |
700 | menu.window.borderWidth() * 2; | 698 | menu.window.borderWidth() * 2; |
701 | } | 699 | } |
702 | 700 | ||
703 | if (y < 0) | 701 | if (new_y < 0) |
704 | y = 0; | 702 | new_y = 0; |
705 | 703 | ||
706 | item->submenu()->move(x, y); | 704 | item->submenu()->move(new_x, new_y); |
707 | if (! moving) | 705 | if (! moving) |
708 | drawItem(index, true); | 706 | drawItem(index, true); |
709 | 707 | ||
@@ -1068,8 +1066,8 @@ void Menu::buttonPressEvent(XButtonEvent &be) { | |||
1068 | drawItem(w, item->isEnabled(), true, true); | 1066 | drawItem(w, item->isEnabled(), true, true); |
1069 | } | 1067 | } |
1070 | } else { | 1068 | } else { |
1071 | menu.x_move = be.x_root - menu.x; | 1069 | menu.x_move = be.x_root - x(); |
1072 | menu.y_move = be.y_root - menu.y; | 1070 | menu.y_move = be.y_root - y(); |
1073 | } | 1071 | } |
1074 | } | 1072 | } |
1075 | 1073 | ||
@@ -1133,10 +1131,7 @@ void Menu::motionNotifyEvent(XMotionEvent &me) { | |||
1133 | if (which_sub >= 0) | 1131 | if (which_sub >= 0) |
1134 | drawSubmenu(which_sub); | 1132 | drawSubmenu(which_sub); |
1135 | } else { | 1133 | } else { |
1136 | menu.x = me.x_root - menu.x_move, | 1134 | menu.window.move(me.x_root - menu.x_move, me.y_root - menu.y_move); |
1137 | menu.y = me.y_root - menu.y_move; | ||
1138 | |||
1139 | menu.window.move(menu.x, menu.y); | ||
1140 | 1135 | ||
1141 | // if (which_sub >= 0) | 1136 | // if (which_sub >= 0) |
1142 | // drawSubmenu(which_sub); | 1137 | // drawSubmenu(which_sub); |
@@ -1245,19 +1240,19 @@ void Menu::enterNotifyEvent(XCrossingEvent &ce) { | |||
1245 | if (menu.frame != ce.window) | 1240 | if (menu.frame != ce.window) |
1246 | return; | 1241 | return; |
1247 | 1242 | ||
1248 | menu.x_shift = menu.x, menu.y_shift = menu.y; | 1243 | menu.x_shift = x(), menu.y_shift = y(); |
1249 | if (menu.x + width() > m_screen_width) { | 1244 | if (x() + width() > m_screen_width) { |
1250 | menu.x_shift = m_screen_width - width() - 2*m_border_width; | 1245 | menu.x_shift = m_screen_width - width() - 2*m_border_width; |
1251 | shifted = true; | 1246 | shifted = true; |
1252 | } else if (menu.x < 0) { | 1247 | } else if (x() < 0) { |
1253 | menu.x_shift = 0; //-m_border_width; | 1248 | menu.x_shift = 0; //-m_border_width; |
1254 | shifted = true; | 1249 | shifted = true; |
1255 | } | 1250 | } |
1256 | 1251 | ||
1257 | if (menu.y + height() + 2*m_border_width > m_screen_height) { | 1252 | if (y() + height() + 2*m_border_width > m_screen_height) { |
1258 | menu.y_shift = m_screen_height - height() - 2*m_border_width; | 1253 | menu.y_shift = m_screen_height - height() - 2*m_border_width; |
1259 | shifted = true; | 1254 | shifted = true; |
1260 | } else if (menu.y + (signed) menu.title_h < 0) { | 1255 | } else if (y() + (signed) menu.title_h < 0) { |
1261 | menu.y_shift = 0; // -m_border_width;; | 1256 | menu.y_shift = 0; // -m_border_width;; |
1262 | shifted = true; | 1257 | shifted = true; |
1263 | } | 1258 | } |
@@ -1295,7 +1290,7 @@ void Menu::leaveNotifyEvent(XCrossingEvent &ce) { | |||
1295 | } | 1290 | } |
1296 | 1291 | ||
1297 | if (shifted) { | 1292 | if (shifted) { |
1298 | menu.window.move(menu.x, menu.y); | 1293 | // menu.window.move(menu.x, menu.y); |
1299 | shifted = false; | 1294 | shifted = false; |
1300 | } | 1295 | } |
1301 | } | 1296 | } |