@@ -493,6 +493,7 @@ enum Fl_Boxtype { // boxtypes (if you change these you must fix fl_boxtype.C): | |||||
_FL_OSHADOW_BOX, ///< see figure 1 | _FL_OSHADOW_BOX, ///< see figure 1 | ||||
_FL_OVAL_FRAME, ///< see figure 1 | _FL_OVAL_FRAME, ///< see figure 1 | ||||
_FL_OFLAT_BOX, ///< see figure 1 | _FL_OFLAT_BOX, ///< see figure 1 | ||||
FL_FOCUS_FRAME, | |||||
FL_FREE_BOXTYPE ///< the first free box type for creation of new box types | FL_FREE_BOXTYPE ///< the first free box type for creation of new box types | ||||
}; | }; | ||||
extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUND_UP_BOX(); | extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUND_UP_BOX(); | ||||
@@ -186,45 +186,14 @@ Fl_Widget::~Fl_Widget() { | |||||
void | void | ||||
Fl_Widget::draw_focus(Fl_Boxtype B, int X, int Y, int W, int H) const { | Fl_Widget::draw_focus(Fl_Boxtype B, int X, int Y, int W, int H) const { | ||||
if (!Fl::visible_focus()) return; | if (!Fl::visible_focus()) return; | ||||
switch (B) { | |||||
case FL_DOWN_BOX: | |||||
case FL_DOWN_FRAME: | |||||
case FL_THIN_DOWN_BOX: | |||||
case FL_THIN_DOWN_FRAME: | |||||
X ++; | |||||
Y ++; | |||||
default: | |||||
break; | |||||
} | |||||
fl_color(fl_contrast(FL_BLACK, color())); | fl_color(fl_contrast(FL_BLACK, color())); | ||||
#if defined(USE_X11) || defined(__APPLE_QUARTZ__) | |||||
fl_line_style(FL_DOT); | |||||
fl_rect(X + Fl::box_dx(B), Y + Fl::box_dy(B), | |||||
W - Fl::box_dw(B) - 1, H - Fl::box_dh(B) - 1); | |||||
fl_line_style(FL_SOLID); | |||||
#elif defined(WIN32) | |||||
// Windows 95/98/ME do not implement the dotted line style, so draw | |||||
// every other pixel around the focus area... | |||||
// | |||||
// Also, QuickDraw (MacOS) does not support line styles specifically, | |||||
// and the hack we use in fl_line_style() will not draw horizontal lines | |||||
// on odd-numbered rows... | |||||
int i, xx, yy; | |||||
X += Fl::box_dx(B); | |||||
Y += Fl::box_dy(B); | |||||
W -= Fl::box_dw(B) + 2; | |||||
H -= Fl::box_dh(B) + 2; | |||||
for (xx = 0, i = 1; xx < W; xx ++, i ++) if (i & 1) fl_point(X + xx, Y); | |||||
for (yy = 0; yy < H; yy ++, i ++) if (i & 1) fl_point(X + W, Y + yy); | |||||
for (xx = W; xx > 0; xx --, i ++) if (i & 1) fl_point(X + xx, Y + H); | |||||
for (yy = H; yy > 0; yy --, i ++) if (i & 1) fl_point(X, Y + yy); | |||||
#else | |||||
# error unsupported platform | |||||
#endif // WIN32 | |||||
fl_draw_box( FL_FOCUS_FRAME, | |||||
X + Fl::box_dx(B), | |||||
Y + Fl::box_dy(B), | |||||
W - Fl::box_dw(B) - 1, | |||||
H - Fl::box_dh(B) - 1, fl_color() ); | |||||
} | } | ||||
@@ -246,6 +246,37 @@ void fl_border_frame(int x, int y, int w, int h, Fl_Color c) { | |||||
fl_rect(x, y, w, h); | fl_rect(x, y, w, h); | ||||
} | } | ||||
void fl_focus_color(); | |||||
void fl_focus_frame (int X, int Y, int W, int H, Fl_Color c ) | |||||
{ | |||||
fl_color(c); | |||||
#if defined(USE_X11) || defined(__APPLE_QUARTZ__) | |||||
fl_line_style(FL_DOT); | |||||
fl_rect(X, Y, W, H ); | |||||
fl_line_style(FL_SOLID); | |||||
#elif defined(WIN32) | |||||
// Windows 95/98/ME do not implement the dotted line style, so draw | |||||
// every other pixel around the focus area... | |||||
// | |||||
// Also, QuickDraw (MacOS) does not support line styles specifically, | |||||
// and the hack we use in fl_line_style() will not draw horizontal lines | |||||
// on odd-numbered rows... | |||||
int i, xx, yy; | |||||
for (xx = 0, i = 1; xx < W; xx ++, i ++) if (i & 1) fl_point(X + xx, Y); | |||||
for (yy = 0; yy < H; yy ++, i ++) if (i & 1) fl_point(X + W, Y + yy); | |||||
for (xx = W; xx > 0; xx --, i ++) if (i & 1) fl_point(X + xx, Y + H); | |||||
for (yy = H; yy > 0; yy --, i ++) if (i & 1) fl_point(X, Y + yy); | |||||
#else | |||||
# error unsupported platform | |||||
#endif // WIN32 | |||||
} | |||||
//////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////// | ||||
static struct { | static struct { | ||||
@@ -284,6 +315,7 @@ static struct { | |||||
{fl_border_box, 1,1,2,2,0}, // _FL_OVAL_SHADOW_BOX, | {fl_border_box, 1,1,2,2,0}, // _FL_OVAL_SHADOW_BOX, | ||||
{fl_border_frame, 1,1,2,2,0}, // _FL_OVAL_FRAME | {fl_border_frame, 1,1,2,2,0}, // _FL_OVAL_FRAME | ||||
{fl_rectf, 0,0,0,0,0}, // _FL_OVAL_FLAT_BOX, | {fl_rectf, 0,0,0,0,0}, // _FL_OVAL_FLAT_BOX, | ||||
{fl_focus_frame, 1,1,1,1,1}, // FL_FOCUS_FRAME | |||||
{fl_up_box, 3,3,6,6,0}, // FL_FREE_BOX+0 | {fl_up_box, 3,3,6,6,0}, // FL_FREE_BOX+0 | ||||
{fl_down_box, 3,3,6,6,0}, // FL_FREE_BOX+1 | {fl_down_box, 3,3,6,6,0}, // FL_FREE_BOX+1 | ||||
{fl_up_box, 3,3,6,6,0}, // FL_FREE_BOX+2 | {fl_up_box, 3,3,6,6,0}, // FL_FREE_BOX+2 | ||||