From 281ec24c8f4b7daf7cc4e7c30b640cbe0b33d037 Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Fri, 26 Apr 2024 12:42:11 +0200 Subject: Box types can now defined and draw their own focus frame, STR 2145, #659 --- src/fl_rounded_box.cxx | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'src/fl_rounded_box.cxx') diff --git a/src/fl_rounded_box.cxx b/src/fl_rounded_box.cxx index f1b351144..9b64f5265 100644 --- a/src/fl_rounded_box.cxx +++ b/src/fl_rounded_box.cxx @@ -62,20 +62,33 @@ static void fl_rshadow_box(int x, int y, int w, int h, Fl_Color c) { fl_rounded_box(x, y, w, h, c); } -extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*); +void fl_rounded_focus(Fl_Boxtype bt, int x, int y, int w, int h, Fl_Color fg, Fl_Color bg) { + x += Fl::box_dx(bt); + y += Fl::box_dy(bt); + w -= Fl::box_dw(bt)+1; + h -= Fl::box_dh(bt)+1; + Fl_Color savecolor = fl_color(); + fl_color(fl_contrast(fg, bg)); + fl_line_style(FL_DOT); + rbox(0, x+1, y+1, w-1, h-1); + fl_line_style(FL_SOLID); + fl_color(savecolor); +} + +extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*, Fl_Box_Draw_Focus_F* =NULL); Fl_Boxtype fl_define_FL_ROUNDED_BOX() { - fl_internal_boxtype(_FL_ROUNDED_FRAME, fl_rounded_frame); - fl_internal_boxtype(_FL_ROUNDED_BOX, fl_rounded_box); + fl_internal_boxtype(_FL_ROUNDED_FRAME, fl_rounded_frame, fl_rounded_focus); + fl_internal_boxtype(_FL_ROUNDED_BOX, fl_rounded_box, fl_rounded_focus); return _FL_ROUNDED_BOX; } Fl_Boxtype fl_define_FL_RFLAT_BOX() { - fl_internal_boxtype(_FL_RFLAT_BOX, fl_rflat_box); + fl_internal_boxtype(_FL_RFLAT_BOX, fl_rflat_box, fl_rounded_focus); return _FL_RFLAT_BOX; } Fl_Boxtype fl_define_FL_RSHADOW_BOX() { - fl_internal_boxtype(_FL_RSHADOW_BOX, fl_rshadow_box); + fl_internal_boxtype(_FL_RSHADOW_BOX, fl_rshadow_box, fl_rounded_focus); return _FL_RSHADOW_BOX; } -- cgit v1.2.3