From 11cc024107b68a32bbe55b10b036fcfd27d47b9e Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Sat, 4 Aug 2001 16:43:31 +0000 Subject: [PATCH] Keyboard navigation for buttons. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@1551 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/Fl_Button.cxx | 27 +++++++++++++++++++-- src/Fl_Check_Button.cxx | 8 +++---- src/Fl_Light_Button.cxx | 52 +++++++++++++++++++++++++++++++++++----- src/Fl_Return_Button.cxx | 9 +++++-- src/Fl_Round_Button.cxx | 8 +++---- 5 files changed, 86 insertions(+), 18 deletions(-) diff --git a/src/Fl_Button.cxx b/src/Fl_Button.cxx index 76eb8b5fd..1ad74240b 100644 --- a/src/Fl_Button.cxx +++ b/src/Fl_Button.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Button.cxx,v 1.4.2.6.2.2 2001/08/02 15:31:59 easysw Exp $" +// "$Id: Fl_Button.cxx,v 1.4.2.6.2.3 2001/08/04 16:43:31 easysw Exp $" // // Button widget for the Fast Light Tool Kit (FLTK). // @@ -26,6 +26,7 @@ #include #include #include +#include // There are a lot of subclasses, named Fl_*_Button. Some of // them are implemented by setting the type() value and testing it @@ -55,6 +56,12 @@ void Fl_Button::draw() { //if (col == FL_GRAY && Fl::belowmouse()==this) col = FL_LIGHT1; draw_box(value() ? (down_box()?down_box():down(box())) : box(), col); draw_label(); + if (Fl::focus() == this) { + fl_line_style(FL_DASH); + fl_rect(x() + Fl::box_dx(box()), y() + Fl::box_dy(box()), + w() - Fl::box_dw(box()) - 1, h() - Fl::box_dh(box()) - 1); + fl_line_style(FL_SOLID); + } } int Fl_Button::handle(int event) { int newval; @@ -103,6 +110,22 @@ int Fl_Button::handle(int event) { } if (when() & FL_WHEN_RELEASE) do_callback(); else set_changed(); return 1; + case FL_FOCUS : + case FL_UNFOCUS : + redraw(); + return 1; + case FL_KEYBOARD : + if (Fl::focus() == this && Fl::event_key() == ' ') { + if (type() == FL_RADIO_BUTTON && !value_) { + setonly(); + if (when() & FL_WHEN_CHANGED) do_callback(); + } else if (type() == FL_TOGGLE_BUTTON) { + value(!value()); + if (when() & FL_WHEN_CHANGED) do_callback(); + } + if (when() & FL_WHEN_RELEASE) do_callback(); else set_changed(); + return 1; + } default: return 0; } @@ -118,5 +141,5 @@ Fl_Button::Fl_Button(int x,int y,int w,int h, const char *l) } // -// End of "$Id: Fl_Button.cxx,v 1.4.2.6.2.2 2001/08/02 15:31:59 easysw Exp $". +// End of "$Id: Fl_Button.cxx,v 1.4.2.6.2.3 2001/08/04 16:43:31 easysw Exp $". // diff --git a/src/Fl_Check_Button.cxx b/src/Fl_Check_Button.cxx index f40b0f8f3..5afafec40 100644 --- a/src/Fl_Check_Button.cxx +++ b/src/Fl_Check_Button.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Check_Button.cxx,v 1.4.2.3 2001/01/22 15:13:39 easysw Exp $" +// "$Id: Fl_Check_Button.cxx,v 1.4.2.3.2.1 2001/08/04 16:43:31 easysw Exp $" // // Check button widget for the Fast Light Tool Kit (FLTK). // @@ -32,7 +32,7 @@ Fl_Check_Button::Fl_Check_Button(int x, int y, int w, int h, const char *l) : Fl_Light_Button(x, y, w, h, l) { - box(FL_NO_BOX); - down_box(FL_DIAMOND_DOWN_BOX); - selection_color(FL_RED); + box(FL_FLAT_BOX); + down_box(FL_DOWN_BOX); + selection_color(FL_BLACK); } diff --git a/src/Fl_Light_Button.cxx b/src/Fl_Light_Button.cxx index ed48f55b6..288bd126f 100644 --- a/src/Fl_Light_Button.cxx +++ b/src/Fl_Light_Button.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Light_Button.cxx,v 1.4.2.3 2001/01/22 15:13:40 easysw Exp $" +// "$Id: Fl_Light_Button.cxx,v 1.4.2.3.2.1 2001/08/04 16:43:31 easysw Exp $" // // Lighted button widget for the Fast Light Tool Kit (FLTK). // @@ -36,21 +36,61 @@ void Fl_Light_Button::draw() { if (box()) draw_box(this==Fl::pushed() ? down(box()) : box(), color()); - Fl_Color col = value() ? selection_color() : color(); + Fl_Color col = value() ? (active_r() ? selection_color() : + fl_inactive(selection_color())) : color(); int d = h()/6; int W = w() 14) { + fl_pie(x() + d + 5, y() + d + 6, size - 9, size - 9, 0.0, 360.0); + } else { + // Small circles don't draw well with some X servers... + fl_rectf(x() + d + 6, y() + d + 6, 2, 4); + fl_rectf(x() + d + 5, y() + d + 7, 4, 2); + } + } + break; + default : + draw_box(down_box(), x()+d + 1, y()+d+2, W-2*d-4, W-2*d-4, col); + break; + } } else { // if down_box() is zero, draw light button style: - int hh = h()-2*d; + int hh = h()-2*d - 2; int ww = hh/2+1; int xx = d*2; if (w()