Browse Source

Add new boxtypes FL_ASYM_BOX and FL_ASYM_FLAT_BOX.

tags/v1.3.1000
Jonathan Moore Liles 13 years ago
parent
commit
e2e00a0095
4 changed files with 55 additions and 14 deletions
  1. +6
    -0
      FL/Enumerations.H
  2. +14
    -5
      src/fl_boxtype.cxx
  3. +33
    -7
      src/fl_rounded_box.cxx
  4. +2
    -2
      test/boxtype.cxx

+ 6
- 0
FL/Enumerations.H View File

@@ -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


+ 14
- 5
src/fl_boxtype.cxx View File

@@ -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;
}



+ 33
- 7
src/fl_rounded_box.cxx View File

@@ -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 $".
//

+ 2
- 2
test/boxtype.cxx View File

@@ -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);


Loading…
Cancel
Save