aboutsummaryrefslogtreecommitdiff
path: root/src/FbTk/Menu.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/FbTk/Menu.cc')
-rw-r--r--src/FbTk/Menu.cc28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/FbTk/Menu.cc b/src/FbTk/Menu.cc
index 6d43268..de62627 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.55 2004/02/27 11:55:27 fluxgen Exp $ 25// $Id: Menu.cc,v 1.56 2004/02/27 14:21:13 fluxgen Exp $
26 26
27//use GNU extensions 27//use GNU extensions
28#ifndef _GNU_SOURCE 28#ifndef _GNU_SOURCE
@@ -736,14 +736,14 @@ bool Menu::hasSubmenu(unsigned int index) const {
736} 736}
737 737
738 738
739void Menu::drawItem(unsigned int index, bool highlight, bool clear, bool render_trans, 739int Menu::drawItem(unsigned int index, bool highlight, bool clear, bool render_trans,
740 int x, int y, unsigned int w, unsigned int h) { 740 int x, int y, unsigned int w, unsigned int h) {
741 if (index >= menuitems.size() || menuitems.size() == 0 || 741 if (index >= menuitems.size() || menuitems.size() == 0 ||
742 menu.persub == 0) 742 menu.persub == 0)
743 return; 743 return 0;
744 744
745 MenuItem *item = menuitems[index]; 745 MenuItem *item = menuitems[index];
746 if (! item) return; 746 if (! item) return 0;
747 747
748 bool dotext = true, dohilite = true, dosel = true; 748 bool dotext = true, dohilite = true, dosel = true;
749 const char *text = item->label().c_str(); 749 const char *text = item->label().c_str();
@@ -990,7 +990,7 @@ void Menu::drawItem(unsigned int index, bool highlight, bool clear, bool render_
990 menu.item_w, menu.item_h); 990 menu.item_w, menu.item_h);
991 } 991 }
992 992
993 993 return item_y;
994} 994}
995 995
996void Menu::setLabel(const char *labelstr) { 996void Menu::setLabel(const char *labelstr) {
@@ -1228,6 +1228,7 @@ void Menu::exposeEvent(XExposeEvent &ee) {
1228 1228
1229 // draw the sublevels and the number of items the exposure spans 1229 // draw the sublevels and the number of items the exposure spans
1230 unsigned int i, ii; 1230 unsigned int i, ii;
1231 int max_y = 0;
1231 for (i = sbl; i <= sbl_d; i++) { 1232 for (i = sbl; i <= sbl_d; i++) {
1232 // set the iterator to the first item in the sublevel needing redrawing 1233 // set the iterator to the first item in the sublevel needing redrawing
1233 unsigned int index = id + i * menu.persub; 1234 unsigned int index = id + i * menu.persub;
@@ -1236,15 +1237,20 @@ void Menu::exposeEvent(XExposeEvent &ee) {
1236 Menuitems::iterator it_end = menuitems.end(); 1237 Menuitems::iterator it_end = menuitems.end();
1237 for (ii = id; ii <= id_d && it != it_end; ++it, ii++) { 1238 for (ii = id; ii <= id_d && it != it_end; ++it, ii++) {
1238 unsigned int index = ii + (i * menu.persub); 1239 unsigned int index = ii + (i * menu.persub);
1239 drawItem(index, 1240 max_y = max(drawItem(index,
1240 (which_sub == static_cast<signed>(index)), // highlight 1241 (which_sub == static_cast<signed>(index)), // highlight
1241 true, // clear 1242 true, // clear
1242 false, // render trans 1243 false, // render trans
1243 ee.x, ee.y, ee.width, ee.height); 1244 ee.x, ee.y, ee.width, ee.height), max_y);
1244 } 1245 }
1245 } 1246 }
1246 } 1247 }
1247 menu.frame.updateTransparent(ee.x, ee.y, ee.width, ee.height); 1248 if (menu.persub != 0) {
1249 int index_min = id + sbl * menu.persub;
1250 int min_y = (index_min - (index_min/menu.persub)*menu.persub) * menu.item_h;
1251 menu.frame.updateTransparent(0, min_y,
1252 width(), max_y + menu.item_h);
1253 }
1248 } 1254 }
1249} 1255}
1250 1256