summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2022-11-23 15:18:19 +0100
committerAlbrecht Schlosser <albrechts.fltk@online.de>2022-11-23 15:21:34 +0100
commitb684f70ad75701f3d3436157b75c6f2650d6a97b (patch)
tree679e80a089c3af08044c4e312668a88cd5e79c23
parent5e4643621b252c36f2cd04bbb066dcae596473bb (diff)
Update remaining "arrow drawing" in menus
Use the new standard arrow drawing methods (whose style depends on the active scheme) for "arrows" used in Fl_Menu and Fl_Menu_Button. To do: maybe we need some "fine tuning" of arrow sizes in some of the modified widgets using the new "arrow drawing" methods.
-rw-r--r--src/Fl_Menu.cxx15
-rw-r--r--src/Fl_Menu_Button.cxx19
2 files changed, 31 insertions, 3 deletions
diff --git a/src/Fl_Menu.cxx b/src/Fl_Menu.cxx
index f2d19a7a8..6e6d26da9 100644
--- a/src/Fl_Menu.cxx
+++ b/src/Fl_Menu.cxx
@@ -476,6 +476,10 @@ void menuwindow::autoscroll(int n) {
void menuwindow::drawentry(const Fl_Menu_Item* m, int n, int eraseit) {
if (!m) return; // this happens if -1 is selected item and redrawn
+ // FIXME: size and coordinate calculation (sz, x1, y1) should be simplified when
+ // the "old code" below is entirely removed (left as is for comparison).
+ // AlbrechtS Nov. 23, 2022
+
int BW = Fl::box_dx(box());
int xx = BW;
int W = w();
@@ -496,8 +500,17 @@ void menuwindow::drawentry(const Fl_Menu_Item* m, int n, int eraseit) {
int sz = (hh-7)&-2;
int y1 = yy+(hh-sz)/2;
int x1 = xx+ww-sz-3;
- // FIXME_ARROW: use fl_draw_arrow()
+
+#if (0) // old code, independent of active scheme (left for comparison)
+
fl_polygon(x1+2, y1, x1+2, y1+sz, x1+sz/2+2, y1+sz/2);
+
+#else // right arrow whose style dependends on the active scheme
+
+ fl_draw_arrow(Fl_Rect(x1-1, y1-1, sz+2, sz+2), FL_ARROW_SINGLE, FL_ORIENT_RIGHT, fl_color());
+
+#endif
+
} else if (m->shortcut_) {
Fl_Font f = m->labelsize_ || m->labelfont_ ? (Fl_Font)m->labelfont_ :
button ? button->textfont() : FL_HELVETICA;
diff --git a/src/Fl_Menu_Button.cxx b/src/Fl_Menu_Button.cxx
index dadbaf55c..f57b52b4e 100644
--- a/src/Fl_Menu_Button.cxx
+++ b/src/Fl_Menu_Button.cxx
@@ -16,6 +16,7 @@
#include <FL/Fl.H>
#include <FL/Fl_Menu_Button.H>
+#include <FL/Fl_Rect.H>
#include <FL/fl_draw.H>
@@ -24,18 +25,32 @@ static Fl_Menu_Button *pressed_menu_button_ = 0;
void Fl_Menu_Button::draw() {
if (!box() || type()) return;
+
+ // FIXME: size and coordinate calculation (H, X, Y) should be simplified when
+ // the "old code" below is entirely removed (left as is for comparison).
+ // AlbrechtS Nov. 23, 2022
+
int H = (labelsize()-3)&-2;
int X = x()+w()-H-Fl::box_dx(box())-Fl::box_dw(box())-1;
int Y = y()+(h()-H)/2;
+
draw_box(pressed_menu_button_ == this ? fl_down(box()) : box(), color());
draw_label(x()+Fl::box_dx(box()), y(), X-x()+2, h());
if (Fl::focus() == this) draw_focus();
- // ** if (box() == FL_FLAT_BOX) return; // for XForms compatibility
- // FIXME_ARROW: use fl_draw_arrow()
+
+#if (0) // old code: outline of an engraved down-arrow for all schemes
+
fl_color(active_r() ? FL_DARK3 : fl_inactive(FL_DARK3));
fl_line(X+H/2, Y+H, X, Y, X+H, Y);
fl_color(active_r() ? FL_LIGHT3 : fl_inactive(FL_LIGHT3));
fl_line(X+H, Y, X+H/2, Y+H);
+
+#else // new code: filled down-arrow whose style dependends on the current scheme
+
+ Fl_Color arrow_color = active_r() ? FL_DARK3 : fl_inactive(FL_DARK3);
+ fl_draw_arrow(Fl_Rect(X-1, Y-1, H+4, H+4), FL_ARROW_SINGLE, FL_ORIENT_DOWN, arrow_color);
+
+#endif
}