Index: FL/Enumerations.H
===================================================================
--- FL/Enumerations.H	(revision 10588)
+++ FL/Enumerations.H	(working copy)
@@ -532,6 +532,18 @@
   _FL_GLEAM_THIN_DOWN_BOX,	///< gleam version of FL_THIN_DOWN_BOX
   _FL_GLEAM_ROUND_UP_BOX,	///< gleam version of FL_ROUND_UP_BOX
   _FL_GLEAM_ROUND_DOWN_BOX,	///< gleam version of FL_ROUND_DOWN_BOX
+  _FL_OXY_UP_BOX,		///< oxy version of FL_OXY_UP_BOX
+  _FL_OXY_DOWN_BOX,		///< oxy version of FL_OXY_DOWN_BOX
+  _FL_OXY_UP_FRAME,		///< oxy version of FL_OXY_UP_FRAME
+  _FL_OXY_DOWN_FRAME,		///< oxy version of FL_OXY_DOWN_FRAME
+  _FL_OXY_THIN_UP_BOX,		///< oxy version of FL_OXY_THIN_UP_BOX
+  _FL_OXY_THIN_DOWN_BOX,	///< oxy version of FL_OXY_THIN_DOWN_BOX
+  _FL_OXY_THIN_UP_FRAME,	///< oxy version of FL_OXY_THIN_UP_FRAME
+  _FL_OXY_THIN_DOWN_FRAME,	///< oxy version of FL_OXY_THIN_DOWN_FRAME
+  _FL_OXY_ROUND_UP_BOX,		///< oxy version of FL_OXY_ROUND_UP_BOX
+  _FL_OXY_ROUND_DOWN_BOX,	///< oxy version of FL_OXY_ROUND_DOWN_BOX
+  _FL_OXY_BUTTON_UP_BOX,	///< oxy version of FL_OXY_BUTTON_UP_BOX
+  _FL_OXY_BUTTON_DOWN_BOX,	///< oxy version of FL_OXY_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();
@@ -588,6 +600,20 @@
 #define FL_GLEAM_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_GLEAM_UP_BOX()+6)
 #define FL_GLEAM_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GLEAM_UP_BOX()+7)
 
+extern FL_EXPORT Fl_Boxtype fl_define_FL_OXY_UP_BOX();
+#define FL_OXY_UP_BOX fl_define_FL_OXY_UP_BOX()
+#define FL_OXY_DOWN_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+1)
+#define FL_OXY_UP_FRAME (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+2)
+#define FL_OXY_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+3)
+#define FL_OXY_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+4)
+#define FL_OXY_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+5)
+#define FL_OXY_THIN_UP_FRAME (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+6)
+#define FL_OXY_THIN_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+7)
+#define FL_OXY_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+8)
+#define FL_OXY_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+9)
+#define FL_OXY_BUTTON_UP_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+10)
+#define FL_OXY_BUTTON_DOWN_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+11)
+
 // conversions of box types to other boxtypes:
 /**
   Get the filled version of a frame.
Index: fluid/Fl_Widget_Type.cxx
===================================================================
--- fluid/Fl_Widget_Type.cxx	(revision 10588)
+++ fluid/Fl_Widget_Type.cxx	(working copy)
@@ -684,6 +684,14 @@
 {"GLEAM_THIN_DOWN_BOX",0,0,(void *)FL_GLEAM_THIN_DOWN_BOX},
 {"GLEAM_ROUND_UP_BOX",0,0,(void *)FL_GLEAM_ROUND_UP_BOX},
 {"GLEAM_ROUND_DOWN_BOX",0,0,(void *)FL_GLEAM_ROUND_DOWN_BOX},
+{"OXY_UP_BOX",0,0,(void *)FL_OXY_UP_BOX},
+{"OXY_DOWN_BOX",0,0,(void *)FL_OXY_DOWN_BOX},
+{"OXY_THIN_UP_BOX",0,0,(void *)FL_OXY_THIN_UP_BOX},
+{"OXY_THIN_DOWN_BOX",0,0,(void *)FL_OXY_THIN_DOWN_BOX},
+{"OXY_ROUND_UP_BOX",0,0,(void *)FL_OXY_ROUND_UP_BOX},
+{"OXY_ROUND_DOWN_BOX",0,0,(void *)FL_OXY_ROUND_DOWN_BOX},
+{"OXY_BUTTON_UP_BOX",0,0,(void *)FL_OXY_BUTTON_UP_BOX},
+{"OXY_BUTTON_DOWN_BOX",0,0,(void *)FL_OXY_BUTTON_DOWN_BOX},
 {0},
 {"frames",0,0,0,FL_SUBMENU},
 {"UP_FRAME",0,0,(void *)FL_UP_FRAME},
@@ -704,6 +712,10 @@
 {"GTK_THIN_DOWN_FRAME",0,0,(void *)FL_GTK_THIN_DOWN_FRAME},
 {"GLEAM_UP_FRAME",0,0,(void *)FL_GLEAM_UP_FRAME},
 {"GLEAM_DOWN_FRAME",0,0,(void *)FL_GLEAM_DOWN_FRAME},
+{"OXY_UP_FRAME",0,0,(void *)FL_OXY_UP_FRAME},
+{"OXY_DOWN_FRAME",0,0,(void *)FL_OXY_DOWN_FRAME},
+{"OXY_THIN_UP_FRAME",0,0,(void *)FL_OXY_THIN_UP_FRAME},
+{"OXY_THIN_DOWN_FRAME",0,0,(void *)FL_OXY_THIN_DOWN_FRAME},
 {0},
 {0}};
 
Index: fluid/alignment_panel.cxx
===================================================================
--- fluid/alignment_panel.cxx	(revision 10588)
+++ fluid/alignment_panel.cxx	(working copy)
@@ -154,6 +154,7 @@
  {"Plastic", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
  {"GTK+", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
  {"Gleam", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
+ {"Oxy", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
  {0,0,0,0,0,0,0,0,0}
 };
 
Index: fluid/alignment_panel.fl
===================================================================
--- fluid/alignment_panel.fl	(revision 10588)
+++ fluid/alignment_panel.fl	(working copy)
@@ -192,6 +192,10 @@
         label Gleam
         xywh {20 20 35 25}
       }
+      MenuItem {} {
+        label {Oxy}
+        xywh {20 20 35 25}
+      }
     }
     Fl_Group {} {open
       xywh {116 43 220 126} labelfont 1 align 0
Index: fluid/fluid.cxx
===================================================================
--- fluid/fluid.cxx	(revision 10588)
+++ fluid/fluid.cxx	(working copy)
@@ -1116,6 +1116,9 @@
     case 4 : // Gleam
       Fl::scheme("gleam");
       break;
+    case 5 : // Oxy
+      Fl::scheme("oxy");
+      break;
   }
 
   fluid_prefs.set("scheme", scheme_choice->value());
Index: src/CMakeLists.txt
===================================================================
--- src/CMakeLists.txt	(revision 10588)
+++ src/CMakeLists.txt	(working copy)
@@ -127,6 +127,7 @@
   fl_oval_box.cxx
   fl_overlay.cxx
   fl_overlay_visual.cxx
+  fl_oxy.cxx
   fl_plastic.cxx
   fl_read_image.cxx
   fl_rect.cxx
Index: src/Fl_Browser.cxx
===================================================================
--- src/Fl_Browser.cxx	(revision 10588)
+++ src/Fl_Browser.cxx	(working copy)
@@ -361,6 +361,7 @@
 int Fl_Browser::item_height(void *item) const {
   FL_BLINE* l = (FL_BLINE*)item;
   if (l->flags & NOTDISPLAYED) return 0;
+  bool flag_oxy = Fl::is_scheme("oxy");
 
   int hmax = 2; // use 2 to insure we don't return a zero!
 
@@ -368,6 +369,7 @@
     // For blank lines set the height to exactly 1 line!
     fl_font(textfont(), textsize());
     int hh = fl_height();
+    if (flag_oxy) hh += 2;
     if (hh > hmax) hmax = hh;
   } else {
     const int* i = column_widths();
@@ -398,6 +400,7 @@
       else str = NULL;
       if((!str && *ptr) || (str && ptr < str)) {
 	fl_font(font, tsize); int hh = fl_height();
+    if (flag_oxy) hh += 2;
 	if (hh > hmax) hmax = hh;
       }
       if (!str || !*str) break;
Index: src/Fl_Browser_.cxx
===================================================================
--- src/Fl_Browser_.cxx	(revision 10588)
+++ src/Fl_Browser_.cxx	(working copy)
@@ -394,22 +394,28 @@
   // if not a full redraw or if it is selected:
   void* l = top();
   int yy = -offset_;
+  bool flag_oxy = Fl::is_scheme("oxy");
   for (; l && yy < H; l = item_next(l)) {
     int hh = item_height(l);
     if (hh <= 0) continue;
     if ((damage()&(FL_DAMAGE_SCROLL|FL_DAMAGE_ALL)) || l == redraw1 || l == redraw2) {
       if (item_selected(l)) {
-	fl_color(active_r() ? selection_color() : fl_inactive(selection_color()));
-	fl_rectf(X, yy+Y, W, hh);
+	if (flag_oxy) draw_box(FL_UP_BOX, X, yy+Y, W, hh, selection_color());
+    else {
+     fl_color(active_r() ? selection_color() : fl_inactive(selection_color()));
+     fl_rectf(X, yy+Y, W, hh);
+    }
       } else if (!(damage()&FL_DAMAGE_ALL)) {
 	fl_push_clip(X, yy+Y, W, hh);
 	draw_box(box() ? box() : FL_DOWN_BOX, x(), y(), w(), h(), color());
 	fl_pop_clip();
       }
+      if (flag_oxy) fl_push_clip(X+4, yy+Y, W-8, hh);
       item_draw(l, X-hposition_, yy+Y, W+hposition_, hh);
+      if (flag_oxy) fl_pop_clip();
       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);
+	if (!flag_oxy) draw_box(FL_BORDER_FRAME, X, yy+Y, W, hh, color());
+	draw_focus(flag_oxy?FL_UP_BOX:FL_NO_BOX, X, yy+Y, flag_oxy?W:W+1, hh+1);
       }
       int ww = item_width(l);
       if (ww > max_width) {max_width = ww; max_width_item = l;}
Index: src/Fl_Check_Browser.cxx
===================================================================
--- src/Fl_Check_Browser.cxx	(revision 10588)
+++ src/Fl_Check_Browser.cxx	(working copy)
@@ -98,14 +98,20 @@
 }
 
 int Fl_Check_Browser::item_height(void *) const {
-	return textsize() + 2;
+    bool flag_oxy = Fl::is_scheme("oxy");
+    if (flag_oxy) {
+     fl_font(textfont(), textsize());
+     return fl_height() + 2;
+    }
+	else return textsize() + 2;
 }
 
 #define CHECK_SIZE (textsize()-2)
 
 int Fl_Check_Browser::item_width(void *v) const {
+    bool flag_oxy = Fl::is_scheme("oxy");
 	fl_font(textfont(), textsize());
-	return int(fl_width(((cb_item *)v)->text)) + CHECK_SIZE + 8;
+	return int(fl_width(((cb_item *)v)->text)) + CHECK_SIZE + flag_oxy ? 13 : 8;
 }
 
 void Fl_Check_Browser::item_draw(void *v, int X, int Y, int, int) const {
@@ -115,10 +121,19 @@
 	Fl_Color col = active_r() ? textcolor() : fl_inactive(textcolor());
 	int cy = Y + (tsize + 1 - CHECK_SIZE) / 2;
 	X += 2;
+    bool flag_oxy = Fl::is_scheme("oxy");
 
-	fl_color(active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR));
-	fl_loop(X, cy, X, cy + CHECK_SIZE,
-	        X + CHECK_SIZE, cy + CHECK_SIZE, X + CHECK_SIZE, cy);
+    if (flag_oxy) {
+     fl_draw_box(FL_DOWN_BOX, X+2, cy, 15, 15, color());
+     fl_color(active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR));
+    }
+
+    else {
+     fl_color(active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR));
+     fl_loop(X, cy, X, cy + CHECK_SIZE,
+            X + CHECK_SIZE, cy + CHECK_SIZE, X + CHECK_SIZE, cy);
+    }
+	
 	if (i->checked) {
 	  int tx = X + 3;
 	  int tw = CHECK_SIZE - 4;
@@ -125,6 +140,7 @@
 	  int d1 = tw/3;
 	  int d2 = tw-d1;
 	  int ty = cy + (CHECK_SIZE+d2)/2-d1-2;
+      if (flag_oxy) { tx +=2; tw=9; d1=3; d2=6; ty=cy+(15+d2)/2-d1-2; }
 	  for (int n = 0; n < 3; n++, ty++) {
 	    fl_line(tx, ty, tx+d1, ty+d1);
 	    fl_line(tx+d1, ty+d1, tx+tw-1, ty+d1-d2+1);
@@ -135,7 +151,7 @@
 		col = fl_contrast(col, selection_color());
 	}
 	fl_color(col);
-	fl_draw(s, X + CHECK_SIZE + 8, Y + tsize - 1);
+	fl_draw(s, X + CHECK_SIZE + 8, flag_oxy ? Y + tsize : Y + tsize - 1);
 }
 
 void Fl_Check_Browser::item_select(void *v, int state) {
@@ -310,8 +326,34 @@
 }
 
 int Fl_Check_Browser::handle(int event) {
-  if (event==FL_PUSH)
-    deselect();
+  switch (event) {
+   case FL_PUSH: {
+    if (Fl::event_button() == FL_LEFT_MOUSE) {
+     int X, Y;
+     int xx, yy, ww, hh, dx, dy;
+
+     dx = Fl::box_dy(box())*2;
+     dy = Fl::box_dy(box())*2;
+     X = Fl::event_x(); Y = Fl::event_y();
+     xx = x()+dx; yy = y()+dy; ww = x()+w()-(dx*2); hh = y()+h()-(dy*2);
+
+     if (hscrollbar.visible()) hh -= hscrollbar.h();
+     if (scrollbar.visible()) ww -= scrollbar.w();
+
+     if (X >= xx && Y >= yy && X < ww && Y < hh) {
+      void *item = NULL;
+      if ((item = find_item(Fl::event_y())) != NULL) {
+       Fl_Widget::take_focus();
+       Fl_Browser_::select(item, !item_selected(item), 1);
+       return 0;
+      }
+     }
+    }
+    break;
+   }
+   default: break;
+  }
+
   return Fl_Browser_::handle(event);
 }
 
Index: src/Fl_Choice.cxx
===================================================================
--- src/Fl_Choice.cxx	(revision 10588)
+++ src/Fl_Choice.cxx	(working copy)
@@ -20,6 +20,7 @@
 #include <FL/Fl_Choice.H>
 #include <FL/fl_draw.H>
 #include "flstring.h"
+#include "fl_oxy.h"
 
 // Emulates the Forms choice widget.  This is almost exactly the same
 // as an Fl_Menu_Button.  The only difference is the appearance of the
@@ -26,6 +27,7 @@
 // button: it draws the text of the current pick and a down-arrow.
 
 void Fl_Choice::draw() {
+  bool flag_oxy = Fl::is_scheme("oxy");
   int dx = Fl::box_dx(FL_DOWN_BOX);
   int dy = Fl::box_dy(FL_DOWN_BOX);
   int H = h() - 2 * dy;
@@ -36,6 +38,11 @@
   int x1 = X + (W - 2 * w1 - 1) / 2;
   int y1 = Y + (H - w1 - 1) / 2;
 
+  if (flag_oxy) {
+   W = 17;
+   fl_push_clip(x(), y(), w(), h());
+  }
+
   if (Fl::scheme()) {
     draw_box(FL_UP_BOX, color());
 
@@ -46,16 +53,33 @@
       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);
+      if (flag_oxy) {
+       Fl_Color hlcol = 0x0;
+       x1 = x() + w() - dx/2 - W/2 - 5;
+       y1 = y()-1 + h()/2 - 1;
+       // draw down arrow
+       oxy_arrow(x1, y1, FL_ALIGN_BOTTOM, active_r(), color(), FL_BLACK);
+       // draw the divider
+       hlcol = fl_color_average(color(), FL_BLACK, 0.88);
+       fl_color(active_r()?hlcol:fl_inactive(hlcol));
+       fl_yxline(x1-5, y()+dy, y()+h()-dx-2);
+       hlcol = fl_lighter(color());
+       fl_color(active_r()?hlcol:fl_inactive(hlcol));
+       fl_yxline(x1-4, y()+dy, y()+h()-dx-2);
+      }
 
-      fl_color(fl_darker(color()));
-      fl_yxline(x1 - 7, y1 - 8, y1 + 8);
+      else {
+       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_lighter(color()));
-      fl_yxline(x1 - 6, y1 - 8, y1 + 8);
+       fl_color(fl_darker(color()));
+       fl_yxline(x1 - 7, 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 +102,7 @@
     // ERCO
     int xx = x() + dx, yy = y() + dy + 1, ww = w() - W, hh = H - 2;
 
-    fl_push_clip(xx, yy, ww, hh);
+    if (!flag_oxy) fl_push_clip(xx, yy, ww, hh);
 
     if ( Fl::scheme()) {
       Fl_Label l;
@@ -91,9 +115,13 @@
       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_oxy) {
+       fl_push_clip(xx, yy-1, ww-dx-2, h()-dy-dy/2-1);
+       l.draw(xx+2, yy, ww-dx, hh, FL_ALIGN_LEFT);
+       fl_pop_clip();
+      }
+      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
@@ -101,9 +129,12 @@
       fl_draw_shortcut = 0;
     }
 
-    fl_pop_clip();
+    if (!flag_oxy) fl_pop_clip();
+
+    if ( Fl::focus() == this ) draw_focus(box(), xx, yy-1, flag_oxy ? ww-dx/2 : ww, flag_oxy ? h()-dy-dy : hh);
   }
 
+  if (flag_oxy) fl_pop_clip();
   draw_label();
 }
 
@@ -155,6 +186,7 @@
 int Fl_Choice::handle(int e) {
   if (!menu() || !menu()->text) return 0;
   const Fl_Menu_Item* v;
+  bool flag_oxy = Fl::is_scheme("oxy");
   switch (e) {
   case FL_ENTER:
   case FL_LEAVE:
@@ -168,17 +200,17 @@
   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_oxy ? 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_oxy ? 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:
@@ -185,7 +217,7 @@
     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:
Index: src/Fl_Counter.cxx
===================================================================
--- src/Fl_Counter.cxx	(revision 10588)
+++ src/Fl_Counter.cxx	(working copy)
@@ -20,10 +20,12 @@
 #include <FL/Fl_Counter.H>
 #include <FL/Fl_Simple_Counter.H>
 #include <FL/fl_draw.H>
+#include "fl_oxy.h"
 
 void Fl_Counter::draw() {
   int i; Fl_Boxtype boxtype[5];
   Fl_Color selcolor;
+  bool flag_oxy = Fl::is_scheme("oxy");
 
   boxtype[0] = box();
   if (boxtype[0] == FL_UP_BOX) boxtype[0] = FL_DOWN_BOX;
@@ -36,7 +38,7 @@
 
   int xx[5], ww[5];
   if (type() == FL_NORMAL_COUNTER) {
-    int W = w()*15/100;
+    int W = flag_oxy? h() : w()*15/100;
     xx[1] = x();	 ww[1] = W;
     xx[2] = x()+1*W;     ww[2] = W;
     xx[0] = x()+2*W;     ww[0] = w()-4*W;
@@ -43,7 +45,7 @@
     xx[3] = x()+w()-2*W; ww[3] = W;
     xx[4] = x()+w()-1*W; ww[4] = W;
   } else {
-    int W = w()*20/100;
+    int W = flag_oxy? h() : w()*20/100;
     xx[1] = 0;	         ww[1] = 0;
     xx[2] = x();	 ww[2] = W;
     xx[0] = x()+W;	 ww[0] = w()-2*W;
@@ -64,17 +66,46 @@
   else
     selcolor = fl_inactive(labelcolor());
 
+  int x1 = 0, y1 = 0;
+
   if (type() == FL_NORMAL_COUNTER) {
-    draw_box(boxtype[1], xx[1], y(), ww[1], h(), color());
-    fl_draw_symbol("@-4<<", xx[1], y(), ww[1], h(), selcolor);
+   draw_box(boxtype[1], xx[1], y(), ww[1], h(), color());
+   if (flag_oxy) {
+    x1 = xx[1]+ww[1]/2-1; y1 = y()+h()/2-4;
+    // draw two left arrows
+    oxy_arrow(x1, y1, FL_ALIGN_LEFT, active_r(), color(), FL_BLACK);
+    x1+=4;
+    oxy_arrow(x1, y1, FL_ALIGN_LEFT, active_r(), color(), FL_BLACK);
+   }
+   else fl_draw_symbol("@-4<<", xx[1], y(), ww[1], h(), selcolor);
   }
+
   draw_box(boxtype[2], xx[2], y(), ww[2], h(), color());
-  fl_draw_symbol("@-4<",  xx[2], y(), ww[2], h(), selcolor);
+  if (flag_oxy) {
+   x1 = xx[2]+ww[2]/2+2; y1 = y()+h()/2-4;
+   // draw one left arrow
+    oxy_arrow(x1, y1, FL_ALIGN_LEFT, active_r(), color(), FL_BLACK);
+  }
+  else fl_draw_symbol("@-4<",  xx[2], y(), ww[2], h(), selcolor);
+
   draw_box(boxtype[3], xx[3], y(), ww[3], h(), color());
-  fl_draw_symbol("@-4>",  xx[3], y(), ww[3], h(), selcolor);
+  if (flag_oxy) {
+   x1 = xx[3]+ww[3]/2-2; y1 = y()+h()/2-4;
+   // draw one right arrow
+    oxy_arrow(x1, y1, FL_ALIGN_RIGHT, active_r(), color(), FL_BLACK);
+  }
+  else fl_draw_symbol("@-4>",  xx[3], y(), ww[3], h(), selcolor);
+
   if (type() == FL_NORMAL_COUNTER) {
     draw_box(boxtype[4], xx[4], y(), ww[4], h(), color());
-    fl_draw_symbol("@-4>>", xx[4], y(), ww[4], h(), selcolor);
+    if (flag_oxy) {
+     x1 = xx[4]+ww[4]/2-4; y1 = y()+h()/2-4;
+     // draw two right arrows
+     oxy_arrow(x1, y1, FL_ALIGN_RIGHT, active_r(), color(), FL_BLACK);
+     x1+=4;
+     oxy_arrow(x1, y1, FL_ALIGN_RIGHT, active_r(), color(), FL_BLACK);
+   }
+   else fl_draw_symbol("@-4>>", xx[4], y(), ww[4], h(), selcolor);
   }
 }
 
Index: src/Fl_Light_Button.cxx
===================================================================
--- src/Fl_Light_Button.cxx	(revision 10588)
+++ src/Fl_Light_Button.cxx	(working copy)
@@ -35,8 +35,10 @@
                             fl_inactive(selection_color())) : color();
   int W;
   int dx, dy;
+  bool flag_oxy = Fl::is_scheme("oxy");
 
-  W  = labelsize();
+  if (flag_oxy && down_box()) W = 15; // 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 +86,7 @@
 	    fl_color(fl_color_average(FL_WHITE, FL_SELECTION_COLOR, 0.2f));
 	  } else fl_color(col);
 
+      if (flag_oxy) tW = 5; // fixing size of circle
 	  switch (tW) {
 	    // Larger circles draw fine...
 	    default :
Index: src/Fl_Menu.cxx
===================================================================
--- src/Fl_Menu.cxx	(revision 10588)
+++ src/Fl_Menu.cxx	(working copy)
@@ -28,6 +28,7 @@
 #include <FL/fl_draw.H>
 #include <stdio.h>
 #include "flstring.h"
+#include "fl_oxy.h"
 
 /** Size of the menu starting from this menu item */
 int Fl_Menu_Item::size() const {
@@ -146,6 +147,7 @@
 /** Draws the menu item in bounding box x,y,w,h, optionally selects the item. */
 void Fl_Menu_Item::draw(int x, int y, int w, int h, const Fl_Menu_* m,
 			int selected) const {
+  bool flag_oxy = Fl::is_scheme("oxy");
   Fl_Label l;
   l.value   = text;
   l.image   = 0;
@@ -158,7 +160,7 @@
   Fl_Color color = m ? m->color() : FL_GRAY;
   if (selected) {
     Fl_Color r = m ? m->selection_color() : FL_SELECTION_COLOR;
-    Fl_Boxtype b = m && m->down_box() ? m->down_box() : FL_FLAT_BOX;
+    Fl_Boxtype b = flag_oxy ? FL_UP_BOX : (m && m->down_box() ? m->down_box() : FL_FLAT_BOX);
     if (fl_contrast(r,color)!=r) { // back compatibility boxtypes
       if (selected == 2) { // menu title
 	r = color;
@@ -182,6 +184,7 @@
   if (flags & (FL_MENU_TOGGLE|FL_MENU_RADIO)) {
     int d = (h - FL_NORMAL_SIZE + 1) / 2;
     int W = h - 2 * d;
+    if (flag_oxy) { W = 15; d--; } // 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);
@@ -196,6 +199,10 @@
 	  fl_color(fl_color_average(FL_WHITE, FL_SELECTION_COLOR, 0.2f));
 	} else fl_color(labelcolor_);
 
+	if (flag_oxy) {
+	  td = Fl::box_dx(FL_ROUND_DOWN_BOX) + 1;
+	  tW = 5; // fixing size of circle
+	}
 	switch (tW) {
 	  // Larger circles draw fine...
 	  default :
@@ -435,6 +442,7 @@
   int ww = W-2*BW-1;
   int yy = BW+1+n*itemheight;
   int hh = itemheight - LEADING;
+  bool flag_oxy = Fl::is_scheme("oxy");
 
   if (eraseit && n != selected) {
     fl_push_clip(xx+1, yy-(LEADING-2)/2, ww-2, hh+(LEADING-2));
@@ -449,7 +457,11 @@
     int sz = (hh-7)&-2;
     int y1 = yy+(hh-sz)/2;
     int x1 = xx+ww-sz-3;
-    fl_polygon(x1+2, y1, x1+2, y1+sz, x1+sz/2+2, y1+sz/2);
+    if (flag_oxy) {
+     x1+=(sz/2-BW*2-1);
+     y1=yy+hh/2-4; // 4 is half of arrow height
+     oxy_arrow(x1, y1, FL_ALIGN_RIGHT, active_r(), color(), (n==selected)?selection_color():FL_BLACK); // draw oxy arrow
+    } else fl_polygon(x1+2, y1, x1+2, y1+sz, x1+sz/2+2, y1+sz/2);
   } else if (m->shortcut_) {
     Fl_Font f = m->labelsize_ || m->labelfont_ ? (Fl_Font)m->labelfont_ :
                     button ? button->textfont() : FL_HELVETICA;
Index: src/Fl_Menu_Button.cxx
===================================================================
--- src/Fl_Menu_Button.cxx	(revision 10588)
+++ src/Fl_Menu_Button.cxx	(working copy)
@@ -19,8 +19,8 @@
 #include <FL/Fl.H>
 #include <FL/Fl_Menu_Button.H>
 #include <FL/fl_draw.H>
+#include "fl_oxy.h"
 
-
 static Fl_Menu_Button	*pressed_menu_button_ = 0;
 
 
@@ -29,14 +29,18 @@
   int H = (labelsize()-3)&-2;
   int X = x()+w()-H-Fl::box_dx(box())-Fl::box_dw(box())-1;
   int Y = y()+(h()-H)/2;
+  bool flag_oxy = Fl::is_scheme("oxy");
   draw_box(pressed_menu_button_ == this ? fl_down(box()) : box(), color());
   draw_label(x()+Fl::box_dx(box()), y(), X-x()+2, h());
   if (Fl::focus() == this) draw_focus();
   // ** if (box() == FL_FLAT_BOX) return; // for XForms compatibility
-  fl_color(active_r() ? FL_DARK3 : fl_inactive(FL_DARK3));
-  fl_line(X+H/2, Y+H, X, Y, X+H, Y);
-  fl_color(active_r() ? FL_LIGHT3 : fl_inactive(FL_LIGHT3));
-  fl_line(X+H, Y, X+H/2, Y+H);
+  if (flag_oxy) oxy_arrow(X, Y+3, FL_ALIGN_BOTTOM, active_r(), color(), FL_BLACK);
+  else {
+   fl_color(active_r() ? FL_DARK3 : fl_inactive(FL_DARK3));
+   fl_line(X+H/2, Y+H, X, Y, X+H, Y);
+   fl_color(active_r() ? FL_LIGHT3 : fl_inactive(FL_LIGHT3));
+   fl_line(X+H, Y, X+H/2, Y+H);
+  }
 }
 
 
Index: src/Fl_Scrollbar.cxx
===================================================================
--- src/Fl_Scrollbar.cxx	(revision 10588)
+++ src/Fl_Scrollbar.cxx	(working copy)
@@ -22,6 +22,7 @@
 #include <FL/fl_draw.H>
 #include <math.h>
 #include "flstring.h"
+#include "fl_oxy.h"
 
 #define INITIALREPEAT .5
 #define REPEAT .05
@@ -203,6 +204,7 @@
   int Y = y()+Fl::box_dy(box());
   int W = w()-Fl::box_dw(box());
   int H = h()-Fl::box_dh(box());
+  bool flag_oxy = Fl::is_scheme("oxy");
   if (horizontal()) {
     if (W < 3*H) {Fl_Slider::draw(X,Y,W,H); return;}
     Fl_Slider::draw(X+H,Y,W-2*H,H);
@@ -222,6 +224,12 @@
 	fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1-1, yy1+w1, x1+w1, yy1);
 	x1 += (W-H);
 	fl_polygon(x1, yy1, x1+1, yy1+w1, x1, yy1+2*w1, x1+w1, yy1+w1);
+      } else if (flag_oxy) {
+    x1 = X+H/2+2;
+    int y1 = Y+H/2-3-2;
+    oxy_arrow(x1, y1, FL_ALIGN_LEFT, active_r(), color(), FL_BLACK); // left arrow
+    x1 += (W-H)-4;
+    oxy_arrow(x1, y1, FL_ALIGN_RIGHT, active_r(), color(), FL_BLACK); // right arrow
       } else {
 	fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1, yy1);
 	x1 += (W-H);
@@ -248,7 +256,13 @@
 	yy1 += H-W;
 	fl_polygon(x1, yy1, x1+w1, yy1+1, x1+w1, yy1+w1);
 	fl_polygon(x1+w1, yy1+1, x1+2*w1, yy1, x1+w1, yy1+w1);
-      } else {
+      } else if (flag_oxy) {
+    x1 = X+W/2-4;
+    int y1 = Y+W/2+1;
+    oxy_arrow(x1, y1, FL_ALIGN_TOP, active_r(), color(), FL_BLACK); // top arrow
+    y1 += H-W-3;
+    oxy_arrow(x1, y1, FL_ALIGN_BOTTOM, active_r(), color(), FL_BLACK); // bottom arrow
+      }else {
 	fl_polygon(x1, yy1+w1, x1+2*w1, yy1+w1, x1+w1, yy1);
 	yy1 += H-W;
 	fl_polygon(x1, yy1, x1+w1, yy1+w1, x1+2*w1, yy1);
Index: src/Fl_Tabs.cxx
===================================================================
--- src/Fl_Tabs.cxx	(revision 10588)
+++ src/Fl_Tabs.cxx	(working copy)
@@ -104,14 +104,22 @@
   int H = h();
   int H2 = y();
   Fl_Widget*const* a = array();
+  bool flag_oxy = Fl::is_scheme("oxy");
+  int HT = 0, ls = 0;
   for (int i=children(); i--;) {
     Fl_Widget* o = *a++;
     if (o->y() < y()+H) H = o->y()-y();
     if (o->y()+o->h() > H2) H2 = o->y()+o->h();
+    if (flag_oxy && o->labelsize() > ls) {
+     // HACK : for preventing growing tab header height we are fixing it with biggest height of child labelsize + 10px
+     ls = o->labelsize();
+     fl_font(o->labelfont(), ls);
+     HT = fl_height()+10;
+    }
   }
   H2 = y()+h()-H2;
-  if (H2 > H) return (H2 <= 0) ? 0 : -H2;
-  else return (H <= 0) ? 0 : H;
+  if (H2 > H) return (H2 <= 0) ? 0 : (flag_oxy ? -HT : -H2);
+  else return (H <= 0) ? 0 : (flag_oxy ? HT : H);
 }
 
 /**
@@ -374,6 +382,7 @@
   int dy = Fl::box_dy(box());
   char prev_draw_shortcut = fl_draw_shortcut;
   fl_draw_shortcut = 1;
+  bool flag_oxy = Fl::is_scheme("oxy");
 
   Fl_Boxtype bt = (o==push_ &&!sel) ? fl_down(box()) : box();
 
@@ -388,7 +397,7 @@
 
     H += dh;
 
-    Fl_Color c = sel ? selection_color() : o->selection_color();
+    Fl_Color c = sel ? selection_color() : (flag_oxy ? fl_color_average(o->selection_color(), FL_BLACK, 0.90) : o->selection_color());
 
     draw_box(bt, x1, y() + yofs, W, H + 10 - yofs, c);
 
@@ -402,7 +411,7 @@
     // Restore the original label color...
     o->labelcolor(oc);
 
-    if (Fl::focus() == this && o->visible())
+    if (Fl::focus() == this && o->visible() && !flag_oxy)
       draw_focus(box(), x1, y(), W, H);
 
     fl_pop_clip();
@@ -414,7 +423,7 @@
 
     H += dh;
 
-    Fl_Color c = sel ? selection_color() : o->selection_color();
+    Fl_Color c = sel ? selection_color() : (flag_oxy ? fl_color_average(o->selection_color(), FL_BLACK, 0.90) : o->selection_color());
 
     draw_box(bt, x1, y() + h() - H - 10, W, H + 10 - yofs, c);
 
@@ -428,7 +437,7 @@
     // Restore the original label color...
     o->labelcolor(oc);
 
-    if (Fl::focus() == this && o->visible())
+    if (Fl::focus() == this && o->visible() && !flag_oxy)
       draw_focus(box(), x1, y() + h() - H, W, H);
 
     fl_pop_clip();
Index: src/Fl_Tree.cxx
===================================================================
--- src/Fl_Tree.cxx	(revision 10588)
+++ src/Fl_Tree.cxx	(working copy)
@@ -786,11 +786,15 @@
     int X = _tix + _prefs.marginleft() - _hscroll->value();
     int Y = _tiy + _prefs.margintop()  - _vscroll->value();
     int W = _tiw - X + _tix;
+    bool flag_oxy = Fl::is_scheme("oxy");
     // Adjust root's X/W if connectors off
     if (_prefs.connectorstyle() == FL_TREE_CONNECTOR_NONE) {
       X -= _prefs.openicon()->w();
       W += _prefs.openicon()->w();
     }
+    if (flag_oxy && _prefs.selectbox() != FL_UP_BOX) {
+     _prefs.selectbox(FL_UP_BOX); // for set scheme from env var's FLTK_SCHEME
+    }
     // Draw entire tree, starting with root
     fl_push_clip(_tix,_tiy,_tiw,_tih);
     {
@@ -897,6 +901,7 @@
   int cy = y() + Fl::box_dy(box());
   int cw = w() - Fl::box_dw(box());
   int ch = h() - Fl::box_dh(box());
+  bool flag_oxy = Fl::is_scheme("oxy");
   {
     // Handle group's bg
     if ( damage() & ~FL_DAMAGE_CHILD) {			// redraw entire widget?
@@ -915,10 +920,14 @@
       W += _prefs.openicon()->w();
     }
     int Ysave = Y;
-    fl_push_clip(cx,cy,cw,ch);
+    if (flag_oxy) {
+     fl_push_clip(cx,cy,_vscroll->visible()?cw-_vscroll->w():cw,ch);
+     if (_prefs.selectbox() != FL_UP_BOX) _prefs.selectbox(FL_UP_BOX); // for set scheme from env var's FLTK_SCHEME
+    }
+    else fl_push_clip(cx,cy,cw,ch);
     {
       fl_font(_prefs.labelfont(), _prefs.labelsize());
-      _root->draw(X, Y, W, this,
+      _root->draw(X, Y, (flag_oxy && _vscroll->visible()) ? W-_vscroll->w() : W, this,
 		  (Fl::focus()==this)?_item_focus:0,	// show focus item ONLY if Fl_Tree has focus
 		  _prefs);
     }
Index: src/Fl_Tree_Item.cxx
===================================================================
--- src/Fl_Tree_Item.cxx	(revision 10588)
+++ src/Fl_Tree_Item.cxx	(working copy)
@@ -9,6 +9,7 @@
 #include <FL/Fl_Tree_Item.H>
 #include <FL/Fl_Tree_Prefs.H>
 #include <FL/Fl_Tree.H>
+#include "fl_oxy.h"
 
 //////////////////////
 // Fl_Tree_Item.cxx
@@ -1016,14 +1017,18 @@
   Fl_Color bg = drawbgcolor();
   const Fl_Tree_Prefs &prefs = tree()->prefs();
   int xmax = label_x();
+  bool flag_oxy = Fl::is_scheme("oxy");
   // Background for this item, only if different from tree's bg
   if ( render && (bg != tree()->color() || is_selected()) ) {
+    int n_x = (label_x() < _tree->_tix) ? _tree->_tix : label_x(),
+    n_w = (label_w() > _tree->_tiw) ? _tree->_tiw : label_w();
     if ( is_selected() ) {			// Selected? Use selectbox() style
-      fl_draw_box(prefs.selectbox(),
-      		  label_x(), label_y(), label_w(), label_h(), bg);
+      if (flag_oxy) fl_draw_box(prefs.selectbox(), n_x, label_y()+1, n_w, label_h(), bg);
+      else fl_draw_box(prefs.selectbox(), label_x(), label_y(), label_w(), label_h(), bg);
     } else {					// Not Selected? use plain filled rectangle
       fl_color(bg);
-      fl_rectf(label_x(), label_y(), label_w(), label_h());
+      if (flag_oxy) fl_rectf(n_x, label_y()+1, n_w, label_h());
+      else fl_rectf(label_x(), label_y(), label_w(), label_h());
     }
     if ( widget() ) widget()->damage(FL_DAMAGE_ALL);	// if there's a child widget, we just damaged it
   }
@@ -1070,6 +1075,7 @@
   int tree_bot = tree_top + tree()->_tih;
   int H = calc_item_height(prefs);	// height of item
   int H2 = H + prefs.linespacing();	// height of item with line spacing
+  bool flag_oxy = Fl::is_scheme("oxy");
 
   // Update the xywh of this item
   _xywh[0] = X;
@@ -1151,13 +1157,20 @@
     //    'clipped' is an optimization to prevent drawing anything offscreen.
     //
     if ( drawthis ) {						// draw this item at all?
+      int n_bg_x = label_x(), n_bg_w = label_w();
+      int off_x = label_x()-_tree->_tix;
+      if (off_x < 0) off_x = 0;
+      if (flag_oxy && _tree->_hscroll->visible() && (_tree->_tix > label_x()-off_x)) {
+       n_bg_x = _tree->_tix; n_bg_w = _tree->_tiw;
+      }
+
       if ( (tree()->damage() & ~FL_DAMAGE_CHILD) || !render ) {	// non-child damage?
 	// Draw connectors
 	if ( render && prefs.connectorstyle() != FL_TREE_CONNECTOR_NONE ) {
 	  // Horiz connector between center of icon and text
 	  // if this is root, the connector should not dangle in thin air on the left
-	  if (is_root()) draw_horizontal_connector(hconn_x_center, hconn_x2, item_y_center, prefs);
-	  else           draw_horizontal_connector(hconn_x, hconn_x2, item_y_center, prefs);
+	  if (is_root()) draw_horizontal_connector(hconn_x_center, flag_oxy ? hconn_x2-5 : hconn_x2, item_y_center, prefs);
+	  else           draw_horizontal_connector(hconn_x, flag_oxy ? hconn_x2-5 : hconn_x2, item_y_center, prefs);
 	  // Small vertical line down to children
 	  if ( has_children() && is_open() )
 	    draw_vertical_connector(hconn_x_center, item_y_center, Y+H2, prefs);
@@ -1171,9 +1184,11 @@
 	if ( render && has_children() && prefs.showcollapse() ) {
 	  // Draw icon image
 	  if ( is_open() ) {
-	    prefs.closeicon()->draw(icon_x,icon_y);
+        if (flag_oxy) oxy_arrow(uicon_x-11, icon_y+3, FL_ALIGN_BOTTOM, is_active(), _labelbgcolor == 0xffffffff ? _tree->color() : _labelbgcolor);
+	    else prefs.closeicon()->draw(icon_x,icon_y);
 	  } else {
-	    prefs.openicon()->draw(icon_x,icon_y);
+        if (flag_oxy) oxy_arrow(uicon_x-8, icon_y+1, FL_ALIGN_RIGHT, is_active(), _labelbgcolor == 0xffffffff ? _tree->color() : _labelbgcolor);
+	    else prefs.openicon()->draw(icon_x,icon_y);
 	  }
 	}
 	// Draw user icon (if any)
@@ -1180,11 +1195,15 @@
 	if ( render && usericon() ) {
 	  // Item has user icon? Use it
 	  int uicon_y = item_y_center - (usericon()->h() >> 1);
-	  usericon()->draw(uicon_x,uicon_y);
+      if (flag_oxy) fl_push_clip(n_bg_x+4, label_y(), n_bg_w-8, label_h());
+	  usericon()->draw(flag_oxy ? uicon_x+4 : uicon_x,uicon_y);
+      if (flag_oxy) fl_pop_clip();
 	} else if ( render && prefs.usericon() ) {
 	  // Prefs has user icon? Use it
 	  int uicon_y = item_y_center - (prefs.usericon()->h() >> 1);
-	  prefs.usericon()->draw(uicon_x,uicon_y);
+      if (flag_oxy) fl_push_clip(n_bg_x+4, label_y(), n_bg_w-8, label_h());
+	  prefs.usericon()->draw(flag_oxy ? uicon_x+4 : uicon_x,uicon_y);
+      if (flag_oxy) fl_pop_clip();
 	}
 	// Draw item's content
 	xmax = draw_item_content(render);
@@ -1203,7 +1222,8 @@
            Fl::visible_focus() && 
 	   Fl::focus() == tree() &&
 	   prefs.selectmode() != FL_TREE_SELECT_NONE ) {
-	draw_item_focus(FL_NO_BOX,fg,bg,label_x()+1,label_y()+1,label_w()-1,label_h()-1);
+    if (flag_oxy) draw_item_focus(FL_UP_BOX,fg,bg,n_bg_x,label_y()+1,n_bg_w+1,label_h()+1);
+	else draw_item_focus(FL_NO_BOX,fg,bg,label_x()+1,label_y()+1,label_w()-1,label_h()-1);
       }
     }			// end drawthis
   }			// end clipped
@@ -1257,6 +1277,7 @@
   int tree_bot = tree_top + tree->h();
   int H = calc_item_height(prefs);	// height of item
   int H2 = H + prefs.linespacing();	// height of item with line spacing
+  bool flag_oxy = Fl::is_scheme("oxy");
 
   // Update the xywh of this item
   _xywh[0] = X;
@@ -1355,8 +1376,8 @@
 	if ( prefs.connectorstyle() != FL_TREE_CONNECTOR_NONE ) {
 	  // Horiz connector between center of icon and text
 	  // if this is root, the connector should not dangle in thin air on the left
-	  if (is_root()) draw_horizontal_connector(hconn_x_center, hconn_x2, item_y_center, prefs);
-	  else           draw_horizontal_connector(hconn_x, hconn_x2, item_y_center, prefs);
+	  if (is_root()) draw_horizontal_connector(hconn_x_center, flag_oxy ? hconn_x2-5 : hconn_x2, item_y_center, prefs);
+      else           draw_horizontal_connector(hconn_x, flag_oxy ? hconn_x2-5 : hconn_x2, item_y_center, prefs);
 	  // Small vertical line down to children
 	  if ( has_children() && is_open() )
 	    draw_vertical_connector(hconn_x_center, item_y_center, Y+H2, prefs);
@@ -1370,15 +1391,17 @@
 	if ( has_children() && prefs.showcollapse() ) {
 	  // Draw icon image
 	  if ( is_open() ) {
-	    prefs.closeicon()->draw(icon_x,icon_y);
+	    if (flag_oxy) oxy_arrow(uicon_x-11, icon_y+3, FL_ALIGN_BOTTOM, is_active(), _labelbgcolor == 0xffffffff ? tree->color() : _labelbgcolor);
+        else prefs.closeicon()->draw(icon_x,icon_y);
 	  } else {
-	    prefs.openicon()->draw(icon_x,icon_y);
+	    if (flag_oxy) oxy_arrow(uicon_x-8, icon_y+1, FL_ALIGN_RIGHT, is_active(), _labelbgcolor == 0xffffffff ? tree->color() : _labelbgcolor);
+        else prefs.openicon()->draw(icon_x,icon_y);
 	  }
 	}
 	// Draw background for the item.. only if different from tree's bg color
 	if ( bg != tree->color() || is_selected() ) {
 	  if ( is_selected() ) {			// Selected? Use selectbox() style
-	    fl_draw_box(prefs.selectbox(),bg_x,bg_y,bg_w,bg_h,bg);
+	    fl_draw_box(prefs.selectbox(),bg_x,flag_oxy ? bg_y+1 : bg_y,bg_w,bg_h,bg);
 	  } else {					// Not Selected? use plain filled rectangle
 	    fl_color(bg);
 	    fl_rectf(bg_x,bg_y,bg_w,bg_h);
@@ -1389,11 +1412,11 @@
 	if ( usericon() ) {
 	  // Item has user icon? Use it
 	  int uicon_y = item_y_center - (usericon()->h() >> 1);
-	  usericon()->draw(uicon_x,uicon_y);
+	  usericon()->draw(flag_oxy ? uicon_x+4 : uicon_x,uicon_y);
 	} else if ( prefs.usericon() ) {
 	  // Prefs has user icon? Use it
 	  int uicon_y = item_y_center - (prefs.usericon()->h() >> 1);
-	  prefs.usericon()->draw(uicon_x,uicon_y);
+	  prefs.usericon()->draw(flag_oxy ? uicon_x+4 : uicon_x,uicon_y);
 	}
 	// Draw label
 #if FLTK_ABI_VERSION >= 10301
@@ -1407,7 +1430,9 @@
 	  fl_color(fg);
 	  fl_font(_labelfont, _labelsize);
 	  int label_y = Y+(H/2)+(_labelsize/2)-fl_descent()/2;
+      if (flag_oxy) fl_push_clip(bg_x+4, bg_y, bg_w-8, bg_h);
 	  fl_draw(_label, label_x, label_y);
+      if (flag_oxy) fl_pop_clip();
 	}
       }			// end non-child damage
       // Draw child FLTK widget?
@@ -1421,7 +1446,7 @@
            Fl::visible_focus() && 
 	   Fl::focus() == tree &&
 	   prefs.selectmode() != FL_TREE_SELECT_NONE ) {
-	draw_item_focus(FL_NO_BOX,fg,bg,bg_x+1,bg_y+1,bg_w-1,bg_h-1);
+	draw_item_focus(flag_oxy ? FL_UP_BOX : FL_NO_BOX,fg,bg,flag_oxy ? bg_x : bg_x+1,bg_y+1,flag_oxy ? bg_w+1 : bg_w-1,flag_oxy ? bg_h+1 : bg_h-1);
       }
     }			// end drawthis
   }			// end clipped
Index: src/Fl_Tree_Prefs.cxx
===================================================================
--- src/Fl_Tree_Prefs.cxx	(revision 10588)
+++ src/Fl_Tree_Prefs.cxx	(working copy)
@@ -164,6 +164,8 @@
     _selectbox = _FL_GTK_THIN_UP_BOX;
   } else if (Fl::is_scheme("plastic")) {
     _selectbox = _FL_PLASTIC_THIN_UP_BOX;
+  } else if (Fl::is_scheme("oxy")) {
+   _selectbox = _FL_OXY_UP_BOX;
   }
 }
 
Index: src/Fl_Widget.cxx
===================================================================
--- src/Fl_Widget.cxx	(revision 10588)
+++ src/Fl_Widget.cxx	(working copy)
@@ -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_oxy = Fl::is_scheme("oxy");
+  if (flag_oxy) W++;
   switch (B) {
     case FL_DOWN_BOX:
     case FL_DOWN_FRAME:
     case FL_THIN_DOWN_BOX:
     case FL_THIN_DOWN_FRAME:
-      X ++;
+      if (!flag_oxy) X ++;
       Y ++;
     default:
       break;
Index: src/Fl_get_system_colors.cxx
===================================================================
--- src/Fl_get_system_colors.cxx	(revision 10588)
+++ src/Fl_get_system_colors.cxx	(working copy)
@@ -27,6 +27,7 @@
 #include <FL/Fl_Pixmap.H>
 #include <FL/Fl_Tiled_Image.H>
 #include "tile.xpm"
+#include "fl_oxy.h"
 
 #if defined(WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__)
 // Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
@@ -307,6 +308,7 @@
     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, "gleam")) s = strdup("gleam");
+    else if (!fl_ascii_strcasecmp(s, "oxy")) s = strdup("oxy");
     else s = 0;
   }
   if (scheme_) free((void*)scheme_);
@@ -414,6 +416,27 @@
 
     // Use slightly thinner scrollbars...
     Fl::scrollbar_size(15);
+  } else if (scheme_ && !fl_ascii_strcasecmp(scheme_, "oxy")) {
+    // Oxy scheme
+    if (scheme_bg_) {
+      delete scheme_bg_;
+      scheme_bg_ = (Fl_Image *)0;
+    }
+
+    set_boxtype(FL_UP_FRAME,        FL_OXY_UP_FRAME);
+    set_boxtype(FL_DOWN_FRAME,      FL_OXY_DOWN_FRAME);
+    set_boxtype(FL_THIN_UP_FRAME,   FL_OXY_THIN_UP_FRAME);
+    set_boxtype(FL_THIN_DOWN_FRAME, FL_OXY_THIN_DOWN_FRAME);
+
+    set_boxtype(FL_UP_BOX,          FL_OXY_UP_BOX);
+    set_boxtype(FL_DOWN_BOX,        FL_OXY_DOWN_BOX);
+    set_boxtype(FL_THIN_UP_BOX,     FL_OXY_THIN_UP_BOX);
+    set_boxtype(FL_THIN_DOWN_BOX,   FL_OXY_THIN_DOWN_BOX);
+    set_boxtype(_FL_ROUND_UP_BOX,   FL_OXY_ROUND_UP_BOX);
+    set_boxtype(_FL_ROUND_DOWN_BOX, FL_OXY_ROUND_DOWN_BOX);
+
+    // Use slightly thinner scrollbars...
+    Fl::scrollbar_size(15);
   } else {
     // Use the standard FLTK look-n-feel...
     if (scheme_bg_) {
Index: src/Makefile
===================================================================
--- src/Makefile	(revision 10588)
+++ src/Makefile	(working copy)
@@ -145,6 +145,7 @@
 	fl_oval_box.cxx \
 	fl_overlay.cxx \
 	fl_overlay_visual.cxx \
+	fl_oxy.cxx \
 	fl_plastic.cxx \
 	fl_read_image.cxx \
 	fl_rect.cxx \
Index: src/fl_boxtype.cxx
===================================================================
--- src/fl_boxtype.cxx	(revision 10588)
+++ src/fl_boxtype.cxx	(working copy)
@@ -28,6 +28,7 @@
 #include <FL/Fl.H>
 #include <FL/Fl_Widget.H>
 #include <FL/fl_draw.H>
+#include "fl_oxy.h"
 #include <config.h>
 
 ////////////////////////////////////////////////////////////////
@@ -301,6 +302,18 @@
   {fl_down_box,		1,1,2,2,0}, // _FL_GLEAM_THIN_DOWN_BOX
   {fl_up_box,	       	2,2,4,4,0}, // _FL_GLEAM_ROUND_UP_BOX
   {fl_down_box,		2,2,4,4,0}, // _FL_GLEAM_ROUND_DOWN_BOX
+  {oxy_up_box,		2,2,4,4,0}, // _FL_OXY_UP_BOX,
+  {oxy_down_box,	2,2,4,4,0}, // _FL_OXY_DOWN_BOX,
+  {oxy_up_frame,	2,2,4,4,0}, // _FL_OXY_UP_FRAME,
+  {oxy_down_frame,	2,2,4,4,0}, // _FL_OXY_DOWN_FRAME,
+  {oxy_thin_up_box,	1,1,2,2,0}, // _FL_OXY_THIN_UP_BOX,
+  {oxy_thin_down_box,	1,1,2,2,0}, // _FL_OXY_THIN_DOWN_BOX,
+  {oxy_thin_up_frame,	1,1,2,2,0}, // _FL_OXY_THIN_UP_FRAME,
+  {oxy_thin_down_frame,	1,1,2,2,0}, // _FL_OXY_THIN_DOWN_FRAME,
+  {oxy_round_up_box,	4,4,8,8,0}, // _FL_OXY_ROUND_UP_BOX,
+  {oxy_round_down_box,	4,4,8,8,0}, // _FL_OXY_ROUND_DOWN_BOX,
+  {oxy_button_up_box,	2,2,4,4,0}, // _FL_OXY_BUTTON_UP_BOX,
+  {oxy_button_down_box,	2,2,4,4,0}, // _FL_OXY_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
Index: src/fl_oxy.cxx
===================================================================
--- src/fl_oxy.cxx	(revision 0)
+++ src/fl_oxy.cxx	(working copy)
@@ -0,0 +1,455 @@
+//
+// "Oxy 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_oxy_cxx
+#define fl_oxy_cxx
+
+#include <FL/Fl.H>
+#include <FL/fl_draw.H>
+#include "fl_oxy.h"
+
+
+#define GROFF 0.45f // gradients offset
+
+
+
+void oxy_arrow(int x1, int y1, Fl_Align a, bool ac, Fl_Color c, Fl_Color hc) {
+
+ Fl_Color hlcol = 0x0;
+
+  switch (a) {
+   case FL_ALIGN_TOP: {
+
+    hlcol = fl_color_average(c, hc, 0.38);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    fl_line(x1, y1, x1+4, y1-4);
+    fl_line(x1+4, y1-4, x1+8, y1);
+
+    hlcol = fl_color_average(c, hc, 0.58);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    y1++;
+    fl_line(x1+1, y1-1, x1+4, y1-4);
+    fl_line(x1+4, y1-4, x1+7, y1-1);
+
+    hlcol = fl_color_average(c, hc, 0.78);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    y1-=2;
+    fl_line(x1, y1, x1+4, y1-4);
+    fl_line(x1+4, y1-4, x1+8, y1);
+
+    break;
+   }
+
+   case FL_ALIGN_BOTTOM: {
+    L_BOTTOM:
+
+    hlcol = fl_color_average(c, hc, 0.38);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    fl_line(x1, y1, x1+4, y1+4);
+    fl_line(x1+4, y1+4, x1+8, y1);
+
+    hlcol = fl_color_average(c, hc, 0.58);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    y1--;
+    fl_line(x1+1, y1+1, x1+4, y1+4);
+    fl_line(x1+4, y1+4, x1+7, y1+1);
+
+    hlcol = fl_color_average(c, hc, 0.78);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    y1+=2;
+    fl_line(x1, y1, x1+4, y1+4);
+    fl_line(x1+4, y1+4, x1+8, y1);
+
+    break;
+   }
+
+   case FL_ALIGN_LEFT: {
+
+    hlcol = fl_color_average(c, hc, 0.38);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    fl_line(x1, y1, x1-4, y1+4);
+    fl_line(x1-4, y1+4, x1, y1+8);
+
+    hlcol = fl_color_average(c, hc, 0.78);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    x1--;
+    fl_line(x1, y1, x1-4, y1+4);
+    fl_line(x1-4, y1+4, x1, y1+8);
+
+    hlcol = fl_color_average(c, hc, 0.58);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    x1+=2;
+    fl_line(x1-1, y1+1, x1-4, y1+4);
+    fl_line(x1-4, y1+4, x1-1, y1+7);
+
+    break;
+   }
+
+   case FL_ALIGN_RIGHT: {
+
+    hlcol = fl_color_average(c, hc, 0.38);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    fl_line(x1, y1, x1+4, y1+4);
+    fl_line(x1+4, y1+4, x1, y1+8);
+
+    hlcol = fl_color_average(c, hc, 0.58);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    x1--;
+    fl_line(x1+1, y1+1, x1+4, y1+4);
+    fl_line(x1+4, y1+4, x1+1, y1+7);
+
+    hlcol = fl_color_average(c, hc, 0.78);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    x1+=2;
+    fl_line(x1, y1, x1+4, y1+4);
+    fl_line(x1+4, y1+4, x1, y1+8);
+
+    break;
+   }
+   default: { goto L_BOTTOM; break; }
+  }
+
+}
+
+
+
+
+  // draw gradient from South to Nord
+  static void _oxy_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 _oxy_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 _oxy_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 _oxy_button_down_box_(int x, int y, int w, int h, Fl_Color bg) {
+  bg = fl_color_average(bg, FL_BLACK, 0.88);
+  int half_h = h/2, xw = x+w-1;
+  float gradoffset = 0.15f, stepoffset = (1.0/(float)half_h);
+  Fl_Color c = fl_color_average(bg, FL_WHITE, 0.5);
+  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 rounded box
+  static void _oxy_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 {
+ OXY_UP_BOX,
+ OXY_DOWN_BOX,
+
+ OXY_UP_BUTTON,
+ OXY_DOWN_BUTTON,
+
+ OXY_UP_ROUND,
+ OXY_DOWN_ROUND,
+
+ OXY_UP_FRAME,
+ OXY_DOWN_FRAME
+};
+
+
+static Fl_Color oxy_color(Fl_Color c) {
+  if (Fl::draw_box_active()) { return c; }
+  else { return fl_inactive(c); }
+}
+
+
+
+static void oxy_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 != OXY_UP_FRAME && typebox != OXY_DOWN_FRAME) {
+
+  X = x+1; Y = y+1; W = w-2; H = h-2;
+
+  switch (typebox) {
+   case OXY_UP_BOX: { _oxy_up_box_(X, Y, W, H, oxy_color(c)); break; }
+   case OXY_DOWN_BOX: { _oxy_down_box_(X, Y, W, H, oxy_color(c)); break; }
+   case OXY_UP_BUTTON: { _oxy_button_up_box_(X, Y, W, H, oxy_color(c)); break; }
+   case OXY_DOWN_BUTTON: { _oxy_button_down_box_(X, Y, W, H, oxy_color(c)); break; }
+   case OXY_UP_ROUND:
+   case OXY_DOWN_ROUND:
+    _oxy_rounded_box_(x, y, w, h, oxy_color(fl_color_average(c, FL_WHITE, 0.82)));
+    break;
+   default: { break; }
+  }
+ }
+
+ Fl_Color leftline = c, topline = c, rightline = c, bottomline = c;
+
+ if (typebox == OXY_UP_ROUND || typebox == OXY_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 == OXY_UP_BOX || typebox == OXY_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 == OXY_DOWN_BOX || typebox == OXY_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);
+ }
+
+ else if (typebox == OXY_UP_BUTTON || typebox == OXY_DOWN_BUTTON) {
+  topline = leftline = rightline = bottomline = fl_color_average(c, FL_BLACK, 0.85);
+ }
+
+ // draw border
+ if (typebox != OXY_UP_ROUND && typebox != OXY_DOWN_ROUND) {
+  // bottom side
+  fl_color(oxy_color(bottomline));
+  fl_line(x+1, y+h-1, x+w-2, y+h-1);
+  // right side
+  fl_color(oxy_color(rightline));
+  fl_line(x+w-1, y+1, x+w-1, y+h-2);
+  // top side
+  fl_color(oxy_color(topline));
+  fl_line(x+1, y, x+w-2, y);
+  // left side
+  fl_color(oxy_color(leftline));
+  fl_line(x, y+1, x, y+h-2);
+ }
+
+ // draw shadow
+ if (is_shadow) {
+
+  if (typebox == OXY_UP_ROUND) {
+   topline = fl_color_average(c, FL_WHITE, 0.35);
+   bottomline = fl_color_average(c, FL_BLACK, 0.94);
+  }
+
+  else if (typebox == OXY_DOWN_ROUND) {
+   topline = fl_color_average(c, FL_BLACK, 0.94);
+   bottomline = fl_color_average(c, FL_WHITE, 0.35);
+  }
+
+  else if (typebox == OXY_UP_BOX || typebox == OXY_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 == OXY_DOWN_BOX || typebox == OXY_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 == OXY_UP_BOX || typebox == OXY_UP_FRAME) {
+   fl_color(oxy_color(topline));
+   X=x+1;Y=y+1;X1=xw2;Y1=y+1;
+   fl_line(X, Y, X1, Y1); // top line
+
+   fl_color(oxy_color(leftline));
+   X=x+1;Y=yh2;X1=x+1;Y1=y+2;
+   fl_line(X, Y, X1, Y1); // left line
+
+   fl_color(oxy_color(rightline));
+   X=xw2;Y=y+2;X1=xw2;Y1=yh2;
+   fl_line(X, Y, X1, Y1); // right line
+
+   fl_color(oxy_color(bottomline));
+   X=xw2;Y=yh2;X1=x+1;Y1=yh2;
+   fl_line(X, Y, X1, Y1); // bottom line
+  }
+
+  else if (typebox == OXY_DOWN_BOX || typebox == OXY_DOWN_FRAME) {
+   fl_color(oxy_color(topline));
+   X=x+1;Y=y+1;X1=xw2;Y1=y+1;
+   fl_line(X, Y, X1, Y1); // top line
+
+   fl_color(oxy_color(leftline));
+   X=x+1;Y=yh2;X1=x+1;Y1=y+2;
+   fl_line(X, Y, X1, Y1); // left line
+
+   fl_color(oxy_color(rightline));
+   X=xw2;Y=y+2;X1=xw2;Y1=yh2;
+   fl_line(X, Y, X1, Y1); // right line
+
+   fl_color(oxy_color(bottomline));
+   X=xw3;Y=yh2;X1=x+2;Y1=yh2;
+   fl_line(X, Y, X1, Y1); // bottom line
+  }
+
+  else if (typebox == OXY_UP_ROUND || typebox == OXY_DOWN_ROUND) {
+
+   int Radius, smooth;
+   int 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_offset2 = smooth/2;
+
+   Radius = smooth*3;
+   if (Radius == 3) { Radius = 4; }
+
+   fl_color(oxy_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 == OXY_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 == OXY_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(oxy_color(bottomline));
+   fl_arc(x+1, yh1-Radius, Radius, Radius, 200.0, 270.0); // left-bottom corner
+   if (typebox == OXY_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 == OXY_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 oxy_draw(...)'
+
+
+
+void oxy_button_up_box(int x, int y, int w, int h, Fl_Color c) { oxy_draw(x, y, w, h, c, OXY_UP_BUTTON, true); }
+void oxy_button_down_box(int x, int y, int w, int h, Fl_Color c) { oxy_draw(x, y, w, h, c, OXY_DOWN_BUTTON, true); }
+void oxy_up_box(int x, int y, int w, int h, Fl_Color c) { oxy_draw(x, y, w, h, c, OXY_UP_BOX, true); }
+void oxy_down_box(int x, int y, int w, int h, Fl_Color c) { oxy_draw(x, y, w, h, c, OXY_DOWN_BOX, true); }
+void oxy_thin_up_box(int x, int y, int w, int h, Fl_Color c) { oxy_draw(x, y, w, h, c, OXY_UP_BOX, false); }
+void oxy_thin_down_box(int x, int y, int w, int h, Fl_Color c) { oxy_draw(x, y, w, h, c, OXY_DOWN_BOX, false); }
+void oxy_up_frame(int x, int y, int w, int h, Fl_Color c) { oxy_draw(x, y, w, h, c, OXY_UP_FRAME, true); }
+void oxy_down_frame(int x, int y, int w, int h, Fl_Color c) { oxy_draw(x, y, w, h, c, OXY_DOWN_FRAME, true); }
+void oxy_thin_up_frame(int x, int y, int w, int h, Fl_Color c) { oxy_draw(x, y, w, h, c, OXY_UP_FRAME, false); }
+void oxy_thin_down_frame(int x, int y, int w, int h, Fl_Color c) { oxy_draw(x, y, w, h, c, OXY_DOWN_FRAME, false); }
+void oxy_round_up_box(int x, int y, int w, int h, Fl_Color c) { oxy_draw(x, y, w, h, c, OXY_UP_ROUND, true); }
+void oxy_round_down_box(int x, int y, int w, int h, Fl_Color c) { oxy_draw(x, y, w, h, c, OXY_DOWN_ROUND, true); }
+
+
+
+extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
+
+Fl_Boxtype fl_define_FL_OXY_UP_BOX() {
+
+ fl_internal_boxtype(_FL_OXY_UP_BOX, oxy_up_box);
+ fl_internal_boxtype(_FL_OXY_DOWN_BOX, oxy_down_box);
+ fl_internal_boxtype(_FL_OXY_UP_FRAME, oxy_up_frame);
+ fl_internal_boxtype(_FL_OXY_DOWN_FRAME, oxy_down_frame);
+ fl_internal_boxtype(_FL_OXY_THIN_UP_BOX, oxy_thin_up_box);
+ fl_internal_boxtype(_FL_OXY_THIN_DOWN_BOX, oxy_thin_down_box);
+ fl_internal_boxtype(_FL_OXY_THIN_UP_FRAME, oxy_thin_up_frame);
+ fl_internal_boxtype(_FL_OXY_THIN_DOWN_FRAME, oxy_thin_down_frame);
+ fl_internal_boxtype(_FL_OXY_ROUND_UP_BOX, oxy_round_up_box);
+ fl_internal_boxtype(_FL_OXY_ROUND_DOWN_BOX, oxy_round_down_box);
+ fl_internal_boxtype(_FL_OXY_BUTTON_UP_BOX, oxy_button_up_box);
+ fl_internal_boxtype(_FL_OXY_BUTTON_DOWN_BOX, oxy_button_down_box);
+
+ return _FL_OXY_UP_BOX;
+
+}
+
+#endif
Index: src/fl_oxy.h
===================================================================
--- src/fl_oxy.h	(revision 0)
+++ src/fl_oxy.h	(working copy)
@@ -0,0 +1,39 @@
+//
+// "Oxy 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_oxy_h
+#define fl_oxy_h
+
+#include <FL/Fl.H>
+
+// to draw arrow, a - direction the arrow, ac - active widget?, c - color the arrow, hc - lighting the arrrow
+extern FL_EXPORT void oxy_arrow(int x1, int y1, Fl_Align a, bool ac, Fl_Color c, Fl_Color hc=FL_BLACK);
+
+// draw boxes
+extern FL_EXPORT void oxy_up_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_down_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_up_frame(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_down_frame(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_thin_up_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_thin_down_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_thin_up_frame(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_thin_down_frame(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_round_up_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_round_down_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_button_up_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_button_down_box(int x, int y, int w, int h, Fl_Color c);
+
+#endif
Index: test/demo.cxx
===================================================================
--- test/demo.cxx	(revision 10588)
+++ test/demo.cxx	(working copy)
@@ -73,6 +73,7 @@
   choice->add("none");
   choice->add("gtk+");
   choice->add("gleam");
+  choice->add("oxy");
   choice->add("plastic");
   choice->callback((Fl_Callback *)doscheme);
   Fl::scheme(NULL);
@@ -79,7 +80,8 @@
   if (!Fl::scheme()) choice->value(0);
   else if (!strcmp(Fl::scheme(), "gtk+")) choice->value(1);
   else if (!strcmp(Fl::scheme(), "gleam")) choice->value(2);
-  else if (!strcmp(Fl::scheme(), "plastic")) choice->value(3);
+  else if (!strcmp(Fl::scheme(), "oxy")) choice->value(3);
+  else if (!strcmp(Fl::scheme(), "plastic")) choice->value(4);
   else choice->value(0);
   obj = new Fl_Button(10,15,330,380); obj->type(FL_HIDDEN_BUTTON);
   obj->callback(doback);
Index: test/unittest_schemes.cxx
===================================================================
--- test/unittest_schemes.cxx	(revision 10588)
+++ test/unittest_schemes.cxx	(working copy)
@@ -63,6 +63,7 @@
     schemechoice->add("plastic");
     schemechoice->add("gtk+");
     schemechoice->add("gleam");
+    schemechoice->add("oxy");
     schemechoice->value(0);
     schemechoice->labelfont(FL_HELVETICA_BOLD);
     const char *name = Fl::scheme();
@@ -70,6 +71,7 @@
            if ( strcmp(name, "plastic") == 0) { schemechoice->value(1); }
       else if ( strcmp(name, "gtk+")    == 0) { schemechoice->value(2); }
       else if ( strcmp(name, "gleam")   == 0) { schemechoice->value(3); }
+      else if ( strcmp(name, "oxy")     == 0) { schemechoice->value(4); }
     }
     schemechoice->callback(SchemeChoice_CB, (void*)this);
 
