DO NOT REPLY TO THIS MESSAGE. INSTEAD, POST ANY RESPONSES TO THE LINK BELOW.
[STR New]
Link: http://www.fltk.org/str.php?L2675
Version: 1.4-feature
Attached file "grad1_theme_for_fltk-1.3.x-r9525_by_05.22.2012.patch"...
Link: http://www.fltk.org/str.php?L2675
Version: 1.4-feature
diff -U 3 -H -d -r -N -- FL/Enumerations.H FL/Enumerations.H
--- FL/Enumerations.H 2012-03-26 20:54:54.000000000 +0400
+++ FL/Enumerations.H 2012-05-22 19:43:24.858999447 +0400
@@ -516,6 +516,18 @@
_FL_GTK_THIN_DOWN_FRAME, ///< gtk+ version of FL_THIN_DOWN_FRAME
_FL_GTK_ROUND_UP_BOX, ///< gtk+ version of FL_ROUND_UP_BOX
_FL_GTK_ROUND_DOWN_BOX, ///< gtk+ version of FL_ROUND_DOWN_BOX
+ _FL_GRAD1_UP_BOX,
+ _FL_GRAD1_DOWN_BOX,
+ _FL_GRAD1_UP_FRAME,
+ _FL_GRAD1_DOWN_FRAME,
+ _FL_GRAD1_THIN_UP_BOX,
+ _FL_GRAD1_THIN_DOWN_BOX,
+ _FL_GRAD1_THIN_UP_FRAME,
+ _FL_GRAD1_THIN_DOWN_FRAME,
+ _FL_GRAD1_ROUND_UP_BOX,
+ _FL_GRAD1_ROUND_DOWN_BOX,
+ _FL_GRAD1_BUTTON_UP_BOX,
+ _FL_GRAD1_BUTTON_DOWN_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();
@@ -562,6 +574,20 @@
#define FL_GTK_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+8)
#define FL_GTK_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+9)
+extern FL_EXPORT Fl_Boxtype fl_define_FL_GRAD1_UP_BOX();
+#define FL_GRAD1_UP_BOX fl_define_FL_GRAD1_UP_BOX()
+#define FL_GRAD1_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GRAD1_UP_BOX()+1)
+#define FL_GRAD1_UP_FRAME (Fl_Boxtype)(fl_define_FL_GRAD1_UP_BOX()+2)
+#define FL_GRAD1_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GRAD1_UP_BOX()+3)
+#define FL_GRAD1_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_GRAD1_UP_BOX()+4)
+#define FL_GRAD1_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GRAD1_UP_BOX()+5)
+#define FL_GRAD1_THIN_UP_FRAME (Fl_Boxtype)(fl_define_FL_GRAD1_UP_BOX()+6)
+#define FL_GRAD1_THIN_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GRAD1_UP_BOX()+7)
+#define FL_GRAD1_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_GRAD1_UP_BOX()+8)
+#define FL_GRAD1_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GRAD1_UP_BOX()+9)
+#define FL_GRAD1_BUTTON_UP_BOX (Fl_Boxtype)(fl_define_FL_GRAD1_UP_BOX()+10)
+#define FL_GRAD1_BUTTON_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GRAD1_UP_BOX()+11)
+
// conversions of box types to other boxtypes:
/**
Get the filled version of a frame.
diff -U 3 -H -d -r -N -- fluid/Fl_Widget_Type.cxx fluid/Fl_Widget_Type.cxx
--- fluid/Fl_Widget_Type.cxx 2011-09-29 00:43:05.000000000 +0400
+++ fluid/Fl_Widget_Type.cxx 2012-05-20 17:29:16.000000000 +0400
@@ -678,6 +678,14 @@
{"GTK_THIN_DOWN_BOX",0,0,(void *)FL_GTK_THIN_DOWN_BOX},
{"GTK_ROUND_UP_BOX",0,0,(void *)FL_GTK_ROUND_UP_BOX},
{"GTK_ROUND_DOWN_BOX",0,0,(void *)FL_GTK_ROUND_DOWN_BOX},
+{"GRAD1_UP_BOX",0,0,(void *)FL_GRAD1_UP_BOX},
+{"GRAD1_DOWN_BOX",0,0,(void *)FL_GRAD1_DOWN_BOX},
+{"GRAD1_THIN_UP_BOX",0,0,(void *)FL_GRAD1_THIN_UP_BOX},
+{"GRAD1_THIN_DOWN_BOX",0,0,(void *)FL_GRAD1_THIN_DOWN_BOX},
+{"GRAD1_ROUND_UP_BOX",0,0,(void *)FL_GRAD1_ROUND_UP_BOX},
+{"GRAD1_ROUND_DOWN_BOX",0,0,(void *)FL_GRAD1_ROUND_DOWN_BOX},
+{"GRAD1_BUTTON_UP_BOX",0,0,(void *)FL_GRAD1_BUTTON_UP_BOX},
+{"GRAD1_BUTTON_DOWN_BOX",0,0,(void *)FL_GRAD1_BUTTON_DOWN_BOX},
{0},
{"frames",0,0,0,FL_SUBMENU},
{"UP_FRAME",0,0,(void *)FL_UP_FRAME},
@@ -696,6 +704,10 @@
{"GTK_DOWN_FRAME",0,0,(void *)FL_GTK_DOWN_FRAME},
{"GTK_THIN_UP_FRAME",0,0,(void *)FL_GTK_THIN_UP_FRAME},
{"GTK_THIN_DOWN_FRAME",0,0,(void *)FL_GTK_THIN_DOWN_FRAME},
+{"GRAD1_UP_FRAME",0,0,(void *)FL_GRAD1_UP_FRAME},
+{"GRAD1_DOWN_FRAME",0,0,(void *)FL_GRAD1_DOWN_FRAME},
+{"GRAD1_THIN_UP_FRAME",0,0,(void *)FL_GRAD1_THIN_UP_FRAME},
+{"GRAD1_THIN_DOWN_FRAME",0,0,(void *)FL_GRAD1_THIN_DOWN_FRAME},
{0},
{0}};
diff -U 3 -H -d -r -N -- fluid/alignment_panel.cxx fluid/alignment_panel.cxx
--- fluid/alignment_panel.cxx 2011-07-19 08:49:30.000000000 +0400
+++ fluid/alignment_panel.cxx 2012-05-20 17:22:12.000000000 +0400
@@ -153,6 +153,7 @@
{"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
{"Plastic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
{"GTK+", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
+ {"Grad1", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
{0,0,0,0,0,0,0,0,0}
};
diff -U 3 -H -d -r -N -- fluid/alignment_panel.fl fluid/alignment_panel.fl
--- fluid/alignment_panel.fl 2011-07-19 08:49:30.000000000 +0400
+++ fluid/alignment_panel.fl 2012-05-20 17:23:51.000000000 +0400
@@ -187,6 +187,10 @@
label {GTK+}
xywh {10 10 35 25}
}
+ MenuItem {} {
+ label {Grad1}
+ xywh {20 20 35 25}
+ }
}
Fl_Group {} {open
xywh {116 43 220 126} labelfont 1 align 0
diff -U 3 -H -d -r -N -- fluid/fluid.cxx fluid/fluid.cxx
--- fluid/fluid.cxx 2012-04-05 09:12:30.000000000 +0400
+++ fluid/fluid.cxx 2012-05-20 17:27:07.000000000 +0400
@@ -1113,6 +1113,9 @@
case 3 : // GTK+
Fl::scheme("gtk+");
break;
+ case 4 : // Grad1
+ Fl::scheme("grad1");
+ break;
}
fluid_prefs.set("scheme", scheme_choice->value());
diff -U 3 -H -d -r -N -- src/Fl_Browser_.cxx src/Fl_Browser_.cxx
--- src/Fl_Browser_.cxx 2011-07-19 08:49:30.000000000 +0400
+++ src/Fl_Browser_.cxx 2012-05-20 17:36:29.000000000 +0400
@@ -409,7 +409,8 @@
item_draw(l, X-hposition_, yy+Y, W+hposition_, hh);
if (l == selection_ && Fl::focus() == this) {
draw_box(FL_BORDER_FRAME, X, yy+Y, W, hh, color());
- draw_focus(FL_NO_BOX, X, yy+Y, W+1, hh+1);
+ bool flag_grad1 = (Fl::scheme() && !strcasecmp(Fl::scheme(), "grad1"));
+ draw_focus(FL_NO_BOX, X, yy+Y, flag_grad1?W:W+1, hh+1);
}
int ww = item_width(l);
if (ww > max_width) {max_width = ww; max_width_item = l;}
diff -U 3 -H -d -r -N -- src/Fl_Choice.cxx src/Fl_Choice.cxx
--- src/Fl_Choice.cxx 2011-07-19 08:49:30.000000000 +0400
+++ src/Fl_Choice.cxx 2011-09-17 16:52:49.000000000 +0400
@@ -26,10 +26,11 @@
// button: it draws the text of the current pick and a down-arrow.
void Fl_Choice::draw() {
+ bool flag_grad1 = (Fl::scheme() && !strcasecmp(Fl::scheme(), "grad1"));
int dx = Fl::box_dx(FL_DOWN_BOX);
int dy = Fl::box_dy(FL_DOWN_BOX);
int H = h() - 2 * dy;
- int W = (H > 20) ? 20 : H;
+ int W = (H > 20) ? 20 : H; if (flag_grad1) { W = 17; }
int X = x() + w() - W - dx;
int Y = y() + dy;
int w1 = (W - 4) / 3; if (w1 < 1) w1 = 1;
@@ -46,16 +47,36 @@
fl_polygon(x1, y1 + 1, x1 + w1, y1 - w1 + 1, x1 + 2 * w1, y1 + 1);
} else {
// Show smaller up/down arrows with a divider...
- x1 = x() + w() - 13 - dx;
- y1 = y() + h() / 2;
- fl_polygon(x1, y1 - 2, x1 + 3, y1 - 5, x1 + 6, y1 - 2);
- fl_polygon(x1, y1 + 2, x1 + 3, y1 + 5, x1 + 6, y1 + 2);
- fl_color(fl_darker(color()));
- fl_yxline(x1 - 7, y1 - 8, y1 + 8);
+ Fl_Color drcol = 0x0;
+
+ if (flag_grad1) { // if was seted the theme `grad1'
+ x1 = x() + w() - dx/2 - W/2 - 4;
+ y1 = y()-1 + h()/2 - 3;
+ fl_polygon(x1, y1 + 2, x1 + 3, y1 + 5, x1 + 6, y1 + 2);
+
+ drcol = fl_color_average(color(), FL_BLACK, 0.88);
+ fl_color(active_r()?drcol:fl_inactive(drcol));
+ fl_yxline(X, y()+dy, y()+h()-dx-2);
+
+ drcol = fl_lighter(color());
+ fl_color(active_r()?drcol:fl_inactive(drcol));
+ fl_yxline(X+1, y()+dy, y()+h()-dx-2);
+ } else {
+ x1 = x() + w() - 13 - dx;
+ y1 = y() + h() / 2; if (flag_grad1) { y1 -= 1; }
+ fl_polygon(x1, y1 - 2, x1 + 3, y1 - 5, x1 + 6, y1 - 2);
+ fl_polygon(x1, y1 + 2, x1 + 3, y1 + 5, x1 + 6, y1 + 2);
+
+ drcol = fl_darker(color());
+ fl_color(active_r()?drcol:fl_inactive(drcol));
+ fl_yxline(x1 - 7, y1 - 8, y1 + 8);
+
+ drcol = fl_lighter(color());
+ fl_color(active_r()?drcol:fl_inactive(drcol));
+ fl_yxline(x1 - 6, y1 - 8, y1 + 8);
+ }
- fl_color(fl_lighter(color()));
- fl_yxline(x1 - 6, y1 - 8, y1 + 8);
}
} else {
if (fl_contrast(textcolor(), FL_BACKGROUND2_COLOR) == textcolor()) {
@@ -78,7 +99,8 @@
// ERCO
int xx = x() + dx, yy = y() + dy + 1, ww = w() - W, hh = H - 2;
- fl_push_clip(xx, yy, ww, hh);
+ if(flag_grad1) fl_push_clip(xx, yy-1, ww-dx-2, h()-dy-dy/2-1);
+ else fl_push_clip(xx, yy, ww, hh);
if ( Fl::scheme()) {
Fl_Label l;
@@ -91,9 +113,9 @@
l.color= m.labelcolor_ ? m.labelcolor_ : textcolor();
if (!m.active()) l.color = fl_inactive((Fl_Color)l.color);
fl_draw_shortcut = 2; // hack value to make '&' disappear
- l.draw(xx+3, yy, ww>6 ? ww-6 : 0, hh, FL_ALIGN_LEFT);
+ if(flag_grad1) l.draw(xx+2, yy, ww-dx/2-3, hh, FL_ALIGN_LEFT);
+ else l.draw(xx+3, yy, ww>6 ? ww-6 : 0, hh, FL_ALIGN_LEFT);
fl_draw_shortcut = 0;
- if ( Fl::focus() == this ) draw_focus(box(), xx, yy, ww, hh);
}
else {
fl_draw_shortcut = 2; // hack value to make '&' disappear
@@ -102,6 +124,9 @@
}
fl_pop_clip();
+
+ if ( Fl::focus() == this ) draw_focus(box(), xx, yy-1,
flag_grad1?ww-dx/2:ww, flag_grad1?h()-dy-dy:hh);
+
}
draw_label();
@@ -155,6 +180,7 @@
int Fl_Choice::handle(int e) {
if (!menu() || !menu()->text) return 0;
const Fl_Menu_Item* v;
+ bool flag_grad1 = (Fl::scheme() && !strcasecmp(Fl::scheme(), "grad1"));
switch (e) {
case FL_ENTER:
case FL_LEAVE:
@@ -168,24 +194,24 @@
J1:
if (Fl::scheme()
|| fl_contrast(textcolor(), FL_BACKGROUND2_COLOR) != textcolor()) {
- v = menu()->pulldown(x(), y(), w(), h(), mvalue(), this);
+ v = menu()->pulldown(x(), y(), w(), h(), flag_grad1?0:mvalue(), this);
} else {
// In order to preserve the old look-n-feel of "white" menus,
// temporarily override the color() of this widget...
Fl_Color c = color();
color(FL_BACKGROUND2_COLOR);
- v = menu()->pulldown(x(), y(), w(), h(), mvalue(), this);
+ v = menu()->pulldown(x(), y(), w(), h(), flag_grad1?0:mvalue(), this);
color(c);
}
if (!v || v->submenu()) return 1;
- if (v != mvalue()) redraw();
+ /*if (v != mvalue())*/ redraw(); // NOTE: for see the focus (kdiman)
picked(v);
return 1;
case FL_SHORTCUT:
if (Fl_Widget::test_shortcut()) goto J1;
v = menu()->test_shortcut();
if (!v) return 0;
- if (v != mvalue()) redraw();
+ /*if (v != mvalue())*/ redraw(); // NOTE: for see the focus (kdiman)
picked(v);
return 1;
case FL_FOCUS:
diff -U 3 -H -d -r -N -- src/Fl_Light_Button.cxx src/Fl_Light_Button.cxx
--- src/Fl_Light_Button.cxx 2011-07-19 08:49:30.000000000 +0400
+++ src/Fl_Light_Button.cxx 2011-09-17 16:54:40.000000000 +0400
@@ -35,7 +35,8 @@
int W;
int dx, dy;
- W = labelsize();
+ if(down_box() && Fl::scheme() && !strcasecmp(Fl::scheme(), "grad1")){ W =
15; } // for theme `grad1' - fixing size of box
+ else { W = labelsize(); }
dx = Fl::box_dx(box()) + 2;
dy = (h() - W) / 2;
// if (dy < 0) dy = 0; // neg. offset o.k. for vertical centering
@@ -84,6 +85,8 @@
fl_color(fl_color_average(FL_WHITE, FL_SELECTION_COLOR, 0.2f));
} else fl_color(col);
+ if(Fl::scheme() && !strcasecmp(Fl::scheme(), "grad1")){ tW = 5; } //
for theme `grad1' - fixing size of inline circle
+
switch (tW) {
// Larger circles draw fine...
default :
diff -U 3 -H -d -r -N -- src/Fl_Menu.cxx src/Fl_Menu.cxx
--- src/Fl_Menu.cxx 2012-04-05 09:12:30.000000000 +0400
+++ src/Fl_Menu.cxx 2012-05-20 17:45:31.000000000 +0400
@@ -182,6 +182,8 @@
if (flags & (FL_MENU_TOGGLE|FL_MENU_RADIO)) {
int d = (h - FL_NORMAL_SIZE + 1) / 2;
int W = h - 2 * d;
+ bool flag_grad1 = (Fl::scheme() && !strcasecmp(Fl::scheme(), "grad1"));
+ if (flag_grad1){ W = 15; d--; } // for theme `grad1' - fixing size of box
if (flags & FL_MENU_RADIO) {
fl_draw_box(FL_ROUND_DOWN_BOX, x+2, y+d, W, W, FL_BACKGROUND2_COLOR);
@@ -190,6 +192,7 @@
if ((W - tW) & 1) tW++; // Make sure difference is even to center
int td = (W - tW) / 2;
if (Fl::scheme()) {
+ if (!flag_grad1) td ++;
if (!strcmp(Fl::scheme(), "gtk+")) {
fl_color(FL_SELECTION_COLOR);
tW --;
@@ -199,6 +202,7 @@
} else fl_color(labelcolor_);
} else fl_color(labelcolor_);
+ if (flag_grad1) tW = 5; // for theme `grad1' - fixing size of inline circle
switch (tW) {
// Larger circles draw fine...
default :
diff -U 3 -H -d -r -N -- src/Fl_Tree_Prefs.cxx src/Fl_Tree_Prefs.cxx
--- src/Fl_Tree_Prefs.cxx 2012-05-10 01:26:32.000000000 +0400
+++ src/Fl_Tree_Prefs.cxx 2012-05-22 20:50:24.034034839 +0400
@@ -162,6 +162,8 @@
_selectbox = _FL_GTK_THIN_UP_BOX;
} else if ( strcmp(Fl::scheme(), "plastic") == 0 ) {
_selectbox = _FL_PLASTIC_THIN_UP_BOX;
+ } else if ( strcasecmp(Fl::scheme(), "grad1") == 0 ) {
+ _selectbox = _FL_GRAD1_THIN_UP_BOX;
}
}
}
diff -U 3 -H -d -r -N -- src/Fl_Widget.cxx src/Fl_Widget.cxx
--- src/Fl_Widget.cxx 2012-05-07 11:18:11.000000000 +0400
+++ src/Fl_Widget.cxx 2012-05-20 17:47:58.000000000 +0400
@@ -177,12 +177,14 @@
void
Fl_Widget::draw_focus(Fl_Boxtype B, int X, int Y, int W, int H) const {
if (!Fl::visible_focus()) return;
+ bool flag_grad1 = (Fl::scheme() && !strcasecmp(Fl::scheme(), "grad1"));
+ if (flag_grad1) W++;
switch (B) {
case FL_DOWN_BOX:
case FL_DOWN_FRAME:
case FL_THIN_DOWN_BOX:
case FL_THIN_DOWN_FRAME:
- X ++;
+ if (!flag_grad1) X ++;
Y ++;
default:
break;
diff -U 3 -H -d -r -N -- src/Fl_get_system_colors.cxx
src/Fl_get_system_colors.cxx
--- src/Fl_get_system_colors.cxx 2012-04-21 21:40:07.000000000 +0400
+++ src/Fl_get_system_colors.cxx 2012-05-22 20:43:40.232031283 +0400
@@ -27,6 +27,7 @@
#include <FL/Fl_Pixmap.H>
#include <FL/Fl_Tiled_Image.H>
#include "tile.xpm"
+#include "fl_grad1_theme.h"
#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__)
// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
@@ -293,6 +294,7 @@
if (!fl_ascii_strcasecmp(s, "none") || !fl_ascii_strcasecmp(s, "base") ||
!*s) s = 0;
else if (!fl_ascii_strcasecmp(s, "gtk+")) s = strdup("gtk+");
else if (!fl_ascii_strcasecmp(s, "plastic")) s = strdup("plastic");
+ else if (!fl_ascii_strcasecmp(s, "grad1")) s = strdup("grad1");
else s = 0;
}
if (scheme_) free((void*)scheme_);
@@ -379,6 +381,27 @@
// Use slightly thinner scrollbars...
Fl::scrollbar_size(15);
+ } else if (scheme_ && !fl_ascii_strcasecmp(scheme_, "grad1")) {
+ // Grad1 scheme
+ if (scheme_bg_) {
+ delete scheme_bg_;
+ scheme_bg_ = (Fl_Image *)0;
+ }
+
+ set_boxtype(FL_UP_FRAME, FL_GRAD1_UP_FRAME);
+ set_boxtype(FL_DOWN_FRAME, FL_GRAD1_DOWN_FRAME);
+ set_boxtype(FL_THIN_UP_FRAME, FL_GRAD1_THIN_UP_FRAME);
+ set_boxtype(FL_THIN_DOWN_FRAME, FL_GRAD1_THIN_DOWN_FRAME);
+
+ set_boxtype(FL_UP_BOX, FL_GRAD1_UP_BOX);
+ set_boxtype(FL_DOWN_BOX, FL_GRAD1_DOWN_BOX);
+ set_boxtype(FL_THIN_UP_BOX, FL_GRAD1_THIN_UP_BOX);
+ set_boxtype(FL_THIN_DOWN_BOX, FL_GRAD1_THIN_DOWN_BOX);
+ set_boxtype(_FL_ROUND_UP_BOX, FL_GRAD1_ROUND_UP_BOX);
+ set_boxtype(_FL_ROUND_DOWN_BOX, FL_GRAD1_ROUND_DOWN_BOX);
+
+ // Use slightly thinner scrollbars...
+ Fl::scrollbar_size(15);
} else {
// Use the standard FLTK look-n-feel...
if (scheme_bg_) {
diff -U 3 -H -d -r -N -- src/Makefile src/Makefile
--- src/Makefile 2011-07-19 08:49:30.000000000 +0400
+++ src/Makefile 2012-05-21 20:21:45.000000000 +0400
@@ -135,6 +135,7 @@
fl_file_dir.cxx \
fl_font.cxx \
fl_gtk.cxx \
+ fl_grad1_theme.cxx \
fl_labeltype.cxx \
fl_line_style.cxx \
fl_open_uri.cxx \
diff -U 3 -H -d -r -N -- src/fl_boxtype.cxx src/fl_boxtype.cxx
--- src/fl_boxtype.cxx 2011-07-19 08:49:30.000000000 +0400
+++ src/fl_boxtype.cxx 2012-05-22 20:08:46.435012846 +0400
@@ -28,6 +28,7 @@
#include <FL/Fl.H>
#include <FL/Fl_Widget.H>
#include <FL/fl_draw.H>
+#include "fl_grad1_theme.h"
#include <config.h>
////////////////////////////////////////////////////////////////
@@ -293,6 +294,18 @@
{fl_down_box, 1,1,2,2,0}, // _FL_GTK_THIN_ROUND_DOWN_BOX,
{fl_up_box, 2,2,4,4,0}, // _FL_GTK_ROUND_UP_BOX,
{fl_down_box, 2,2,4,4,0}, // _FL_GTK_ROUND_DOWN_BOX,
+ {grad1_up_box, 2,2,4,4,0}, // _FL_GRAD1_UP_BOX,
+ {grad1_down_box, 2,2,4,4,0}, // _FL_GRAD1_DOWN_BOX,
+ {grad1_up_frame, 2,2,4,4,0}, // _FL_GRAD1_UP_FRAME,
+ {grad1_down_frame, 2,2,4,4,0}, // _FL_GRAD1_DOWN_FRAME,
+ {grad1_thin_up_box, 1,1,2,2,0}, // _FL_GRAD1_THIN_UP_BOX,
+ {grad1_thin_down_box, 1,1,2,2,0}, // _FL_GRAD1_THIN_DOWN_BOX,
+ {grad1_thin_up_frame, 1,1,2,2,0}, // _FL_GRAD1_THIN_UP_FRAME,
+ {grad1_thin_down_frame, 1,1,2,2,0}, // _FL_GRAD1_THIN_DOWN_FRAME,
+ {grad1_round_up_box, 4,4,8,8,0}, // _FL_GRAD1_ROUND_UP_BOX,
+ {grad1_round_down_box, 4,4,8,8,0}, // _FL_GRAD1_ROUND_DOWN_BOX,
+ {grad1_button_up_box, 2,2,4,4,0}, // _FL_GRAD1_BUTTON_UP_BOX,
+ {grad1_button_down_box, 2,2,4,4,0}, // _FL_GRAD1_BUTTON_DOWN_BOX,
{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
diff -U 3 -H -d -r -N -- src/fl_grad1_theme.cxx src/fl_grad1_theme.cxx
--- src/fl_grad1_theme.cxx 1970-01-01 03:00:00.000000000 +0300
+++ src/fl_grad1_theme.cxx 2012-05-22 20:12:47.598014969 +0400
@@ -0,0 +1,349 @@
+//
+// "Grad1 theme" drawing routines for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2011 by Dmitrij K. e-mail: kdiman at live dot ru
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file. If this
+// file is missing or damaged, see the license at:
+//
+// http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+#ifndef fl_grad1_theme_cxx
+#define fl_grad1_theme_cxx
+
+#include <FL/Fl.H>
+#include <FL/fl_draw.H>
+#include "fl_grad1_theme.h"
+
+
+#define GROFF 0.45f // gradients offset
+
+
+ // draw gradient from South to Nord
+ static void _grad1_up_box_(int x, int y, int w, int h, Fl_Color bg){
+ float groff = GROFF;
+ if(groff < 0.0){ groff = 0.0f; }
+ float gradoffset = groff;
+ float stepoffset = (1.0/(float)h);
+ int xw = x+w-1;
+// from bottom to top
+ for (int _y = y; _y < y+h; _y++){
+ fl_color(fl_color_average(bg, FL_WHITE, (gradoffset<1.0)?gradoffset:1.0));
+ fl_line(x, _y, xw, _y);
+ gradoffset += stepoffset;
+ }
+ }
+
+
+ // draw gradient from Nord to South
+ static void _grad1_down_box_(int x, int y, int w, int h, Fl_Color bg){
+ float groff = GROFF;
+ if(groff < 0.0){ groff = 0.0f; }
+ float gradoffset = groff;
+ float stepoffset = (1.0/(float)h);
+ int xw = x+w-1;
+// from top to bottom
+ for (int _y = y+h-1; _y >= y; _y--){
+ fl_color(fl_color_average(bg, FL_WHITE, (gradoffset<1.0)?gradoffset:1.0));
+ fl_line(x, _y, xw, _y);
+ gradoffset += stepoffset;
+ }
+ }
+
+ // draw gradient for button up box
+ static void _grad1_button_up_box_(int x, int y, int w, int h, Fl_Color bg){
+ int half_h = h/2;
+ float gradoffset = 0.15f;
+ float stepoffset = (1.0/(float)half_h);
+ Fl_Color c = fl_color_average(bg, FL_WHITE, 0.5);
+ int xw = x+w-1;
+ for(int _y = y; _y <= y+half_h; _y++){
+ fl_color(fl_color_average(c, FL_WHITE, (gradoffset<1.0)?gradoffset:1.0));
+ fl_line(x, _y, xw, _y);
+ gradoffset += stepoffset;
+ }
+ gradoffset = 0.0f;
+ c = bg;
+ for(int _y = y+h-1; _y >= y+half_h-1; _y--){
+ fl_color(fl_color_average(c, FL_WHITE, (gradoffset<1.0)?gradoffset:1.0));
+ fl_line(x, _y, xw, _y);
+ gradoffset += stepoffset;
+ }
+ }
+
+
+ // draw gradient for button down box
+ static void _grad1_button_down_box_(int x, int y, int w, int h, Fl_Color bg){
+ int half_h = h/2;
+ float gradoffset;
+ float stepoffset = (1.0/(float)half_h);
+ Fl_Color c = fl_color_average(bg, FL_WHITE, 0.65);
+ int xw = x+w-1;
+ fl_color(c);
+ for(int _y = y; _y <= y+half_h; _y++){
+ fl_line(x, _y, xw, _y);
+ }
+ gradoffset = 0.20f;
+ c = fl_color_average(bg, FL_WHITE, 0.55);
+ for(int _y = y+h-1; _y >= y+half_h-1; _y--){
+ fl_color(fl_color_average(c, FL_WHITE, (gradoffset<1.0)?gradoffset:1.0));
+ fl_line(x, _y, xw, _y);
+ gradoffset += stepoffset;
+ }
+ }
+
+
+ // draw rounded box
+ static void _grad1_rounded_box_(int x, int y, int w, int h, Fl_Color bg){
+ fl_color(bg);
+ if(w > h){
+ fl_pie(x, y, h, h, 90.0, 270.0); // right half of circle
+ fl_rectf(x+h/2, y, w-h, h); // rectangle between left and right half-circle
+ fl_pie(x+w-h, y, h, h, 0.0, 90.0); // top-left quarter of circle
+ fl_pie(x+w-h, y, h, h, 270.0, 360.0); // bottom-left quarter of circle
+ }
+ else {
+ fl_pie(x, y, w, w, 0.0, 180.0); // top half of circle
+ fl_rectf(x, y+w/2, w, h-w); // rectangle between top and bottom half-circle
+ fl_pie(x, y+h-w, w, w, 180.0, 360.0); // bottom half of circle
+ }
+ }
+
+
+enum {
+ GRAD1_UP_BOX,
+ GRAD1_DOWN_BOX,
+
+ GRAD1_UP_BUTTON,
+ GRAD1_DOWN_BUTTON,
+
+ GRAD1_UP_ROUND,
+ GRAD1_DOWN_ROUND,
+
+ GRAD1_UP_FRAME,
+ GRAD1_DOWN_FRAME
+};
+
+
+static Fl_Color grad1_color(Fl_Color c) {
+ if(Fl::draw_box_active()){ return c; }
+ else { return fl_inactive(c); }
+}
+
+
+
+static void grad1_draw(int x, int y, int w, int h, Fl_Color c, int typebox,
bool is_shadow){
+
+ if(w < 1 || h < 1) return;
+ int X, Y, W, H, X1, Y1;
+
+ // draw bg
+ if(typebox != GRAD1_UP_FRAME && typebox != GRAD1_DOWN_FRAME){
+
+ X = x+1; Y = y+1; W = w-2; H = h-2;
+
+ switch(typebox){
+ case GRAD1_UP_BOX: { _grad1_up_box_(X, Y, W, H, grad1_color(c)); break; }
+ case GRAD1_DOWN_BOX: { _grad1_down_box_(X, Y, W, H, grad1_color(c)); break;
}
+ case GRAD1_UP_BUTTON: { _grad1_button_up_box_(X, Y, W, H, grad1_color(c));
break; }
+ case GRAD1_DOWN_BUTTON: { _grad1_button_down_box_(X, Y, W, H,
grad1_color(c)); break; }
+ case GRAD1_UP_ROUND:
+ case GRAD1_DOWN_ROUND:
+ _grad1_rounded_box_(x, y, w, h, grad1_color(fl_color_average(c, FL_WHITE,
0.82)));
+ break;
+ default: { break; }
+ }
+ }
+
+ Fl_Color leftline = c, topline = c, rightline = c, bottomline = c;
+
+ if(typebox == GRAD1_UP_ROUND || typebox == GRAD1_DOWN_ROUND){
+ leftline = fl_color_average(c, FL_WHITE, 0.88);
+ leftline = topline = rightline = bottomline = fl_color_average(leftline,
FL_BLACK, 0.97);
+ }
+
+ else if(typebox == GRAD1_UP_BOX || typebox == GRAD1_UP_FRAME){
+ topline = fl_color_average(c, FL_BLACK, 0.95);
+ leftline = fl_color_average(c, FL_BLACK, 0.85);
+ rightline = leftline;
+ bottomline = fl_color_average(c, FL_BLACK, 0.88);
+ }
+
+ else if(typebox == GRAD1_DOWN_BOX || typebox == GRAD1_DOWN_FRAME){
+ topline = fl_color_average(c, FL_BLACK, 0.88);
+ leftline = fl_color_average(c, FL_BLACK, 0.85);
+ rightline = leftline;
+ bottomline = fl_color_average(c, FL_BLACK, 0.95);
+ }
+
+ // draw border
+ if(typebox != GRAD1_UP_ROUND && typebox != GRAD1_DOWN_ROUND){
+ // bottom side
+ fl_color(grad1_color(bottomline));
+ fl_line(x+1, y+h-1, x+w-2, y+h-1);
+ // right side
+ fl_color(grad1_color(rightline));
+ fl_line(x+w-1, y+1, x+w-1, y+h-2);
+ // top side
+ fl_color(grad1_color(topline));
+ fl_line(x+1, y, x+w-2, y);
+ // left side
+ fl_color(grad1_color(leftline));
+ fl_line(x, y+1, x, y+h-2);
+ }
+
+ // draw shadow
+ if(is_shadow){
+
+ if(typebox == GRAD1_UP_ROUND){
+ topline = fl_color_average(c, FL_WHITE, 0.35);
+ bottomline = fl_color_average(c, FL_BLACK, 0.94);
+ }
+
+ else if(typebox == GRAD1_DOWN_ROUND){
+ topline = fl_color_average(c, FL_BLACK, 0.94);
+ bottomline = fl_color_average(c, FL_WHITE, 0.35);
+ }
+
+ else if(typebox == GRAD1_UP_BOX || typebox == GRAD1_UP_FRAME){
+ topline = fl_color_average(c, FL_WHITE, 0.35);
+ leftline = fl_color_average(c, FL_WHITE, 0.4);
+ rightline = leftline;
+ bottomline = fl_color_average(c, FL_BLACK, 0.8);
+ }
+
+ else if(typebox == GRAD1_DOWN_BOX || typebox == GRAD1_DOWN_FRAME){
+ topline = fl_color_average(c, FL_BLACK, 0.8);
+ leftline = fl_color_average(c, FL_BLACK, 0.94);
+ rightline = leftline;
+ bottomline = fl_color_average(c, FL_WHITE, 0.35);
+ }
+
+ int xw1=x+w-1;
+ int xw2=x+w-2;
+ int xw3=x+w-3;
+ int yh2=y+h-2;
+ int yh1=y+h-1;
+
+ if(typebox == GRAD1_UP_BOX || typebox == GRAD1_UP_FRAME){
+ fl_color(grad1_color(topline));
+ X=x+1;Y=y+1;X1=xw2;Y1=y+1;
+ fl_line(X, Y, X1, Y1); // top line
+
+ fl_color(grad1_color(leftline));
+ X=x+1;Y=yh2;X1=x+1;Y1=y+2;
+ fl_line(X, Y, X1, Y1); // left line
+
+ fl_color(grad1_color(rightline));
+ X=xw2;Y=y+2;X1=xw2;Y1=yh2;
+ fl_line(X, Y, X1, Y1); // right line
+
+ fl_color(grad1_color(bottomline));
+ X=xw2;Y=yh2;X1=x+1;Y1=yh2;
+ fl_line(X, Y, X1, Y1); // bottom line
+ }
+
+ else if(typebox == GRAD1_DOWN_BOX || typebox == GRAD1_DOWN_FRAME){
+ fl_color(grad1_color(topline));
+ X=x+1;Y=y+1;X1=xw2;Y1=y+1;
+ fl_line(X, Y, X1, Y1); // top line
+
+ fl_color(grad1_color(leftline));
+ X=x+1;Y=yh2;X1=x+1;Y1=y+2;
+ fl_line(X, Y, X1, Y1); // left line
+
+ fl_color(grad1_color(rightline));
+ X=xw2;Y=y+2;X1=xw2;Y1=yh2;
+ fl_line(X, Y, X1, Y1); // right line
+
+ fl_color(grad1_color(bottomline));
+ X=xw3;Y=yh2;X1=x+2;Y1=yh2;
+ fl_line(X, Y, X1, Y1); // bottom line
+ }
+
+ else if(typebox == GRAD1_UP_ROUND || typebox == GRAD1_DOWN_ROUND){
+
+ int Radius, smooth;
+ int r_offset1, r_offset2; // quarter of smooth and half of smooth
+
+ if(w > h){ smooth = w; }
+ else { smooth = h; }
+
+ // correcting `smooth'
+ if(smooth > 0 && (smooth*3 > w || smooth*3 > h)){
+ if(h < w){ smooth = h/3; }
+ else { smooth = w/3; }
+ }
+
+ r_offset1 = smooth/4; r_offset2 = smooth/2;
+
+ Radius = smooth*3;
+ if(Radius == 3){ Radius = 4; }
+
+ fl_color(grad1_color(topline));
+ fl_line(x+1, yh1-smooth-r_offset2, x+1, y+r_offset2+smooth); // left side
+ fl_arc(x+1, y+1, Radius, Radius, 90.0, 180.0); // left-top corner
+ if(typebox == GRAD1_DOWN_ROUND){ fl_arc(x+1, y+1, Radius+1, Radius+1, 90.0,
180.0); } // left-top corner (DOWN_BOX)
+ fl_line(x+smooth+r_offset2, y+1, xw1-smooth-r_offset2, y+1); // top side
+ fl_arc(xw1-Radius, y+1, Radius, Radius, 00.0, 90.0); // right-top corner
+ if(typebox == GRAD1_DOWN_ROUND){ fl_arc(xw1-Radius, y+1, Radius+1,
Radius+1, 00.0, 90.0); } // right-top corner (DOWN_BOX)
+ fl_line(xw2, y+smooth+r_offset2, xw2, yh1-smooth-r_offset2); // right side
+ fl_arc(x+1, yh1-Radius, Radius, Radius, 180.0, 200.0); // left-bottom corner
+ fl_arc(xw1-Radius, yh1-Radius, Radius, Radius, 340.0, 360.0); //
right-bottom
+ fl_color(grad1_color(bottomline));
+ fl_arc(x+1, yh1-Radius, Radius, Radius, 200.0, 270.0); // left-bottom corner
+ if(typebox == GRAD1_UP_ROUND){ fl_arc(x+1, yh1-Radius, Radius+1, Radius+1,
200.0, 270.0); } // left-bottom corner (UP_BOX)
+ fl_line(xw1-smooth-r_offset2, yh2, x+smooth+r_offset2, yh2); // bottom side
+ fl_arc(xw1-Radius, yh1-Radius, Radius, Radius, 270.0, 340.0); //
right-bottom corner
+ if(typebox == GRAD1_UP_ROUND){ fl_arc(xw1-Radius, yh1-Radius, Radius+1,
Radius+1, 270.0, 340.0); } // right-bottom corner
+ }
+
+ } /// end `if(is_shadow)'
+
+} /// end `static void grad1_draw(...)'
+
+
+
+void grad1_button_up_box(int x, int y, int w, int h, Fl_Color c){
grad1_draw(x, y, w, h, c, GRAD1_UP_BUTTON, true); }
+void grad1_button_down_box(int x, int y, int w, int h, Fl_Color c){
grad1_draw(x, y, w, h, c, GRAD1_DOWN_BUTTON, true); }
+void grad1_up_box(int x, int y, int w, int h, Fl_Color c){ grad1_draw(x, y, w,
h, c, GRAD1_UP_BOX, true); }
+void grad1_down_box(int x, int y, int w, int h, Fl_Color c){ grad1_draw(x, y,
w, h, c, GRAD1_DOWN_BOX, true); }
+void grad1_thin_up_box(int x, int y, int w, int h, Fl_Color c){ grad1_draw(x,
y, w, h, c, GRAD1_UP_BOX, false); }
+void grad1_thin_down_box(int x, int y, int w, int h, Fl_Color c){
grad1_draw(x, y, w, h, c, GRAD1_DOWN_BOX, false); }
+void grad1_up_frame(int x, int y, int w, int h, Fl_Color c){ grad1_draw(x, y,
w, h, c, GRAD1_UP_FRAME, true); }
+void grad1_down_frame(int x, int y, int w, int h, Fl_Color c){ grad1_draw(x,
y, w, h, c, GRAD1_DOWN_FRAME, true); }
+void grad1_thin_up_frame(int x, int y, int w, int h, Fl_Color c){
grad1_draw(x, y, w, h, c, GRAD1_UP_FRAME, false); }
+void grad1_thin_down_frame(int x, int y, int w, int h, Fl_Color c){
grad1_draw(x, y, w, h, c, GRAD1_DOWN_FRAME, false); }
+void grad1_round_up_box(int x, int y, int w, int h, Fl_Color c){ grad1_draw(x,
y, w, h, c, GRAD1_UP_ROUND, true); }
+void grad1_round_down_box(int x, int y, int w, int h, Fl_Color c){
grad1_draw(x, y, w, h, c, GRAD1_DOWN_ROUND, true); }
+
+
+
+extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
+
+Fl_Boxtype fl_define_FL_GRAD1_UP_BOX(){
+
+ fl_internal_boxtype(_FL_GRAD1_UP_BOX, grad1_up_box);
+ fl_internal_boxtype(_FL_GRAD1_DOWN_BOX, grad1_down_box);
+ fl_internal_boxtype(_FL_GRAD1_UP_FRAME, grad1_up_frame);
+ fl_internal_boxtype(_FL_GRAD1_DOWN_FRAME, grad1_down_frame);
+ fl_internal_boxtype(_FL_GRAD1_THIN_UP_BOX, grad1_thin_up_box);
+ fl_internal_boxtype(_FL_GRAD1_THIN_DOWN_BOX, grad1_thin_down_box);
+ fl_internal_boxtype(_FL_GRAD1_THIN_UP_FRAME, grad1_thin_up_frame);
+ fl_internal_boxtype(_FL_GRAD1_THIN_DOWN_FRAME, grad1_thin_down_frame);
+ fl_internal_boxtype(_FL_GRAD1_ROUND_UP_BOX, grad1_round_up_box);
+ fl_internal_boxtype(_FL_GRAD1_ROUND_DOWN_BOX, grad1_round_down_box);
+ fl_internal_boxtype(_FL_GRAD1_BUTTON_UP_BOX, grad1_button_up_box);
+ fl_internal_boxtype(_FL_GRAD1_BUTTON_DOWN_BOX, grad1_button_down_box);
+
+ return _FL_GRAD1_UP_BOX;
+
+}
+
+#endif
diff -U 3 -H -d -r -N -- src/fl_grad1_theme.h src/fl_grad1_theme.h
--- src/fl_grad1_theme.h 1970-01-01 03:00:00.000000000 +0300
+++ src/fl_grad1_theme.h 2011-09-17 17:01:57.000000000 +0400
@@ -0,0 +1,35 @@
+//
+// "Grad1 theme" drawing routines for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2011 by Dmitrij K. e-mail: kdiman at live dot ru
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file. If this
+// file is missing or damaged, see the license at:
+//
+// http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+#ifndef fl_grad_theme_h
+#define fl_grad_theme_h
+
+#include <FL/Fl.H>
+
+extern FL_EXPORT void grad1_up_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void grad1_down_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void grad1_up_frame(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void grad1_down_frame(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void grad1_thin_up_box(int x, int y, int w, int h, Fl_Color
c);
+extern FL_EXPORT void grad1_thin_down_box(int x, int y, int w, int h, Fl_Color
c);
+extern FL_EXPORT void grad1_thin_up_frame(int x, int y, int w, int h, Fl_Color
c);
+extern FL_EXPORT void grad1_thin_down_frame(int x, int y, int w, int h,
Fl_Color c);
+extern FL_EXPORT void grad1_round_up_box(int x, int y, int w, int h, Fl_Color
c);
+extern FL_EXPORT void grad1_round_down_box(int x, int y, int w, int h,
Fl_Color c);
+extern FL_EXPORT void grad1_button_up_box(int x, int y, int w, int h, Fl_Color
c);
+extern FL_EXPORT void grad1_button_down_box(int x, int y, int w, int h,
Fl_Color c);
+
+#endif
_______________________________________________
fltk-dev mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-dev