diff -U 3 -H -d -r -N -- FL/Enumerations.H FL/Enumerations.H
--- FL/Enumerations.H	2012-12-10 00:45:57.000000000 +0600
+++ FL/Enumerations.H	2013-10-05 05:22:33.824868322 +0600
@@ -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_OXY_UP_BOX,
+  _FL_OXY_DOWN_BOX,
+  _FL_OXY_UP_FRAME,
+  _FL_OXY_DOWN_FRAME,
+  _FL_OXY_THIN_UP_BOX,
+  _FL_OXY_THIN_DOWN_BOX,
+  _FL_OXY_THIN_UP_FRAME,
+  _FL_OXY_THIN_DOWN_FRAME,
+  _FL_OXY_ROUND_UP_BOX,
+  _FL_OXY_ROUND_DOWN_BOX,
+  _FL_OXY_BUTTON_UP_BOX,
+  _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();
@@ -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_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.
diff -U 3 -H -d -r -N -- FL/Fl_Input_Choice.H FL/Fl_Input_Choice.H
--- FL/Fl_Input_Choice.H	2012-12-09 23:45:24.000000000 +0600
+++ FL/Fl_Input_Choice.H	2013-10-05 05:22:33.825868323 +0600
@@ -1,5 +1,5 @@
 //
-// "$Id: Fl_Input_Choice.H 9740 2012-12-09 17:45:24Z manolo $"
+// "$Id: Fl_Input_Choice.H 9203 2011-12-08 18:18:51Z greg.ercolano $"
 //
 // An input/chooser widget.
 //            ______________  ____
@@ -9,6 +9,7 @@
 //
 // Copyright 1998-2010 by Bill Spitzak and others.
 // Copyright 2004 by Greg Ercolano.
+// 2013 by Dmitrij K was made adapting for theme Oxy
 //
 // 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
@@ -27,196 +28,97 @@
 #ifndef Fl_Input_Choice_H
 #define Fl_Input_Choice_H
 
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
+#include <FL/Fl_Menu_.H>
 #include <FL/Fl_Input.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/fl_draw.H>
-#include <string.h>
-
-/**
-  A combination of the input widget and a menu button.
-
-  \image html input_choice.jpg
-  \image latex input_choice.jpg "Fl_Input_Choice widget" width=6cm
-
-  The user can either type into the input area, or use the
-  menu button chooser on the right to choose an item which loads
-  the input area with the selected text.
-  <P>
-  The application can directly access both the internal Fl_Input 
-  and Fl_Menu_Button widgets respectively using the input() and menubutton()
-  accessor methods.
-*/
-class FL_EXPORT Fl_Input_Choice : public Fl_Group {
-  // Private class to handle slightly 'special' behavior of menu button
-  class InputMenuButton : public Fl_Menu_Button {
-    void draw() {
-      draw_box(FL_UP_BOX, color());
-      fl_color(active_r() ? labelcolor() : fl_inactive(labelcolor()));
-      int xc = x()+w()/2, yc=y()+h()/2;
-      fl_polygon(xc-5,yc-3,xc+5,yc-3,xc,yc+3);
-      if (Fl::focus() == this) draw_focus();
-    }
-  public:
-    InputMenuButton(int X,int Y,int W,int H,const char*L=0) : 
-	Fl_Menu_Button(X, Y, W, H, L) { box(FL_UP_BOX); }
-  };
-
-  Fl_Input *inp_;
-  InputMenuButton *menu_;
-
-  static void menu_cb(Fl_Widget*, void *data) { 
-    Fl_Input_Choice *o=(Fl_Input_Choice *)data;
-    Fl_Widget_Tracker wp(o);
-    const Fl_Menu_Item *item = o->menubutton()->mvalue();
-    if (item && item->flags & (FL_SUBMENU|FL_SUBMENU_POINTER)) return;	// ignore submenus
-    if (!strcmp(o->inp_->value(), o->menu_->text()))
-    {
-      o->Fl_Widget::clear_changed();
-      if (o->when() & FL_WHEN_NOT_CHANGED)
-	o->do_callback();
-    }
-    else
-    {
-      o->inp_->value(o->menu_->text());
-      o->inp_->set_changed();
-      o->Fl_Widget::set_changed();
-      if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
-	o->do_callback();
-    }
-    
-    if (wp.deleted()) return;
-
-    if (o->callback() != default_callback)
-    {
-      o->Fl_Widget::clear_changed();
-      o->inp_->clear_changed();
-    }
-  }
-
-  static void inp_cb(Fl_Widget*, void *data) { 
-    Fl_Input_Choice *o=(Fl_Input_Choice *)data;
-    Fl_Widget_Tracker wp(o);
-    if (o->inp_->changed()) {
-      o->Fl_Widget::set_changed();
-      if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
-	o->do_callback();
-    } else {
-      o->Fl_Widget::clear_changed();
-      if (o->when() & FL_WHEN_NOT_CHANGED)
-	o->do_callback();
-    }
-    
-    if (wp.deleted()) return;
-
-    if (o->callback() != default_callback)
-      o->Fl_Widget::clear_changed();
-  }
-
-  // Custom resize behavior -- input stretches, menu button doesn't
-  inline int inp_x() { return(x() + Fl::box_dx(box())); }
-  inline int inp_y() { return(y() + Fl::box_dy(box())); }
-  inline int inp_w() { return(w() - Fl::box_dw(box()) - 20); }
-  inline int inp_h() { return(h() - Fl::box_dh(box())); }
+#include <FL/Fl_Nav_Button.H>
 
-  inline int menu_x() { return(x() + w() - 20 - Fl::box_dx(box())); }
-  inline int menu_y() { return(y() + Fl::box_dy(box())); }
-  inline int menu_w() { return(20); }
-  inline int menu_h() { return(h() - Fl::box_dh(box())); }
 
-public:
-  /**
-    Creates a new Fl_Input_Choice widget using the given position, size,
-    and label string.
-    Inherited destructor destroys the widget and any values associated with it.
-  */
-  Fl_Input_Choice(int X,int Y,int W,int H,const char*L=0);
+class Fl_Input_Choice: public Fl_Menu_ {
+ Fl_Input input_;
+ Fl_Nav_Button button_;
+ public:
+ 
+  Fl_Input_Choice(int X, int Y, int W, int H, const char *L=0);
   
-  /** Adds an item to the menu.
-   You can access the more complex Fl_Menu_Button::add() methods 
-   (setting callbacks, userdata, etc), via menubutton(). Example:
-   \code
-   Fl_Input_Choice *choice = new Fl_Input_Choice(100,10,120,25,"Fonts");
-   Fl_Menu_Button *mb = choice->menubutton();             // use Fl_Input_Choice's Fl_Menu_Button
-   mb->add("Helvetica", 0, MyFont_CB,     (void*)mydata); // use Fl_Menu_Button's add() methods
-   mb->add("Courier",   0, MyFont_CB,     (void*)mydata);
-   mb->add("More..",    0, FontDialog_CB, (void*)mydata);
-   \endcode
-   */
-  void add(const char *s) { menu_->add(s);  }
-  /** Returns the combined changed() state of the input and menu button widget. */
-  int changed() const { return inp_->changed() | Fl_Widget::changed(); }
-  /** Clears the changed() state of both input and menu button widgets. */
-  void clear_changed() { 
-    inp_->clear_changed();
-    Fl_Widget::clear_changed();
-  }
-  /** Sets the changed() state of both input and menu button widgets
-   to the specfied value.*/
-  void set_changed() { 
-    inp_->set_changed();
-    // no need to call Fl_Widget::set_changed()
-  }
-  /** Removes all items from the menu. */
-  void clear() { menu_->clear(); }
-  /** Gets the box type of the menu button */
-  Fl_Boxtype down_box() const { return (menu_->down_box()); }
-  /** Sets the box type of the menu button */
-  void down_box(Fl_Boxtype b) { menu_->down_box(b); }
-  /** Gets the Fl_Menu_Item array used for the menu. */
-  const Fl_Menu_Item *menu() { return (menu_->menu()); }
-  /** Sets the Fl_Menu_Item array used for the menu. */
-  void menu(const Fl_Menu_Item *m) { menu_->menu(m); }
-  void resize(int X, int Y, int W, int H) {
-    Fl_Group::resize(X,Y,W,H);
-    inp_->resize(inp_x(), inp_y(), inp_w(), inp_h());
-    menu_->resize(menu_x(), menu_y(), menu_w(), menu_h());
+  inline virtual void draw(){
+   int dx = Fl::box_dx(box()), dy = Fl::box_dy(box()), dw = Fl::box_dw(box()), dh = Fl::box_dh(box());
+   int X = x(), Y = y(), W = w(), H = h();
+   fl_push_clip(X,Y,W,H);
+   draw_box(box(), color());
+   input_.damage_resize(X+dx, Y+dy, W-dw-18, H-dh);
+   button_.damage_resize(X+W-18-1, Y+dy/2, 18, H-dh/2);
+   fl_pop_clip();
   }
-  /// Gets the Fl_Input text field's text color.
-  Fl_Color textcolor() const { return (inp_->textcolor());}
-  /// Sets the Fl_Input text field's text color to \p c.
-  void textcolor(Fl_Color c) { inp_->textcolor(c);}
-  /// Gets the Fl_Input text field's font style.
-  Fl_Font textfont() const { return (inp_->textfont());}
-  /// Sets the Fl_Input text field's font style to \p f.
-  void textfont(Fl_Font f) { inp_->textfont(f);}
-  /// Gets the Fl_Input text field's font size
-  Fl_Fontsize textsize() const { return (inp_->textsize()); }
-  /// Sets the Fl_Input text field's font size to \p s.
-  void textsize(Fl_Fontsize s) { inp_->textsize(s); }
-  /// Returns the Fl_Input text field's current contents.
-  const char* value() const { return (inp_->value()); }
-  /** Sets the Fl_Input text field's contents to \p val.
-   Does not affect the menu selection.*/
-  void value(const char *val) { inp_->value(val); }
-  /** Chooses item# \p val in the menu, and sets the Fl_Input text field
-   to that value. Any previous text is cleared.*/
-  void value(int val) {
-    menu_->value(val);
-    inp_->value(menu_->text(val));
+  
+  inline int changed() const { return input_.changed() | Fl_Menu_::changed(); }
+  inline void clear_changed() { input_.clear_changed(); Fl_Menu_::clear_changed(); }
+  inline void set_changed() { input_.set_changed(); }
+  
+  inline Fl_Input* input(){ return &input_; }
+  inline Fl_Nav_Button* button(){ return &button_; }
+  
+  inline void add(const char *l){ Fl_Menu_::add(l); }
+  inline void clear() { Fl_Menu_::clear(); }
+  inline const char* value() const { return (input_.value()); }
+  inline void value(const char *val) { input_.value(val); }
+  inline void value(int val) { Fl_Menu_::value(val); input_.value(Fl_Menu_::text(val)); }
+  
+ public:
+  
+  static void input_cb(Fl_Widget *w, void *d){
+   Fl_Input_Choice *o=(Fl_Input_Choice *)d;
+   Fl_Widget_Tracker wp(o);
+   
+   if (o->input()->changed()) {
+    o->Fl_Widget::set_changed();
+    if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE)){ o->do_callback(); }
+   }
+   
+   else {
+    o->Fl_Widget::clear_changed();
+    if (o->when() & FL_WHEN_NOT_CHANGED){ o->do_callback(); }
+   }
+   
+   if (wp.deleted()){ return; }
+   if (o->callback() != default_callback){ o->Fl_Widget::clear_changed(); }
   }
-  /** Returns a pointer to the internal Fl_Menu_Button widget.
-   This can be used to access any of the methods of the menu button, e.g.
-   \code
-   Fl_Input_Choice *choice = new Fl_Input_Choice(100,10,120,25,"Choice:");
-   [..]
-   // Print all the items in the choice menu
-   for ( int t=0; t<choice->menubutton()->size(); t++ ) {
-       const Fl_Menu_Item &item = choice->menubutton()->menu()[t];
-       printf("item %d -- label=%s\n", t, item.label() ? item.label() : "(Null)");
+  
+  static void menu_cb(Fl_Widget *w, void *d) {
+   Fl_Input_Choice *o=(Fl_Input_Choice *)d;
+   Fl_Widget_Tracker wp(o);
+   const Fl_Menu_Item *item = NULL;
+   
+   if (Fl::scheme() || fl_contrast(o->textcolor(), FL_BACKGROUND2_COLOR) != o->textcolor()) {
+    item = o->menu()->pulldown(o->x(),o-> y(), o->w(), o->h(), 0, o);
    }
-   \endcode
-  */
-  Fl_Menu_Button *menubutton() { return menu_; }
-  /** Returns a pointer to the internal Fl_Input widget.
-   This can be used to directly access all of the Fl_Input widget's
-   methods.*/
-  Fl_Input *input() { return inp_; }
+   
+   else {
+    Fl_Color c = o->color();
+    o->color(FL_BACKGROUND2_COLOR);
+    item = o->menu()->pulldown(o->x(),o-> y(), o->w(), o->h(), 0, o);
+    o->color(c);
+   }
+   
+   if (!item){ return; }
+   if (item->flags & (FL_SUBMENU|FL_SUBMENU_POINTER)){ return; } // ignore submenus
+   if ( !strcmp(o->input()->value(), item->label())) {
+    o->Fl_Widget::clear_changed();
+    if (o->when() & FL_WHEN_NOT_CHANGED){ o->do_callback(); }
+   }
+   
+   else {
+    o->input()->value(item->label());
+    o->input()->set_changed();
+    o->Fl_Widget::set_changed();
+    if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE)){ o->do_callback(); }
+   }
+   if (wp.deleted()){ return; }
+   if (o->callback() != default_callback){
+    o->Fl_Widget::clear_changed();
+    o->input()->clear_changed();
+   }
+  }
+  
 };
 
-#endif // !Fl_Input_Choice_H
-
-//
-// End of "$Id: Fl_Input_Choice.H 9740 2012-12-09 17:45:24Z manolo $".
-//
+#endif
diff -U 3 -H -d -r -N -- FL/Fl_Nav_Button.H FL/Fl_Nav_Button.H
--- FL/Fl_Nav_Button.H	1970-01-01 05:00:00.000000000 +0500
+++ FL/Fl_Nav_Button.H	2013-10-05 05:22:33.825868323 +0600
@@ -0,0 +1,242 @@
+//
+// Navigation button (written by "Dmitrij K" <kdiman at live dot ru>) for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 by Bill Spitzak and others.
+//
+// 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_Nav_Button_H
+#define Fl_Nav_Button_H
+
+#include "Fl_Button.H"
+#include "Fl_Repeat_Button.H"
+#include "fl_draw.H"
+
+extern FL_EXPORT void oxy_arrow(int x1, int y1, Fl_Align a, bool ac, Fl_Color c, Fl_Color hc=FL_BLACK);
+
+class Fl_Nav_Repeat_Button : public Fl_Repeat_Button {
+ Fl_Color _hlcol;
+ bool _light;
+ Fl_Align _al;
+public:
+ inline void light(bool flag){ if(!(_light = flag)){ _hlcol = FL_BLACK; } }
+ inline bool light(){ return _light; }
+ inline Fl_Nav_Repeat_Button(int x, int y, int w, int h, const char* l=0):Fl_Repeat_Button(x,y,w,h,l) {
+  _hlcol = FL_BLACK;
+  _light = false;
+  align(FL_ALIGN_BOTTOM);
+  box(FL_THIN_UP_BOX);
+  down_box(FL_THIN_DOWN_BOX);
+ }
+ inline void align(Fl_Align a){
+  bool flag_oxy = (Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy"));
+  if(a == FL_ALIGN_TOP || a == FL_ALIGN_BOTTOM || a == FL_ALIGN_RIGHT || a == FL_ALIGN_LEFT){ _al = a; }
+  if(flag_oxy){ Fl_Repeat_Button::align(a); label(""); return; }
+  switch(a){
+    case FL_ALIGN_TOP:{ Fl_Repeat_Button::align(FL_ALIGN_CENTER); Fl_Repeat_Button::label("@-42<"); break; }
+    case FL_ALIGN_BOTTOM:{ Fl_Repeat_Button::align(FL_ALIGN_CENTER); Fl_Repeat_Button::label("@-42>"); break; }
+    case FL_ALIGN_RIGHT:{ Fl_Repeat_Button::align(FL_ALIGN_CENTER); Fl_Repeat_Button::label("@-45>"); break; }
+    case FL_ALIGN_LEFT:{ Fl_Repeat_Button::align(FL_ALIGN_CENTER); Fl_Repeat_Button::label("@-45<"); break; }
+    default:{ Fl_Repeat_Button::align(a); break; }
+   }
+ }
+ inline virtual void draw(){
+  bool flag_oxy = (Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy"));
+  Fl_Align a = Fl_Repeat_Button::align();
+  
+  if(!flag_oxy){
+   align(a);
+   Fl_Repeat_Button::draw();
+   return;
+  }
+  //else if(*label()){ label(""); }
+  
+  //Fl_Color hlcol = 0x0;
+  int dx = Fl::box_dx(FL_DOWN_BOX);
+  //int dy = Fl::box_dy(FL_DOWN_BOX);
+  int W = w();
+  int H = h();
+  int x1;
+  int y1;
+  
+  if (type() == FL_HIDDEN_BUTTON) return;
+  Fl_Color col = value() ? selection_color() : color();
+  draw_box(value() ? (down_box()?down_box():fl_down(box())) : box(), col);
+  draw_backdrop();
+  
+  switch(_al){
+   case FL_ALIGN_TOP:{
+    x1 = x()+W/2-4;
+    y1 = y()+H/2+1;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   
+   case FL_ALIGN_BOTTOM:{
+    L_BOTTOM:
+    x1 = x()+W/2-4;
+    y1 = y()+H/2-3;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   
+   case FL_ALIGN_LEFT:{
+    x1 = x()+W/2+2;
+    y1 = y()+H/2-4-1;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   
+   case FL_ALIGN_RIGHT:{
+    x1 = x()+W/2-3+dx/2;
+    y1 = y()+H/2-4-1;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   default: { goto L_BOTTOM; break; }
+  }
+ }
+ 
+ virtual int handle(int event)
+    {
+     if(!_light){ return Fl_Repeat_Button::handle(event); }
+     bool flag_oxy = (Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy"));
+     if(!flag_oxy){ return Fl_Repeat_Button::handle(event); }
+     
+        switch (event)
+        {
+        case FL_ENTER:
+            _hlcol = fl_color_average(color(), FL_BLACK, 0.55);
+            Fl_Repeat_Button::redraw();
+            break;
+        case FL_LEAVE:
+            _hlcol = FL_BLACK;
+            Fl_Repeat_Button::redraw();
+            break;
+        }
+        return Fl_Repeat_Button::handle(event);
+    }
+};
+
+
+
+
+
+
+
+
+
+class Fl_Nav_Button : public Fl_Button {
+ Fl_Color _hlcol;
+ bool _light;
+ Fl_Align _al;
+public:
+ inline void light(bool flag){ if(!(_light = flag)){ _hlcol = FL_BLACK; } }
+ inline bool light(){ return _light; }
+ inline Fl_Nav_Button(int x, int y, int w, int h, const char* l=0):Fl_Button(x,y,w,h,l) {
+  _hlcol = FL_BLACK;
+  _light = false;
+  align(FL_ALIGN_TOP);
+  box(FL_THIN_UP_BOX);
+  down_box(FL_THIN_DOWN_BOX);
+ }
+ inline void align(Fl_Align a){
+  bool flag_oxy = (Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy"));
+  if(a == FL_ALIGN_TOP || a == FL_ALIGN_BOTTOM || a == FL_ALIGN_RIGHT || a == FL_ALIGN_LEFT){ _al = a; }
+  if(flag_oxy){ Fl_Button::align(a); label(""); return; }
+  switch(a){
+    case FL_ALIGN_TOP:{ Fl_Button::align(FL_ALIGN_CENTER); Fl_Button::label("@-42<"); break; }
+    case FL_ALIGN_BOTTOM:{ Fl_Button::align(FL_ALIGN_CENTER); Fl_Button::label("@-42>"); break; }
+    case FL_ALIGN_RIGHT:{ Fl_Button::align(FL_ALIGN_CENTER); Fl_Button::label("@-45>"); break; }
+    case FL_ALIGN_LEFT:{ Fl_Button::align(FL_ALIGN_CENTER); Fl_Button::label("@-45<"); break; }
+    default:{ Fl_Button::align(a); break; }
+   }
+ }
+ inline virtual void draw(){
+  bool flag_oxy = (Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy"));
+  Fl_Align a = Fl_Button::align();
+  
+  if(!flag_oxy){
+   align(a);
+   Fl_Button::draw();
+   return;
+  }
+  //else if(*label()){ label(""); }
+  
+  int dx = Fl::box_dx(FL_DOWN_BOX);
+  //int dy = Fl::box_dy(FL_DOWN_BOX);
+  int W = w();
+  int H = h();
+  int x1;
+  int y1;
+  
+  if (type() == FL_HIDDEN_BUTTON) return;
+  Fl_Color col = value() ? selection_color() : color();
+  draw_box(value() ? (down_box()?down_box():fl_down(box())) : box(), col);
+  draw_backdrop();
+  
+  switch(_al){
+   case FL_ALIGN_TOP:{
+    x1 = x()+W/2-4;
+    y1 = y()+H/2+1;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   
+   case FL_ALIGN_BOTTOM:{
+    L_BOTTOM:
+    x1 = x()+W/2-4;
+    y1 = y()+H/2-3;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   
+   case FL_ALIGN_LEFT:{
+    x1 = x()+W/2+2;
+    y1 = y()+H/2-4-1;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   
+   case FL_ALIGN_RIGHT:{
+    x1 = x()+W/2-3+dx/2;
+    y1 = y()+H/2-4-1;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   default: { goto L_BOTTOM; break; }
+  }
+ }
+ 
+ virtual int handle(int event)
+    {
+     if(!_light){ return Fl_Button::handle(event); }
+     bool flag_oxy = (Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy"));
+     if(!flag_oxy){ return Fl_Button::handle(event); }
+     
+        switch (event)
+        {
+        case FL_ENTER:
+            _hlcol = fl_color_average(color(), FL_BLACK, 0.55);
+            Fl_Button::redraw();
+            break;
+        case FL_LEAVE:
+            _hlcol = FL_BLACK;
+            Fl_Button::redraw();
+            break;
+        }
+        return Fl_Button::handle(event);
+    }
+ 
+};
+
+#endif
diff -U 3 -H -d -r -N -- FL/Fl_Spinner.H FL/Fl_Spinner.H
--- FL/Fl_Spinner.H	2012-11-07 02:46:14.000000000 +0600
+++ FL/Fl_Spinner.H	2013-10-05 05:26:51.728857476 +0600
@@ -29,10 +29,11 @@
 #  include <FL/Enumerations.H>
 #  include <FL/Fl_Group.H>
 #  include <FL/Fl_Input.H>
-#  include <FL/Fl_Repeat_Button.H>
+#  include <FL/Fl_Nav_Button.H>
 #  include <stdio.h>
 #  include <stdlib.h>
 
+#define BUTTON_ARROW_WIDTH 11 // width of buttons for incriment/decriment value
 
 /**
   This widget is a combination of the input
@@ -55,7 +56,7 @@
 protected:
 #endif
   Fl_Input	input_;			// Input field for the value
-  Fl_Repeat_Button
+  Fl_Nav_Repeat_Button
 		up_button_,		// Up button
 		down_button_;		// Down button
 
@@ -164,11 +165,10 @@
   void		range(double a, double b) { minimum_ = a; maximum_ = b; }
   void		resize(int X, int Y, int W, int H) {
 		  Fl_Group::resize(X,Y,W,H);
-
-		  input_.resize(X, Y, W - H / 2 - 2, H);
-		  up_button_.resize(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2);
-		  down_button_.resize(X + W - H / 2 - 2, Y + H - H / 2,
-		                      H / 2 + 2, H / 2);
+          input_.resize(X, Y, W - BUTTON_ARROW_WIDTH, H);
+          if(Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy")){ Y+=1; }
+          up_button_.resize(X + W - BUTTON_ARROW_WIDTH, Y, BUTTON_ARROW_WIDTH, H / 2);
+          down_button_.resize(X + W - BUTTON_ARROW_WIDTH, Y + H / 2, BUTTON_ARROW_WIDTH, H / 2);
 		}
   /**
     Sets or returns the amount to change the value when the user clicks a button. 
@@ -241,6 +241,10 @@
     Return the background color of the spinner widget's input field.
   */
   Fl_Color	color() const { return(input_.color()); }
+  
+  inline Fl_Input *input(){ return &input_; }
+  inline Fl_Nav_Repeat_Button *button_up(){ return &up_button_; }
+  inline Fl_Nav_Repeat_Button *button_down(){ return &down_button_; }
 };
 
 #endif // !Fl_Spinner_H
diff -U 3 -H -d -r -N -- fluid/Fl_Menu_Type.cxx fluid/Fl_Menu_Type.cxx
--- fluid/Fl_Menu_Type.cxx	2011-09-29 02:43:05.000000000 +0600
+++ fluid/Fl_Menu_Type.cxx	2013-10-05 05:22:33.827868322 +0600
@@ -541,7 +541,7 @@
 
 Fl_Type* Fl_Input_Choice_Type::click_test(int, int) {
   if (selected) return 0; // let user move the widget
-  Fl_Menu_* w = ((Fl_Input_Choice*)o)->menubutton();
+  Fl_Menu_* w = (Fl_Menu_*)o;
   if (!menusize) return 0;
   const Fl_Menu_Item* save = w->mvalue();
   w->value((Fl_Menu_Item*)0);
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 02:43:05.000000000 +0600
+++ fluid/Fl_Widget_Type.cxx	2013-10-05 05:22:33.828868322 +0600
@@ -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},
+{"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},
@@ -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},
+{"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}};
 
diff -U 3 -H -d -r -N -- fluid/alignment_panel.cxx fluid/alignment_panel.cxx
--- fluid/alignment_panel.cxx	2011-07-19 10:49:30.000000000 +0600
+++ fluid/alignment_panel.cxx	2013-10-05 05:22:33.829868322 +0600
@@ -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},
+ {"Oxy", 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 10:49:30.000000000 +0600
+++ fluid/alignment_panel.fl	2013-10-05 05:22:33.830868322 +0600
@@ -187,6 +187,10 @@
         label {GTK+}
         xywh {10 10 35 25}
       }
+      MenuItem {} {
+        label {Oxy}
+        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 11:12:30.000000000 +0600
+++ fluid/fluid.cxx	2013-10-05 05:22:33.831868322 +0600
@@ -1113,6 +1113,9 @@
     case 3 : // GTK+
       Fl::scheme("gtk+");
       break;
+    case 4 : // OXY
+      Fl::scheme("oxy");
+      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	2012-12-05 23:17:31.000000000 +0600
+++ src/Fl_Browser_.cxx	2013-10-05 05:22:33.832868322 +0600
@@ -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_oxy = (Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy"));
+	draw_focus(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;}
diff -U 3 -H -d -r -N -- src/Fl_Choice.cxx src/Fl_Choice.cxx
--- src/Fl_Choice.cxx	2011-07-19 10:49:30.000000000 +0600
+++ src/Fl_Choice.cxx	2013-10-05 05:22:33.832868322 +0600
@@ -20,16 +20,18 @@
 #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
 // button: it draws the text of the current pick and a down-arrow.
 
 void Fl_Choice::draw() {
+  bool flag_oxy = (Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy"));
   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_oxy) { W = 17; }
   int X = x() + w() - W - dx;
   int Y = y() + dy;
   int w1 = (W - 4) / 3; if (w1 < 1) w1 = 1;
@@ -46,16 +48,37 @@
       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 hlcol = 0x0;
+      
+      if (flag_oxy) { // if was seted the theme `oxy'
+       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(X, y()+dy, y()+h()-dx-2);
+       hlcol = fl_lighter(color());
+       fl_color(active_r()?hlcol:fl_inactive(hlcol));
+       fl_yxline(X+1, y()+dy, y()+h()-dx-2);
+       
+      } else {
+       x1 = x() + w() - 13 - dx;
+       y1 = y() + h() / 2; if (flag_oxy) { 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);
+       
+       hlcol = fl_darker(color());
+       fl_color(active_r()?hlcol:fl_inactive(hlcol));
+       fl_yxline(x1 - 7, y1 - 8, y1 + 8);
+       
+       hlcol = fl_lighter(color());
+       fl_color(active_r()?hlcol:fl_inactive(hlcol));
+       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 +101,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_oxy) 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 +115,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_oxy) 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 +126,9 @@
     }
 
     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);
+    
   }
 
   draw_label();
@@ -155,11 +182,12 @@
 int Fl_Choice::handle(int e) {
   if (!menu() || !menu()->text) return 0;
   const Fl_Menu_Item* v;
+  bool flag_oxy = (Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy"));
   switch (e) {
   case FL_ENTER:
   case FL_LEAVE:
-    return 1;
-
+   return 1;
+  
   case FL_KEYBOARD:
     if (Fl::event_key() != ' ' ||
         (Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT | FL_META))) return 0;
@@ -168,24 +196,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_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:
     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_Counter.cxx src/Fl_Counter.cxx
--- src/Fl_Counter.cxx	2012-07-24 10:37:22.000000000 +0600
+++ src/Fl_Counter.cxx	2013-10-05 05:22:33.833868322 +0600
@@ -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::scheme() && !strcasecmp(Fl::scheme(), "oxy"));
 
   boxtype[0] = box();
   if (boxtype[0] == FL_UP_BOX) boxtype[0] = FL_DOWN_BOX;
@@ -36,14 +38,14 @@
 
   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;
     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;
@@ -63,18 +65,50 @@
     selcolor = labelcolor();
   else
     selcolor = fl_inactive(labelcolor());
-
+  
+  int x1, y1;
+  
   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);
+   draw_box(boxtype[4], xx[4], y(), ww[4], h(), color());
+    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); }
   }
 }
 
diff -U 3 -H -d -r -N -- src/Fl_Group.cxx src/Fl_Group.cxx
--- src/Fl_Group.cxx	2012-07-24 10:37:22.000000000 +0600
+++ src/Fl_Group.cxx	2013-10-05 05:22:33.833868322 +0600
@@ -828,30 +828,30 @@
 }
 
 
-Fl_Input_Choice::Fl_Input_Choice (int X,int Y,int W,int H,const char*L) 
-: Fl_Group(X,Y,W,H,L) 
-{
-  Fl_Group::box(FL_DOWN_BOX);
-  align(FL_ALIGN_LEFT);				// default like Fl_Input
-  inp_ = new Fl_Input(inp_x(), inp_y(),
-                      inp_w(), inp_h());
-  inp_->callback(inp_cb, (void*)this);
-  inp_->box(FL_FLAT_BOX);		// cosmetic
-  inp_->when(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED);
-  menu_ = new InputMenuButton(menu_x(), menu_y(),
-                              menu_w(), menu_h());
-  menu_->callback(menu_cb, (void*)this);
-  menu_->box(FL_FLAT_BOX);				// cosmetic
-  end();
+Fl_Input_Choice::Fl_Input_Choice(int X, int Y, int W, int H, const char *L)
+ : Fl_Menu_(X,Y,W,H,L),
+ input_(X,Y,W,H,0),
+ button_(0,0,0,0,0) {
+  box(FL_DOWN_BOX);
+  down_box(FL_UP_BOX);
+  align(FL_ALIGN_LEFT);
+  
+  input_.callback(input_cb, (void*)this);
+  input_.box(FL_FLAT_BOX);
+  input_.when(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED);
+  
+  button_.box(FL_THIN_UP_BOX);
+  button_.down_box(FL_THIN_UP_BOX);
+  button_.align(FL_ALIGN_BOTTOM);
+  button_.callback(menu_cb, (void*)this);
 }
 
 
 Fl_Spinner::Fl_Spinner(int X, int Y, int W, int H, const char *L)
 : Fl_Group(X, Y, W, H, L),
-  input_(X, Y, W - H / 2 - 2, H),
-  up_button_(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2, "@-42<"),
-  down_button_(X + W - H / 2 - 2, Y + H - H / 2,
-               H / 2 + 2, H / 2, "@-42>") 
+  input_(X, Y, W - BUTTON_ARROW_WIDTH, H),
+  up_button_(X + W - BUTTON_ARROW_WIDTH, Y, BUTTON_ARROW_WIDTH, H / 2, "@-42<"), 
+  down_button_(X + W - BUTTON_ARROW_WIDTH, Y + H / 2, BUTTON_ARROW_WIDTH, H / 2, "@-42>") 
 {
   end();
   
@@ -869,8 +869,15 @@
   input_.callback((Fl_Callback *)sb_cb, this);
   
   up_button_.callback((Fl_Callback *)sb_cb, this);
+  up_button_.align(FL_ALIGN_TOP);
+  up_button_.box(FL_THIN_UP_BOX); up_button_.down_box(FL_THIN_DOWN_BOX);
   
   down_button_.callback((Fl_Callback *)sb_cb, this);
+  down_button_.align(FL_ALIGN_BOTTOM);
+  down_button_.box(FL_THIN_UP_BOX); down_button_.down_box(FL_THIN_DOWN_BOX);
+  
+  if(Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy")){ resize(X,Y,W,H); }
+  
 }
 
 
diff -U 3 -H -d -r -N -- src/Fl_Light_Button.cxx src/Fl_Light_Button.cxx
--- src/Fl_Light_Button.cxx	2012-12-07 22:29:49.000000000 +0600
+++ src/Fl_Light_Button.cxx	2013-10-05 05:22:33.834868321 +0600
@@ -36,7 +36,8 @@
   int W;
   int dx, dy;
 
-  W  = labelsize();
+  if(down_box() && Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy")){ W = 15; } // for theme `oxy' - 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(), "oxy")){ tW = 5; } // for theme `oxy' - 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-12-07 22:29:49.000000000 +0600
+++ src/Fl_Menu.cxx	2013-10-05 05:22:33.834868321 +0600
@@ -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::scheme() && !strcasecmp(Fl::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_OXY_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--; } // for theme `oxy' - 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);
@@ -189,7 +192,9 @@
 	int tW = (W - Fl::box_dw(FL_ROUND_DOWN_BOX)) / 2 + 1;
 	if ((W - tW) & 1) tW++;	// Make sure difference is even to center
 	int td = (W - tW) / 2;
+    
         if (Fl::scheme()) {
+         if(flag_oxy){ td = Fl::box_dx(FL_ROUND_DOWN_BOX) + 1; }
 	  if (!strcmp(Fl::scheme(), "gtk+")) {
 	    fl_color(FL_SELECTION_COLOR);
 	    tW --;
@@ -198,6 +203,8 @@
 	  } else fl_color(labelcolor_);
 	} else fl_color(labelcolor_);
 
+	if(flag_oxy){ tW = 5; } // for theme `oxy' - fixing size of inline circle
+
 	switch (tW) {
 	  // Larger circles draw fine...
 	  default :
@@ -277,6 +284,7 @@
 
   Fl::screen_work_area(scr_x, scr_y, scr_w, scr_h);
   if (!right_edge || right_edge > scr_x+scr_w) right_edge = scr_x+scr_w;
+  
 
   end();
   set_modal();
@@ -427,6 +435,8 @@
 void menuwindow::drawentry(const Fl_Menu_Item* m, int n, int eraseit) {
   if (!m) return; // this happens if -1 is selected item and redrawn
 
+  bool flag_oxy = (Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy"));
+
   int BW = Fl::box_dx(box());
   int xx = BW;
   int W = w();
@@ -436,7 +446,7 @@
 
   if (eraseit && n != selected) {
     fl_push_clip(xx+1, yy-(LEADING-2)/2, ww-2, hh+(LEADING-2));
-    draw_box(box(), 0, 0, w(), h(), button ? button->color() : color());
+    draw_box(box(), 0, 0, w(), h(), button ? button->color() : color()); // NOTE : bg-box for item
     fl_pop_clip();
   }
 
@@ -444,10 +454,16 @@
 
   // the shortcuts and arrows assume fl_color() was left set by draw():
   if (m->submenu()) {
-    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);
+   int sz = (hh-7)&-2;
+   int y1 = yy+(hh-sz)/2;
+   int x1 = xx+ww-sz-3;
+   
+   // draw arrows for the OXY theme
+   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);
+   } 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;
diff -U 3 -H -d -r -N -- src/Fl_Menu_Button.cxx src/Fl_Menu_Button.cxx
--- src/Fl_Menu_Button.cxx	2012-08-17 03:35:14.000000000 +0600
+++ src/Fl_Menu_Button.cxx	2013-10-05 05:22:33.835868320 +0600
@@ -19,7 +19,7 @@
 #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;
 
@@ -33,10 +33,20 @@
   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);
+  bool flag_oxy = (Fl::scheme() && !strcasecmp(Fl::scheme(), "oxy"));
+  
+  if(flag_oxy){
+    int x1 = X;
+    int y1 = Y+3;
+    oxy_arrow(x1, y1, 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);
+  }
 }
 
 
diff -U 3 -H -d -r -N -- src/Fl_Scrollbar.cxx src/Fl_Scrollbar.cxx
--- src/Fl_Scrollbar.cxx	2011-07-19 10:49:30.000000000 +0600
+++ src/Fl_Scrollbar.cxx	2013-10-05 05:22:33.835868320 +0600
@@ -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
@@ -222,10 +223,16 @@
 	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(Fl::scheme_ && !strcasecmp(Fl::scheme_, "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);
-	fl_polygon(x1, yy1, x1, yy1+2*w1, x1+w1, yy1+w1);
+    fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1, yy1);
+    x1 += (W-H);
+    fl_polygon(x1, yy1, x1, yy1+2*w1, x1+w1, yy1+w1);
       }
     }
   } else { // vertical
@@ -248,6 +255,12 @@
 	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 if(Fl::scheme_ && !strcasecmp(Fl::scheme_, "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;
diff -U 3 -H -d -r -N -- src/Fl_Tree_Prefs.cxx src/Fl_Tree_Prefs.cxx
--- src/Fl_Tree_Prefs.cxx	2012-11-07 02:46:14.000000000 +0600
+++ src/Fl_Tree_Prefs.cxx	2013-10-05 05:22:33.835868320 +0600
@@ -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(), "oxy") == 0 ) {
+      _selectbox = _FL_OXY_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 13:18:11.000000000 +0600
+++ src/Fl_Widget.cxx	2013-10-05 05:22:33.836868320 +0600
@@ -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::scheme() && !strcasecmp(Fl::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;
@@ -193,7 +195,7 @@
 #if defined(USE_X11) || defined(__APPLE_QUARTZ__)
   fl_line_style(FL_DOT);
   fl_rect(X + Fl::box_dx(B), Y + Fl::box_dy(B),
-          W - Fl::box_dw(B) - 1, H - Fl::box_dh(B) - 1);
+           W - Fl::box_dw(B) - 1, H - Fl::box_dh(B) - 1);
   fl_line_style(FL_SOLID);
 #elif defined(WIN32) 
   // Windows 95/98/ME do not implement the dotted line style, so draw
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-12-09 23:45:24.000000000 +0600
+++ src/Fl_get_system_colors.cxx	2013-10-05 05:22:33.836868320 +0600
@@ -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
@@ -289,6 +290,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, "oxy")) s = strdup("oxy");
     else s = 0;
   }
   if (scheme_) free((void*)scheme_);
@@ -375,6 +377,28 @@
 
     // Use slightly thinner scrollbars...
     Fl::scrollbar_size(15);
+  } else if (scheme_ && !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_) {
diff -U 3 -H -d -r -N -- src/Makefile src/Makefile
--- src/Makefile	2012-11-07 03:13:54.000000000 +0600
+++ src/Makefile	2013-10-05 05:22:33.837868321 +0600
@@ -135,6 +135,7 @@
 	fl_file_dir.cxx \
 	fl_font.cxx \
 	fl_gtk.cxx \
+	fl_oxy.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 10:49:30.000000000 +0600
+++ src/fl_boxtype.cxx	2013-10-05 05:22:33.837868321 +0600
@@ -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>
 
 ////////////////////////////////////////////////////////////////
@@ -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,
+  {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
diff -U 3 -H -d -r -N -- src/fl_oxy.cxx src/fl_oxy.cxx
--- src/fl_oxy.cxx	1970-01-01 05:00:00.000000000 +0500
+++ src/fl_oxy.cxx	2013-10-05 05:22:33.837868321 +0600
@@ -0,0 +1,451 @@
+//
+// "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){
+   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 _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);
+ }
+ 
+ // 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
diff -U 3 -H -d -r -N -- src/fl_oxy.h src/fl_oxy.h
--- src/fl_oxy.h	1970-01-01 05:00:00.000000000 +0500
+++ src/fl_oxy.h	2013-10-05 05:22:33.838868322 +0600
@@ -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
