@@ -494,6 +494,8 @@ enum Fl_Boxtype { // boxtypes (if you change these you must fix fl_boxtype.C): | |||
_FL_OVAL_FRAME, ///< see figure 1 | |||
_FL_OFLAT_BOX, ///< see figure 1 | |||
FL_FOCUS_FRAME, | |||
_FL_ASYM_BOX, | |||
_FL_ASYM_FLAT_BOX, | |||
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(); | |||
@@ -518,6 +520,10 @@ extern FL_EXPORT Fl_Boxtype fl_define_FL_OVAL_BOX(); | |||
#define FL_OVAL_FRAME (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+2) | |||
#define FL_OFLAT_BOX (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+3) | |||
extern FL_EXPORT Fl_Boxtype fl_define_FL_ASYM_BOX(); | |||
#define FL_ASYM_BOX fl_define_FL_ASYM_BOX() | |||
#define FL_ASYM_FLAT_BOX (Fl_Boxtype)(fl_define_FL_ASYM_BOX()+1) | |||
#define FL_PLASTIC_UP_BOX FL_UP_BOX | |||
#define FL_PLASTIC_DOWN_BOX FL_DOWN_BOX | |||
#define FL_PLASTIC_UP_FRAME FL_UP_FRAME | |||
@@ -1,4 +1,3 @@ | |||
// | |||
// "$Id: fl_boxtype.cxx 7903 2010-11-28 21:06:39Z matt $" | |||
// | |||
// Box drawing code for the Fast Light Tool Kit (FLTK). | |||
@@ -316,6 +315,8 @@ static struct { | |||
{fl_border_frame, 1,1,2,2,0}, // _FL_OVAL_FRAME | |||
{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, 1,1,1,1,0}, | |||
{fl_border_box, 1,1,1,1,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_up_box, 3,3,6,6,0}, // FL_FREE_BOX+2 | |||
@@ -414,18 +415,22 @@ void fl_draw_box(Fl_Boxtype t, int x, int y, int w, int h, Fl_Color c) { | |||
/** Draws the widget box according its box style */ | |||
void Fl_Widget::draw_box() const { | |||
if (box_) draw_box((Fl_Boxtype)box_, x_, y_, w_, h_, color_); | |||
draw_backdrop(); | |||
} | |||
/** If FL_ALIGN_IMAGE_BACKDROP is set, the image or deimage will be drawn */ | |||
void Fl_Widget::draw_backdrop() const { | |||
if (align() & FL_ALIGN_IMAGE_BACKDROP) { | |||
if (align() & FL_ALIGN_IMAGE_BACKDROP || | |||
type() >= FL_WINDOW ) { | |||
const Fl_Image *img = image(); | |||
// if there is no image, we will not draw the deimage either | |||
if (img && deimage() && !active_r()) | |||
img = deimage(); | |||
if (img) | |||
((Fl_Image*)img)->draw(x_+(w_-img->w())/2, y_+(h_-img->h())/2); | |||
} | |||
{ | |||
((Fl_Image*)img)->draw(x_+(w_-img->w())/2, y_+(h_-img->h())/2); | |||
} | |||
} | |||
} | |||
/** Draws a box of type t, of color c at the widget's position and size. */ | |||
void Fl_Widget::draw_box(Fl_Boxtype t, Fl_Color c) const { | |||
@@ -433,8 +438,12 @@ void Fl_Widget::draw_box(Fl_Boxtype t, Fl_Color c) const { | |||
} | |||
/** Draws a box of type t, of color c at the position X,Y and size W,H. */ | |||
void Fl_Widget::draw_box(Fl_Boxtype t, int X, int Y, int W, int H, Fl_Color c) const { | |||
if ( type() >= FL_WINDOW ) | |||
printf( "NTK: drawing window box\n" ); | |||
draw_it_active = active_r(); | |||
fl_box_table[t].f(X, Y, W, H, c); | |||
draw_backdrop(); | |||
draw_it_active = 1; | |||
} | |||
@@ -34,7 +34,7 @@ | |||
static double offset[RN] = { 0.0, 0.07612, 0.29289, 0.61732, 1.0}; | |||
static void rbox(int fill, int x, int y, int w, int h) { | |||
static void rbox(int fill, int x, int y, int w, int h, int asym = 0 ) { | |||
int i; | |||
int rsx ,rsy, rs; | |||
rsx = w*2/5; rsy = h*2/5; | |||
@@ -43,14 +43,25 @@ static void rbox(int fill, int x, int y, int w, int h) { | |||
rsx = rs; rsy = rs; | |||
if (fill) fl_begin_polygon(); else fl_begin_loop(); | |||
for (i=0; i<RN; i++) | |||
fl_vertex(x + offset[RN-i-1]*rsx, y + offset[i] * rsy); | |||
for (i=0; i<RN; i++) | |||
fl_vertex(x + offset[i]*rsx, y + h-1 - offset[RN-i-1] * rsy); | |||
for (i=0; i<RN; i++) | |||
fl_vertex(x + w-1 - offset[RN-i-1]*rsx, y + h-1 - offset[i] * rsy); | |||
fl_vertex(x + offset[RN-i-1]*rsx, y + offset[i] * rsy); | |||
if ( ! asym ) | |||
for (i=0; i<RN; i++) | |||
fl_vertex(x + offset[i]*rsx, y + h-1 - offset[RN-i-1] * rsy); | |||
else | |||
fl_vertex( x, y + h - 1 ); | |||
for (i=0; i<RN; i++) | |||
fl_vertex(x + w-1 - offset[i]*rsx, y + offset[RN-i-1] * rsy); | |||
fl_vertex(x + w-1 - offset[RN-i-1]*rsx, y + h-1 - offset[i] * rsy); | |||
if ( ! asym ) | |||
for (i=0; i<RN; i++) | |||
fl_vertex(x + w-1 - offset[i]*rsx, y + offset[RN-i-1] * rsy); | |||
else | |||
fl_vertex( x + w - 1, y ); | |||
if (fill) fl_end_polygon(); else fl_end_loop(); | |||
} | |||
@@ -67,6 +78,15 @@ static void fl_rounded_box(int x, int y, int w, int h, Fl_Color c) { | |||
fl_color(FL_BLACK); rbox(0, x, y, w, h); | |||
} | |||
static void fl_asym_box(int x, int y, int w, int h, Fl_Color c) { | |||
fl_color(c); rbox(1, x, y, w, h, 1); | |||
fl_color(FL_BLACK); rbox(0, x, y, w, h, 1 ); | |||
} | |||
static void fl_asym_flat_box(int x, int y, int w, int h, Fl_Color c) { | |||
fl_color(c); rbox(1, x, y, w, h, 1); | |||
} | |||
static void fl_rshadow_box(int x, int y, int w, int h, Fl_Color c) { | |||
// draw shadow: | |||
fl_color(FL_DARK3); | |||
@@ -94,6 +114,12 @@ Fl_Boxtype fl_define_FL_RSHADOW_BOX() { | |||
return _FL_RSHADOW_BOX; | |||
} | |||
Fl_Boxtype fl_define_FL_ASYM_BOX() { | |||
fl_internal_boxtype(_FL_ASYM_BOX, fl_asym_box); | |||
fl_internal_boxtype(_FL_ASYM_FLAT_BOX, fl_asym_flat_box); | |||
return _FL_ASYM_BOX; | |||
} | |||
// | |||
// End of "$Id: fl_rounded_box.cxx 7903 2010-11-28 21:06:39Z matt $". | |||
// |
@@ -96,8 +96,8 @@ int main(int argc, char ** argv) { | |||
bt("FL_DIAMOND_UP_BOX",FL_DIAMOND_UP_BOX); | |||
bt("FL_DIAMOND_DOWN_BOX",FL_DIAMOND_DOWN_BOX); | |||
bt("FL_PLASTIC_UP_BOX",FL_PLASTIC_UP_BOX); | |||
bt("FL_PLASTIC_DOWN_BOX",FL_PLASTIC_DOWN_BOX); | |||
bt("FL_ASYM_BOX",FL_ASYM_BOX); | |||
bt("FL_ASYM_FLAT_BOX",FL_ASYM_FLAT_BOX); | |||
bt("FL_PLASTIC_UP_FRAME",FL_PLASTIC_UP_FRAME); | |||
bt("FL_PLASTIC_DOWN_FRAME",FL_PLASTIC_DOWN_FRAME); | |||
bt("FL_PLASTIC_THIN_UP_BOX",FL_PLASTIC_THIN_UP_BOX); | |||