summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBastian Wissler2009-04-01 18:57:04 +0200
committerBastian Wissler2009-04-01 18:57:04 +0200
commitfd33e001bb3ab76b6aef97f641ddcbee9ab384ef (patch)
treeeb485719b893df5068da6c063c094ae2aa32621b
parentvmchooser source: (diff)
downloadvmchooser-fd33e001bb3ab76b6aef97f641ddcbee9ab384ef.tar.gz
vmchooser-fd33e001bb3ab76b6aef97f641ddcbee9ab384ef.tar.xz
vmchooser-fd33e001bb3ab76b6aef97f641ddcbee9ab384ef.zip
vmchooser source:
* added fltk libs and includes git-svn-id: http://svn.openslx.org/svn/openslx/openslx-src-tools/vmchooser/trunk@2778 95ad53e4-c205-0410-b2fa-d234c58c8868
-rw-r--r--fltk/README17
-rw-r--r--fltk/fltk/Adjuster.h58
-rw-r--r--fltk/fltk/AlignGroup.h65
-rw-r--r--fltk/fltk/AnsiWidget.h92
-rw-r--r--fltk/fltk/BarGroup.h60
-rw-r--r--fltk/fltk/Box.h75
-rw-r--r--fltk/fltk/Browser.h214
-rw-r--r--fltk/fltk/Button.h57
-rw-r--r--fltk/fltk/CheckButton.h46
-rw-r--r--fltk/fltk/Choice.h52
-rw-r--r--fltk/fltk/Clock.h68
-rw-r--r--fltk/fltk/Color.h131
-rw-r--r--fltk/fltk/ColorChooser.h116
-rw-r--r--fltk/fltk/ComboBox.h108
-rw-r--r--fltk/fltk/Cursor.h39
-rw-r--r--fltk/fltk/CycleButton.h52
-rw-r--r--fltk/fltk/Dial.h64
-rw-r--r--fltk/fltk/Divider.h45
-rw-r--r--fltk/fltk/DoubleBufferWindow.h27
-rw-r--r--fltk/fltk/FL_API.h76
-rw-r--r--fltk/fltk/FL_VERSION.h39
-rw-r--r--fltk/fltk/FileBrowser.h95
-rw-r--r--fltk/fltk/FileChooser.h166
-rw-r--r--fltk/fltk/FileIcon.h114
-rw-r--r--fltk/fltk/FileInput.h67
-rw-r--r--fltk/fltk/FillDial.h44
-rw-r--r--fltk/fltk/FillSlider.h44
-rw-r--r--fltk/fltk/Flags.h112
-rw-r--r--fltk/fltk/FloatInput.h51
-rw-r--r--fltk/fltk/Font.h70
-rw-r--r--fltk/fltk/GlWindow.h108
-rw-r--r--fltk/fltk/Group.h115
-rw-r--r--fltk/fltk/HelpDialog.h66
-rw-r--r--fltk/fltk/HelpView.h201
-rw-r--r--fltk/fltk/HighlightButton.h45
-rw-r--r--fltk/fltk/Image.h116
-rw-r--r--fltk/fltk/Input.h132
-rw-r--r--fltk/fltk/InputBrowser.h100
-rw-r--r--fltk/fltk/IntInput.h42
-rw-r--r--fltk/fltk/InvisibleBox.h30
-rw-r--r--fltk/fltk/Item.h57
-rw-r--r--fltk/fltk/ItemGroup.h75
-rw-r--r--fltk/fltk/LabelType.h61
-rw-r--r--fltk/fltk/LightButton.h45
-rw-r--r--fltk/fltk/LineDial.h44
-rw-r--r--fltk/fltk/Menu.h152
-rw-r--r--fltk/fltk/MenuBar.h51
-rw-r--r--fltk/fltk/MenuBuild.h37
-rw-r--r--fltk/fltk/MenuWindow.h55
-rw-r--r--fltk/fltk/Monitor.h46
-rw-r--r--fltk/fltk/MultiBrowser.h47
-rw-r--r--fltk/fltk/MultiImage.h103
-rw-r--r--fltk/fltk/MultiLineInput.h48
-rw-r--r--fltk/fltk/MultiLineOutput.h47
-rw-r--r--fltk/fltk/NumericInput.h52
-rw-r--r--fltk/fltk/Output.h49
-rw-r--r--fltk/fltk/PackedGroup.h70
-rw-r--r--fltk/fltk/PixelType.h67
-rw-r--r--fltk/fltk/PopupMenu.h56
-rw-r--r--fltk/fltk/Preferences.h109
-rw-r--r--fltk/fltk/ProgressBar.h62
-rw-r--r--fltk/fltk/README8
-rw-r--r--fltk/fltk/RadioButton.h46
-rw-r--r--fltk/fltk/RadioItem.h41
-rw-r--r--fltk/fltk/RadioLightButton.h45
-rw-r--r--fltk/fltk/Rectangle.h122
-rw-r--r--fltk/fltk/RepeatButton.h47
-rw-r--r--fltk/fltk/ReturnButton.h41
-rw-r--r--fltk/fltk/ScrollGroup.h90
-rw-r--r--fltk/fltk/Scrollbar.h64
-rw-r--r--fltk/fltk/SecretInput.h47
-rw-r--r--fltk/fltk/ShapedWindow.h57
-rw-r--r--fltk/fltk/SharedImage.h236
-rw-r--r--fltk/fltk/Slider.h95
-rw-r--r--fltk/fltk/StatusBarGroup.h90
-rw-r--r--fltk/fltk/StringList.h72
-rw-r--r--fltk/fltk/Style.h207
-rw-r--r--fltk/fltk/StyleSet.h48
-rw-r--r--fltk/fltk/Symbol.h91
-rw-r--r--fltk/fltk/SystemMenuBar.h62
-rw-r--r--fltk/fltk/TabGroup.h141
-rw-r--r--fltk/fltk/TextBuffer.h285
-rw-r--r--fltk/fltk/TextDisplay.h358
-rw-r--r--fltk/fltk/TextEditor.h122
-rw-r--r--fltk/fltk/Threads.h206
-rw-r--r--fltk/fltk/ThumbWheel.h54
-rw-r--r--fltk/fltk/TiledGroup.h50
-rw-r--r--fltk/fltk/TiledImage.h50
-rw-r--r--fltk/fltk/ToggleButton.h44
-rw-r--r--fltk/fltk/ToggleItem.h41
-rw-r--r--fltk/fltk/Tooltip.h86
-rw-r--r--fltk/fltk/Valuator.h93
-rw-r--r--fltk/fltk/ValueInput.h58
-rw-r--r--fltk/fltk/ValueOutput.h45
-rw-r--r--fltk/fltk/ValueSlider.h52
-rw-r--r--fltk/fltk/Widget.h331
-rw-r--r--fltk/fltk/WidgetAssociation.h81
-rw-r--r--fltk/fltk/Window.h158
-rw-r--r--fltk/fltk/WizardGroup.h59
-rw-r--r--fltk/fltk/WordwrapInput.h45
-rw-r--r--fltk/fltk/WordwrapOutput.h45
-rw-r--r--fltk/fltk/ask.h80
-rw-r--r--fltk/fltk/compat/FL/Enumerations.H357
-rw-r--r--fltk/fltk/compat/FL/Fl.H67
-rw-r--r--fltk/fltk/compat/FL/Fl_Adjuster.H7
-rw-r--r--fltk/fltk/compat/FL/Fl_Box.H17
-rw-r--r--fltk/fltk/compat/FL/Fl_Browser.H24
-rw-r--r--fltk/fltk/compat/FL/Fl_Button.H16
-rw-r--r--fltk/fltk/compat/FL/Fl_Chart.H83
-rw-r--r--fltk/fltk/compat/FL/Fl_Check_Button.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Choice.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Clock.H18
-rw-r--r--fltk/fltk/compat/FL/Fl_Color_Chooser.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Counter.H15
-rw-r--r--fltk/fltk/compat/FL/Fl_Dial.H15
-rw-r--r--fltk/fltk/compat/FL/Fl_Double_Window.H18
-rw-r--r--fltk/fltk/compat/FL/Fl_File_Chooser.H16
-rw-r--r--fltk/fltk/compat/FL/Fl_Gl_Window.H9
-rw-r--r--fltk/fltk/compat/FL/Fl_Group.H16
-rw-r--r--fltk/fltk/compat/FL/Fl_Hold_Browser.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Hor_Slider.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Hor_Value_Slider.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Input.H27
-rw-r--r--fltk/fltk/compat/FL/Fl_Int_Input.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Light_Button.H9
-rw-r--r--fltk/fltk/compat/FL/Fl_Menu_.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Menu_Bar.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Menu_Button.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Menu_Item.H163
-rw-r--r--fltk/fltk/compat/FL/Fl_Output.H15
-rw-r--r--fltk/fltk/compat/FL/Fl_Overlay_Window.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Pack.H15
-rw-r--r--fltk/fltk/compat/FL/Fl_Pixmap.H9
-rw-r--r--fltk/fltk/compat/FL/Fl_Return_Button.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Roller.H13
-rw-r--r--fltk/fltk/compat/FL/Fl_Scroll.H15
-rw-r--r--fltk/fltk/compat/FL/Fl_Scrollbar.H13
-rw-r--r--fltk/fltk/compat/FL/Fl_Select_Browser.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Shared_Image.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Single_Window.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Slider.H24
-rw-r--r--fltk/fltk/compat/FL/Fl_Tabs.H15
-rw-r--r--fltk/fltk/compat/FL/Fl_Text_Buffer.H8
-rw-r--r--fltk/fltk/compat/FL/Fl_Text_Editor.H9
-rw-r--r--fltk/fltk/compat/FL/Fl_Tile.H15
-rw-r--r--fltk/fltk/compat/FL/Fl_Toggle_Button.H12
-rw-r--r--fltk/fltk/compat/FL/Fl_Toggle_Light_Button.H10
-rw-r--r--fltk/fltk/compat/FL/Fl_Valuator.H12
-rw-r--r--fltk/fltk/compat/FL/Fl_Value_Input.H7
-rw-r--r--fltk/fltk/compat/FL/Fl_Value_Output.H11
-rw-r--r--fltk/fltk/compat/FL/Fl_Value_Slider.H14
-rw-r--r--fltk/fltk/compat/FL/Fl_Widget.H19
-rw-r--r--fltk/fltk/compat/FL/Fl_Window.H22
-rw-r--r--fltk/fltk/compat/FL/README35
-rw-r--r--fltk/fltk/compat/FL/filename.H21
-rw-r--r--fltk/fltk/compat/FL/fl_ask.H13
-rw-r--r--fltk/fltk/compat/FL/fl_draw.H214
-rw-r--r--fltk/fltk/compat/FL/fl_message.H1
-rw-r--r--fltk/fltk/compat/FL/forms.H857
-rw-r--r--fltk/fltk/compat/FL/gl.h19
-rw-r--r--fltk/fltk/compat/FL/glut.H2
-rw-r--r--fltk/fltk/compat/FL/math.h1
-rw-r--r--fltk/fltk/compat/FL/menubar.h65
-rw-r--r--fltk/fltk/compat/FL/x.H24
-rw-r--r--fltk/fltk/damage.h52
-rw-r--r--fltk/fltk/dirent.h31
-rw-r--r--fltk/fltk/draw.h223
-rw-r--r--fltk/fltk/error.h24
-rw-r--r--fltk/fltk/events.h330
-rw-r--r--fltk/fltk/file_chooser.h47
-rw-r--r--fltk/fltk/filename.h131
-rw-r--r--fltk/fltk/fltk_cairo.h48
-rw-r--r--fltk/fltk/forms.h854
-rw-r--r--fltk/fltk/gl.h114
-rw-r--r--fltk/fltk/gl2opengl.h35
-rw-r--r--fltk/fltk/glut.h490
-rw-r--r--fltk/fltk/layout.h41
-rw-r--r--fltk/fltk/load_plugin.h14
-rw-r--r--fltk/fltk/mac.r13
-rw-r--r--fltk/fltk/math.h92
-rw-r--r--fltk/fltk/osx.h147
-rw-r--r--fltk/fltk/pnmImage.h45
-rw-r--r--fltk/fltk/rgbImage.h50
-rw-r--r--fltk/fltk/run.h93
-rw-r--r--fltk/fltk/show_colormap.h36
-rw-r--r--fltk/fltk/string.h89
-rw-r--r--fltk/fltk/string.h.in130
-rw-r--r--fltk/fltk/utf.h54
-rw-r--r--fltk/fltk/visual.h56
-rw-r--r--fltk/fltk/win32.h195
-rw-r--r--fltk/fltk/x.h47
-rw-r--r--fltk/fltk/x11.h185
-rw-r--r--fltk/fltk/xbmImage.h50
-rw-r--r--fltk/fltk/xpmImage.h59
-rw-r--r--fltk/lib/README34
-rwxr-xr-xfltk/make.sh4
196 files changed, 14865 insertions, 0 deletions
diff --git a/fltk/README b/fltk/README
new file mode 100644
index 0000000..a871081
--- /dev/null
+++ b/fltk/README
@@ -0,0 +1,17 @@
+
+
+USED REVISION:
+
+Output von 'svn info':
+
+URL: http://svn.easysw.com/public/fltk/fltk/trunk
+Basis des Projektarchivs: http://svn.easysw.com/public/fltk/fltk
+UUID des Projektarchivs: ea41ed52-d2ee-0310-a9c1-e6b18d33e121
+Revision: 6733
+Knotentyp: Verzeichnis
+Plan: normal
+Letzter Autor: AlbrechtS
+Letzte geänderte Rev: 6671
+Letztes Änderungsdatum: 2009-03-06 09:01:17 +0100 (Fr, 06. Mär 2009)
+
+
diff --git a/fltk/fltk/Adjuster.h b/fltk/fltk/Adjuster.h
new file mode 100644
index 0000000..8010dc9
--- /dev/null
+++ b/fltk/fltk/Adjuster.h
@@ -0,0 +1,58 @@
+//
+// "$Id: Adjuster.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+// Undocumented valuator provided for back-compatability.
+// This may be removed before the final version.
+// 3-button "slider", made for Nuke
+
+#ifndef fltk_Adjuster_h
+#define fltk_Adjuster_h
+
+#include "Valuator.h"
+
+namespace fltk {
+
+class FL_API Adjuster : public Valuator {
+public:
+ Adjuster(int x, int y, int w, int h, const char *l=0);
+ static NamedStyle* default_style;
+ void soft(int x) {soft_ = x;}
+ int soft() const {return soft_;}
+ int handle(int);
+
+protected:
+ void draw();
+ void value_damage();
+
+private:
+ int drag, highlight, last;
+ int ix;
+ int soft_;
+};
+
+}
+#endif
+
+//
+// End of "$Id: Adjuster.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/AlignGroup.h b/fltk/fltk/AlignGroup.h
new file mode 100644
index 0000000..08fc2a3
--- /dev/null
+++ b/fltk/fltk/AlignGroup.h
@@ -0,0 +1,65 @@
+// Layout header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_AlignGroup_h
+#define fltk_AlignGroup_h
+
+#include "Group.h"
+
+namespace fltk {
+
+class FL_API AlignGroup : public Group {
+ bool vertical_;
+ uchar n_to_break_,dw_,dh_;
+ Flags align_;
+
+public:
+
+ void layout();
+
+ // WAS: this should have a begin=false argument added somehow.
+ AlignGroup(int X, int Y, int W, int H, const char* L = 0,
+ uchar n_to_break = 0, bool vertical = 1,
+ Flags align = ALIGN_LEFT,
+ uchar dw = 0,uchar dh = 0)
+ : Group(X,Y,W,H,L),
+ vertical_(vertical), n_to_break_(n_to_break), dw_(dw), dh_(dh),
+ align_(align) {}
+
+ bool vertical() const {return vertical_;}
+ void vertical(bool v) {vertical_ = v;}
+
+ uchar n_to_break() const {return n_to_break_;}
+ void n_to_break(uchar n) {n_to_break_ = n;}
+
+ uchar dw() const {return dw_;}
+ void dw(uchar d) {dw_ = d;}
+ uchar dh() const {return dh_;}
+ void dh(uchar d) {dh_ = d;}
+
+ Flags align() const {return align_;}
+ void align(Flags a) {align_ = a;}
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/AnsiWidget.h b/fltk/fltk/AnsiWidget.h
new file mode 100644
index 0000000..c4dcc56
--- /dev/null
+++ b/fltk/fltk/AnsiWidget.h
@@ -0,0 +1,92 @@
+// "$Id: Widget.h 5600 2007-01-13 00:04:55Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+// Original code Copyright Chris Warren-Smith. Permission to distribute under
+// the LGPL for the FLTK library granted by Chris Warren-Smith.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef FL_ANSI_WIDGET
+#define FL_ANSI_WIDGET
+
+#include <fltk/Widget.h>
+#include <fltk/draw.h>
+#include <fltk/Image.h>
+
+using namespace fltk;
+
+class AnsiWidget : public Widget {
+ public:
+ AnsiWidget(int x, int y, int w, int h, int defsize);
+ virtual ~AnsiWidget();
+
+ // inherited methods
+ void draw();
+ void layout();
+ int handle(int e);
+
+ // public api
+ void clearScreen();
+ void print(const char *str);
+ void drawLine(int x1, int y1, int x2, int y2);
+ void drawRectFilled(int x1, int y1, int x2, int y2);
+ void drawRect(int x1, int y1, int x2, int y2);
+ void drawImage(Image* img, int x, int y, int sx, int sy, int w, int h);
+ void saveImage(const char* fn, int x, int y, int w, int h);
+ void setTextColor(long fg, long bg);
+ void setColor(long color);
+ int getX() {return curX;}
+ int getY() {return curY;}
+ void setPixel(int x, int y, int c);
+ int getPixel(int x, int y);
+ void setXY(int x, int y) {curX=x; curY=y;}
+ int textWidth(const char* s);
+ int textHeight(void);
+ int getWidth() {return w();}
+ int getHeight() {return h();}
+ void setFontSize(float i) {labelsize(i);}
+ int getFontSize() {return (int)labelsize();}
+ void beep() const;
+ static Color ansiToFltk(long color);
+
+ private:
+ void init();
+ void destroyImage();
+ void initImage();
+ bool setGraphicsRendition(char c, int escValue);
+ bool doEscape(unsigned char *&p);
+ int calcTab(int x) const;
+ void newLine();
+ void reset();
+
+ Image* img;
+ bool underline;
+ bool invert;
+ bool bold;
+ bool italic;
+ bool resized;
+ int curY;
+ int curX;
+ int curYSaved;
+ int curXSaved;
+ int tabSize;
+};
+
+#endif
+
+// $Id: Fl_Ansi_Window.h,v 1.23 2006/08/03 10:28:12 zeeb90au Exp $
diff --git a/fltk/fltk/BarGroup.h b/fltk/fltk/BarGroup.h
new file mode 100644
index 0000000..24affe2
--- /dev/null
+++ b/fltk/fltk/BarGroup.h
@@ -0,0 +1,60 @@
+//
+// "$Id: BarGroup.h 5575 2007-01-02 17:31:40Z spitzak $"
+//
+// The BarGroup is a closable strip that can be put in the edges of a Pack,
+// usually it contains toolbars or buttons.
+//
+// Copyright 2002-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_BarGroup_h
+#define fltk_BarGroup_h
+
+#include "Group.h"
+
+namespace fltk {
+
+class FL_API BarGroup : public Group {
+ bool open_;
+ bool highlighted;
+ bool pushed;
+ int glyph_size_;
+ int saved_size;
+ void glyph_box(Rectangle&) const;
+public:
+ BarGroup(int x,int y,int w ,int h,const char *l = 0,bool begin=false);
+ static NamedStyle* default_style;
+ void layout();
+ int handle(int);
+ void draw();
+ bool opened() const {return open_;}
+ bool opened(bool);
+ bool open() {return opened(true);}
+ bool close() {return opened(false);}
+ int glyph_size() const {return glyph_size_;}
+ void glyph_size(int v) {glyph_size_ = v;}
+};
+
+}
+#endif
+
+//
+// End of "$Id: BarGroup.h 5575 2007-01-02 17:31:40Z spitzak $".
+//
diff --git a/fltk/fltk/Box.h b/fltk/fltk/Box.h
new file mode 100644
index 0000000..3319ae5
--- /dev/null
+++ b/fltk/fltk/Box.h
@@ -0,0 +1,75 @@
+//
+// "$Id: Box.h 5865 2007-06-01 13:04:19Z sanel.z $"
+//
+// Define your own values for box() on a widget by making one of these.
+//
+// Copyright 2002 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Box_h
+#define fltk_Box_h
+
+#include "Color.h"
+#include "Flags.h"
+#include "Symbol.h"
+
+namespace fltk {
+
+typedef Symbol Box;
+
+class FL_API FrameBox : public Box {
+protected:
+ const char* data_;
+ const Box* down_;
+public:
+ const char* data() const {return data_;}
+ void data(const char* d) {data_ = d;}
+ void _draw(const Rectangle&) const;
+ void inset(Rectangle&) const;
+ bool fills_rectangle() const;
+ bool is_frame() const;
+ FrameBox(const char* name, int dx,int dy,int dw,int dh, const char* pattern, const Box* down=0)
+ : Box(name),data_(pattern),down_(down) {set_inset(dx,dy,-dw,-dh);}
+};
+
+class FL_API FlatBox : public Box {
+public:
+ void _draw(const Rectangle&) const;
+ bool fills_rectangle() const;
+ bool is_frame() const;
+ FlatBox(const char* n);
+};
+
+class FL_API HighlightBox : public FlatBox {
+ const Box* down_;
+public:
+ void _draw(const Rectangle&) const;
+ bool fills_rectangle() const;
+ bool is_frame() const;
+ HighlightBox(const char* n, const Box* d);
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Box.h 5865 2007-06-01 13:04:19Z sanel.z $".
+//
diff --git a/fltk/fltk/Browser.h b/fltk/fltk/Browser.h
new file mode 100644
index 0000000..3caae84
--- /dev/null
+++ b/fltk/fltk/Browser.h
@@ -0,0 +1,214 @@
+// "$Id: Browser.h 6077 2008-03-21 00:14:56Z fabien $"
+//
+// Copyright 2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_Browser_h
+#define fltk_Browser_h
+
+#include "Menu.h"
+#include "Scrollbar.h"
+
+namespace fltk {
+
+class FL_API Browser : public Menu {
+public:
+
+ int handle(int);
+ void layout();
+ void draw();
+
+ Browser(int X,int Y,int W,int H,const char*l=0);
+ static NamedStyle* default_style;
+ ~Browser();
+
+ enum { //<! values for type()
+ IS_MULTI = 1,
+ NORMAL = GROUP_TYPE, //!< means single selection can be achieved by user
+ MULTI = GROUP_TYPE+1 //!< means multiple selection can be achieved by user
+ };
+ enum { // value for selected_column
+ NO_COLUMN_SELECTED = -1 //!< means that no column has been selected by user
+ };
+
+ class FL_API Mark {
+ friend class Browser;
+ unsigned level; // depth in hierarchy of the item
+ unsigned open_level; // depth of highest closed parent
+ int position; // distance in pixels from top of browser
+ unsigned indexes_size; // allocated size
+ int* indexes; // array of indexes
+ int index0; // used as *indexes if indexes_size==1
+ public:
+ Mark() {
+ level = 0;
+ open_level = 0;
+ position = 0;
+ indexes_size = 1;
+ indexes = &index0;
+ index0 = 0;
+ }
+ Mark(const Mark&);
+ ~Mark() {
+ if (indexes != &index0) delete[] indexes;
+ }
+ const Mark& operator=(const Mark&);
+ int compare(const Mark& mark2) const;
+ void unset() {indexes[0] = -1;}
+ bool is_set() const {return indexes[0] >= 0;}
+ };
+
+ enum linepos { //!< Argument to make_item_visible()
+ NOSCROLL, //!< move as little as possible so item is visible
+ TOP, //!< position current item to top
+ MIDDLE, //!< position current item to middle
+ BOTTOM //!< position current item to bottom
+ };
+
+ int width() const {return width_;}
+ int height() const {return height_;}
+ int box_width() const {return interior.w();}
+ int box_height() const {return interior.h();}
+ int xposition() const {return xposition_;}
+ void xposition(int);
+ int yposition() const {return yposition_;}
+ void yposition(int);
+ bool indented() const {return indented_;}
+ void indented(bool v) {indented_ = v;}
+
+ Scrollbar scrollbar;
+ Scrollbar hscrollbar;
+
+ Widget* goto_top();
+ Widget* goto_focus() {return goto_mark(FOCUS);}
+ Widget* goto_position(int y);
+ Widget* goto_index(const int* indexes, unsigned level);
+ Widget* goto_index(int);
+ Widget* goto_index(int,int,int=-1,int=-1,int=-1);
+ Widget* goto_mark(const Mark&); // set HERE to mark
+ Widget* next();
+ Widget* next_visible();
+ Widget* previous_visible();
+ bool at_mark(const Mark& mark) const {return !HERE.compare(mark);}
+ int compare_to_mark(const Mark& mark) const {return HERE.compare(mark);}
+ bool item_is_visible() const;
+ bool item_is_parent() const;
+ bool item_is_open() const;
+ int item_h() const;
+
+ bool set_focus();
+ void set_mark(Mark& dest) const {dest = HERE;}
+ void set_mark_to_focus(Mark& dest) const {dest = FOCUS;}
+ bool select(Widget*e, int val, int do_callback=0);
+ bool set_item_selected(bool value = true, int do_callback = 0);
+ bool select_only_this(int do_callback = 0);
+ bool deselect(int do_callback = 0);
+ bool make_item_visible(linepos = NOSCROLL);
+ void damage_item() {damage_item(HERE);}
+ void damage_item(const Mark&); // make this item redraw
+ bool set_item_opened(bool);
+ bool set_item_visible(bool);
+
+ int current_level() const {return HERE.level;}
+ const int* current_index() const {return HERE.indexes;}
+ int current_position() const {return HERE.position;}
+
+ int focus_level() const {return FOCUS.level;}
+ const int* focus_index() const {return FOCUS.indexes;}
+ int focus_position() const {return FOCUS.position;}
+
+ // Maybe these should be moved to base Menu class:
+ const int *column_widths() const { return column_widths_p; }
+ void column_widths(const int *pWidths);
+ const char **column_labels() const { return column_labels_; }
+ void column_labels(const char **pLabels);
+ int selected_column() { return selected_column_; }
+ int set_column_start(int column, int x);
+
+ Widget *header(int col) { if(col<0 || col>=nHeader) return 0; return header_[col]; }
+ int nheader() const { return nHeader; }
+
+ // Convienence functions for flat browsers:
+ void value(int v) {goto_index(v); set_focus();}
+ int value() const {return FOCUS.indexes[0];}
+ bool select(int line, bool value = true);
+ bool selected(int line);
+ int topline() const {return FIRST_VISIBLE.indexes[0];}
+ void topline(int line) {goto_index(line); make_item_visible(TOP);}
+ void bottomline(int line) {goto_index(line); make_item_visible(BOTTOM);}
+ void middleline(int line) {goto_index(line); make_item_visible();}
+ bool displayed(int line);
+ bool display(int line, bool value = true);
+
+ bool display_lines() const;
+ void display_lines(bool display);
+
+ int load(const char *filename);
+
+ int multi() const {return type()&IS_MULTI;}
+
+ const Symbol* leaf_symbol() const {return leaf_symbol_;}
+ void leaf_symbol(const Symbol* s) {leaf_symbol_ = s;}
+ const Symbol* group_symbol() const {return group_symbol_;}
+ void group_symbol(const Symbol* s) {group_symbol_ = s;}
+
+protected:
+ void handle_callback(int doit); // defines how cb are handled in the browser
+
+private:
+ bool displaylines_;
+ bool indented_;
+ const int *column_widths_; // original column widths
+ int *column_widths_i; // original column widths after user interaction
+ int *column_widths_p; // actual column widths
+ const char **column_labels_;
+ int xposition_, yposition_;
+ int width_, height_;
+ int scrolldx, scrolldy;
+ static void hscrollbar_cb(Widget*, void*);
+ static void scrollbar_cb(Widget*, void*);
+ void draw_item(int);
+ void draw_clip(const Rectangle&);
+ static void draw_clip_cb(void*,const Rectangle&);
+ Rectangle interior; // inside box edges and scrollbars
+ void set_belowmouse();
+ void clear_belowmouse();
+
+ Widget **header_;
+ int nHeader, nColumn, selected_column_;
+ void set_level(unsigned);
+ enum {NUM_REDRAW = 2};
+ Mark HERE, FOCUS, FIRST_VISIBLE, REDRAW[NUM_REDRAW], OPEN, BELOWMOUSE;
+
+ Widget* goto_visible_focus(); // set HERE to focus if visible
+
+ int siblings; // # of children of parent of HERE item
+ static void column_click_cb_(Widget*, void*);
+
+ const Symbol* leaf_symbol_;
+ const Symbol* group_symbol_;
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Browser.h 6077 2008-03-21 00:14:56Z fabien $".
+//
diff --git a/fltk/fltk/Button.h b/fltk/fltk/Button.h
new file mode 100644
index 0000000..20606f9
--- /dev/null
+++ b/fltk/fltk/Button.h
@@ -0,0 +1,57 @@
+//
+// "$Id: Button.h 5433 2006-09-16 03:00:02Z spitzak $"
+//
+// Push button widget
+//
+// Copyright 2002 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Button_h
+#define fltk_Button_h
+
+#ifndef fltk_Widget_h
+#include "Widget.h"
+#endif
+
+namespace fltk {
+
+class FL_API Button : public Widget {
+public:
+ enum {HIDDEN=3}; // back-comptability value to hide the button
+
+ bool value() const { return state(); }
+ bool value(bool v) { return state(v); }
+
+ int handle(int);
+ int handle(int event, const Rectangle&);
+ Button(int,int,int,int,const char * = 0);
+ static NamedStyle* default_style;
+
+ virtual void draw();
+ void draw(int glyph_width) const;
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Button.h 5433 2006-09-16 03:00:02Z spitzak $".
+//
diff --git a/fltk/fltk/CheckButton.h b/fltk/fltk/CheckButton.h
new file mode 100644
index 0000000..91ebecb
--- /dev/null
+++ b/fltk/fltk/CheckButton.h
@@ -0,0 +1,46 @@
+//
+// "$Id: CheckButton.h 4910 2006-04-06 19:26:22Z fabien $"
+//
+// Button with a checkmark to the left of it.
+//
+// Copyright 2002 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_CheckButton_h
+#define fltk_CheckButton_h
+
+#include "Button.h"
+
+namespace fltk {
+
+class FL_API CheckButton : public Button {
+public:
+ CheckButton(int x,int y,int w,int h,const char *l = 0);
+ static NamedStyle* default_style;
+
+ virtual void draw();
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: CheckButton.h 4910 2006-04-06 19:26:22Z fabien $".
+//
diff --git a/fltk/fltk/Choice.h b/fltk/fltk/Choice.h
new file mode 100644
index 0000000..47fff63
--- /dev/null
+++ b/fltk/fltk/Choice.h
@@ -0,0 +1,52 @@
+//
+// "$Id: Choice.h 4319 2005-05-08 19:18:50Z spitzak $"
+//
+// Popup list of items that the user can choose one of. Based on Motif
+// but modern equivalent is the OS/X popup choices.
+//
+// This is not a "combo box". You should try this, but if you insist
+// on that use the InputBrowser widget.
+//
+// Copyright 2002 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Choice_h
+#define fltk_Choice_h
+
+#include "Menu.h"
+
+namespace fltk {
+
+class FL_API Choice : public Menu {
+public:
+ int handle(int);
+ int handle(int, const Rectangle&);
+ Choice(int,int,int,int,const char * = 0);
+ static NamedStyle* default_style;
+ void draw();
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Choice.h 4319 2005-05-08 19:18:50Z spitzak $".
+//
diff --git a/fltk/fltk/Clock.h b/fltk/fltk/Clock.h
new file mode 100644
index 0000000..5ca22a9
--- /dev/null
+++ b/fltk/fltk/Clock.h
@@ -0,0 +1,68 @@
+//
+// "$Id: Clock.h 5197 2006-06-14 07:43:46Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Clock_h
+#define fltk_Clock_h
+
+#include "Widget.h"
+
+namespace fltk {
+
+// a ClockOutput can be used to display a program-supplied time:
+
+class FL_API ClockOutput : public Widget {
+public:
+ enum {SQUARE = 0, ANALOG = 0, ROUND, DIGITAL};
+ ClockOutput(int x,int y,int w,int h, const char *l = 0);
+ void value(unsigned long v); // set to this Unix time
+ void value(int,int,int); // set hour, minute, second
+ unsigned long value() const {return value_;}
+ int hour() const {return hour_;}
+ int minute() const {return minute_;}
+ int second() const {return second_;}
+protected:
+ void draw(int, int, int, int);
+ void draw();
+private:
+ int hour_, minute_, second_;
+ unsigned long value_;
+ void drawhands(Color, Color); // part of draw
+};
+
+// a Clock displays the current time always by using a timeout:
+
+class FL_API Clock : public ClockOutput {
+public:
+ int handle(int);
+ void update();
+ Clock(int x,int y,int w,int h, const char *l = 0);
+ static NamedStyle* default_style;
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Clock.h 5197 2006-06-14 07:43:46Z spitzak $".
+//
diff --git a/fltk/fltk/Color.h b/fltk/fltk/Color.h
new file mode 100644
index 0000000..d1d5977
--- /dev/null
+++ b/fltk/fltk/Color.h
@@ -0,0 +1,131 @@
+//
+// "$Id: Color.h 6233 2008-09-14 07:54:06Z spitzak $"
+//
+// Color value. These are 32-bit unsigned numbers with RGB as the
+// upper 3 bytes. The lowest-order byte is treated as an "index"
+// for back compatabilty, or as an "alpha", depending on context.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to:
+//
+// http://www.fltk.org/str.php
+//
+
+#ifndef fltk_Color_h
+#define fltk_Color_h
+
+#include "FL_API.h"
+#include "Flags.h"
+
+namespace fltk {
+
+/// \name fltk/Color.h
+//@{
+
+typedef unsigned Color;
+
+/*! Symbolic names for some of the indexed colors.
+
+ The 24-entry "gray ramp" is modified by fltk::set_background() so
+ that the color fltk::GRAY75 is the background color, and the others
+ are a nice range from black to a lighter version of the gray. These
+ are used to draw box edges. The gray levels are chosen to be evenly
+ spaced, listed here is the actual 8-bit and decimal gray level
+ assigned by default. Also listed here is the letter used for
+ fltk::FrameBox and the old fltk1.1 names used for these levels.
+
+ The remiander of the colormap is a 5x8x5 color cube. This cube is
+ used to dither images on 8-bit screens X colormaps to reduce the
+ number of colors used.
+*/
+enum {
+ NO_COLOR = 0, //!< Black, empty place holder in Style
+
+ FREE_COLOR = 16, //!< Starting from index 16 is the FREE_COLOR area
+ NUM_FREE_COLOR= 16, //!< Number of free color slots starting from index FREE_COLOR
+
+ GRAY00 = 32, //!< hex=00, dec=.00, framebox=A, fltk1 = GRAY0, GRAY_RAMP
+ GRAY05 = 33, //!< hex=0d, dec=.05, framebox=B
+ GRAY10 = 34, //!< hex=1a, dec=.10, framebox=C
+ GRAY15 = 35, //!< hex=27, dec=.15, framebox=D
+ GRAY20 = 36, //!< hex=34, dec=.20, framebox=E
+ GRAY25 = 37, //!< hex=41, dec=.25, framebox=F
+ GRAY30 = 38, //!< hex=4f, dec=.31, framebox=G
+ GRAY33 = 39, //!< hex=5c, dec=.36, framebox=H, fltk1 = DARK3
+ GRAY35 = 40, //!< hex=69, dec=.41, framebox=I
+ GRAY40 = 41, //!< hex=76, dec=.46, framebox=J (18% gray card)
+ GRAY45 = 42, //!< hex=83, dec=.51, framebox=K
+ GRAY50 = 43, //!< hex=90, dec=.56, framebox=L
+ GRAY55 = 44, //!< hex=9e, dec=.62, framebox=M
+ GRAY60 = 45, //!< hex=ab, dec=.67, framebox=N, fltk1 = DARK2
+ GRAY65 = 46, //!< hex=b8, dec=.72, framebox=O
+ GRAY66 = 47, //!< hex=c5, dec=.77, framebox=P, fltk1 = DARK1, INACTIVE_COLOR
+ GRAY70 = 48, //!< hex=d2, dec=.82, framebox=Q
+ GRAY75 = 49, //!< hex=e0, dec=.88, framebox=R, fltk1 = GRAY, SELECTION_COLOR
+ GRAY80 = 50, //!< hex=e5, dec=.90, framebox=S
+ GRAY85 = 51, //!< hex=ea, dec=.92, framebox=T, fltk1 = LIGHT1
+ //unnamed entry hex=ef, dec=.94, framebox=U
+ GRAY90 = 53, //!< hex=f4, dec=.96, framebox=V, fltk1 = LIGHT2
+ GRAY95 = 54, //!< hex=f9, dec=.98, framebox=W
+ GRAY99 = 55, //!< hex=ff, dec=1.0, framebox=X, fltk1 = LIGHT3
+
+ BLACK = 0x38, //!< Corner of color cube
+ RED = 0x58, //!< Corner of color cube
+ GREEN = 0x3f, //!< Corner of color cube
+ YELLOW = 0x5f, //!< Corner of color cube
+ BLUE = 0xd8, //!< Corner of color cube
+ MAGENTA = 0xf8, //!< Corner of color cube
+ CYAN = 0xdf, //!< Corner of color cube
+ WHITE = 0xff, //!< Corner of color cube
+
+ DARK_RED = 72,
+ DARK_GREEN = 60,
+ DARK_YELLOW = 76,
+ DARK_BLUE = 136,
+ DARK_MAGENTA = 152,
+ DARK_CYAN = 140,
+
+ WINDOWS_BLUE = 0x88 //!< default selection_color
+};
+
+inline Color color(unsigned char r, unsigned char g, unsigned char b) {
+ return Color((r<<24)+(g<<16)+(b<<8)); }
+inline Color color(unsigned char g) {
+ return Color(g*0x1010100u); }
+FL_API Color color(const char*);
+FL_API Color parsecolor(const char*, unsigned length);
+FL_API Color lerp(Color c0, Color c1, float f);
+FL_API Color inactive(Color fg);
+FL_API Color inactive(Color fg, Color bg);
+FL_API Color contrast(Color fg, Color bg);
+FL_API void split_color(Color c, unsigned char& r, unsigned char& g, unsigned char& b);
+FL_API void set_color_index(Color index, Color);
+FL_API Color get_color_index(Color index);
+FL_API void set_background(Color);
+FL_API Color nearest_index(Color);
+
+}
+
+//@}
+
+#endif
+
+//
+// End of "$Id: Color.h 6233 2008-09-14 07:54:06Z spitzak $".
+//
diff --git a/fltk/fltk/ColorChooser.h b/fltk/fltk/ColorChooser.h
new file mode 100644
index 0000000..44e4024
--- /dev/null
+++ b/fltk/fltk/ColorChooser.h
@@ -0,0 +1,116 @@
+//
+// "$Id: ColorChooser.h 5197 2006-06-14 07:43:46Z spitzak $"
+//
+// Color chooser header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+// The color chooser object and the color chooser popup. The popup
+// is just a window containing a single color chooser and some boxes
+// to indicate the current and cancelled color.
+
+#ifndef fltk_ColorChooser_h
+#define fltk_ColorChooser_h
+
+#include "Group.h"
+
+namespace fltk {
+
+class FL_API ccHueBox : public Widget {
+ int px, py;
+protected:
+ void draw();
+public:
+ int handle(int);
+ ccHueBox(int X, int Y, int W, int H) : Widget(X,Y,W,H) {
+ px = py = 0;}
+};
+
+class FL_API ccValueBox : public Widget {
+ int py;
+ bool is_alpha() const;
+protected:
+ void draw();
+public:
+ int handle(int);
+ ccValueBox(int X, int Y, int W, int H) : Widget(X,Y,W,H) {
+ py = 0;}
+};
+
+class FL_API ccCellBox : public Widget {
+public:
+ ccCellBox(int X, int Y, int W, int H) : Widget(X,Y,W,H) {}
+ void draw();
+ int handle(int);
+};
+
+class FL_API ColorChooser : public Group {
+ friend class ccHueBox;
+ friend class ccValueBox;
+ friend class ccCellBox;
+ ccHueBox huebox;
+ ccValueBox valuebox;
+ ccValueBox alphabox;
+ ccCellBox cellbox;
+ float hue_, saturation_, value_;
+ float r_, g_, b_, a_;
+ bool no_value_;
+ bool support_no_value;
+public:
+ float h() const {return hue_;}
+ float s() const {return saturation_;}
+ float v() const {return value_;}
+ float r() const {return r_;}
+ float g() const {return g_;}
+ float b() const {return b_;}
+ float a() const {return a_;}
+ bool no_value() const {return no_value_;}
+ bool no_value(bool);
+ Color value() const;
+ bool value(Color);
+ bool hsv(float,float,float);
+ bool rgb(float,float,float);
+ bool a(float);
+ void hide_a();
+ void hide_no_value() {support_no_value = false;}
+ static void hsv2rgb(float, float, float,float&,float&,float&);
+ static void rgb2hsv(float, float, float,float&,float&,float&);
+ ColorChooser(int,int,int,int,const char* = 0);
+ void layout();
+ float setcell(int,float,float,float,float);
+ float getcell(int,float,float,float,float);
+};
+
+// Convience functions to pop-up a control panel:
+
+FL_API bool color_chooser(const char* name, float& r, float& g, float& b);
+FL_API bool color_chooser(const char* name, float& r, float& g, float& b, float& a);
+FL_API bool color_chooser(const char* name, uchar& r, uchar& g, uchar& b);
+FL_API bool color_chooser(const char* name, uchar& r, uchar& g, uchar& b, uchar& a);
+FL_API bool color_chooser(const char* name, Color& c);
+
+}
+
+#endif
+
+//
+// End of "$Id: ColorChooser.h 5197 2006-06-14 07:43:46Z spitzak $".
+//
diff --git a/fltk/fltk/ComboBox.h b/fltk/fltk/ComboBox.h
new file mode 100644
index 0000000..bdd9be6
--- /dev/null
+++ b/fltk/fltk/ComboBox.h
@@ -0,0 +1,108 @@
+//
+//
+//
+// single line input field with predefined choices via popup menu
+//
+// Copyright 2002 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_ComboBox_h
+#define fltk_ComboBox_h
+
+#include "Choice.h"
+#include "Input.h"
+
+namespace fltk {
+
+class FL_API ComboBox : public Choice {
+public:
+ ComboBox(int,int,int,int,const char * = 0);
+ ~ComboBox();
+ static NamedStyle* default_style;
+
+ void draw();
+ void layout();
+ int handle(int);
+ int popup(const Rectangle&,const char* title=0,bool menubar=false);
+
+ int choice(int v);
+ int choice() const;
+ int find_choice() const;
+ bool text(const char *txt)
+ { return text_changed_(input_->text(txt)); }
+ bool text(const char *txt, int n)
+ { return text_changed_(input_->text(txt, n)); }
+ bool static_text(const char *txt)
+ { return text_changed_(input_->static_text(txt)); }
+ bool static_text(const char *txt, int n)
+ { return text_changed_(input_->static_text(txt, n)); }
+ const char* text() const { return input_->text();}
+ char at(int i) const { return input_->at(i); }
+
+ int size(bool ofText) const
+ { return ofText ? input_->size() : Choice::size(); }
+
+ int position() const { return input_->position();}
+ int mark() const { return input_->mark();}
+ void position(int p, int m)
+ { input_->position(p, m); text_changed_(); }
+ void position(int p) { position(p, p); }
+ void up_down_position(int p, bool m)
+ { input_->up_down_position(p, m); text_changed_(); }
+ void mark(int m) { position(position(), m);}
+
+ virtual bool replace(int a, int b, const char *c, int d)
+ { return text_changed_(input_->replace(a, b, c, d)); }
+ bool cut() {return replace(position(), mark(), 0, 0);}
+ bool cut(int n) {return replace(position(), position()+n, 0, 0);}
+ bool cut(int a, int b) {return replace(a, b, 0, 0);}
+ bool insert(const char* t, int l=0)
+ { return replace(input_->position(), input_->mark(), t, l); }
+ bool replace(int a, int b, char c) { return replace(a,b,&c,1); }
+ bool copy(bool clipboard = true) { return input_->copy(clipboard); }
+ bool undo() { return text_changed_(input_->undo()); }
+
+ int word_start(int i) const { return input_->word_start(i); }
+ int word_end(int i) const { return input_->word_end(i); }
+ int line_start(int i) const { return input_->line_start(i); }
+ int line_end(int i) const { return input_->line_end(i); }
+ int mouse_position(const Rectangle& r) const
+ { return input_->mouse_position(r); }
+ int xscroll() const { return input_->xscroll();}
+ int yscroll() const { return input_->yscroll();}
+
+protected:
+ bool text_changed_(bool ret=true);
+
+private:
+ Input *input_;
+#if defined (_WIN32) || (defined( __GNUC__ ) && __GNUC__ < 3)
+ public:
+#endif
+ static void input_callback_(Widget*,void*);
+};
+
+}
+
+#endif
+
+//
+//
+//
diff --git a/fltk/fltk/Cursor.h b/fltk/fltk/Cursor.h
new file mode 100644
index 0000000..ef59faa
--- /dev/null
+++ b/fltk/fltk/Cursor.h
@@ -0,0 +1,39 @@
+//
+// "$Id"
+//
+// Mouse cursor support for the Fast Light Tool Kit (FLTK).
+
+// This is likely to change!
+
+#ifndef fltk_Cursor_h
+#define fltk_Cursor_h
+
+#include "FL_API.h"
+
+namespace fltk {
+
+struct Cursor; // this is not public
+
+class Image;
+Cursor* cursor(Image*, int x, int y);
+extern FL_API Cursor* cursor(void *raw);
+
+extern FL_API Cursor* const CURSOR_DEFAULT; // == NULL
+extern FL_API Cursor* const CURSOR_ARROW;
+extern FL_API Cursor* const CURSOR_CROSS;
+extern FL_API Cursor* const CURSOR_WAIT;
+extern FL_API Cursor* const CURSOR_INSERT;
+extern FL_API Cursor* const CURSOR_HAND;
+extern FL_API Cursor* const CURSOR_HELP;
+extern FL_API Cursor* const CURSOR_MOVE;
+extern FL_API Cursor* const CURSOR_NS;
+extern FL_API Cursor* const CURSOR_WE;
+extern FL_API Cursor* const CURSOR_NWSE;
+extern FL_API Cursor* const CURSOR_NESW;
+extern FL_API Cursor* const CURSOR_NO;
+extern FL_API Cursor* const CURSOR_NONE;
+
+}
+#endif
+
+// End of "$Id"
diff --git a/fltk/fltk/CycleButton.h b/fltk/fltk/CycleButton.h
new file mode 100644
index 0000000..3e40c11
--- /dev/null
+++ b/fltk/fltk/CycleButton.h
@@ -0,0 +1,52 @@
+//
+// "$Id: CycleButton.h 4910 2006-04-06 19:26:22Z fabien $"
+//
+// Popup list of items that the user can choose one of. Based on Motif
+// but modern equivalent is the OS/X popup choices.
+//
+// This is not a "combo box". You should try this, but if you insist
+// on that use the InputBrowser widget.
+//
+// Copyright 2004 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_CycleButton_h
+#define fltk_CycleButton_h
+
+#include "Menu.h"
+
+namespace fltk {
+
+class FL_API CycleButton : public Menu {
+public:
+ int handle(int);
+ CycleButton(int,int,int,int,const char * = 0);
+ static NamedStyle* default_style;
+protected:
+ void draw();
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: CycleButton.h 4910 2006-04-06 19:26:22Z fabien $".
+//
diff --git a/fltk/fltk/Dial.h b/fltk/fltk/Dial.h
new file mode 100644
index 0000000..490f279
--- /dev/null
+++ b/fltk/fltk/Dial.h
@@ -0,0 +1,64 @@
+//
+// "$Id: Dial.h 4910 2006-04-06 19:26:22Z fabien $"
+//
+// Rotating value control
+//
+// Copyright 2002 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Dial_h
+#define fltk_Dial_h
+
+#ifndef fltk_Valuator_h
+#include "Valuator.h"
+#endif
+
+namespace fltk {
+
+class FL_API Dial : public Valuator {
+
+public:
+
+ enum {NORMAL = 0, LINE, FILL}; // values for type()
+ int handle(int);
+ Dial(int x,int y,int w,int h, const char *l = 0);
+ static NamedStyle* default_style;
+ short angle1() const {return a1;}
+ void angle1(short a) {a1 = a;}
+ short angle2() const {return a2;}
+ void angle2(short a) {a2 = a;}
+ void angles(short a, short b) {a1 = a; a2 = b;}
+
+protected:
+
+ void draw();
+
+private:
+
+ short a1,a2;
+
+};
+
+}
+#endif
+
+//
+// End of "$Id: Dial.h 4910 2006-04-06 19:26:22Z fabien $".
+//
diff --git a/fltk/fltk/Divider.h b/fltk/fltk/Divider.h
new file mode 100644
index 0000000..352b7a3
--- /dev/null
+++ b/fltk/fltk/Divider.h
@@ -0,0 +1,45 @@
+//
+// "$Id: Divider.h 4910 2006-04-06 19:26:22Z fabien $"
+//
+// Widget to draw a divider line in a menu
+//
+// Copyright 2002 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Divider_h
+#define fltk_Divider_h
+
+#ifndef fltk_Widget_h
+# include "Widget.h"
+#endif
+
+namespace fltk {
+
+class FL_API Divider : public Widget {
+public:
+ void draw();
+ void layout();
+ int handle(int);
+ Divider();
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/DoubleBufferWindow.h b/fltk/fltk/DoubleBufferWindow.h
new file mode 100644
index 0000000..b3700b3
--- /dev/null
+++ b/fltk/fltk/DoubleBufferWindow.h
@@ -0,0 +1,27 @@
+// This class is provided for back compatability only with some fltk2.0
+// versions. You can turn on double buffering on a normal window if
+// you want it.
+
+#ifndef fltk_DoubleBufferWindow_h
+#define fltk_DoubleBufferWindow_h
+
+#ifndef fltk_Window_h
+# include "Window.h"
+#endif
+
+namespace fltk {
+
+class DoubleBufferWindow : public Window {
+
+public:
+ DoubleBufferWindow(int x, int y, int w, int h, const char*l = 0)
+ : Window(x,y,w,h,l) {set_double_buffer();}
+
+ DoubleBufferWindow(int w, int h, const char*l = 0)
+ : Window(w,h,l) {set_double_buffer();}
+
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/FL_API.h b/fltk/fltk/FL_API.h
new file mode 100644
index 0000000..724133b
--- /dev/null
+++ b/fltk/fltk/FL_API.h
@@ -0,0 +1,76 @@
+// "$Id: FL_API.h 5448 2006-09-19 01:14:07Z spitzak $"
+//
+// This file is included by all FLTK header files. Originally it was to
+// get that damn dllimport/export stuff on Windows. It now also turns
+// off warnings on Windows so that you can use stdc functions, and
+// defines the uchar type that is used by FLTK a lot.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+#ifndef FL_API
+
+#if _MSC_VER > 1000
+# pragma once
+// suppress vc2005 warnings:
+// C4312 because we have no problem to cast a smaller type to a greater (potentially 64bit) one
+// and C4996 (deprecated C-lib calls like strcpy that should be _strcpy, etc ...)
+# pragma warning(disable:4312 4996)
+#endif
+
+#if !defined(DOXYGEN) && defined(_WIN32) && defined(FL_SHARED)
+# ifdef FL_LIBRARY
+# define FL_API __declspec(dllexport)
+# else
+# define FL_API __declspec(dllimport)
+# endif
+# ifdef FL_IMAGES_LIBRARY
+# define FL_IMAGES_API __declspec(dllexport)
+# else
+# define FL_IMAGES_API __declspec(dllimport)
+# endif
+# ifdef FL_GLUT_LIBRARY
+# define FL_GLUT_API __declspec(dllexport)
+# else
+# define FL_GLUT_API __declspec(dllimport)
+# endif
+# ifdef FL_FORMS_LIBRARY
+# define FL_FORMS_API __declspec(dllexport)
+# else
+# define FL_FORMS_API __declspec(dllimport)
+# endif
+# ifdef FL_GL_LIBRARY
+# define FL_GL_API __declspec(dllexport)
+# else
+# define FL_GL_API __declspec(dllimport)
+# endif
+#else
+# define FL_API
+# define FL_IMAGES_API
+# define FL_GLUT_API
+# define FL_FORMS_API
+# define FL_GL_API
+#endif
+
+typedef unsigned char uchar;
+
+#endif
+
+//
+// End of "$Id: FL_API.h 5448 2006-09-19 01:14:07Z spitzak $".
+//
diff --git a/fltk/fltk/FL_VERSION.h b/fltk/fltk/FL_VERSION.h
new file mode 100644
index 0000000..4266ee9
--- /dev/null
+++ b/fltk/fltk/FL_VERSION.h
@@ -0,0 +1,39 @@
+/*! \file
+
+The FLTK version number. Allows you to write conditionally compiled
+code for different versions of FLTK. This file may be included by C
+code in case you need it there.
+
+FL_VERSION is a macro double that describes the major, minor, and
+patch version numbers. The integer value is the major number. One
+digit is used for the minor number, and three for the "patch" number
+which is increased for each binary differnt release (it can go to 999).
+
+Because double cannot be used in #if statements, the integer
+numbers are in the FL_MAJOR_VERSION, FL_MINOR_VERSION, and
+FL_PATCH_VERSION macro constants.
+
+*/
+
+#ifndef FL_VERSION
+
+# define FL_MAJOR_VERSION 2 //!< The major release number, 1 or 2
+# define FL_MINOR_VERSION 1 //!< The minor release number, 0-9
+# define FL_PATCH_VERSION 0 //!< The patch number, 0-999
+# define FL_VERSION 2.1000
+
+#if defined(__cplusplus) || defined(DOXYGEN) /* Allow this file to be included by C code */
+#include "FL_API.h"
+namespace fltk {
+
+/*!
+ Returns the value of FL_VERSION that FLTK was compiled with.
+ This can be compared to the FL_VERSION macro to see if the shared
+ library of fltk your program linked with is up to date.
+*/
+FL_API double version();
+
+}
+#endif
+
+#endif
diff --git a/fltk/fltk/FileBrowser.h b/fltk/fltk/FileBrowser.h
new file mode 100644
index 0000000..5e86355
--- /dev/null
+++ b/fltk/fltk/FileBrowser.h
@@ -0,0 +1,95 @@
+//
+// "$Id: FileBrowser.h 4926 2006-04-10 21:03:29Z fabien $"
+//
+// FileBrowser definitions.
+//
+// Copyright 1999-2006 by Michael Sweet.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+//
+// Include necessary header files...
+//
+
+#ifndef fltk_FileBrowser_h
+#define fltk_FileBrowser_h
+
+#include <fltk/Browser.h>
+#include <fltk/FileIcon.h>
+#include <fltk/filename.h>
+
+namespace fltk {
+
+
+//
+// FileBrowser class...
+//
+
+class FL_API FileBrowser : public Browser
+{
+ int filetype_;
+ const char *directory_;
+ float icon_size_;
+ const char *pattern_;
+
+public:
+ enum { FILES, DIRECTORIES };
+
+ FileBrowser(int, int, int, int, const char * = 0);
+
+ float icon_size() const {
+ return (icon_size_ <0? (2.0f* textsize()) : icon_size_);
+ }
+ void icon_size(float f) { icon_size_ = f; redraw(); };
+
+ void filter(const char *pattern);
+ const char *filter() const { return (pattern_); };
+
+ int load(const char *directory, File_Sort_F *sort = (File_Sort_F*) fltk::numericsort);
+
+ float textsize() const { return (Browser::textsize()); };
+ void textsize(float s) { Browser::textsize(s); icon_size_ = (uchar)(3 * s / 2); };
+
+ int filetype() const { return (filetype_); };
+ void filetype(int t) { filetype_ = t; };
+ const char * directory() const {return directory_;}
+
+ // adding or inserting a line into the fileBrowser
+ void insert(int n, const char* label, FileIcon* icon);
+ void insert(int n, const char* label, void* data){Menu::insert(n, label,data);}
+ void add(const char * line, FileIcon* icon);
+
+ // Showing or not showing the hidden files, that's the question:
+public:
+ // sets this flag if you want to see the hidden files in the browser
+ void show_hidden(bool show) { show_hidden_= show; }
+ bool show_hidden() const {return show_hidden_;}
+private:
+ bool show_hidden_;
+};
+
+}
+
+#endif // !_Fl_File_Browser_H_
+
+//
+// End of "$Id: FileBrowser.h 4926 2006-04-10 21:03:29Z fabien $".
+//
diff --git a/fltk/fltk/FileChooser.h b/fltk/fltk/FileChooser.h
new file mode 100644
index 0000000..b289a58
--- /dev/null
+++ b/fltk/fltk/FileChooser.h
@@ -0,0 +1,166 @@
+// generated by Fast Light User Interface Designer (fluid) version 2.1000
+
+#ifndef FileChooser_h
+#define FileChooser_h
+// Header for //\n// "$Id: FileChooser.fl 5447 2006-09-19 00:09...
+#include <fltk/DoubleBufferWindow.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fltk/Group.h>
+#include <fltk/Choice.h>
+#include <fltk/PopupMenu.h>
+#include <fltk/Button.h>
+#include <fltk/Preferences.h>
+#include <fltk/TiledGroup.h>
+#include <fltk/FileBrowser.h>
+#include <fltk/InvisibleBox.h>
+#include <fltk/CheckButton.h>
+#include <fltk/FileInput.h>
+#include <fltk/ReturnButton.h>
+#include <fltk/ask.h>
+
+namespace fltk {
+
+class FL_API FileChooser {
+public:
+ enum { SINGLE = 0, MULTI = 1, CREATE = 2, DIRECTORY = 4 };
+private:
+ static fltk::Preferences prefs_;
+ void (*callback_)(FileChooser*, void *);
+ void *data_;
+ char directory_[1024];
+ char pattern_[1024];
+ char preview_text_[2048];
+ int type_;
+ void favoritesButtonCB();
+ void favoritesCB(fltk::Widget *w);
+ void fileListCB();
+ void fileNameCB();
+ void newdir();
+ static void previewCB(FileChooser *fc);
+ void showChoiceCB();
+ void update_favorites();
+ void update_preview();
+ int favorites_showing;
+public:
+ FileChooser(const char *d, const char *p, int t, const char *title);
+private:
+ fltk::DoubleBufferWindow *window;
+ inline void cb_window_i(fltk::DoubleBufferWindow*, void*);
+ static void cb_window(fltk::DoubleBufferWindow*, void*);
+ fltk::Choice *showChoice;
+ inline void cb_showChoice_i(fltk::Choice*, void*);
+ static void cb_showChoice(fltk::Choice*, void*);
+ fltk::PopupMenu *favoritesButton;
+ inline void cb_favoritesButton_i(fltk::PopupMenu*, void*);
+ static void cb_favoritesButton(fltk::PopupMenu*, void*);
+public:
+ fltk::Button *newButton;
+private:
+ inline void cb_newButton_i(fltk::Button*, void*);
+ static void cb_newButton(fltk::Button*, void*);
+ inline void cb__i(fltk::TiledGroup*, void*);
+ static void cb_(fltk::TiledGroup*, void*);
+ fltk::FileBrowser *fileList;
+ inline void cb_fileList_i(fltk::FileBrowser*, void*);
+ static void cb_fileList(fltk::FileBrowser*, void*);
+ fltk::InvisibleBox *previewBox;
+public:
+ fltk::CheckButton *previewButton;
+private:
+ inline void cb_previewButton_i(fltk::CheckButton*, void*);
+ static void cb_previewButton(fltk::CheckButton*, void*);
+public:
+ fltk::CheckButton *showHiddenButton;
+private:
+ inline void cb_showHiddenButton_i(fltk::CheckButton*, void*);
+ static void cb_showHiddenButton(fltk::CheckButton*, void*);
+ fltk::FileInput *fileName;
+ inline void cb_fileName_i(fltk::FileInput*, void*);
+ static void cb_fileName(fltk::FileInput*, void*);
+ fltk::ReturnButton *okButton;
+ inline void cb_okButton_i(fltk::ReturnButton*, void*);
+ static void cb_okButton(fltk::ReturnButton*, void*);
+ fltk::Button *cancelButton;
+ inline void cb_cancelButton_i(fltk::Button*, void*);
+ static void cb_cancelButton(fltk::Button*, void*);
+ fltk::DoubleBufferWindow *favWindow;
+ fltk::FileBrowser *favList;
+ inline void cb_favList_i(fltk::FileBrowser*, void*);
+ static void cb_favList(fltk::FileBrowser*, void*);
+ fltk::Button *favUpButton;
+ inline void cb_favUpButton_i(fltk::Button*, void*);
+ static void cb_favUpButton(fltk::Button*, void*);
+ fltk::Button *favDeleteButton;
+ inline void cb_favDeleteButton_i(fltk::Button*, void*);
+ static void cb_favDeleteButton(fltk::Button*, void*);
+ fltk::Button *favDownButton;
+ inline void cb_favDownButton_i(fltk::Button*, void*);
+ static void cb_favDownButton(fltk::Button*, void*);
+ fltk::Button *favCancelButton;
+ inline void cb_favCancelButton_i(fltk::Button*, void*);
+ static void cb_favCancelButton(fltk::Button*, void*);
+ fltk::ReturnButton *favOkButton;
+ inline void cb_favOkButton_i(fltk::ReturnButton*, void*);
+ static void cb_favOkButton(fltk::ReturnButton*, void*);
+public:
+ ~FileChooser();
+ void callback(void (*cb)(FileChooser *, void *), void *d = 0);
+ void color(Color c);
+ Color color();
+ int count();
+ void directory(const char *d);
+ char * directory();
+ void filter(const char *p);
+ const char * filter();
+ int filter_value();
+ void filter_value(int f);
+ void hide();
+ void icon_size(uchar s);
+ uchar icon_size();
+ void label(const char *l);
+ const char * label();
+ void ok_label(const char *l);
+ const char * ok_label();
+ void preview(int e);
+ int preview() const { return previewButton->value(); };
+ void rescan();
+ void show();
+ void show(int x, int y);
+ bool exec(Window* p, bool grab);
+ int shown();
+ void textcolor(Color c);
+ Color textcolor();
+ void textfont(Font* f);
+ Font* textfont();
+ void textsize(float s);
+ float textsize();
+ void type(int t);
+ int type();
+ void * user_data() const;
+ void user_data(void *d);
+ const char *value(int f = 1);
+ void value(const char *filename);
+ int visible();
+ void favorites(int e);
+ int favorites() const;
+ static const char *add_favorites_label;
+ static const char *all_files_label;
+ static const char *custom_filter_label;
+ static const char *existing_file_label;
+ static const char *favorites_label;
+ static const char *filename_label;
+ static const char *filesystems_label;
+ static const char *manage_favorites_label;
+ static const char *new_directory_label;
+ static const char *new_directory_tooltip;
+ static const char *preview_label;
+ static const char *save_label;
+ static const char *show_label;
+ static File_Sort_F *sort;
+};
+extern FL_API void file_chooser_ok_label(const char*l);
+}
+// Header for //\n// End of "$Id: FileChooser.fl 5447 2006-09-1...
+#endif
diff --git a/fltk/fltk/FileIcon.h b/fltk/fltk/FileIcon.h
new file mode 100644
index 0000000..e92bca6
--- /dev/null
+++ b/fltk/fltk/FileIcon.h
@@ -0,0 +1,114 @@
+//
+// "$Id: FileIcon.h 5576 2007-01-03 00:20:28Z spitzak $"
+//
+// Fl_FileIcon definitions for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1997-1999 by Easy Software Products.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_FileIcon_h
+#define fltk_FileIcon_h
+
+#include "FL_API.h"
+#include "Color.h"
+#include "Symbol.h"
+
+namespace fltk {
+
+class Widget;
+
+class FL_API FileIcon : public Symbol {
+ static FileIcon *first_; // Pointer to first icon/filetype
+ FileIcon *next_; // Pointer to next icon/filetype
+ const char *pattern_; // Pattern string
+ int type_; // Match only if directory or file?
+ int num_data_; // Number of data elements
+ int alloc_data_; // Number of allocated elements
+ short *data_; // Icon data
+ int w_,h_;
+ bool on_select_; // true if in browser or menu
+public:
+
+ enum // File types
+ {
+ ANY, // Any kind of file
+ PLAIN, // Only plain files
+ FIFO, // Only named pipes
+ DEVICE, // Only character and block devices
+ LINK, // Only symbolic links
+ DIRECTORY // Only directories
+ };
+
+ enum // Data opcodes
+ {
+ END, // End of primitive/icon
+ COLOR, // Followed by color index
+ LINE, // Start of line
+ CLOSEDLINE, // Start of closed line
+ POLYGON, // Start of polygon
+ OUTLINEPOLYGON, // Followed by outline color
+ VERTEX // Followed by scaled X,Y
+ };
+
+ FileIcon(const char *p, int t, int nd = 0, short *d = 0);
+ FileIcon(const FileIcon& f) ;
+ ~FileIcon();
+
+ short *add(short d);
+ short *add_color(Color c)
+ { short *d = add((short)COLOR); add((short)(c >> 16)); add((short)c); return (d); }
+ short *add_vertex(int x, int y)
+ { short *d = add(VERTEX); add(x); add(y); return (d); }
+ short *add_vertex(float x, float y)
+ { short *d = add(VERTEX); add((int)(x * 10000.0));
+ add((int)(y * 10000.0)); return (d); }
+ void clear() { num_data_ = 0; }
+
+ const Symbol* image() const {return image_;}
+
+ void load(const char *f);
+ const char *pattern() { return (pattern_); }
+ int size() { return (num_data_); }
+ int type() { return (type_); }
+ short *data() { return (data_); }
+
+ static FileIcon *find(const char *filename, int filetype = ANY);
+ static FileIcon *first() { return (first_); }
+ static void load_system_icons(void);
+
+ void value(Widget* i, bool on_select=false);
+
+ // virtual image overloads
+ void _measure(int& w, int& h) const;
+ void _draw(const Rectangle& r) const;
+private:
+ void image(const Symbol* direct_raster, bool owned=true) {image_=direct_raster;owned_image_=owned;}
+ void load_fti(const char *fti);
+ const Symbol* image_;
+ bool owned_image_;
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: FileIcon.h 5576 2007-01-03 00:20:28Z spitzak $".
+//
diff --git a/fltk/fltk/FileInput.h b/fltk/fltk/FileInput.h
new file mode 100644
index 0000000..414831f
--- /dev/null
+++ b/fltk/fltk/FileInput.h
@@ -0,0 +1,67 @@
+//
+// "$Id: FileInput.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// File_Input header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+// Original version Copyright 1998 by Curtis Edwards.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+#ifndef fltk_FileInput_H
+# define fltk_FileInput_H
+
+# include "Input.h"
+
+namespace fltk {
+
+class FL_API FileInput : public Input {
+ Color errorcolor_;
+ char ok_entry_;
+ short buttons_[120];
+ short pressed_;
+
+ void draw_buttons();
+ int handle_button(int event);
+ void update_buttons();
+
+public:
+
+ FileInput(int,int,int,int,const char *t=0);
+
+ void draw_boxes(bool pressed, const Rectangle& r);
+ virtual int handle(int);
+ virtual void draw();
+
+ Color errorcolor() const { return errorcolor_; }
+ void errorcolor(Color c) { errorcolor_ = c; }
+ int text(const char*);
+ int text(const char*, int);
+ const char * text() { return Input::text(); }
+};
+
+}
+#endif // !Fl_File_Input_H
+
+
+//
+// End of "$Id: FileInput.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/FillDial.h b/fltk/fltk/FillDial.h
new file mode 100644
index 0000000..747b90b
--- /dev/null
+++ b/fltk/fltk/FillDial.h
@@ -0,0 +1,44 @@
+//
+// "$Id: FillDial.h 4910 2006-04-06 19:26:22Z fabien $"
+//
+// Copyright 2002 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_FillDial_h
+#define fltk_FillDial_h
+
+#include "Dial.h"
+
+namespace fltk {
+
+/*! Dial but the constructor sets type() to FILL, so it draws a pie slice. */
+class FL_API FillDial : public Dial {
+public:
+ FillDial(int x,int y,int w,int h, const char *l = 0)
+ : Dial(x,y,w,h,l) {type(FILL);}
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: FillDial.h 4910 2006-04-06 19:26:22Z fabien $".
+//
diff --git a/fltk/fltk/FillSlider.h b/fltk/fltk/FillSlider.h
new file mode 100644
index 0000000..7384753
--- /dev/null
+++ b/fltk/fltk/FillSlider.h
@@ -0,0 +1,44 @@
+//
+// "$Id: FillSlider.h 5450 2006-09-19 02:33:42Z spitzak $"
+//
+// Copyright 2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_FillSlider_h
+#define fltk_FillSlider_h
+
+#include "Slider.h"
+
+namespace fltk {
+
+/*! Vertical Slider that is filled from the end (like a progress bar) */
+class FL_API FillSlider : public Slider {
+public:
+ FillSlider(int x,int y,int w,int h,const char *l=0)
+ : Slider(x,y,w,h,l) {slider_size(0);}
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: FillSlider.h 5450 2006-09-19 02:33:42Z spitzak $".
+//
diff --git a/fltk/fltk/Flags.h b/fltk/fltk/Flags.h
new file mode 100644
index 0000000..f79011a
--- /dev/null
+++ b/fltk/fltk/Flags.h
@@ -0,0 +1,112 @@
+//
+// "$Id: Flags.h 6233 2008-09-14 07:54:06Z spitzak $"
+//
+// Unified flags set for fltk. These flags control the appearance of
+// boxes and widgets. This same value is used to:
+//
+// 1. store state and other information in a widget or menu item
+// 2. provide hints to boxes, labeltypes, and images for how to draw
+// 3. provide structural information to an array of menu items
+//
+// These are shared because various parts of the code, especially
+// drawing, want all of this information at once, and providing it
+// as a single word is the easiest way.
+//
+
+// Copyright 2002 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_Flags_h
+#define fltk_Flags_h
+
+namespace fltk {
+
+/// \name fltk/Flags.h
+//@{
+
+/*! Type returned by fltk::Widget::flags() and passed to fltk::Box
+ and many other drawing functions. */
+typedef int Flags;
+
+/*! For back compatability with fltk1.1 */
+typedef Flags Align; // for back compatability
+enum {
+ NO_FLAGS = 0x00000000,
+
+ // from Align, values are comptable with fltk 1.0:
+ // These control the location and appearance of labels:
+ // Warning: unused numbers may change behavior!
+ ALIGN_TOP = 0x00000001, //!< Label is centered above widget
+ ALIGN_BOTTOM = 0x00000002, //!< Label is centered below widget
+ ALIGN_LEFT = 0x00000004, //!< Label is to left of widget
+ ALIGN_RIGHT = 0x00000008, //!< Label is to right of widget
+ ALIGN_CENTER = 0x00000010, //!< (0) The label is centered inside widget
+ ALIGN_INSIDE = 0x00000020, //!< Label is inside widget, image centered
+ ALIGN_CLIP = 0x00000040, //!< The label is clipped to the widget
+ ALIGN_WRAP = 0x00000080, //!< The label is word-wrapped
+ ALIGN_MASK = 0x000000FF, //!< Used to split align() from flags()
+ ALIGN_POSITIONMASK = 0x0000000F, //!< Used to split align() from flags()
+
+ ALIGN_TOPLEFT = (ALIGN_TOP|ALIGN_LEFT), //!< Label is left-justified above widget
+ ALIGN_BOTTOMLEFT = (ALIGN_BOTTOM|ALIGN_LEFT), //!< Label is left-justified below widget
+ ALIGN_TOPRIGHT = (ALIGN_TOP|ALIGN_RIGHT), //!< Label is right-justified above widget
+ ALIGN_BOTTOMRIGHT = (ALIGN_BOTTOM|ALIGN_RIGHT), //!< Label is right-justified below widget
+ ALIGN_CENTERLEFT = (ALIGN_CENTER|ALIGN_LEFT), //!< Label is centered in space left of widget
+ ALIGN_CENTERRIGHT = (ALIGN_CENTER|ALIGN_RIGHT), //!< Label is centered in space left of widget
+ ALIGN_INSIDE_TOP = (ALIGN_INSIDE|ALIGN_TOP), //!< Label is inside widget at top
+ ALIGN_INSIDE_BOTTOM = (ALIGN_INSIDE|ALIGN_BOTTOM), //!< Label is inside widget at bottom
+ ALIGN_INSIDE_LEFT = (ALIGN_INSIDE|ALIGN_LEFT), //!< Label is inside widget at left
+ ALIGN_INSIDE_TOPLEFT = (ALIGN_INSIDE|ALIGN_TOPLEFT), //!< Label is inside widget at top left
+ ALIGN_INSIDE_BOTTOMLEFT = (ALIGN_INSIDE|ALIGN_BOTTOMLEFT),//!< Label is inside widget at bottom left
+ ALIGN_INSIDE_RIGHT = (ALIGN_INSIDE|ALIGN_RIGHT), //!< Label is inside widget at right
+ ALIGN_INSIDE_TOPRIGHT = (ALIGN_INSIDE|ALIGN_TOPRIGHT), //!< Label is inside widget at top right
+ ALIGN_INSIDE_BOTTOMRIGHT= (ALIGN_INSIDE|ALIGN_BOTTOMRIGHT),//!< Label is inside widget bottom right
+ ALIGN_MENU = (ALIGN_INSIDE_LEFT|ALIGN_CLIP), //!< Label is inside widget bottom right
+ ALIGN_BROWSER = ALIGN_MENU, //!< Label is inside widget bottom right
+
+ INACTIVE = 0x00000100, //!< !active()
+ OUTPUT = 0x00000200, //!< does not get events, draw text colors
+ STATE = 0x00000400, //!< state(), value() for buttons
+ SELECTED = 0x00000800, //!< chosen in browser/menu, draw selected colors
+ INVISIBLE = 0x00001000, //!< !visible(), draw_frame()
+ HIGHLIGHT = 0x00002000, //!< draw highlighted
+ CHANGED = 0x00004000, //!< value changed since last callback
+ COPIED_LABEL = 0x00008000, //!< copy_label() was called
+ RAW_LABEL = 0x00010000, //!< don't interpret & or @ in label
+ LAYOUT_VERTICAL = 0x00020000, //!< fltk::Pack puts this widget vertical
+ TAB_TO_FOCUS = 0x00040000, //!< Widget::tab_to_focus();
+ CLICK_TO_FOCUS = 0x00080000, //!< Widget::click_to_focus()
+ INACTIVE_R = 0x00100000, //!< draw it grayed-out
+ FOCUSED = 0x00200000, //!< draw with keyboard focus
+ PUSHED = 0x00400000, //!< draw pushed-in
+ RESIZE_NONE = 0, //!< default behavior
+ RESIZE_FIT = 0x01000000, //!< proportionnaly resize img in widget
+ RESIZE_FILL = 0x00800000, //!< resize img to fill the widget
+ OPENED = STATE //!< opened browser hierarchy parent
+};
+
+//@}
+
+}
+
+#endif
+
+//
+// End of "$Id: Flags.h 6233 2008-09-14 07:54:06Z spitzak $".
+//
diff --git a/fltk/fltk/FloatInput.h b/fltk/fltk/FloatInput.h
new file mode 100644
index 0000000..28f5da6
--- /dev/null
+++ b/fltk/fltk/FloatInput.h
@@ -0,0 +1,51 @@
+//
+// "$Id: FloatInput.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// NumericInput modified to only allow floating point to by
+// typed. Currently this is implemented by the base class by checking
+// type() but this may change in the future.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_FloatInput_h
+#define fltk_FloatInput_h
+
+#include "NumericInput.h"
+
+namespace fltk {
+
+class FL_API FloatInput : public NumericInput {
+ virtual bool replace(int, int, const char*, int);
+public:
+ enum { FLOAT = 1, INT = 2 };
+ FloatInput(int x,int y,int w,int h,const char *l = 0)
+ : NumericInput(x,y,w,h,l) { type(FLOAT); }
+ long lvalue() const;
+ int ivalue() const { return int(lvalue()); }
+ double fvalue() const;
+};
+
+}
+#endif
+
+//
+// End of "$Id: FloatInput.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/Font.h b/fltk/fltk/Font.h
new file mode 100644
index 0000000..ee02a7f
--- /dev/null
+++ b/fltk/fltk/Font.h
@@ -0,0 +1,70 @@
+//
+// "$Id: Font.h 5461 2006-09-19 02:49:30Z spitzak $"
+//
+// Copyright 2004 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_Font_h
+#define fltk_Font_h
+
+#include "Style.h"
+
+namespace fltk {
+
+enum { // values for attributes:
+ BOLD = 1,
+ ITALIC = 2,
+ BOLD_ITALIC = 3
+};
+
+struct FL_API Font {
+ const char* name_;
+ int attributes_;
+ // other fields are added here!
+
+ const char* name() const;
+
+ const char* name(int* p) {*p = attributes_; return name_;}
+
+ Font* plus(int attributes);
+ Font* bold() {return plus(BOLD);}
+ Font* italic() {return plus(ITALIC);}
+
+ int sizes(int*&);
+
+ int encodings(const char**&);
+
+ const char* system_name();
+
+ static const char* current_name();
+
+};
+
+// Find a Font from a name and attributes:
+FL_API Font* font(const char* name, int attrib = 0);
+
+// Find a Font from an fltk1 integer font id:
+FL_API Font* font(int);
+
+// Find and return every font on the system.
+FL_API int list_fonts(Font**& arrayp);
+
+}
+
+#endif
diff --git a/fltk/fltk/GlWindow.h b/fltk/fltk/GlWindow.h
new file mode 100644
index 0000000..a7a4d63
--- /dev/null
+++ b/fltk/fltk/GlWindow.h
@@ -0,0 +1,108 @@
+//
+// "$Id: GlWindow.h 5892 2007-06-08 18:15:37Z spitzak $"
+//
+// OpenGL window. You must subclass this and implement draw() if
+// you want this to work.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_GlWindow_h
+#define fltk_GlWindow_h
+
+#include "Window.h"
+
+namespace fltk {
+
+#ifndef GLContext // you can define this to the correct type if wanted
+typedef void* GLContext; //!< Actually a GLXContext or HGLDC
+#endif
+
+class GlChoice; // structure to hold result of glXChooseVisual
+class GlOverlay; // used by X version for the overlay
+
+enum {
+ NO_AUTO_SWAP = 1024,
+ NO_ERASE_OVERLAY = 2048
+};
+
+class FL_GL_API GlWindow : public Window {
+
+public:
+
+ void create();
+ void flush();
+ void destroy();
+ void layout();
+
+ char valid() const {return valid_;}
+ void valid(char i) {valid_ = i;}
+ void invalidate();
+
+ int mode() const {return mode_;}
+ bool mode(int a);
+ static bool can_do(int);
+ bool can_do() const {return can_do(mode_);}
+
+ GLContext context() const {return context_;}
+ // this wrapper is so c++mangled name does not depend on GLContext type:
+ void context(GLContext v, bool destroy_flag = false) {_context(v,destroy_flag);}
+ void make_current();
+ void swap_buffers();
+ void ortho();
+
+ bool can_do_overlay();
+ void redraw_overlay();
+ void hide_overlay();
+ void make_overlay_current();
+
+ ~GlWindow();
+ GlWindow(int W, int H, const char *l=0) : Window(W,H,l) {init();}
+ GlWindow(int X, int Y, int W, int H, const char *l=0)
+ : Window(X,Y,W,H,l) {init();}
+
+ virtual void draw() = 0;
+ virtual void draw_overlay();
+
+ virtual int handle( int event );
+
+private:
+
+ int mode_;
+ GlChoice *gl_choice;
+ GLContext context_;
+ void _context(void*, bool destroy_flag);
+ char valid_;
+ char damage1_; // damage() of back buffer
+ void init();
+
+ void *overlay;
+ void make_overlay();
+ friend class GlOverlay;
+
+ void draw_swap();
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: GlWindow.h 5892 2007-06-08 18:15:37Z spitzak $".
+//
diff --git a/fltk/fltk/Group.h b/fltk/fltk/Group.h
new file mode 100644
index 0000000..593fa2a
--- /dev/null
+++ b/fltk/fltk/Group.h
@@ -0,0 +1,115 @@
+//
+// "$Id: Group.h 5915 2007-06-19 17:49:29Z spitzak $"
+//
+// Group is the base class for all container widgets. For historical
+// reasons it also provides a default version of layout.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Group_h
+#define fltk_Group_h
+
+#ifndef fltk_Widget_h
+# include "Widget.h"
+#endif
+
+namespace fltk {
+
+class FL_API Group : public Widget {
+public:
+
+ int children() const {return children_;}
+ Widget* child(int n) const {return array_[n];}
+
+ void draw();
+ void layout();
+ int handle(int);
+
+ void begin() {current_ = this;}
+ void end() {current_ = (Group*)parent();}
+ static Group *current() {return current_;}
+ static void current(Group *g) {current_ = g;}
+
+ int find(const Widget*) const;
+ int find(const Widget& o) const {return find(&o);}
+
+ Group(int,int,int,int, const char * = 0, bool begin=false);
+ virtual ~Group();
+ void add(Widget&);
+ void add(Widget* o) {add(*o);}
+ void insert(Widget&, int index);
+ void insert(Widget& o, Widget* before) {insert(o,find(before));}
+ void remove(int index);
+ void remove(Widget& o) {remove(find(o));}
+ void remove(Widget* o) {remove(find(*o));}
+ void remove_all();
+ void replace(int index, Widget&);
+ void replace(Widget& old, Widget& o) {replace(find(old),o);}
+ void swap(int indexA, int indexB);
+ void clear();
+
+ void resizable(Widget& o) {resizable_ = &o;}
+ void resizable(Widget* o) {resizable_ = o;}
+ Widget* resizable() const {return resizable_;}
+ void add_resizable(Widget& o) {resizable_ = &o; add(o);}
+ void init_sizes();
+
+ void focus_index(int v) {focus_index_ = v;}
+ void set_focus(Widget* w) {focus_index_ = find(w);}
+ int focus_index() const {return focus_index_;}
+ static int navigation_key();
+
+ // back compatability function:
+ friend FL_FORMS_API void end_group(); // forms emulation function
+ void fix_old_positions();
+
+ Flags resize_align() const {return resize_align_;}
+ void resize_align(Flags f) {resize_align_ = f;}
+
+protected:
+
+ void draw_child(Widget&) const;
+ void update_child(Widget&) const;
+ void draw_outside_label(Widget&) const ;
+ int initial_w, initial_h;
+ int* sizes();
+ void layout(const Rectangle&, int layout_damage);
+
+private:
+
+ int children_;
+ int focus_index_;
+ Widget** array_;
+ Widget* resizable_;
+ Flags resize_align_;
+ int *sizes_; // remembered initial sizes of children
+
+ static Group *current_;
+
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Group.h 5915 2007-06-19 17:49:29Z spitzak $".
+//
diff --git a/fltk/fltk/HelpDialog.h b/fltk/fltk/HelpDialog.h
new file mode 100644
index 0000000..587cbdc
--- /dev/null
+++ b/fltk/fltk/HelpDialog.h
@@ -0,0 +1,66 @@
+// generated by Fast Light User Interface Designer (fluid) version 2.0100
+
+#ifndef HelpDialog_h
+#define HelpDialog_h
+// Header for //\n// "$Id: HelpDialog.fl 4721 2005-12-19 16:52:...
+#include <fltk/DoubleBufferWindow.h>
+#include <fltk/HelpView.h>
+#include <fltk/Group.h>
+#include <fltk/Button.h>
+#include <fltk/Input.h>
+
+namespace fltk {
+
+class FL_IMAGES_API HelpDialog {
+ int index_;
+ int max_;
+ int line_[100];
+ char file_[100][256];
+ int find_pos_;
+public:
+ HelpDialog();
+private:
+ fltk::DoubleBufferWindow *window_;
+ fltk::HelpView *view_;
+ inline void cb_view__i(fltk::HelpView*, void*);
+ static void cb_view_(fltk::HelpView*, void*);
+ inline void cb_Close_i(fltk::Button*, void*);
+ static void cb_Close(fltk::Button*, void*);
+ fltk::Button *back_;
+ inline void cb_back__i(fltk::Button*, void*);
+ static void cb_back_(fltk::Button*, void*);
+ fltk::Button *forward_;
+ inline void cb_forward__i(fltk::Button*, void*);
+ static void cb_forward_(fltk::Button*, void*);
+ fltk::Button *smaller_;
+ inline void cb_smaller__i(fltk::Button*, void*);
+ static void cb_smaller_(fltk::Button*, void*);
+ fltk::Button *larger_;
+ inline void cb_larger__i(fltk::Button*, void*);
+ static void cb_larger_(fltk::Button*, void*);
+ fltk::Input *find_;
+ inline void cb_find__i(fltk::Input*, void*);
+ static void cb_find_(fltk::Input*, void*);
+public:
+ ~HelpDialog();
+ int h();
+ void hide();
+ void load(const char *f);
+ void position(int xx, int yy);
+ void resize(int xx, int yy, int ww, int hh);
+ void show();
+ void show(int argc, char **argv);
+ void textsize(uchar s);
+ uchar textsize();
+ void topline(const char *n);
+ void topline(int n);
+ void value(const char *f);
+ const char * value() const;
+ int visible();
+ int w();
+ int x();
+ int y();
+};
+}
+// Header for //\n// End of "$Id: HelpDialog.fl 4721 2005-12-19...
+#endif
diff --git a/fltk/fltk/HelpView.h b/fltk/fltk/HelpView.h
new file mode 100644
index 0000000..152cf29
--- /dev/null
+++ b/fltk/fltk/HelpView.h
@@ -0,0 +1,201 @@
+//
+// "$Id: HelpView.h 5860 2007-05-30 18:32:26Z sanel.z $"
+//
+// Help Viewer widget definitions.
+//
+// Copyright 1997-2006 by Easy Software Products.
+// Image support donated by Matthias Melcher, Copyright 2000.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef HelpView_H
+# define HelpView_H
+
+//
+// Include necessary header files...
+//
+
+# include <stdio.h>
+# include <fltk/Group.h>
+# include <fltk/Scrollbar.h>
+# include <fltk/draw.h>
+# include <fltk/SharedImage.h>
+
+namespace fltk {
+
+//
+// HelpFunc type - link callback function for files...
+//
+
+
+typedef const char *(HelpFunc) (Widget *, const char *);
+
+
+//
+// HelpBlock structure...
+//
+
+struct HelpBlock {
+ const char *start, // Start of text
+ *end; // End of text
+ uchar border; // Draw border?
+ Color bgcolor; // Background color
+ int x, // Indentation/starting X coordinate
+ y, // Starting Y coordinate
+ w, // Width
+ h; // Height
+ int line[32]; // Left starting position for each line
+};
+
+//
+// HelpLink structure...
+//
+
+struct HelpLink {
+ char filename[192], // Reference filename
+ name[32]; // Link target (blank if none)
+ int x, // X offset of link text
+ y, // Y offset of link text
+ w, // Width of link text
+ h; // Height of link text
+};
+
+//
+// HelpTarget structure...
+//
+
+struct HelpTarget {
+ char name[32]; // Target name
+ int y; // Y offset of target
+};
+
+//
+// HelpView class...
+//
+
+class FL_API HelpView : public Group //// Help viewer widget
+{
+ enum { RIGHT = -1, CENTER, LEFT }; // Alignments
+
+ char title_[1024]; // Title string
+ Color defcolor_, // Default text color
+ bgcolor_, // Background color
+ textcolor_, // Text color
+ linkcolor_; // Link color
+ Font *textfont_; // Default font for text
+ int textsize_; // Default font size
+ const char *value_; // HTML text value
+
+ int nblocks_, // Number of blocks/paragraphs
+ ablocks_; // Allocated blocks
+ HelpBlock *blocks_; // Blocks
+
+ int nfonts_; // Number of fonts in stack
+ Font *fonts_[100]; // Font stack
+ int fontsizes_[100];
+
+ HelpFunc *link_; // Link transform function
+
+ int nlinks_, // Number of links
+ alinks_; // Allocated links
+ HelpLink *links_; // Links
+
+ int ntargets_, // Number of targets
+ atargets_; // Allocated targets
+ HelpTarget *targets_; // Targets
+
+ char directory_[1024]; // Directory for current file
+ char filename_[1024]; // Current filename
+ int topline_, // Top line in document
+ leftline_, // Lefthand position
+ size_, // Total document length
+ hsize_; // Maximum document width
+ Scrollbar *scrollbar_, // Vertical scrollbar for document
+ *hscrollbar_; // Horizontal scrollbar
+
+ HelpBlock *add_block (const char *s, int xx, int yy, int ww, int hh,
+ uchar border = 0);
+ void add_link (const char *n, int xx, int yy, int ww, int hh);
+ void add_target (const char *n, int yy);
+ static int compare_targets (const HelpTarget * t0,
+ const HelpTarget * t1);
+ int do_align (HelpBlock * block, int line, int xx, int a, int &l);
+ void write_text (const char * buf, const char * ptr, int X, int Y, int X1, int underline);
+ void draw ();
+ void format ();
+ void format_table (int *table_width, int *columns, const char *table);
+ int get_align (const char *p, int a);
+ const char *get_attr (const char *p, const char *n, char *buf, int bufsize);
+ Color get_color (const char *n, Color c);
+ SharedImage *get_image (const char *name, int W, int H);
+ int get_length (const char *l);
+ int handle (int);
+
+ void initfont (Font *&f, int &s);
+ void pushfont (Font *f, int s);
+ void popfont (Font *&f, int &s);
+
+public:
+
+ HelpView (int xx, int yy, int ww, int hh, const char *l = 0);
+
+ ~HelpView ();
+ const char *directory () const {
+ if (directory_[0])
+ return (directory_);
+ else
+ return ((const char *) 0);
+ }
+ const char *filename () const {
+ if (filename_[0])
+ return (filename_);
+ else
+ return ((const char *) 0);
+ } void link (HelpFunc * fn) {
+ link_ = fn;
+ }
+ int load (const char *f);
+ void layout();
+ int size () const { return (size_); }
+
+ void textcolor (Color c);
+ void textfont (Font *f);
+ void textsize (int s);
+
+ Color textcolor () const { return (defcolor_); }
+ Font *textfont () const { return (textfont_); }
+ int textsize () const { return (textsize_); }
+ const char *title () { return (title_); }
+ void topline (const char *n);
+ void topline (int);
+ int topline () const { return (topline_); }
+ void leftline (int);
+ int leftline () const { return (leftline_); }
+ void value (const char *v);
+ const char *value () const { return (value_); }
+ int find (const char *s,int p);
+};
+
+} // namespace fltk
+
+#endif // !HelpView_H
+
+//
+// End of "$Id: HelpView.h 5860 2007-05-30 18:32:26Z sanel.z $".
+//
diff --git a/fltk/fltk/HighlightButton.h b/fltk/fltk/HighlightButton.h
new file mode 100644
index 0000000..fc49618
--- /dev/null
+++ b/fltk/fltk/HighlightButton.h
@@ -0,0 +1,45 @@
+//
+// "$Id: HighlightButton.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// This button highlights even if the default style does not do so.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_HighlightButton_h
+#define fltk_HighlightButton_h
+
+#include "Button.h"
+
+namespace fltk {
+
+class FL_API HighlightButton : public Button {
+public:
+ HighlightButton(int x,int y,int w,int h,const char *l=0);
+ static NamedStyle* default_style;
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: HighlightButton.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/Image.h b/fltk/fltk/Image.h
new file mode 100644
index 0000000..b3ec714
--- /dev/null
+++ b/fltk/fltk/Image.h
@@ -0,0 +1,116 @@
+// "$Id: Image.h 5768 2007-04-08 19:58:56Z spitzak $"
+//
+// Copyright 1998-2005 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_Image_h
+#define fltk_Image_h
+
+#include "Symbol.h"
+# undef OPAQUE // fix for windows.h
+
+namespace fltk {
+
+class FL_API Widget;
+struct Picture; // secret internal system-specific data
+
+class FL_API Image : public Symbol {
+
+ PixelType pixeltype_; int w_, h_;
+ Picture* picture;
+ int flags; enum {COPIED=1, FETCHED=2, FORCEARGB32=4, MEASUREFETCH=8};
+
+ static unsigned long memused_;
+
+public:
+
+ Image(const char* name=0) :
+ Symbol(name), pixeltype_(fltk::RGB32), w_(12), h_(12),
+ picture(0), flags(MEASUREFETCH) {}
+ Image(int w, int h, const char* name=0) :
+ Symbol(name), pixeltype_(fltk::RGB32), w_(w), h_(h),
+ picture(0), flags(0) {}
+ Image(PixelType p, int w, int h, const char* name=0) :
+ Symbol(name), pixeltype_(p), w_(w), h_(h),
+ picture(0), flags(0) {}
+ Image(const uchar* d, PixelType p, int w, int h) :
+ Symbol(), picture(0) {setimage(d,p,w,h);}
+ Image(const uchar* d, PixelType p, int w, int h, int linedelta) :
+ Symbol(), picture(0) {setimage(d,p,w,h,linedelta);}
+ ~Image();
+
+ PixelType pixeltype() const {return pixeltype_;}
+ int depth() const {return fltk::depth(pixeltype_);}
+ int w() const {return w_;}
+ int width() const {return w_;}
+ int h() const {return h_;}
+ int height() const {return h_;}
+
+ void setpixeltype(PixelType);
+ void setsize(int w, int h);
+ void setpixels(const uchar* d, const Rectangle&, int linedelta);
+ void setpixels(const uchar* d, const Rectangle& r) {setpixels(d,r,depth()*r.w());}
+ void setpixels(const uchar* d, int y);
+ uchar* linebuffer(int y);
+
+ void setimage(const uchar* d, PixelType p, int w, int h, int linedelta);
+ void setimage(const uchar* d, PixelType p, int w, int h) {setimage(d,p,w,h,fltk::depth(p)*w);}
+
+ uchar* buffer();
+ const uchar* buffer() const;
+ void set_forceARGB32();
+ void clear_forceARGB32();
+ bool forceARGB32() const {return (flags&FORCEARGB32) != 0;}
+ PixelType buffer_pixeltype() const;
+ int buffer_depth() const;
+ int buffer_width() const;
+ int buffer_height() const;
+ int buffer_linedelta() const;
+ void buffer_changed() {flags &= ~COPIED;}
+ void destroy();
+
+ void draw(int x, int y) const;
+ void draw(const Rectangle& r) const {_draw(r);}
+ void draw(const Rectangle& from, const Rectangle& to) const;
+
+ void _draw(const Rectangle&) const; // Symbol virtual method
+ void _measure(int& W, int& H) const; // Symbol virtual method
+ bool fills_rectangle() const; // Symbol virtual method
+ virtual bool fetch(); // for image file reading subclasses
+ void fetch_if_needed() const;
+ void refetch() {flags &= ~FETCHED;}
+
+ unsigned long mem_used() const;
+ static unsigned long total_mem_used() {return memused_;}
+
+ // for back compatability with fltk1 only:
+ void label(Widget* o);
+
+ // see also: GSave
+ void make_current();
+
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Image.h 5768 2007-04-08 19:58:56Z spitzak $".
+//
diff --git a/fltk/fltk/Input.h b/fltk/fltk/Input.h
new file mode 100644
index 0000000..9a8627e
--- /dev/null
+++ b/fltk/fltk/Input.h
@@ -0,0 +1,132 @@
+//
+// "$Id: Input.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// One-line text input field.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Input_h
+#define fltk_Input_h
+
+#ifndef fltk_Widget_h
+#include "Widget.h"
+#endif
+
+namespace fltk {
+
+class FL_API Input : public Widget {
+public:
+ enum { // values for type()
+ NORMAL = 0,
+ FLOAT_INPUT = 1,
+ INT_INPUT = 2,
+ SECRET = 3,
+ MULTILINE = 4,
+ WORDWRAP = 5
+ };
+
+ Input(int, int, int, int, const char* = 0);
+ ~Input();
+ static NamedStyle* default_style;
+
+ void draw();
+ void draw(const Rectangle&);
+ int handle(int);
+ int handle(int event, const Rectangle&);
+ bool handle_key();
+
+ bool text(const char*);
+ bool text(const char*, int);
+ bool static_text(const char*);
+ bool static_text(const char*, int);
+ const char* text() const {return text_;}
+ char at(int i) const {return text_[i];}
+#ifdef FLTK_1_WIDGET // back-compatability section:
+ char index(int i) const {return text_[i];}
+#endif
+#ifndef SKIP_DEPRECIATED
+ bool value(const char* v) {return text(v);}
+ bool value(const char* v, int n) {return text(v,n);}
+ bool static_value(const char* v) {return static_text(v);}
+ const char* value() const {return text_;}
+#endif
+ int size() const {return size_;}
+ void reserve(int newsize);
+
+ int position() const {return position_;}
+ int mark() const {return mark_;}
+ void position(int p, int m);
+ void position(int p) {position(p, p);}
+ void up_down_position(int position, bool extend);
+ void mark(int m) { position(position(), m);}
+
+ virtual bool replace(int, int, const char*, int);
+ bool cut() {return replace(position(), mark(), 0, 0);}
+ bool cut(int n) {return replace(position(), position()+n, 0, 0);}
+ bool cut(int a, int b) {return replace(a, b, 0, 0);}
+ bool insert(const char* t);
+ bool insert(const char* t, int l){return replace(position_, mark_, t, l);}
+ bool replace(int a, int b, char c) {return replace(a,b,&c,1);}
+ bool copy(bool clipboard = true);
+ bool undo();
+ void maybe_do_callback();
+
+ int word_start(int i) const;
+ int word_end(int i) const;
+ int line_start(int i) const;
+ int line_end(int i) const;
+ int mouse_position(const Rectangle&) const;
+ int xscroll() const {return xscroll_;}
+ int yscroll() const {return yscroll_;}
+
+private:
+
+ const char* text_;
+ char* buffer;
+
+ int size_;
+ int bufsize;
+ int position_;
+ int mark_;
+ int xscroll_, yscroll_;
+ int mu_p;
+ int label_width;
+
+ const char* expand(const char*, char*, int) const;
+ float expandpos(const char*, const char*, const char*, int*) const;
+ void minimal_update(int, int);
+ void minimal_update(int p);
+ void erase_cursor_at(int p);
+
+ void setfont() const;
+
+ void shift_position(int p);
+ void shift_up_down_position(int p);
+
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Input.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/InputBrowser.h b/fltk/fltk/InputBrowser.h
new file mode 100644
index 0000000..d756e25
--- /dev/null
+++ b/fltk/fltk/InputBrowser.h
@@ -0,0 +1,100 @@
+//
+// "$Id: InputBrowser.h 5571 2006-12-30 08:20:02Z spitzak $"
+//
+// MicroSoft style "ComboBox" with the menu appearing below with a
+// scrollbar. I would like to use the name "ComboBox" or "InputChoice"
+// for a more user-friendly version which uses pop-up menus and
+// positions the menu with the cursor pointing at the current item,
+// but this version can be used to get what MicroSoft users expect.
+// The implementation is a good example of how to get a widget to appear
+// in a modal pop-up window.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_InputBrowser_h
+#define fltk_InputBrowser_h
+
+#include "Menu.h"
+#include "Input.h"
+
+namespace fltk {
+
+class ComboBrowser;
+class ComboWindow;
+
+class FL_API InputBrowser : public Menu {
+public:
+ enum { // values for type()
+ NORMAL = 0,
+ NONEDITABLE = 1,
+ INDENTED = 2,
+ NONEDITABLE_INDENTED = 3
+ };
+
+ InputBrowser(int,int,int,int,const char * = 0);
+ ~InputBrowser();
+ static NamedStyle* default_style;
+
+ void popup();
+ void hide_popup();
+ virtual int popup(int x, int y, int w, int h) { InputBrowser::popup(); return Menu::popup(Rectangle(x,y,w,h)); }
+
+ virtual int handle(int);
+
+ Widget* item() const ;
+ Widget* item(Widget* v) const ;
+
+ void minw(int i) { minw_ = i; }
+ void minh(int i) { minh_ = i; }
+ int minw() { return minw_; }
+ int minh() { return minh_; }
+
+ void maxw(int i) { maxw_ = i; }
+ void maxh(int i) { maxh_ = i; }
+ int maxw() { return maxw_; }
+ int maxh() { return maxh_; }
+
+ void text(const char *v) { m_input.text(v); }
+ const char *text() const { return m_input.text(); }
+
+protected:
+ virtual void draw();
+ static void input_cb(Input *w, InputBrowser *ib);
+
+ Input m_input;
+
+ ComboWindow *win;
+ ComboBrowser *list;
+
+ friend class ComboWindow;
+ friend class ComboBrowser;
+
+ int minw_, minh_, maxw_, maxh_;
+ int over_now, over_last;
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: InputBrowser.h 5571 2006-12-30 08:20:02Z spitzak $".
+//
diff --git a/fltk/fltk/IntInput.h b/fltk/fltk/IntInput.h
new file mode 100644
index 0000000..259178d
--- /dev/null
+++ b/fltk/fltk/IntInput.h
@@ -0,0 +1,42 @@
+//
+// "$Id: IntInput.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_IntInput_h
+#define fltk_IntInput_h
+
+#include "FloatInput.h"
+
+namespace fltk {
+
+class FL_API IntInput : public FloatInput {
+public:
+ IntInput(int x,int y,int w,int h,const char *l = 0)
+ : FloatInput(x,y,w,h,l) { type(INT); }
+};
+
+}
+#endif
+
+//
+// End of "$Id: IntInput.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/InvisibleBox.h b/fltk/fltk/InvisibleBox.h
new file mode 100644
index 0000000..b504203
--- /dev/null
+++ b/fltk/fltk/InvisibleBox.h
@@ -0,0 +1,30 @@
+//
+// "$Id: InvisibleBox.h 5698 2007-02-19 05:40:36Z spitzak $"
+//
+// This is a box that is invisible due to not having a box. The
+// label still prints so it can be used to position labels. Also
+// this is useful as a resizable() widget.
+
+#ifndef fltk_InvisibleBox_h
+#define fltk_InvisibleBox_h
+
+#include "Widget.h"
+
+namespace fltk {
+
+class FL_API InvisibleBox : public Widget {
+public:
+ InvisibleBox(int x, int y, int w, int h, const char *l=0);
+ InvisibleBox(Box* b, int x, int y, int w, int h, const char *l);
+ static NamedStyle* default_style;
+ int handle(int);
+ void draw();
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: InvisibleBox.h 5698 2007-02-19 05:40:36Z spitzak $".
+//
diff --git a/fltk/fltk/Item.h b/fltk/fltk/Item.h
new file mode 100644
index 0000000..bfc808a
--- /dev/null
+++ b/fltk/fltk/Item.h
@@ -0,0 +1,57 @@
+//
+// "$Id: Item.h 5576 2007-01-03 00:20:28Z spitzak $"
+//
+// Widget designed to be a menu or browser item.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Item_h
+#define fltk_Item_h
+
+#ifndef fltk_Widget_h
+#include "Widget.h"
+#endif
+
+namespace fltk {
+
+class FL_API Item : public Widget {
+public:
+
+ void draw();
+ void layout();
+ int handle(int);
+
+ Item(const char* label = 0);
+ Item(const char* label, const Symbol*);
+ Item(const char* label, int shortcut, Callback *callback=0, void *user_data_=0, int flags=0);
+
+ static NamedStyle* default_style;
+ static void set_style(const Style*, bool menubar);
+ static void set_style(const Widget* w, bool f) {set_style(w->style(),f);}
+ static void clear_style() {set_style(Widget::default_style,false);}
+
+private:
+ void init(); // common constructor initialization
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/ItemGroup.h b/fltk/fltk/ItemGroup.h
new file mode 100644
index 0000000..715bc18
--- /dev/null
+++ b/fltk/fltk/ItemGroup.h
@@ -0,0 +1,75 @@
+//
+// "$Id: ItemGroup.h 5575 2007-01-02 17:31:40Z spitzak $"
+//
+// Widget designed to be a nested list in a menu or browser. This
+// copies the drawing and style code from Item. I did not modify the
+// base Menu class this way because the style inheritance would mess
+// up the styles of MenuButton and MenuBar. Code is in Item.cxx
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_ItemGroup_h
+#define fltk_ItemGroup_h
+
+#include "Menu.h"
+
+namespace fltk {
+
+class FL_API ItemGroup : public Menu {
+public:
+ void draw();
+ void layout();
+ int handle(int);
+ ItemGroup(const char* label = 0, bool begin=false);
+ ItemGroup(const char* label, const Symbol*, bool begin=false);
+};
+
+/** \class MenuSection
+ This class will elegantly facilitate dynamic (& hand-made) menu code writing
+ by creating and calling begin() on an ItemGroup in the constructor and
+ calling end() in the destructor:
+ \code
+ mymenu->begin();
+ new Item("in main menu");
+ {MenuSection g("submenu title");
+ new Item("in submenu");
+ new Item("also in submenu");
+ } // destructor ends the submenu
+ \endcode
+*/
+class FL_API MenuSection {
+ ItemGroup* group_;
+public:
+ //! build a typical submenu group section, then call begin()
+ MenuSection(const char* label = 0) { group_ = new ItemGroup(label,true); }
+
+ MenuSection(const char* label, const Symbol* i) { group_ = new ItemGroup(label,i,true); }
+
+ //! call end() at destruction
+ ~MenuSection() {group_->end();}
+
+ //! The ItemGroup created by this.
+ ItemGroup* group() const {return group_;}
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/LabelType.h b/fltk/fltk/LabelType.h
new file mode 100644
index 0000000..85b0a41
--- /dev/null
+++ b/fltk/fltk/LabelType.h
@@ -0,0 +1,61 @@
+//
+// "$Id: LabelType.h 5770 2007-04-10 10:42:07Z spitzak $"
+//
+// A LabelType determines how to draw the text of the label. This
+// is not used very much, it can be used to draw engraved or shadowed
+// labels. You could also put in code that interprets the text of
+// the label and draws anything you want with it.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_LabelType_h
+#define fltk_LabelType_h
+
+#include "Flags.h"
+#include "Rectangle.h"
+
+namespace fltk {
+
+class Style;
+
+class FL_API LabelType {
+public:
+ virtual void draw(const char*, const Rectangle&, Flags) const;
+ const char* name;
+ LabelType* next;
+ static LabelType* first;
+ LabelType(const char* n) : name(n), next(first) {first = this;}
+ static LabelType* find(const char* name);
+ virtual ~LabelType(); // virtual to shut up C++ warnings
+};
+
+// You can use this to draw overlapping patterns
+class FL_API EngravedLabel : public LabelType {
+ const int* data;
+public:
+ void draw(const char*, const Rectangle&, Flags) const;
+ EngravedLabel(const char * n, const int p[][3])
+ : LabelType(n), data((const int*)p) {}
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/LightButton.h b/fltk/fltk/LightButton.h
new file mode 100644
index 0000000..bbdac0d
--- /dev/null
+++ b/fltk/fltk/LightButton.h
@@ -0,0 +1,45 @@
+//
+// "$Id: LightButton.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Forms/XForms/Flame style button with indicator light on left
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Light_Button_h
+#define fltk_Light_Button_h
+
+#include "CheckButton.h"
+
+namespace fltk {
+
+class FL_API LightButton : public CheckButton {
+public:
+ LightButton(int x,int y,int w,int h,const char *l = 0);
+ static NamedStyle* default_style;
+ static void default_glyph(const Widget*, int, int,int,int,int, Flags);
+};
+
+}
+#endif
+
+//
+// End of "$Id: LightButton.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/LineDial.h b/fltk/fltk/LineDial.h
new file mode 100644
index 0000000..68f08f9
--- /dev/null
+++ b/fltk/fltk/LineDial.h
@@ -0,0 +1,44 @@
+//
+// "$Id: LineDial.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_LineDial_h
+#define fltk_LineDial_h
+
+#include "Dial.h"
+
+namespace fltk {
+
+/*! Dial but the constructor sets type() to LINE, so it draws a
+ pointer rather than a dot. */
+class FL_API LineDial : public Dial {
+public:
+ LineDial(int x,int y,int w,int h, const char *l = 0) :
+ Dial(x,y,w,h,l) {type(LINE);}
+};
+
+}
+#endif
+
+//
+// End of "$Id: LineDial.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/Menu.h b/fltk/fltk/Menu.h
new file mode 100644
index 0000000..8659627
--- /dev/null
+++ b/fltk/fltk/Menu.h
@@ -0,0 +1,152 @@
+// "$Id: Menu.h 5708 2007-02-23 00:52:14Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_Menu_h
+#define fltk_Menu_h
+
+#include "Group.h"
+
+namespace fltk {
+
+class FL_API Menu;
+
+class FL_API List {
+public:
+ virtual int children(const Menu*, const int* indexes, int level);
+ virtual Widget* child(const Menu*, const int* indexes, int level);
+ virtual void flags_changed(const Menu*, Widget*);
+ virtual ~List();
+};
+
+enum { // Special flag values for add(), you can also use Flags.h values
+ // These match values from Fl_Menu_Item in fltk 1.0:
+ MENU_TOGGLE = 2,
+ MENU_RADIO = 8,
+ SUBMENU = 0x40,
+ MENU_DIVIDER = 0x80
+};
+
+class FL_API Menu : public Group {
+
+public:
+
+ Menu(int,int,int,int, const char* l=0, bool begin=false);
+ List* list() const {return list_;}
+ void list(List* l) {list_ = l;}
+ void layout();
+
+ static NamedStyle* default_style;
+
+ int children(const int* indexes, int level) const ;
+ int children(int index) const;
+ int children() const ;
+ Widget* child(const int* indexes, int level) const ;
+ Widget* child(int index) const ;
+
+ Widget* item() const {return item_;}
+ Widget* item(Widget* v) {return item_ = v;}
+
+ bool set_item(const int* indexes, int level);
+ Widget* get_item();
+ int value() const {return Group::focus_index();}
+ bool value(int v);
+ int size() const {return children();}
+
+ void layout_in(Widget*,const int* indexes, int level) const;
+ void draw_in(Widget*,const int* indexes, int level, int, int) const;
+ int find_selected(Widget*,const int* indexes, int level, int, int) const;
+ Rectangle get_location(Widget*,const int* indexes, int level, int) const;
+
+ int popup(const Rectangle&, const char* title=0,bool menubar=false);
+ int handle_shortcut();
+ static void default_callback(Widget*, void*);
+ void execute(Widget*);
+ void global();
+
+ Widget* find(const char*) const;
+ void remove(const char* l) { delete find(l); }
+ Widget* add(const char*, unsigned shortcut, Callback*, void* = 0, int = 0);
+ Widget* replace(const char*, unsigned shortcut, Callback*, void* = 0, int = 0);
+ Widget* insert(int n, const char*, unsigned shortcut, Callback*, void* = 0, int = 0);
+ Widget* add(const char*, void* = 0);
+ Group* add_group(const char* label, Group* parent=0, void* data=0);
+ Widget* add_leaf(const char* label, Group* parent=0, void* data=0);
+ Widget* add_many(const char*);
+ Widget* replace(const char*, void* = 0);
+ Widget* insert(int n, const char*, void* = 0);
+
+ // Undo the overrides of stuff from Group:
+ void add(Widget& o) {Group::add(o);}
+ void add(Widget* o) {add(*o);}
+ void insert(Widget& o, int n) {Group::insert(o, n);}
+ void replace(int index, Widget& o) {Group::replace(index, o);}
+ void replace(Widget& old, Widget& o) {Group::replace(old,o);}
+ void remove(int index) {Group::remove(index);}
+ void remove(Widget& o) {Group::remove(o);}
+ void remove(Widget* o) {Group::remove(o);}
+
+#ifdef Fl_Menu_Item_h
+ // Commented-out methods cannot be emulated.
+//const Fl_Menu_Item* test_shortcut();
+//Fl_Menu_Item* menu() const;
+ void copy(const Fl_Menu_Item* m, void* data = 0) {clear(); m->add_to(this,data);}
+ void menu(const Fl_Menu_Item* m) {copy(m,0);}
+ void replace(int n, const char* s) { child(n)->label(s); }
+ void replace(const char* l, const char* s) { find(l)->label(s); }
+ void shortcut(const char* l, unsigned s) { find(l)->shortcut(s); }
+ void shortcut(unsigned s) {Widget::shortcut(s);}
+ unsigned shortcut() const {return Widget::shortcut();}
+ void shortcut(int i, unsigned s) { child(i)->shortcut(s); }
+//int index(Fl_Menu_Item* m) const { return m - menu_; }
+//int index(const char* label) const;
+//void replace(Fl_Menu_Item* m, const char* s) { replace(index(m), s); }
+//void remove(Fl_Menu_Item* m) { remove(index(m)); }
+//void shortcut(Fl_Menu_Item* m, unsigned s) {shortcut(index(m), s);}
+//void mode(int i,int x);
+//void mode(Fl_Menu_Item* m, int x) {mode(index(m), x);}
+//void mode(const char* l, int x) {mode(index(l), x);}
+ unsigned mode(int i) const {return child(i)->flags() >> 8;}
+//unsigned mode(Fl_Menu_Item* m) const {return mode(index(m));}
+ unsigned mode(const char* l) const {return find(l)->flags() >> 8;}
+
+ // in fltk 1.0 these returned/took an Fl_Menu_Item*:
+ Widget* mvalue() {return item();}
+//void value(Widget* o) {set_item(o);}
+
+ const char *text(int i) const {return i >= 0 ? child(i)->label() : 0;}
+ const char *text() const {Widget* w = item(); return w ? w->label() : 0;}
+#endif
+
+protected:
+ Widget *try_popup(const Rectangle&,const char* title=0,bool menubar=false);
+
+private:
+ List* list_;
+ Widget* item_;
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Menu.h 5708 2007-02-23 00:52:14Z spitzak $".
+//
diff --git a/fltk/fltk/MenuBar.h b/fltk/fltk/MenuBar.h
new file mode 100644
index 0000000..ef7a747
--- /dev/null
+++ b/fltk/fltk/MenuBar.h
@@ -0,0 +1,51 @@
+//
+// "$Id: MenuBar.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Menu bar, each submenu is a pull-down menu. Any items act like
+// a button in the menu bar.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_MenuBar_h
+#define fltk_MenuBar_h
+
+#include "Menu.h"
+
+namespace fltk {
+
+class FL_API MenuBar : public Menu {
+public:
+ MenuBar(int x,int y,int w,int h,const char *l=0);
+ static NamedStyle* default_style;
+ int handle(int);
+protected:
+ void draw();
+private:
+ int highlight_, last_;
+ Widget *lastfocus_;
+};
+
+}
+#endif
+
+//
+// End of "$Id: MenuBar.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/MenuBuild.h b/fltk/fltk/MenuBuild.h
new file mode 100644
index 0000000..9814baf
--- /dev/null
+++ b/fltk/fltk/MenuBuild.h
@@ -0,0 +1,37 @@
+// "$Id: MenuBuild.h 4319 2005-05-08 19:18:50Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_Menu_Build_h
+#define fltk_Menu_Build_h
+
+// include facility for building dynamic fltk2 menus
+#include "ItemGroup.h"
+#include "Item.h"
+#include "Divider.h"
+#include "MenuBar.h"
+#include "Choice.h"
+#include "PopupMenu.h"
+#include "events.h"
+#endif
+
+//
+// End of "$Id: Menu.h 4319 2005-05-08 19:18:50Z spitzak $".
+//
diff --git a/fltk/fltk/MenuWindow.h b/fltk/fltk/MenuWindow.h
new file mode 100644
index 0000000..9b9d16d
--- /dev/null
+++ b/fltk/fltk/MenuWindow.h
@@ -0,0 +1,55 @@
+// "$Id: MenuWindow.h 5600 2007-01-13 00:04:55Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_MenuWindow_h
+#define fltk_MenuWindow_h
+
+#include "Window.h"
+
+namespace fltk {
+
+class FL_API MenuWindow : public Window {
+ enum {NO_OVERLAY = 0x08000000};
+
+public:
+
+ virtual void create();
+ virtual void flush();
+ virtual void destroy();
+
+ static NamedStyle* default_style;
+
+ int overlay() {return !flag(NO_OVERLAY);}
+ void set_overlay() {clear_flag(NO_OVERLAY);}
+ void clear_overlay() {set_flag(NO_OVERLAY);}
+ ~MenuWindow();
+ MenuWindow(int W, int H, const char *l = 0);
+ MenuWindow(int X, int Y, int W, int H, const char *l = 0);
+
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: MenuWindow.h 5600 2007-01-13 00:04:55Z spitzak $".
+//
diff --git a/fltk/fltk/Monitor.h b/fltk/fltk/Monitor.h
new file mode 100644
index 0000000..2ddca44
--- /dev/null
+++ b/fltk/fltk/Monitor.h
@@ -0,0 +1,46 @@
+// "$Id: Monitor.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_Monitor_h
+#define fltk_Monitor_h
+
+#include "Rectangle.h"
+
+namespace fltk {
+
+class FL_API Monitor : public Rectangle {
+ int depth_;
+ float dpi_x_;
+ float dpi_y_;
+ public:
+ Rectangle work; // Allows you to do rect->work.x(), etc.
+ int depth() const {return depth_;}
+ float dpi_x() const {return dpi_x_;}
+ float dpi_y() const {return dpi_y_;}
+ float dpi() const {return dpi_y_;}
+ static int list(const Monitor**);
+ static const Monitor& all();
+ static const Monitor& find(int x, int y);
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/MultiBrowser.h b/fltk/fltk/MultiBrowser.h
new file mode 100644
index 0000000..813fbe0
--- /dev/null
+++ b/fltk/fltk/MultiBrowser.h
@@ -0,0 +1,47 @@
+//
+// "$Id: MultiBrowser.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Browser that lets the user select more than one item at a time.
+// Most of the implementation is in the base Browser class.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_MultiBrowser_h
+#define fltk_MultiBrowser_h
+
+#include "Browser.h"
+
+namespace fltk {
+
+// This class is entirely inline. If that changes, add FL_API to its declaration
+class MultiBrowser : public Browser {
+public:
+ MultiBrowser(int x,int y,int w,int h,const char *l=0)
+ : Browser(x,y,w,h,l) {type(MULTI);}
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: MultiBrowser.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/MultiImage.h b/fltk/fltk/MultiImage.h
new file mode 100644
index 0000000..2e95e8e
--- /dev/null
+++ b/fltk/fltk/MultiImage.h
@@ -0,0 +1,103 @@
+//
+// "$Id: MultiImage.h 5515 2006-10-10 09:46:05Z fabien $"
+//
+// Image type that draws a different image depending on the flags,
+// for instace VALUE or SELECTED or HIGHLIGHT.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_MultiImage_h
+#define fltk_MultiImage_h
+
+#include "Symbol.h"
+#include <stdarg.h>
+
+namespace fltk {
+
+class FL_API MultiImage : public Symbol
+{
+ const Symbol* image0;
+ struct MultiImagePair {
+ const Symbol* image;
+ Flags flags;
+ };
+ MultiImagePair* pairs;
+ unsigned n_images;
+
+public:
+ void _measure(int&, int&) const;
+ void _draw(const Rectangle&) const;
+ const Symbol* current_image() const;
+ void inset(Rectangle&) const;
+ bool fills_rectangle() const;
+ bool is_frame() const;
+
+ ~MultiImage() { release();}
+
+ //! for MultiImage arrays construction using set() for post initialization
+ MultiImage() { pairs=0; n_images = 0; }
+
+ //! constructor for unlimited images state affectation
+ MultiImage(unsigned count, const Symbol* img0, va_list ap) { set(count,img0, ap); }
+
+ void set (unsigned count, const Symbol* img0, ...); // fabien: need to be accessible because of MultiImage arrays with post (set) affectations
+
+ void add(Flags flags, const Symbol& image);
+
+ //! Destroys everything except image0.
+ void release() { delete[] pairs; pairs = 0; n_images = 0; }
+
+ MultiImage(const Symbol& img0) : image0(&img0), pairs(0), n_images(0) {}
+
+ /* compatibility convenient constructors */
+ MultiImage(const Symbol& img0, Flags f1, const Symbol& img1) { set(2, &img0,f1,&img1); }
+ MultiImage(const Symbol& img0, Flags f1, const Symbol& img1,Flags f2, const Symbol& img2) {
+ set(3, &img0, f1, &img1, f2, &img2);
+ }
+ MultiImage(const Symbol& img0, Flags f1, const Symbol& img1, Flags f2, const Symbol& img2, Flags f3, const Symbol& img3) {
+ set(4, &img0, f1, &img1, f2, &img2, f3);
+ }
+ MultiImage(const Symbol& img0, Flags f1, const Symbol& img1, Flags f2, const Symbol& img2, Flags f3, const Symbol& img3,
+ Flags f4, const Symbol& img4) {
+ set(5, &img0, f1, &img1, f2, &img2, f3, &img3, f4, &img4);
+ }
+ MultiImage(const Symbol& img0, Flags f1, const Symbol& img1, Flags f2, const Symbol& img2, Flags f3, const Symbol& img3,
+ Flags f4, const Symbol& img4, Flags f5, const Symbol& img5) {
+ set(6, &img0, f1, &img1, f2, &img2, f3, &img3, f4, &img4, f5, &img5);
+ }
+ MultiImage(const Symbol& img0, Flags f1, const Symbol& img1, Flags f2, const Symbol& img2, Flags f3, const Symbol& img3,
+ Flags f4, const Symbol& img4, Flags f5, const Symbol& img5, Flags f6, const Symbol& img6) {
+ set(7, &img0, f1, &img1, f2, &img2, f3, &img3, f4, &img4, f5, &img5, f6, &img6);
+ }
+ MultiImage(const Symbol& img0, Flags f1, const Symbol& img1, Flags f2, const Symbol& img2, Flags f3, const Symbol& img3,
+ Flags f4, const Symbol& img4, Flags f5, const Symbol& img5, Flags f6, const Symbol& img6, Flags f7, const Symbol& img7 ) {
+ set(8, &img0, f1, &img1, f2, &img2, f3, &img3, f4, &img4, f5, &img5, f6, &img6, f7, &img7);
+ }
+};
+
+}
+
+
+#endif
+
+//
+// End of "$Id: MultiImage.h 5515 2006-10-10 09:46:05Z fabien $".
+//
diff --git a/fltk/fltk/MultiLineInput.h b/fltk/fltk/MultiLineInput.h
new file mode 100644
index 0000000..31c4b90
--- /dev/null
+++ b/fltk/fltk/MultiLineInput.h
@@ -0,0 +1,48 @@
+//
+// "$Id: MultiLineInput.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Allows you to edit a *small* number of lines of text. Does not have
+// any scrollbars. You may want a TextEditor instead, it is designed for
+// large amounts of text.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_MultiLineInput_h
+#define fltk_MultiLineInput_h
+
+#include "Input.h"
+
+namespace fltk {
+
+// This class is entirely inline. If that changes, add FL_API to its declaration
+class MultiLineInput : public Input {
+public:
+ MultiLineInput(int x,int y,int w,int h,const char *l = 0)
+ : Input(x,y,w,h,l) {type(MULTILINE);}
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: MultiLineInput.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/MultiLineOutput.h b/fltk/fltk/MultiLineOutput.h
new file mode 100644
index 0000000..095eaa7
--- /dev/null
+++ b/fltk/fltk/MultiLineOutput.h
@@ -0,0 +1,47 @@
+//
+// "$Id: MultiLineOutput.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Displays a multi-line sequence of text, the user can select text
+// and copy it to other programs. Does not have any scrollbars.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_MultiLineOutput_h
+#define fltk_MultiLineOutput_h
+
+#include "Output.h"
+
+namespace fltk {
+
+// This class is entirely inline. If that changes, add FL_API to its declaration
+class MultiLineOutput : public Output {
+public:
+ MultiLineOutput(int x,int y,int w,int h,const char *l = 0)
+ : Output(x,y,w,h,l) {type(MULTILINE);}
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: MultiLineOutput.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/NumericInput.h b/fltk/fltk/NumericInput.h
new file mode 100644
index 0000000..dcd8a16
--- /dev/null
+++ b/fltk/fltk/NumericInput.h
@@ -0,0 +1,52 @@
+//
+// "$Id: NumericInput.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// One-line text input field, which handles up/down arrows to
+// change the digit to the right of the cursor. This still allows
+// arbitrary text such as a math expression to be typed, if you
+// want to restrict the user to a number use FloatInput or IntInput.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_NumericInput_h
+#define fltk_NumericInput_h
+
+#include "Input.h"
+
+namespace fltk {
+
+class FL_API NumericInput : public Input {
+ protected:
+ int handle_arrow(int);
+ public:
+ NumericInput(int x,int y, int w,int h,const char* l = 0) :
+ Input(x,y,w,h,l) {when(WHEN_ENTER_KEY|WHEN_RELEASE);}
+ void value(double);
+ void value(int);
+ int handle(int);
+};
+
+}
+#endif
+
+//
+// End of "$Id: NumericInput.h 4886 2006-03-30 09:55:32Z fabien $"
+//
diff --git a/fltk/fltk/Output.h b/fltk/fltk/Output.h
new file mode 100644
index 0000000..e845bb1
--- /dev/null
+++ b/fltk/fltk/Output.h
@@ -0,0 +1,49 @@
+//
+// "$Id: Output.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// One-line text output, the user can select text and copy it
+// to other applications.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Output_h
+#define fltk_Output_h
+
+#include "Input.h"
+
+namespace fltk {
+
+class FL_API Output : public Input {
+ virtual bool replace(int, int, const char*, int); // does nothing
+public:
+ Output(int x, int y, int w, int h, const char *l = 0);
+ int handle(int);
+ // this style is so Motif can have different color for output vs input:
+ static NamedStyle* default_style;
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Output.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/PackedGroup.h b/fltk/fltk/PackedGroup.h
new file mode 100644
index 0000000..c3ff73a
--- /dev/null
+++ b/fltk/fltk/PackedGroup.h
@@ -0,0 +1,70 @@
+//
+// "$Id: PackedGroup.h 6132 2008-05-29 23:09:01Z TobiasFar $"
+//
+// Group that places all it's child widgets packed against the
+// edges. The edge is decided by the PACK_VERTICAL flag stored on
+// the child and by whether the child is before or after the
+// resizable() child.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_PackedGroup_h
+#define fltk_PackedGroup_h
+
+#include "Group.h"
+
+namespace fltk {
+
+class FL_API PackedGroup : public Group {
+ int spacing_;
+ int margin_left_;
+ int margin_right_;
+ int margin_top_;
+ int margin_bottom_;
+public:
+ enum { // values for type(int), for back-compatability
+ NORMAL = GROUP_TYPE,
+ ALL_CHILDREN_VERTICAL = GROUP_TYPE+1
+ };
+ void layout();
+ PackedGroup(int x, int y, int w, int h, const char *l = 0, bool begin=false);
+ int spacing() const {return spacing_;}
+ void spacing(int i) {spacing_ = i;}
+
+ int margin_left() const {return margin_left_;}
+ void margin_left(int m) {margin_left_ = m;}
+ int margin_right() const {return margin_right_;}
+ void margin_right(int m) {margin_right_ = m;}
+ int margin_top() const {return margin_top_;}
+ void margin_top(int m) {margin_top_ = m;}
+ int margin_bottom() const {return margin_bottom_;}
+ void margin_bottom(int m) {margin_bottom_ = m;}
+
+ void margin(int m) {margin_left_ = margin_right_ = margin_top_ = margin_bottom_ = m;}
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: PackedGroup.h 6132 2008-05-29 23:09:01Z TobiasFar $".
+//
diff --git a/fltk/fltk/PixelType.h b/fltk/fltk/PixelType.h
new file mode 100644
index 0000000..5e690de
--- /dev/null
+++ b/fltk/fltk/PixelType.h
@@ -0,0 +1,67 @@
+// "$Id: PixelType.h 1399 2006-08-11 02:15:20Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_PixelType_h
+#define fltk_PixelType_h
+
+namespace fltk {
+
+/// \name fltk/PixelType.h
+//@{
+
+/**
+ Enumeration describing how colors are stored in an array of bytes
+ that is a pixel. This is used as an argument for fltk::drawimage(),
+ fltk::readimage(), and fltk::Image.
+
+ Notice that the order of the bytes in memory of ARGB32 or RGB32 is
+ a,r,g,b on a little-endian machine and b,g,r,a on a big-endian
+ machine. Due to the use of these types by Windows, this is often
+ the fastest form of data, if you have a choice. To convert an
+ fltk::Color to RGB32, shift it right by 8 (for ARGB32 shift the
+ alpha left 24 and or it in).
+
+ More types may be added in the future. The set is as minimal as
+ possible while still covering the types I have actually encountered.
+*/
+enum PixelType {
+ MASK = 0, //!< 1 byte of inverted mask, filled with current color
+ MONO = 1, //!< 1 byte of gray scale
+ RGBx = 2, //!< bytes in r,g,b,a,r,g,b,a... order, a byte is ignored
+ RGB = 3, //!< bytes in r,g,b,r,g,b... order
+ RGBA = 4, //!< bytes in r,g,b,a,r,g,b,a... order
+ RGB32 = 5, //!< 32-bit words containiing 0xaarrggbb (aa is ignored)
+ ARGB32= 6, //!< 32-bit words containing 0xaarrggbb
+ // unpremulitplied is not yet implemented, acts like RGBA/ARGB32:
+ RGBM = 7, //!< unpremultiplied bytes in r,g,b,a order
+ MRGB32= 8 //!< unpremultiplied 0xaarrggbb
+};
+
+/**
+ Turn a PixelType into the number of bytes needed to hold a pixel.
+*/
+inline int depth(PixelType t) {return (t<2 ? 1 : t==3 ? 3 : 4);}
+
+//@}
+
+}
+
+#endif
diff --git a/fltk/fltk/PopupMenu.h b/fltk/fltk/PopupMenu.h
new file mode 100644
index 0000000..c92c489
--- /dev/null
+++ b/fltk/fltk/PopupMenu.h
@@ -0,0 +1,56 @@
+//
+// "$Id: PopupMenu.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Setting the type to POPUP* will make an invisible widget that can
+// overlap any other widgets and provides a popup menu. The default
+// type gives you something similar to a Choice except it does not
+// display the current value.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_PopupMenu_h
+#define fltk_PopupMenu_h
+
+#include "Menu.h"
+
+namespace fltk {
+
+class FL_API PopupMenu : public Menu {
+public:
+ // values for type:
+ enum {NORMAL = GROUP_TYPE, POPUP1, POPUP2, POPUP12,
+ POPUP3, POPUP13, POPUP23, POPUP123};
+ int handle(int);
+ int popup();
+ PopupMenu(int,int,int,int,const char * =0);
+ static NamedStyle* default_style;
+
+protected:
+ void draw();
+
+};
+
+}
+#endif
+
+//
+// End of "$Id: PopupMenu.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/Preferences.h b/fltk/fltk/Preferences.h
new file mode 100644
index 0000000..57103b6
--- /dev/null
+++ b/fltk/fltk/Preferences.h
@@ -0,0 +1,109 @@
+// "$Id: Preferences.H 4458 2005-07-26 07:59:01Z matt $"
+//
+// Copyright 2002-2005 by Matthias Melcher.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+
+#ifndef fltk_Preferences_h
+#define fltk_Preferences_h
+
+#include "FL_API.h"
+
+namespace fltk {
+
+/**
+ * Preferences are a data tree containing a root, branches and leafs
+ */
+class FL_API Preferences
+{
+
+public:
+
+ enum Root { SYSTEM=0, USER };
+
+ Preferences( Root root, const char *vendor, const char *application );
+ Preferences( const char *path, const char *vendor, const char *application );
+ Preferences( Preferences&, const char *group );
+ Preferences( Preferences*, const char *group );
+ ~Preferences();
+
+ int groups();
+ const char *group( int );
+ bool groupExists( const char *group );
+ bool deleteGroup( const char *group );
+
+ int entries();
+ const char *entry( int );
+ bool entryExists( const char *entry );
+ bool deleteEntry( const char *entry );
+
+ bool set( const char *entry, int value );
+ bool set( const char *entry, float value );
+ bool set( const char *entry, double value );
+ bool set( const char *entry, const char *value );
+ bool set( const char *entry, const void *value, int size );
+
+ bool get( const char *entry, int &value, int defaultValue );
+ bool get( const char *entry, float &value, float defaultValue );
+ bool get( const char *entry, double &value, double defaultValue );
+ bool get( const char *entry, char *&value, const char *defaultValue );
+ bool get( const char *entry, char *value, const char *defaultValue, int maxSize );
+ bool get( const char *entry, void *&value, const void *defaultValue, int defaultSize );
+ bool get( const char *entry, void *value, const void *defaultValue, int defaultSize, int maxSize );
+ int size( const char *entry );
+
+ bool getUserdataPath( char *path, int pathlen );
+
+ void flush();
+
+ // bool export( const char *filename, Type fileFormat );
+ // bool import( const char *filename );
+
+ class FL_API Name {
+ char *data_;
+ public:
+ Name( int n );
+ Name( const char *format, ... );
+ operator const char *() { return data_; }
+ ~Name() { delete[] data_; }
+ };
+
+private:
+
+ // make the following functions unavailable
+ Preferences();
+ Preferences(const Preferences&);
+ Preferences &operator=(const Preferences&);
+
+ class Node;
+ friend class Node;
+ Node *node;
+
+ class RootNode;
+ friend class RootNode;
+ RootNode *rootNode;
+
+};
+
+}
+
+#endif
+
+// End of "$Id: Preferences.H 4458 2005-07-26 07:59:01Z matt $".
diff --git a/fltk/fltk/ProgressBar.h b/fltk/fltk/ProgressBar.h
new file mode 100644
index 0000000..f3ad840
--- /dev/null
+++ b/fltk/fltk/ProgressBar.h
@@ -0,0 +1,62 @@
+//
+// "$Id: ProgressBar.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Progress indicator with bar that fills up and text showing the
+// job being done and expected time to go. Not fully implemented yet.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_ProgressBar_h
+#define fltk_ProgressBar_h
+
+#include "Widget.h"
+
+namespace fltk {
+
+class FL_API ProgressBar : public Widget {
+protected:
+ double mMin;
+ double mMax;
+ double mPresent;
+ double mStep;
+ bool mShowPct;
+ Color mTextColor;
+ void draw();
+public:
+ ProgressBar(int x, int y, int w, int h, const char *lbl = 0);
+ void range(double min, double max, double step = 1) { mMin = min; mMax = max; mStep = step; };
+ void step(double step) { mPresent += step; redraw(); };
+ double minimum() { return mMin; }
+ double maximum() { return mMax; }
+ void minimum(double nm) { mMin = nm; };
+ void maximum(double nm) { mMax = nm; };
+ double position() { return mPresent; }
+ double step() { return mStep; }
+ void position(double pos) { mPresent = pos; redraw(); }
+ void showtext(bool st) { mShowPct = st; }
+ bool showtext() { return mShowPct; }
+ void text_color(Color col) { mTextColor = col; }
+ Color text_color() { return mTextColor; }
+};
+
+}
+#endif
+
diff --git a/fltk/fltk/README b/fltk/fltk/README
new file mode 100644
index 0000000..286d784
--- /dev/null
+++ b/fltk/fltk/README
@@ -0,0 +1,8 @@
+This directory is for the public include files used by fltk. The
+directory is named "fltk" so that fltk's source and test programs can
+be compiled with these headers by using -I.. as a switch to the
+compiler.
+
+FLTK developers: please notice that this is for *PUBLIC* header
+files. If you have a private structure that is shared between fltk
+source files, put it in the same directory as the source files!
diff --git a/fltk/fltk/RadioButton.h b/fltk/fltk/RadioButton.h
new file mode 100644
index 0000000..b67484b
--- /dev/null
+++ b/fltk/fltk/RadioButton.h
@@ -0,0 +1,46 @@
+//
+// "$Id: RadioButton.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Button with a circle indicator to it's left, turning it on turns
+// off all other radio buttons in the same Group.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_RadioButton_h
+#define fltk_RadioButton_h
+
+#include "CheckButton.h"
+
+namespace fltk {
+
+class FL_API RadioButton : public CheckButton {
+public:
+ RadioButton(int x, int y, int w, int h, const char *l=0);
+ static NamedStyle* default_style;
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: RadioButton.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/RadioItem.h b/fltk/fltk/RadioItem.h
new file mode 100644
index 0000000..baf2d5d
--- /dev/null
+++ b/fltk/fltk/RadioItem.h
@@ -0,0 +1,41 @@
+// "$Id: RadioItem.h 5924 2007-07-13 13:25:31Z sanel.z $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_RadioItem_h
+#define fltk_RadioItem_h
+
+#include "Item.h"
+
+namespace fltk {
+
+/** This widget makes a radio item in a popup or pulldown Menu.
+ It's behavior in a Browser or MultiBrowser is that it changes its status on multiple clicks (e.g. double click). */
+class RadioItem : public Item {
+public:
+ RadioItem(const char* label = 0) : Item(label) {type(RADIO);}
+ RadioItem(const char* label,int shortcut,Callback *callback=0,void *user_data=0, int flags=0)
+ : Item(label,shortcut,callback,user_data,flags) {type(RADIO);}
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/RadioLightButton.h b/fltk/fltk/RadioLightButton.h
new file mode 100644
index 0000000..921932b
--- /dev/null
+++ b/fltk/fltk/RadioLightButton.h
@@ -0,0 +1,45 @@
+//
+// "$Id: RadioLightButton.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// LightButton that toggles off all others in the group when turned on.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_RadioLightButton_h
+#define fltk_RadioLightButton_h
+
+#include "LightButton.h"
+
+namespace fltk {
+
+class RadioLightButton : public LightButton {
+public:
+ RadioLightButton(int x, int y, int w, int h, const char *l=0)
+ : LightButton(x,y,w,h,l) {type(RADIO);}
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: RadioLightButton.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/Rectangle.h b/fltk/fltk/Rectangle.h
new file mode 100644
index 0000000..22637a5
--- /dev/null
+++ b/fltk/fltk/Rectangle.h
@@ -0,0 +1,122 @@
+// "$Id: Rectangle.h 5454 2006-09-19 02:38:02Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_Rectangle_h
+#define fltk_Rectangle_h
+
+#include "FL_API.h"
+
+// rectangle macros that help keeping rectangle predicates as strict as possible
+// even when not using rectangles in some situations (as when only using w h scalars)
+// so that there is only one strict defintion for common predicates,
+// if one change the following, it will be repercuted in all the core lib
+#define FLTK_RECT_EMPTY(w,h) (w <= 0 || h <= 0)
+// we should always use the same evaluation for center_x, center_y in all corelib code:
+//#define FLTK_CENTER_X(coord, length) (coord + (length>>1))
+//#define FLTK_CENTER_Y(coord, length) (coord + (length>>1))
+
+namespace fltk {
+
+class FL_API Rectangle {
+ int x_, y_, w_, h_;
+
+ public:
+
+ /*! Left edge */
+ int x() const {return x_;}
+ /*! Top edge */
+ int y() const {return y_;}
+ /*! Distance between left and right edges */
+ int w() const {return w_;}
+ /*! Distance between top and bottom edges */
+ int h() const {return h_;}
+ /*! Return x()+w(), the right edge of the rectangle. */
+ int r() const {return x_+w_;}
+ /*! Return y()+h(), the bottom edge of the rectangle. */
+ int b() const {return y_+h_;}
+ /*! Move the rectangle so the left edge is at \a v. */
+ void x(int v) {x_ = v;}
+ /*! Move the rectangle so the top edge is at \a v. */
+ void y(int v) {y_ = v;}
+ /*! Change w() by moving the right edge. x() does not change. */
+ void w(int v) {w_ = v;}
+ /*! Change h() by moving the bottom edge. y() does not change. */
+ void h(int v) {h_ = v;}
+ /*! Change x() without changing r(), by changing the width. */
+ void set_x(int v) {w_ -= v-x_; x_ = v;}
+ /*! Change y() without changing b(), by changing the height. */
+ void set_y(int v) {h_ -= v-y_; y_ = v;}
+ /*! Change r() without changing x(), by changine the width. */
+ void set_r(int v) {w_ = v-x_;}
+ /*! Change b() without changing y(), by changine the height. */
+ void set_b(int v) {h_ = v-y_;}
+ /*! Set x(), y(), w(), and h() all at once. */
+ void set(int x, int y, int w, int h) {x_=x; y_=y; w_=w; h_=h;}
+ /*! Sets x, y, w, h so that's it's centered or aligned (if flags!=0) inside the source r */
+ void set (const Rectangle& r, int w, int h, int flags = 0);
+ /*! Add \a d to x() without changing r() (it reduces w() by \a d). */
+ void move_x(int d) {x_ += d; w_ -= d;}
+ /*! Add \a d to y() without changing b() (it reduces h() by \a d). */
+ void move_y(int d) {y_ += d; h_ -= d;}
+ /*! Add \a d to r() and w(). */
+ void move_r(int d) {w_ += d;}
+ /*! Add \a d to b() and h(). */
+ void move_b(int d) {h_ += d;}
+ /*! Move all edges in by \a d. See also Symbol::inset() */
+ void inset(int d) {x_ += d; y_ += d; w_ -= 2*d; h_ -= 2*d;}
+ /*! Move entire rectangle by given distance in x and y. */
+ void move(int dx, int dy) {x_ += dx; y_ += dy;}
+ /*! True if w() or h() are less or equal to zero. */
+ bool empty() const {return FLTK_RECT_EMPTY(w_, h_);}
+ /*! Same as !empty(), true if w() and h() are both greater than zero. */
+ bool not_empty() const {return !FLTK_RECT_EMPTY(w_, h_);}
+ /*! Integer center position. Rounded to the left if w() is odd. */
+ int center_x() const {return x_+(w_>>1);}
+ /*! Integer center position. Rounded to lower y if h() is odd. */
+ int center_y() const {return y_+(h_>>1);}
+ /*! Where to put baseline to center current font nicely */
+ int baseline_y() const;
+
+ Rectangle() {}
+
+ /*! Constructor that sets x(), y(), w(), and h(). */
+ Rectangle(int x, int y, int w, int h) : x_(x), y_(y), w_(w), h_(h) {}
+
+ /*! Constructor that sets x() and y() to zero, and sets w() and h(). */
+ Rectangle(int w, int h) : x_(0), y_(0), w_(w), h_(h) {}
+
+ /*! Copy constructor. */
+ Rectangle(const Rectangle& r) : x_(r.x_),y_(r.y_),w_(r.w_),h_(r.h_) {}
+
+ /*! Constructor that calls set(). */
+ Rectangle(const Rectangle& r, int w, int h, int flags = 0) {set(r,w,h,flags);}
+
+ /*! True if rectangle contains the pixel who's upper-left corner is at x,y */
+ bool contains(int x, int y) const {return x>=x_ && y>=y_ && x<x_+w_ && y<y_+h_;}
+
+ void merge(const Rectangle& r);
+ void intersect(const Rectangle& r);
+
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/RepeatButton.h b/fltk/fltk/RepeatButton.h
new file mode 100644
index 0000000..cfca27d
--- /dev/null
+++ b/fltk/fltk/RepeatButton.h
@@ -0,0 +1,47 @@
+//
+// "$Id: RepeatButton.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// This button does it's callback repeatedly (about 10/second) while
+// the user holds the button down.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_RepeatButton_h
+#define fltk_RepeatButton_h
+
+#include "Button.h"
+
+namespace fltk {
+
+class FL_API RepeatButton : public Button {
+ static void repeat_callback(void *);
+public:
+ int handle(int);
+ RepeatButton(int x,int y,int w,int h,const char *l=0) : Button(x,y,w,h,l) {}
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: RepeatButton.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/ReturnButton.h b/fltk/fltk/ReturnButton.h
new file mode 100644
index 0000000..bc8bfe8
--- /dev/null
+++ b/fltk/fltk/ReturnButton.h
@@ -0,0 +1,41 @@
+// "$Id: ReturnButton.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_ReturnButton_h
+#define fltk_ReturnButton_h
+
+#include "Button.h"
+
+namespace fltk {
+
+class FL_API ReturnButton : public Button {
+public:
+ ReturnButton(int x,int y,int w,int h,const char *l=0);
+ static NamedStyle* default_style;
+protected:
+ void draw();
+};
+
+}
+
+#endif
+
+// End of "$Id: ReturnButton.h 4886 2006-03-30 09:55:32Z fabien $".
diff --git a/fltk/fltk/ScrollGroup.h b/fltk/fltk/ScrollGroup.h
new file mode 100644
index 0000000..26e0d9c
--- /dev/null
+++ b/fltk/fltk/ScrollGroup.h
@@ -0,0 +1,90 @@
+//
+// "$Id: ScrollGroup.h 6132 2008-05-29 23:09:01Z TobiasFar $"
+//
+// Group that adds scrollbars so you can scroll around the area
+// covered by all the child widgets. For most uses you will make
+// a single child widget, this child may resize in it's layout()
+// and the scrollbars will adjust to match.
+//
+// Due to clipping problems no subclasses of Window may be used
+// as child widgets.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_ScrollGroup_h
+#define fltk_ScrollGroup_h
+
+#include "Group.h"
+#include "Scrollbar.h"
+
+namespace fltk {
+
+class FL_API ScrollGroup : public Group {
+
+ int xposition_, yposition_;
+ int layoutdx, layoutdy;
+ int scrolldx, scrolldy;
+ bool enable_drag_scroll_;
+ bool drag_scrolling_;
+ bool delegate_alt_click_;
+ int drag_x_, drag_y_, pos_x_, pos_y_;
+ int max_x_scroll_, max_y_scroll_;
+ static void hscrollbar_cb(Widget*, void*);
+ static void scrollbar_cb(Widget*, void*);
+ static void draw_clip(void*,const Rectangle&);
+
+protected:
+
+ void draw();
+
+public:
+
+ void bbox(Rectangle&);
+ Scrollbar scrollbar;
+ Scrollbar hscrollbar;
+
+ void enable_drag_scroll( bool enable ) { enable_drag_scroll_ = true; }
+
+ virtual int handle(int);
+ virtual void layout();
+
+ ScrollGroup(int x,int y,int w,int h, const char*l=0, bool begin=false);
+
+ enum { // values for type()
+ HORIZONTAL = 1,
+ VERTICAL = 2,
+ BOTH = 3,
+ ALWAYS_ON = 4,
+ HORIZONTAL_ALWAYS = 5,
+ VERTICAL_ALWAYS = 6,
+ BOTH_ALWAYS = 7
+ };
+
+ int xposition() const {return xposition_;}
+ int yposition() const {return yposition_;}
+ void scrollTo(int, int);
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: ScrollGroup.h 6132 2008-05-29 23:09:01Z TobiasFar $".
+//
diff --git a/fltk/fltk/Scrollbar.h b/fltk/fltk/Scrollbar.h
new file mode 100644
index 0000000..d764b81
--- /dev/null
+++ b/fltk/fltk/Scrollbar.h
@@ -0,0 +1,64 @@
+//
+// "$Id: Scrollbar.h 5956 2007-10-17 19:57:31Z spitzak $"
+//
+// Scrollbar, controls an integer position of a window of a given
+// size inside a data set of a given total size.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Scrollbar_h
+#define fltk_Scrollbar_h
+
+#include "Slider.h"
+
+namespace fltk {
+
+class FL_API Scrollbar : public Slider {
+
+public:
+ Scrollbar(int x,int y,int w,int h, const char *l = 0);
+ static NamedStyle* default_style;
+
+ int value() const {return int(Slider::value());}
+ bool value(int position) {return Slider::value(position);}
+ bool value(int position, int size, int top, int total);
+ int handle(int);
+
+ int pagesize() const {return pagesize_;}
+ void pagesize(int a) {pagesize_ = a;}
+
+protected:
+ void draw();
+
+private:
+ int pagesize_;
+ static void timeout_cb(void*);
+ void increment_cb();
+
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Scrollbar.h 5956 2007-10-17 19:57:31Z spitzak $".
+//
diff --git a/fltk/fltk/SecretInput.h b/fltk/fltk/SecretInput.h
new file mode 100644
index 0000000..f6d6151
--- /dev/null
+++ b/fltk/fltk/SecretInput.h
@@ -0,0 +1,47 @@
+//
+// "$Id: SecretInput.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// One-line text input field that draws asterisks instead of the
+// letters. It also prevents the user from cutting or copying the
+// text and then pasting it somewhere.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_SecretInput_h
+#define fltk_SecretInput_h
+
+#include "Input.h"
+
+namespace fltk {
+
+class SecretInput : public Input {
+public:
+ SecretInput(int x,int y,int w,int h,const char *l = 0)
+ : Input(x,y,w,h,l) {type(SECRET);}
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: SecretInput.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/ShapedWindow.h b/fltk/fltk/ShapedWindow.h
new file mode 100644
index 0000000..863829b
--- /dev/null
+++ b/fltk/fltk/ShapedWindow.h
@@ -0,0 +1,57 @@
+// "$Id: ShapedWindow.h 5972 2007-11-14 16:49:25Z dejan $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_ShapedWindow_h
+#define fltk_ShapedWindow_h
+
+#include "Window.h"
+// WAS: This needs to take an arbitrary Image as a mask!
+#include "xbmImage.h"
+
+namespace fltk {
+
+class FL_API ShapedWindow : public Window {
+ void init() { shape_ = 0; lw = lh = 0; changed = 0; }
+ public:
+ ShapedWindow(int W, int H, const char *l = 0) : Window(W,H,l) {
+ border(false);
+ init();
+ }
+ ShapedWindow(int X, int Y, int W, int H, const char *l = 0): Window(X,Y,W,H,l) {
+ border(false);
+ init();
+ }
+ void shape(xbmImage* b) { shape_ = b; changed = 1; }
+ void shape(xbmImage& b) { shape_ =&b; changed = 1; }
+
+ protected:
+ virtual void draw();
+ xbmImage* shape_;
+ int lw, lh;
+ int changed;
+};
+
+}
+#endif
+
+//
+// End of "$Id: ShapedWindow.h 5972 2007-11-14 16:49:25Z dejan $"
+//
diff --git a/fltk/fltk/SharedImage.h b/fltk/fltk/SharedImage.h
new file mode 100644
index 0000000..8ba434d
--- /dev/null
+++ b/fltk/fltk/SharedImage.h
@@ -0,0 +1,236 @@
+// "$Id: SharedImage.h 5738 2007-03-12 18:07:45Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+/*! \class fltk::SharedImage
+
+Subclass of Image that can read a file or block of compressed data.
+This provides several useful functions:
+* Images are identified by filename. The static get() function will
+return an existing instance if it was called before with the same filename.
+The release() function will decrement the reference count and delete
+the image if nobody wants it any more.
+* An inline block of data may be provided that is the contents of the file,
+so the file does not have to exist and you can link the image directly
+into your program.
+* You may set a memory usage limit. If Image::mem_used() goes above
+this limit, it will call destroy() on least-recently-used images until
+it goes below this limit.
+* The get() function can determine the type of the file or block of
+data and create the correct subclass.
+
+*/
+
+#ifndef fltk_SharedImage_h
+#define fltk_SharedImage_h
+
+#include "Image.h"
+
+namespace fltk {
+
+struct FL_IMAGES_API ImageType;
+
+
+class FL_API SharedImage : public Image {
+// fabien : introducing SharedImage handlers and uniform loading api inspired from 1.1.x
+public:
+ /*! get an image of this name and dimensions , can be already loaded or not */
+ static SharedImage *get(const char *n); // future impl. should care about W,H dims
+
+ /*! a SharedImageHandler accepts handling a filename
+ by analizing its extension and/or eventually its header,
+ if it handles it it returns a non null pointer on the loaded concrete image
+ */
+ /** fetch to the data/pixels unified buffer the image, return true if success.
+ this method() does NOT draw the image, it only prepares
+ a generic buffer and its info, this method should be used by all
+ non-progresive-reading read() methods so that we avoid redondant code
+ */
+ typedef SharedImage *(*Handler)(const char * filename, uchar *header, int headerlen);
+ /*! adds a new handler for hanling a concrete type of image, typically one handler per image type should be registered */
+ static void add_handler(Handler f);
+ /*! removes a concrete handler */
+ static void remove_handler(Handler f);
+
+private:
+ static Handler *handlers_; // Additional format handlers
+ static int num_handlers_; // Number of format handlers
+ static int alloc_handlers_; // Allocated format handlers
+
+protected:
+ static const char* shared_image_root;
+
+ static int image_used;
+ static unsigned mem_usage_limit;
+
+ SharedImage* l1; // Left leaf in the binary tree
+ SharedImage* l2; // Right leaf in the binary tree
+ const char* name; // Used to indentify the image, and as filename
+ const uchar* datas; // If non zero, pointers on inlined compressed datas
+ unsigned int used; // Last time used, for cache handling purpose
+ int refcount; // Number of time this image has been get
+
+ SharedImage() { }; // Constructor is protected on purpose,
+ // use the get function rather
+ //~SharedImage();
+
+ void find_less_used();
+ static void check_mem_usage();
+
+ /*! Return the filename obtained from the concatenation
+ of the image root directory and this image name
+ WARNING : the returned pointer will be
+ available only until next call to get_filename */
+ const char* get_filename() const;
+
+ virtual bool fetch() = 0; // force fetch() to be defined by subclasses
+
+ static void insert(SharedImage*& p, SharedImage* image);
+ static SharedImage* find(SharedImage* image, const char* name);
+ void remove_from_tree(SharedImage*& p, SharedImage* image);
+
+public:
+
+ static SharedImage *first_image;
+
+ /*! Return an SharedImage, using the create function if an image with
+ the given name doesn't already exist. Use datas, or read from the
+ file with filename name if datas==0. */
+ static SharedImage* get(SharedImage* (*create)(),
+ const char* name, const uchar* datas=0);
+
+ /*! Reload the image, useful if it has changed on disk, or if the datas
+ / in memory have changed (you can also give a new pointer on datas) */
+ void reload(const uchar* datas=0);
+ static void reload(const char* name, const uchar* datas=0);
+
+ /*! Remove an image from the database and delete it if its refcount has
+ fallen to zero
+ Each remove() decrements the refcount, each get() increments it
+ Return 1 if it has been really deleted. */
+ int remove();
+ static int remove(const char* name);
+
+ /*! Clear the cache for this image and all of its children in the binary tree */
+ void clear_cache();
+
+ /*! Set the position where images are looked for on disk */
+ static void set_root_directory(const char* d);
+
+ /*! Expand a name relative to root to see what file it will read */
+ static const char* get_filename(const char*);
+
+ /*! Set the size of the cache (0 = unlimited is the default) */
+ static void set_cache_size(unsigned l);
+
+ void _draw(const Rectangle&) const;
+
+};
+
+////////////////////////////////////////////////////////////////
+
+/*! Description of an Image file format */
+struct FL_IMAGES_API ImageType {
+ // Name of the filetype as it appear in the source code LOWERCASE!!!
+ const char* name;
+ // Function to test the filetype
+ bool (*test)(const uchar* datas, unsigned size);
+ // Function to get/create an image of this type
+ SharedImage* (*get)(const char* name, const uchar* datas);
+};
+extern FL_IMAGES_API ImageType image_filetypes[];
+
+/*! Try to guess the filetype
+ Beware that calling this force you to link in all image types ! */
+FL_IMAGES_API ImageType* guess_image(const char* name, const uchar* datas=0);
+
+////////////////////////////////////////////////////////////////
+
+//
+// bmp and gif classes are build in libfltk2 so they are FL_API
+//
+
+class FL_API gifImage : public SharedImage {
+ gifImage() { }
+ static SharedImage* create() { return new gifImage; }
+public:
+ static bool test(const uchar* datas, unsigned size=0);
+ static SharedImage* get(const char* name, const uchar* datas = 0) {
+ return SharedImage::get(create, name, datas);
+ }
+ bool fetch();
+};
+
+class FL_API bmpImage : public SharedImage {
+ bmpImage() { }
+ static SharedImage* create() { return new bmpImage; }
+public:
+ static bool test(const uchar* datas, unsigned size=0);
+ static SharedImage* get(const char* name, const uchar* datas = 0) {
+ return SharedImage::get(create, name, datas);
+ }
+ bool fetch();
+};
+
+class FL_IMAGES_API xpmFileImage : public SharedImage {
+ xpmFileImage() { }
+ static SharedImage* create() { return new xpmFileImage; }
+public:
+ static bool test(const uchar* datas, unsigned size=0);
+ static SharedImage* get(const char* name, const uchar* datas = 0) {
+ return SharedImage::get(create, name, datas);
+ }
+ bool fetch();
+};
+
+//
+// jpeg and png classes are in libfltk2_images so they are FL_IMAGES_API
+//
+
+class FL_IMAGES_API jpegImage : public SharedImage {
+ jpegImage() { }
+ static SharedImage* create() { return new jpegImage; }
+public:
+ static bool test(const uchar* datas, unsigned size=0);
+ static SharedImage* get(const char* name, const uchar* datas = 0) {
+ return SharedImage::get(create, name, datas);
+ }
+ bool fetch();
+};
+
+class FL_IMAGES_API pngImage : public SharedImage {
+ pngImage() { }
+ static SharedImage* create() { return new pngImage; } // Instantiate
+public:
+// Check the given buffer if it is in PNG format
+ static bool test(const uchar* datas, unsigned size=0);
+ static SharedImage* get(const char* name, const uchar* datas = 0) {
+ return SharedImage::get(create, name, datas);
+ }
+ bool fetch();
+};
+
+ extern FL_IMAGES_API void register_images(); // return always true only for automatic lib init purpose see images_core.cxx trick
+ extern FL_IMAGES_API void unregister_images();
+}
+
+#endif
+
+// End of "$Id: SharedImage.h 5738 2007-03-12 18:07:45Z spitzak $"
diff --git a/fltk/fltk/Slider.h b/fltk/fltk/Slider.h
new file mode 100644
index 0000000..c4610f4
--- /dev/null
+++ b/fltk/fltk/Slider.h
@@ -0,0 +1,95 @@
+//
+// "$Id: Slider.h 5600 2007-01-13 00:04:55Z spitzak $"
+//
+// Slider value control. By default it moves vertically with the
+// minimum number at the bottom. See HorizontalSlider for one that
+// moves across (which is usually the default in other toolkits).
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Slider_h
+#define fltk_Slider_h
+
+#ifndef fltk_Valuator_h
+#include "Valuator.h"
+#endif
+
+namespace fltk {
+
+class FL_API Slider : public Valuator {
+
+ unsigned short slider_size_;
+ unsigned short tick_size_;
+
+public:
+
+ enum { // bit flags for type():
+ LINEAR = 0,
+ TICK_ABOVE = 2,
+ TICK_LEFT = TICK_ABOVE,
+ TICK_BELOW = 4,
+ TICK_RIGHT = TICK_BELOW,
+ TICK_BOTH = TICK_ABOVE|TICK_BELOW,
+ LOG = 8
+#ifdef FLTK_1_SLIDER
+ // for back-compatability only
+ ,VERTICAL = 0,
+ HORIZONTAL = 1,
+ FILL = 16
+#endif
+ };
+ bool horizontal() const {return !flag(LAYOUT_VERTICAL) || (type()&1);}
+ bool log() const {return (type()&LOG)!=0;}
+
+ void draw();
+ int handle(int);
+
+ Slider(int x,int y,int w,int h, const char *l = 0);
+ static NamedStyle* default_style;
+
+ unsigned short slider_size() const {return slider_size_;}
+ void slider_size(int n) {slider_size_ = (unsigned short)n;}
+ unsigned short tick_size() const {return tick_size_;}
+ void tick_size(int n) {tick_size_ = (unsigned short)n;}
+
+#ifdef FLTK_1_SLIDER
+ // back comptability:
+ Box* slider() const {return buttonbox();}
+ void slider(Box* b) {buttonbox(b);}
+ void slider_size(double v) {slider_size(int(v*w()));}
+#endif
+
+ //protected:
+
+ int slider_position(double value, int w);
+ double position_value(int x, int w);
+ int handle(int event, const Rectangle&);
+ void draw_ticks(const Rectangle&, int min_spacing);
+ bool draw(const Rectangle&, Flags flags, bool slot);
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Slider.h 5600 2007-01-13 00:04:55Z spitzak $".
+//
diff --git a/fltk/fltk/StatusBarGroup.h b/fltk/fltk/StatusBarGroup.h
new file mode 100644
index 0000000..ca5b36a
--- /dev/null
+++ b/fltk/fltk/StatusBarGroup.h
@@ -0,0 +1,90 @@
+//
+// "$Id"
+//
+// The Status StatusBarGroup is strip that can be put in the bottom edge of a Pack,
+// usually it contains a status bar.
+// it redims according to its parent width and keeps original given height
+//
+// Copyright 2002-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_StatusStatusBarGroup_h
+#define fltk_StatusStatusBarGroup_h
+
+#include "Group.h"
+#include "InvisibleBox.h"
+
+namespace fltk {
+
+class FL_API StatusBarGroup : public Group {
+public:
+ StatusBarGroup(int x,int y,int w,int h, const char* l=0, bool begin=false) :
+ Group(x,y,w,h,l,begin) {init(); }
+ //! statusbar default constructor
+ StatusBarGroup(int H=24) : Group(0, 0, 0, H, 0) {init(); }
+ virtual ~StatusBarGroup();
+
+ static NamedStyle* default_style;
+
+ void layout();
+ void show();
+ void hide();
+
+ enum Position {
+ SBAR_LEFT=0, //!< statusbar text left-aligned
+ SBAR_CENTER, //!< statusbar text centered
+ SBAR_RIGHT //!< statusbar text right-aligned (default)
+ };
+
+ /** set a simple string in the status bar
+ at a given Position 'pos' alignment spec.
+ */
+ void set(const char * t, Position pos=SBAR_RIGHT);
+ /** set a formatable (printf-like) text in the status bar
+ at a given Position 'pos' alignment spec.
+ */
+ void set(Position pos, const char * format, ... );
+ //! set a default box to all texts inside the status bar
+ void child_box(Box* b) {for(int i=0;i<3;i++) child_box(b,(Position)i);}
+ //! set a default box to text at particular position inside the status bar
+ void child_box(Box* b, Position i) {b_[i]= b;if(tf_[i]) tf_[i]->box(b);}
+
+protected:
+ //! draw a label on a particular (left,middle, right) Position
+ void draw_label(Position pos, const char * label);
+ //! adapt box position and size according to Position pos and statusbar dimensions
+ void update_box(InvisibleBox *b, Position pos);
+
+private:
+ void init();
+ void resize_from_parent();
+
+ // text fields up to three fields
+ InvisibleBox* tf_[3]; // 3 position possible and cumulable left, middle, center fields
+ Box* b_[3]; // box style for fields, default to no box
+ int saved_h_;
+};
+
+}
+#endif
+
+//
+// End of "$Id"
+//
diff --git a/fltk/fltk/StringList.h b/fltk/fltk/StringList.h
new file mode 100644
index 0000000..afda843
--- /dev/null
+++ b/fltk/fltk/StringList.h
@@ -0,0 +1,72 @@
+// "$Id: StringList.h 5709 2007-02-23 01:03:47Z spitzak $"
+//
+// Copyright 1998-2007 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_StringList_h
+#define fltk_StringList_h
+
+#include "Menu.h"
+
+namespace fltk {
+
+class FL_API StringHierarchy : public List {
+ Widget* generated_item_;
+public:
+ // fltk::List virtual functions:
+ virtual Widget* child(const Menu*, const int* indexes, int level);
+ // virtual functions to return hierarchy of strings:
+ virtual int children(const Menu*, const int* indexes, int level) = 0;
+ virtual const char* label(const Menu*, const int* indexes, int level)=0;
+ // label() can mess with this item to change flags, font, etc:
+ Widget* generated_item() {return generated_item_;}
+ StringHierarchy() {generated_item_ = 0;}
+ ~StringHierarchy() {delete generated_item_;}
+};
+
+class FL_API StringList : public StringHierarchy {
+public:
+ // overrides of StringHierarchy virtual functions:
+ virtual int children(const Menu*, const int* indexes, int level);
+ virtual const char* label(const Menu*, const int* indexes, int level);
+ // new virtual funcitons:
+ virtual int children(const Menu*) = 0;
+ virtual const char* label(const Menu*, int index) = 0;
+};
+
+class FL_API StringArray : public StringList {
+ const char* const * array;
+ int children_;
+public:
+ // overrides of StringList virtual functions:
+ virtual int children(const Menu*);
+ virtual const char* label(const Menu*, int index);
+ // Constructors to use a constant array of strings:
+ StringArray(const char*const* a, int n) : array(a), children_(n) {}
+ StringArray(const char*const* a) {set(a);}
+ StringArray(const char* s) {set(s);}
+ StringArray() {children_ = 0;}
+ // change the array:
+ void set(const char*const* a, int n) {array=a; children_ = n;}
+ void set(const char*const* a);
+ void set(const char* s); // nul-seperated list
+};
+
+}
+#endif
diff --git a/fltk/fltk/Style.h b/fltk/fltk/Style.h
new file mode 100644
index 0000000..61a7602
--- /dev/null
+++ b/fltk/fltk/Style.h
@@ -0,0 +1,207 @@
+//
+// "$Id: Style.h 6233 2008-09-14 07:54:06Z spitzak $"
+//
+// Style structure used by Widgets
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Style_h
+#define fltk_Style_h
+
+#include "Color.h"
+
+namespace fltk {
+
+/// \name fltk/Style.h
+//@{
+
+class FL_API Widget;
+class FL_API Rectangle;
+class FL_API Symbol;
+typedef Symbol Box;
+
+extern FL_API Box* const UP_BOX;
+extern FL_API Box* const DOWN_BOX;
+extern FL_API Box* const THIN_UP_BOX;
+extern FL_API Box* const THIN_DOWN_BOX;
+extern FL_API Box* const ENGRAVED_BOX;
+extern FL_API Box* const EMBOSSED_BOX;
+extern FL_API Box* const BORDER_BOX;
+extern FL_API Box* const FLAT_BOX;
+extern FL_API Box* const HIGHLIGHT_UP_BOX;
+extern FL_API Box* const HIGHLIGHT_DOWN_BOX;
+extern FL_API Box* const ROUND_UP_BOX;
+extern FL_API Box* const ROUND_DOWN_BOX;
+extern FL_API Box* const DIAMOND_UP_BOX;
+extern FL_API Box* const DIAMOND_DOWN_BOX;
+extern FL_API Box* const NO_BOX;
+extern FL_API Box* const SHADOW_BOX;
+extern FL_API Box* const ROUNDED_BOX;
+extern FL_API Box* const RSHADOW_BOX;
+extern FL_API Box* const RFLAT_BOX;
+extern FL_API Box* const OVAL_BOX;
+extern FL_API Box* const OSHADOW_BOX;
+extern FL_API Box* const OFLAT_BOX;
+extern FL_API Box* const BORDER_FRAME;
+extern FL_API Box* const PLASTIC_UP_BOX;
+extern FL_API Box* const PLASTIC_DOWN_BOX;
+
+struct Font;
+extern FL_API Font* const HELVETICA;
+extern FL_API Font* const HELVETICA_BOLD;
+extern FL_API Font* const HELVETICA_ITALIC;
+extern FL_API Font* const HELVETICA_BOLD_ITALIC;
+extern FL_API Font* const COURIER;
+extern FL_API Font* const COURIER_BOLD;
+extern FL_API Font* const COURIER_ITALIC;
+extern FL_API Font* const COURIER_BOLD_ITALIC;
+extern FL_API Font* const TIMES;
+extern FL_API Font* const TIMES_BOLD;
+extern FL_API Font* const TIMES_ITALIC;
+extern FL_API Font* const TIMES_BOLD_ITALIC;
+extern FL_API Font* const SYMBOL_FONT;
+extern FL_API Font* const SCREEN_FONT;
+extern FL_API Font* const SCREEN_BOLD_FONT;
+extern FL_API Font* const ZAPF_DINGBATS;
+
+class LabelType;
+extern FL_API LabelType* const NO_LABEL;
+extern FL_API LabelType* const NORMAL_LABEL;
+extern FL_API LabelType* const SYMBOL_LABEL; // same as NORMAL_LABEL
+extern FL_API LabelType* const SHADOW_LABEL;
+extern FL_API LabelType* const ENGRAVED_LABEL;
+extern FL_API LabelType* const EMBOSSED_LABEL;
+
+class Style;
+
+class FL_API Style {
+ public:
+ // Everything is public for various back-compatability hacks:
+ const Style* parent_;
+ Box* box_;
+ Box* buttonbox_;
+ Symbol* glyph_;
+ Font* labelfont_;
+ Font* textfont_;
+ LabelType* labeltype_;
+ Color color_;
+ Color textcolor_;
+ Color selection_color_;
+ Color selection_textcolor_;
+ Color buttoncolor_;
+ Color labelcolor_;
+ Color highlight_color_;
+ Color highlight_textcolor_;
+ float labelsize_;
+ float textsize_;
+ float leading_;
+ unsigned char scrollbar_align_;
+ unsigned char scrollbar_width_;
+ bool dynamic_;
+ // global settings:
+ static bool hide_underscore_;
+ static bool draw_boxes_inactive_;
+ static int wheel_scroll_lines_;
+
+ // Get functions, which search parents if value is zero:
+ Box* box() const;
+ Box* buttonbox() const;
+ Symbol* glyph() const;
+ Font* labelfont() const;
+ Font* textfont() const;
+ LabelType* labeltype() const;
+ Color color() const;
+ Color textcolor() const;
+ Color selection_color() const;
+ Color selection_textcolor() const;
+ Color buttoncolor() const;
+ Color labelcolor() const;
+ Color highlight_color() const;
+ Color highlight_textcolor() const;
+ float labelsize() const;
+ float textsize() const;
+ float leading() const;
+ unsigned char scrollbar_align() const;
+ unsigned char scrollbar_width() const;
+
+ bool hide_underscore() const {return hide_underscore_;}
+ bool draw_boxes_inactive() const {return draw_boxes_inactive_;}
+ int wheel_scroll_lines() const {return wheel_scroll_lines_;}
+
+ // Set functions:
+ void box (Box* v) {box_ = v; }
+ void buttonbox (Box* v) {buttonbox_ = v; }
+ void glyph (Symbol* v) {glyph_ = v; }
+ void labelfont (Font* v) {labelfont_ = v; }
+ void textfont (Font* v) {textfont_ = v; }
+ void labeltype (LabelType* v) {labeltype_ = v; }
+ void color (Color v) {color_ = v; }
+ void textcolor (Color v) {textcolor_ = v; }
+ void selection_color (Color v) {selection_color_ = v; }
+ void selection_textcolor(Color v) {selection_textcolor_ = v;}
+ void buttoncolor (Color v) {buttoncolor_ = v; }
+ void labelcolor (Color v) {labelcolor_ = v; }
+ void highlight_color (Color v) {highlight_color_ = v; }
+ void highlight_textcolor(Color v) {highlight_textcolor_ = v;}
+ void labelsize (float v) {labelsize_ = v; }
+ void textsize (float v) {textsize_ = v; }
+ void leading (float v) {leading_ = v; }
+ void scrollbar_align (unsigned char v) {scrollbar_align_ = v;}
+ void scrollbar_width (unsigned char v) {scrollbar_width_ = v;}
+
+ void hide_underscore (bool v) {hide_underscore_ = v; }
+ void draw_boxes_inactive(bool v) {draw_boxes_inactive_ = v;}
+ void wheel_scroll_lines(int v) {wheel_scroll_lines_ = v;}
+
+ Style();
+ bool dynamic() const {return dynamic_;}
+
+ static Style* find(const char* name);
+};
+
+struct FL_API NamedStyle : public Style {
+ const char* name;
+ void (*revertfunc)(Style*);
+ NamedStyle** back_pointer; // used by StyleSet
+ static NamedStyle* first;
+ NamedStyle* next;
+ NamedStyle(const char* name, void (*revert)(Style*), NamedStyle** backptr);
+};
+
+extern "C" {typedef bool (*Theme)();}
+extern FL_API Theme theme_;
+inline Theme theme() {return theme_;}
+inline void theme(Theme f) {theme_ = f;}
+FL_API void load_theme();
+FL_API void reload_theme();
+FL_API bool reset_theme();
+
+}
+
+extern "C" FL_API bool fltk_theme();
+
+//@}
+
+#endif
+
+//
+// End of "$Id: Style.h 6233 2008-09-14 07:54:06Z spitzak $".
+//
diff --git a/fltk/fltk/StyleSet.h b/fltk/fltk/StyleSet.h
new file mode 100644
index 0000000..c6ff713
--- /dev/null
+++ b/fltk/fltk/StyleSet.h
@@ -0,0 +1,48 @@
+//
+// "$Id: StyleSet.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Saves and restores all the styles used by Widget constructors. Fluid
+// uses this so you can preview a style without fluid's own control
+// panels changing. I think this is broken, anybody want to fix it?
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_StyleSet_h
+#define fltk_StyleSet_h
+
+#include "Style.h"
+
+namespace fltk {
+
+class FL_API StyleSet {
+ NamedStyle* first_style;
+ Theme theme;
+ Color background;
+ void* reserved; // pointer to extra saved stuff
+public:
+ StyleSet();
+ void make_current();
+ ~StyleSet();
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/Symbol.h b/fltk/fltk/Symbol.h
new file mode 100644
index 0000000..372bd19
--- /dev/null
+++ b/fltk/fltk/Symbol.h
@@ -0,0 +1,91 @@
+// "$Id: Symbol.h 5865 2007-06-01 13:04:19Z sanel.z $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Symbol_h
+#define fltk_Symbol_h
+
+#include "FL_API.h"
+#include "Color.h"
+#include "Rectangle.h"
+#include "PixelType.h"
+
+namespace fltk {
+
+class Style;
+
+class FL_API Symbol {
+ const char* name_;
+ Rectangle inset_;
+
+ // Forbid use of copy contructor and assign operator
+ Symbol & operator=(const Symbol &);
+ Symbol(const Symbol &);
+
+ static const char* text_;
+ static unsigned text_length_;
+
+ public:
+
+ Symbol(const char* name=0);
+ const char* name() const {return name_;}
+ void name(const char*);
+
+ virtual void _measure(int& w, int& h) const;
+ void measure(int& w, int& h) const {_measure(w,h);}
+
+ virtual void _draw(const Rectangle&) const = 0;
+ void draw(const Rectangle& r) const {_draw(r);}
+ virtual void draw_symbol_overlay(const Rectangle&) const;
+
+ void set_inset(int x,int y,int w,int h) {inset_.set(x,y,w,h);}
+ void set_inset(int x,int y) {inset_.set(x,y,-2*x,-2*y);}
+ void set_inset(int x) {inset_.set(x,x,-2*x,-2*x);}
+ void set_inset(const Rectangle& r) {inset_ = r;}
+ const Rectangle& get_inset() const {return inset_;}
+
+ int dx() const {return inset_.x();}
+ int dy() const {return inset_.y();}
+ int dw() const {return -inset_.w();} // inverted for back-compatability
+ int dh() const {return -inset_.h();} // inverted for back-compatability
+
+ // Hints for widgets:
+ virtual void inset(Rectangle& r) const;
+ virtual bool fills_rectangle() const;
+ virtual bool is_frame() const;
+
+ // hash table lookup:
+ static const Symbol* find(const char* name);
+ static const Symbol* find(const char* start, const char* end);
+ static const Symbol* iterate(int& index);
+ static void text(const char* s, unsigned n) {text_=s; text_length_=n;}
+ static const char* text() {return text_;}
+ static unsigned text_length() {return text_length_;}
+
+ virtual ~Symbol();
+};
+
+// Back-compatability constructor:
+FL_API void add_symbol(const char* name, void (*drawit)(Color), int scalable);
+
+}
+
+#endif
diff --git a/fltk/fltk/SystemMenuBar.h b/fltk/fltk/SystemMenuBar.h
new file mode 100644
index 0000000..0861b56
--- /dev/null
+++ b/fltk/fltk/SystemMenuBar.h
@@ -0,0 +1,62 @@
+//
+// "$Id:$"
+//
+// MacOS system menu bar header file for the Fast Light Tool Kit (FLTK2).
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+#ifndef fltk_SystemMenuBar_h
+#define fltk_SystemMenuBar_h
+
+#include "MenuBar.h"
+
+struct Fl_Menu_Item;
+
+namespace fltk {
+
+#ifdef __APPLE__
+
+class FL_API SystemMenuBar : public MenuBar {
+protected:
+ void draw();
+public:
+ SystemMenuBar(int x,int y,int w,int h,const char *l=0)
+ : MenuBar(x,y,w,h,l) {
+ deactivate(); // don't let the old area take events
+ }
+ void layout();
+};
+
+#else
+
+typedef MenuBar SystemMenuBar;
+
+#endif
+
+}
+
+#endif
+
+//
+// End of "$Id:$".
+//
diff --git a/fltk/fltk/TabGroup.h b/fltk/fltk/TabGroup.h
new file mode 100644
index 0000000..b6810f5
--- /dev/null
+++ b/fltk/fltk/TabGroup.h
@@ -0,0 +1,141 @@
+//
+// "$Id: TabGroup.h 5575 2007-01-02 17:31:40Z spitzak $"
+//
+// For making a "tabbed dialog box". Each child widget creates a tab.
+// Only one is visible at a time. This works best if all the children
+// have the same size and they don't cover a strip at the top for the
+// tabs.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_TabGroup_h
+#define fltk_TabGroup_h
+
+#include "Group.h"
+
+#define MIN_TABSIZE 30
+
+namespace fltk {
+
+class TabGroup;
+
+
+enum {TAB_LEFT, TAB_RIGHT, TAB_SELECTED};
+
+class FL_API TabGroupPager {
+public:
+
+ TabGroupPager() : shift_(0), border_(10), slope_(5), extra_space_(5),_noclip(false) {}
+
+ /* Pager template methods definition */
+
+ /*! this method must update the tab positions and width array, returns the selected tab */
+ virtual int update_positions(TabGroup* g, int numchildren, int& selected,
+ int& cumulated_width, int& available_width , int* tab_pos, int* tab_width) { return selected;}
+ /*! draw the tabs for this custom pager, return false means no custom draw is made */
+ virtual bool draw_tabs(TabGroup* g, int selected, int* tab_pos, int* tab_width) { return false;}
+ /*! determine and return the index of the child group at the corresponding pos */
+ virtual int which(TabGroup* g, int m_x,int m_y)=0;
+ /*! virtual copy from a prototype */
+ virtual TabGroupPager* clone() const=0;
+
+ virtual const char * mode_name() const = 0;
+ virtual int id() const = 0;
+
+ /*! return max width available for drawing tab thumbnails */
+ virtual int available_width(TabGroup *g ) const;
+
+ // tab appearance
+ int border() const {return border_;}
+ int slope() const {return slope_;}
+ int extra_space() const {return extra_space_;}
+ void border(int v) {border_=v;}
+ void slope(int v) {slope_=v;}
+ void extra_space(int v) {extra_space_=v;}
+
+ /*! shifting to nth+1 tab to draw, permit to 'keep' a position while
+ changing tabs and tab is in the interval
+ */
+ int shift() const {return shift_;}
+ void shift(int v) {shift_=v;}
+ int spacing() const {return slope_+extra_space_;}
+ /*! determines if we forbid partial tabs drawing with clipping */
+ void noclip(bool v) {_noclip=v;}
+
+private:
+ int shift_, border_, slope_, extra_space_;
+ bool _noclip;
+
+};
+
+// fltk default factory pagers
+const int PAGER_MENU = 0; //<-- two left and right buttons provide prev page and next page
+const int PAGER_SHRINK = 1; //<-- tabs outside rect are shrinked to very small slice to fit
+
+
+class FL_API TabGroup : public Group {
+
+public:
+ int handle(int);
+
+ TabGroup(int,int,int,int,const char * = 0, bool begin=false);
+ ~TabGroup() {delete pager_;}
+ static NamedStyle* default_style;
+
+ int value() const;
+ bool value(int);
+ int which(int event_x, int event_y);
+ Widget *selected_child();
+ bool selected_child(Widget *);
+ void set_draw_outline( bool draw_outline );
+
+ //! setting the pager_ to a tabgroup, pager is _never_ null by design
+ void pager(TabGroupPager * value);
+ //! returning the current pager_ responsible of this instance
+ TabGroupPager * pager() const {return pager_;}
+ //! setting the default pager_ for future tabgroups, a default pager is _never_ null by design
+ static void default_pager(TabGroupPager * v);
+ //! setting the default pager_ from the built-in ones
+ static void default_pager(int factory_pager_index);
+
+ int tab_height();
+ int tab_positions(int*, int*);
+
+ void draw_tab(int x1, int x2, int W, int H, Widget* o, int sel=0);
+ void draw_tab_background();
+
+protected:
+ void draw();
+
+private:
+ int push(Widget *);
+ bool _drawOutline;
+ TabGroupPager* pager_;
+ static TabGroupPager* default_pager_;
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: TabGroup.h 5575 2007-01-02 17:31:40Z spitzak $".
+//
diff --git a/fltk/fltk/TextBuffer.h b/fltk/fltk/TextBuffer.h
new file mode 100644
index 0000000..3a1b386
--- /dev/null
+++ b/fltk/fltk/TextBuffer.h
@@ -0,0 +1,285 @@
+//
+// "$Id: TextBuffer.h 5432 2006-09-16 02:03:04Z spitzak $"
+//
+// Header file for TextBuffer class.
+//
+// Copyright 2001-2006 by Bill Spitzak and others.
+// Original code Copyright Mark Edel. Permission to distribute under
+// the LGPL for the FLTK library granted by Mark Edel.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+#ifndef _fltk_TextBuffer_h_
+#define _fltk_TextBuffer_h_
+
+#include "FL_API.h"
+
+namespace fltk {
+
+/* Maximum length in characters of a tab or control character expansion
+ of a single buffer character */
+#define TEXT_MAX_EXP_CHAR_LEN 20
+
+class FL_API TextSelection {
+public:
+ TextSelection();
+
+ void set(int start, int end);
+ void set_rectangular(int start, int end, int rectstart, int rectend);
+ void update(int pos, int ndeleted, int ninserted);
+ bool rectangular() const { return rectangular_; }
+ int start() const { return start_; }
+ int end() const { return end_; }
+ int rectstart() const { return rectstart_; }
+ int rectend() const { return rectend_; }
+ bool selected() const { return selected_; }
+ void selected(bool b) { selected_ = b; }
+ bool zerowidth() const { return zerowidth_; }
+ void zerowidth(bool b) { zerowidth_ = b; }
+ bool includes(int pos, int lineStartPos, int dispIndex);
+ int position(int* start, int* end);
+ int position(int* start, int* end, int* isrect, int* rectstart, int* rectend);
+
+protected:
+ bool selected_; /*!< True if the selection is active */
+ bool rectangular_; /*!< True if the selection is rectangular */
+ bool zerowidth_; /*!< Width 0 selections aren't "real" selections, but
+ they can be useful when creating rectangular
+ selections from the keyboard. */
+ int start_; /*!< Pos. of start of selection, or if rectangular
+ start of line containing it. */
+ int end_; /*!< Pos. of end of selection, or if rectangular
+ end of line containing it. */
+ int rectstart_; /*!< Indent of left edge of rect. selection */
+ int rectend_; /*!< Indent of right edge of rect. selection */
+};
+
+
+typedef void (*Text_Modify_Cb)( int pos, int nInserted, int nDeleted,
+ int nRestyled, const char* deletedText,
+ void* cbArg);
+
+typedef void (*Text_Predelete_Cb)(int pos, int nDeleted, void* cbArg);
+
+/** TextBuffer */
+class FL_API TextBuffer {
+public:
+ TextBuffer(int requestedsize = 0);
+ ~TextBuffer();
+
+ int length() const { return length_; }
+
+ const char *text();
+ void text(const char* text);
+
+ char character(int pos);
+ char *text_range(int start, int end);
+ char *text_in_rectangle(int start, int end, int rectStart, int rectEnd);
+
+ void insert(int pos, const char *text);
+ void append(const char *t) { insert(length(), t); }
+ void remove(int start, int end);
+ void replace(int start, int end, const char *text);
+ void copy(TextBuffer *from_buf, int from_start, int from_end, int to_pos);
+
+ int undo(int *cp = 0);
+ void canUndo(char flag = 1);
+
+ int insertfile(const char *file, int pos, int buflen = 128*1024);
+ int appendfile(const char *file, int buflen = 128*1024)
+ { return insertfile(file, length(), buflen); }
+ int loadfile(const char *file, int buflen = 128*1024)
+ { select(0, length()); remove_selection(); return appendfile(file, buflen); }
+ int outputfile(const char *file, int start, int end, int buflen = 128*1024);
+ int savefile(const char *file, int buflen = 128*1024)
+ { return outputfile(file, 0, length(), buflen); }
+
+ void insert_column(int column, int startpos, const char *text,
+ int *chars_inserted, int *chars_deleted);
+
+ void replace_rectangular(int start, int end, int rectstart, int rectend,
+ const char *text);
+
+ void overlay_rectangular(int startpos, int rectStart, int rectEnd,
+ const char* text, int* charsInserted,
+ int* charsDeleted);
+
+ void remove_rectangular(int start, int end, int rectStart, int rectEnd);
+ void clear_rectangular(int start, int end, int rectStart, int rectEnd);
+ int tab_distance() const { return tabdist_; }
+ void tab_distance(int tabDist);
+
+ void select(int start, int end);
+ bool selected() const { return primary_.selected(); }
+ void unselect();
+
+ void select_rectangular(int start, int end, int rectStart, int rectEnd);
+ int selection_position(int* start, int* end);
+
+ int selection_position(int* start, int* end, int* isRect, int* rectStart,
+ int* rectEnd);
+
+ char *selection_text();
+ void remove_selection();
+ void replace_selection(const char* text);
+ void secondary_select(int start, int end);
+ void secondary_unselect();
+
+ void secondary_select_rectangular(int start, int end, int rectStart,
+ int rectEnd);
+
+ int secondary_selection_position(int* start, int* end, int* isRect,
+ int* rectStart, int* rectEnd);
+
+ char *secondary_selection_text();
+ void remove_secondary_selection();
+ void replace_secondary_selection(const char* text);
+ void highlight(int start, int end);
+ void unhighlight();
+ void highlight_rectangular(int start, int end, int rectStart, int rectEnd);
+
+ int highlight_position(int* start, int* end, int* isRect, int* rectStart,
+ int* rectEnd);
+
+ char *highlight_text();
+ void add_modify_callback(Text_Modify_Cb bufModifiedCB, void* cbArg);
+ void remove_modify_callback(Text_Modify_Cb bufModifiedCB, void* cbArg);
+
+ void call_modify_callbacks() { call_modify_callbacks(0, 0, 0, 0, 0); }
+
+ void add_predelete_callback(Text_Predelete_Cb bufPredelCB, void* cbArg);
+ void remove_predelete_callback(Text_Predelete_Cb predelCB, void* cbArg);
+
+ void call_predelete_callbacks() { call_predelete_callbacks(0, 0); }
+
+ char* line_text(int pos);
+ int line_start(int pos);
+ int line_end(int pos);
+ int word_start(int pos);
+ int word_end(int pos);
+ int expand_character(int pos, int indent, char *outStr);
+
+ static int expand_character(char c, int indent, char* outStr, int tabDist,
+ char nullSubsChar);
+
+ static int character_width(char c, int indent, int tabDist, char nullSubsChar);
+ int count_displayed_characters(int lineStartPos, int targetPos);
+ int count_displayed_characters_utf(int lineStartPos, int targetPos);
+ int skip_displayed_characters(int lineStartPos, int nChars);
+ int skip_displayed_characters_utf(int lineStartPos, int nChars);
+ int count_lines(int startPos, int endPos);
+ int skip_lines(int startPos, int nLines);
+ int rewind_lines(int startPos, int nLines);
+
+ bool findchar_forward(int startPos, char searchChar, int* foundPos);
+ bool findchar_backward(int startPos, char searchChar, int* foundPos);
+
+ bool findchars_forward(int startpos, const char *searchChars, int *foundPos);
+ bool findchars_backward(int startpos, const char *searchChars, int *foundPos);
+
+ bool search_forward(int startPos, const char* searchString, int* foundPos,
+ bool matchCase = false);
+
+ bool search_backward(int startPos, const char* searchString, int* foundPos,
+ bool matchCase = false);
+
+ char null_substitution_character() { return nullsubschar_; }
+ TextSelection* primary_selection() { return &primary_; }
+ TextSelection* secondary_selection() { return &secondary_; }
+ TextSelection* highlight_selection() { return &highlight_; }
+
+protected:
+ void call_modify_callbacks(int pos, int nDeleted, int nInserted,
+ int nRestyled, const char* deletedText);
+ void call_predelete_callbacks(int pos, int nDeleted);
+
+ int insert_(int pos, const char* text);
+ void remove_(int start, int end);
+
+ void remove_rectangular_(int start, int end, int rectStart, int rectEnd,
+ int* replaceLen, int* endPos);
+
+ void insert_column_(int column, int startPos, const char* insText,
+ int* nDeleted, int* nInserted, int* endPos);
+
+ void overlay_rectangular_(int startPos, int rectStart, int rectEnd,
+ const char* insText, int* nDeleted,
+ int* nInserted, int* endPos);
+
+ void redisplay_selection(TextSelection* oldSelection,
+ TextSelection* newSelection);
+
+ void move_gap(int pos);
+ void reallocate_with_gap(int newGapStart, int newGapLen);
+ char *selection_text_(TextSelection *sel);
+ void remove_selection_(TextSelection *sel);
+ void replace_selection_(TextSelection *sel, const char* text);
+
+ void rectangular_selection_boundaries(int lineStartPos, int rectStart,
+ int rectEnd, int* selStart,
+ int* selEnd);
+
+ void update_selections(int pos, int nDeleted, int nInserted);
+
+ TextSelection primary_; /* highlighted areas */
+ TextSelection secondary_;
+ TextSelection highlight_;
+
+ int length_; /*!< length of the text in the buffer (the length
+ of the buffer itself must be calculated:
+ gapend - gapstart + length) */
+ char *buf_; /*!< allocated memory where the text is stored */
+ int gapstart_; /*!< points to the first character of the gap */
+ int gapend_; /*!< points to the first char after the gap */
+
+ int tabdist_; /*!< equiv. number of characters in a tab */
+ bool usetabs_; /*!< True if buffer routines are allowed to use
+ tabs for padding in rectangular operations */
+
+ int nmodifyprocs_; /*!< number of modify-redisplay procs attached */
+ Text_Modify_Cb *modifyprocs_; /* modified to redisplay contents */
+ void **modifycbargs_; /*!< caller arguments for modifyprocs_ above */
+
+ int npredeleteprocs_; /*!< number of pre-delete procs attached */
+ Text_Predelete_Cb *predeleteprocs_; /* procedure to call before text is deleted */
+ /* from the buffer; at most one is supported. */
+ void **prepeletecbargs_; /*!< caller argument for pre-delete proc above */
+
+ int cursorposhint_; /*!< hint for reasonable cursor position after
+ a buffer modification operation */
+ char nullsubschar_; /*!< TextBuffer is based on C null-terminated strings,
+ so ascii-nul characters must be substituted
+ with something else. This is the else, but
+ of course, things get quite messy when you
+ use it */
+
+ char mCanUndo; /*!< if this buffer is used for attributes, it must
+ not do any undo calls */
+};
+
+} /* namespace fltk */
+
+#endif
+
+//
+// End of "$Id: TextBuffer.h 5432 2006-09-16 02:03:04Z spitzak $".
+//
+
diff --git a/fltk/fltk/TextDisplay.h b/fltk/fltk/TextDisplay.h
new file mode 100644
index 0000000..8877100
--- /dev/null
+++ b/fltk/fltk/TextDisplay.h
@@ -0,0 +1,358 @@
+//
+// "$Id: TextDisplay.h 5432 2006-09-16 02:03:04Z spitzak $"
+//
+// Header file for TextDisplay class.
+//
+// Copyright 2001-2006 by Bill Spitzak and others.
+// Original code Copyright Mark Edel. Permission to distribute under
+// the LGPL for the FLTK library granted by Mark Edel.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+#ifndef _fltk_TextDisplay_h_
+#define _fltk_TextDisplay_h_
+
+#include "draw.h"
+#include "Group.h"
+#include "Widget.h"
+#include "Scrollbar.h"
+#include "TextBuffer.h"
+#include "Font.h"
+
+namespace fltk {
+
+typedef void (*UnfinishedStyleCb)(int, void *);
+
+/** TextDisplay */
+class FL_API TextDisplay: public Group {
+public:
+ enum {
+ NORMAL_CURSOR, CARET_CURSOR, DIM_CURSOR,
+ BLOCK_CURSOR, HEAVY_CURSOR
+ };
+
+ enum {
+ CURSOR_POS, CHARACTER_POS
+ };
+
+ // drag types- they match fltk::event_clicks() so that single clicking to
+ // start a collection selects by character, double clicking selects by
+ // word and triple clicking selects by line.
+ enum {
+ DRAG_CHAR = 0, DRAG_WORD = 1, DRAG_LINE = 2
+ };
+
+ enum {
+ ATTR_NONE = 0,
+ ATTR_UNDERLINE = 1,
+ ATTR_HIDDEN = 2
+ };
+
+ struct StyleTableEntry {
+ Color color;
+ Font *font;
+ float size;
+ unsigned attr;
+ };
+
+ TextDisplay(int X, int Y, int W, int H, const char *l = 0);
+ ~TextDisplay();
+
+ // Emulation of Input widget:
+ int size() const { return buffer_->length(); }
+ const char* text() const { return buffer_->text(); }
+ void text( const char* v) { buffer_->text(v); }
+ void static_text( const char* v) { buffer_->text(v); }
+ char at(int i) const { return buffer_->character(i); }
+
+ virtual int handle(int e);
+ virtual void draw();
+ virtual void layout();
+
+ /** Associate 'buf' with display */
+ void buffer(TextBuffer* buf);
+ /** Associate 'buf' with display */
+ void buffer(TextBuffer& buf) { buffer(&buf); }
+
+ /** Return attached buffer */
+ TextBuffer* buffer() { return buffer_; }
+ /** Return attached buffer */
+ const TextBuffer* buffer() const { return buffer_; }
+
+ /** Append text to the end of the buffer */
+ void append(const char *text) { insert_position(buffer()->length()); insert(text); }
+ /** Insert text to current cursor position */
+ void insert(const char *text);
+ /** Overstrike text from current cursor position */
+ void overstrike(const char *text);
+
+ /** Set new cursor position */
+ void insert_position(int newPos);
+ /** Return current cursor position */
+ int insert_position() const { return cursor_pos_; }
+ /** Make cursor position visible in screen */
+ void show_insert_position();
+
+ /** Show cursor */
+ void show_cursor(bool b = true);
+ /** Hide cursor */
+ void hide_cursor() { show_cursor(false); }
+ /** Return cursor visibility state */
+ bool cursor_on() const { return cursor_on_; }
+ /** Set cursor style */
+ void cursor_style(int style);
+
+ /** Return cursor color */
+ Color cursor_color() const { return cursor_color_;}
+ /** Set cursor color */
+ void cursor_color(Color n) { cursor_color_ = n; }
+
+ /** Return begining of the word where 'pos' is located */
+ int word_start(int pos) { return buffer()->word_start(pos); }
+ /** Return end of the word where 'pos' is located */
+ int word_end(int pos) { return buffer()->word_end(pos); }
+ /** Go to next word */
+ void next_word(void);
+ /** Go to previous word */
+ void previous_word(void);
+
+ /** Set wrapping mode. wrap_margin is width to wrap at, zero means use w() */
+ void wrap_mode(bool wrap, int wrap_margin=0);
+
+ /** Set line number area width */
+ void linenumber_width(int width);
+ /** Return line number area width */
+ int linenumber_width() const { return linenumwidth_; }
+
+ /** Set new highlight data */
+ void highlight_data(TextBuffer *styleBuffer,
+ StyleTableEntry *styleTable,
+ int nStyles, char unfinishedStyle,
+ UnfinishedStyleCb unfinishedHighlightCB,
+ void *cbArg);
+
+ /** Move cursor right */
+ bool move_right();
+ /** Move cursor left */
+ bool move_left();
+ /** Move cursor down */
+ bool move_up();
+ /** Move cursor down */
+ bool move_down();
+
+ /** Redisplay text */
+ void redisplay_range(int start, int end);
+
+ /** Scroll to new position */
+ void scroll(int topLineNum, int horizOffset);
+
+ /** Returns true if position is inside selection */
+ bool in_selection(int x, int y);
+
+ /** Returns begining of the line where 'pos' is located */
+ int line_start(int pos);
+
+ /** Returns end of the line where 'pos' is located */
+ int line_end(int pos, bool start_pos_is_line_start = false);
+
+ /** Return number of visible lines */
+ int visible_lines() const { return visiblelines_cnt_; }
+
+ /** Return current visible topline */
+ int top_line() const { return topline_num_; }
+
+ /** Return current horizontal offset */
+ int hor_offset() const { return horiz_offset_; }
+
+ /** Find start of the next character, starting from 'pos'
+ * If 'pos' points to start of character already, it is returned.
+ * This is mainly used with UTF-8 strings
+ */
+ int find_next_char(int pos);
+
+ /** Find start of the previous character, starting from 'pos'
+ * If 'pos' points to start of character already, it is returned.
+ * This is mainly used with UTF-8 strings
+ */
+ int find_prev_char(int pos);
+
+ int xy_to_position(int X, int Y, int PosType = CHARACTER_POS);
+
+ void xy_to_rowcol(int X, int Y, int *row, int *column, int PosType = CHARACTER_POS);
+
+ bool position_to_xy(int pos, int *X, int *Y);
+
+ int total_lines() {return count_lines(0, buffer_->length(), true);}
+
+protected:
+ void draw_text(int X, int Y, int W, int H);
+ void draw_range(int start, int end);
+ void draw_cursor(int, int);
+
+ void draw_string(int style, int x, int y, int toX, const char *string,
+ int nChars);
+
+ void draw_vline(int visLineNum, int leftClip, int rightClip,
+ int leftCharIndex, int rightCharIndex);
+
+ void draw_line_numbers(bool clearAll);
+
+ void clear_rect(int style, int x, int y, int width, int height);
+ void display_insert();
+
+ int count_lines(int start, int end, bool start_pos_is_line_start);
+ int skip_lines(int startPos, int nLines, bool startPosIsLineStart);
+ int rewind_lines(int startPos, int nLines);
+ int position_style(int lineStartPos, int lineLen, int lineIndex, int dispIndex);
+
+ int wrapped_column(int row, int column);
+ int wrapped_row(int row);
+
+ void offset_line_starts(int newTopLineNum);
+
+ void calc_line_starts(int startLine, int endLine);
+
+ void update_line_starts(int pos, int charsInserted, int charsDeleted,
+ int linesInserted, int linesDeleted, bool *scrolled);
+
+ void calc_last_char();
+
+ bool position_to_line(int pos, int* lineNum);
+ int string_width(const char* string, int length, int style);
+
+ static void buffer_predelete_cb(int pos, int nDeleted, void* cbArg);
+ static void buffer_modified_cb(int pos, int nInserted, int nDeleted,
+ int nRestyled, const char* deletedText,
+ void* cbArg);
+
+ static void h_scrollbar_cb(Scrollbar* w, TextDisplay* d);
+ static void v_scrollbar_cb( Scrollbar* w, TextDisplay* d);
+ void update_v_scrollbar();
+ void update_h_scrollbar(int longestvline = 0);
+
+ void blank_cursor_protrusions();
+ int measure_vline(int visLineNum);
+ int longest_vline();
+ int empty_vlines();
+ int vline_length(int visLineNum);
+
+ void maintain_absolute_top_line_number(bool state);
+ int get_absolute_top_line_number();
+ void absolute_top_line_number(int oldFirstChar);
+ int maintaining_absolute_top_line_number();
+ void reset_absolute_top_line_number();
+ bool position_to_linecol(int pos, int *lineNum, int *column);
+ void scroll_(int topLineNum, int horizOffset);
+
+ void extend_range_for_styles(int* start, int* end);
+
+ void find_wrap_range(const char *deletedText, int pos, int nInserted,
+ int nDeleted, int *modRangeStart, int *modRangeEnd,
+ int *linesInserted, int *linesDeleted);
+ void measure_deleted_lines(int pos, int nDeleted);
+ void wrapped_line_counter(TextBuffer *buf, int startPos, int maxPos,
+ int maxLines, bool startPosIsLineStart,
+ int styleBufOffset, int *retPos, int *retLines,
+ int *retLineStart, int *retLineEnd,
+ bool countLastLineMissingNewLine = true);
+ void find_line_end(int pos, bool start_pos_is_line_start, int *lineEnd,
+ int *nextLineStart);
+ int measure_proportional_character(TextBuffer *buf, int bufpos, int colNum, int pos);
+ int wrap_uses_character(int lineEndPos);
+ int range_touches_selection(TextSelection *sel, int rangeStart, int rangeEnd);
+ void text_drag_me(int pos);
+
+ int damage_range1_start, damage_range1_end;
+ int damage_range2_start, damage_range2_end;
+
+ int cursor_pos_;
+ bool cursor_on_;
+ int cursor_oldx_; /* X pos. of cursor for blanking */
+ int cursor_oldy_; /* Y pos. of cursor for blanking */
+ int cursor_hint_; /* Tells the buffer modified callback
+ where to move the cursor, to reduce
+ the number of redraw calls */
+ int cursor_style_; /* One of enum cursorStyles above */
+ int cursor_preferred_col_; /* Column for vert. cursor movement */
+ int visiblelines_cnt_; /* # of visible (displayed) lines */
+ int bufferlines_cnt_; /* # of newlines in the buffer */
+ TextBuffer *buffer_; /* Contains text to be displayed */
+ TextBuffer *stylebuffer_; /* Optional parallel buffer containing
+ color and font information */
+ int firstchar_, lastchar_; /* Buffer positions of first and last
+ displayed character (lastChar points
+ either to a newline or one character
+ beyond the end of the buffer) */
+ bool own_buffer; /* True if buffer_ created by constructor */
+ bool continuous_wrap_; /* Wrap long lines when displaying */
+ int wrapmargin_; /* Margin in # of char positions for
+ wrapping in continuousWrap mode */
+ int *linestarts_;
+ int topline_num_; /* Line number of top displayed line
+ of file (first line of file is 1) */
+ int abs_topline_num_; /* In continuous wrap mode, the line
+ number of the top line if the text
+ were not wrapped (note that this is
+ only maintained as needed). */
+ bool need_abs_topline_num_; /* Externally settable flag to continue
+ maintaining absTopLineNum even if
+ it isn't needed for line # display */
+ int horiz_offset_; /* Horizontal scroll pos. in pixels */
+ int numstyles_; /* Number of entries in styleTable */
+ const StyleTableEntry *styletable_; /* Table of fonts and colors for
+ coloring/syntax-highlighting */
+ char unfinished_style_; /* Style buffer entry which triggers
+ on-the-fly reparsing of region */
+ UnfinishedStyleCb unfinished_highlight_cb_; /* Callback to parse "unfinished" */
+ /* regions */
+ void *highlight_cbarg_; /* Arg to unfinishedHighlightCB */
+ int fixed_fontwidth_; /* Font width if all current fonts are
+ fixed and match in width, else -1 */
+ bool suppressresync_; /* Suppress resynchronization of line
+ starts during buffer updates */
+ int nlinesdeleted_; /* Number of lines deleted during
+ buffer modification (only used
+ when resynchronization is suppressed) */
+
+ int stdfontwidth_;
+ int ascent_;
+ int descent_;
+ int maxsize_;
+
+ Color cursor_color_;
+
+ Scrollbar *hscrollbar;
+ Scrollbar *vscrollbar;
+
+ Rectangle text_area;
+
+ int dragpos_, dragtype_, dragging_;
+ int linenumleft_, linenumwidth_; /* Line number margin and width */
+};
+
+} /* namespace fltk */
+
+#endif
+
+//
+// End of "$Id: TextDisplay.h 5432 2006-09-16 02:03:04Z spitzak $".
+//
+
diff --git a/fltk/fltk/TextEditor.h b/fltk/fltk/TextEditor.h
new file mode 100644
index 0000000..89797ac
--- /dev/null
+++ b/fltk/fltk/TextEditor.h
@@ -0,0 +1,122 @@
+//
+// "$Id: TextEditor.h 4899 2006-04-04 13:53:37Z fabien $"
+//
+// Header file for TextEditor class.
+//
+// Copyright 2001-2006 by Bill Spitzak and others.
+// Original code Copyright Mark Edel. Permission to distribute under
+// the LGPL for the FLTK library granted by Mark Edel.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+
+#ifndef TEXT_EDITOR_H
+#define TEXT_EDITOR_H
+
+#include "TextDisplay.h"
+
+namespace fltk {
+
+// key will match in any state
+#define TEXT_EDITOR_ANY_STATE (-1L)
+
+/** TextEditor */
+class FL_API TextEditor : public TextDisplay {
+public:
+ typedef int (*Key_Func)(int key, TextEditor* editor);
+
+ struct Key_Binding {
+ int key;
+ int state;
+ Key_Func function;
+ Key_Binding* next;
+ };
+
+ static NamedStyle* default_style;
+
+ TextEditor(int X, int Y, int W, int H, const char* l = 0);
+ ~TextEditor();
+
+ virtual int handle(int e);
+
+ /** Set new insert mode. true=insert, false=overstrike */
+ void insert_mode(bool b) { insert_mode_ = b; }
+ /** Return current insert mode */
+ bool insert_mode() const { return insert_mode_; }
+
+ void add_key_binding(int key, int state, Key_Func f, Key_Binding** list);
+ void add_key_binding(int key, int state, Key_Func f)
+ { add_key_binding(key, state, f, &key_bindings); }
+ void remove_key_binding(int key, int state, Key_Binding** list);
+ void remove_key_binding(int key, int state)
+ { remove_key_binding(key, state, &key_bindings); }
+ void remove_all_key_bindings(Key_Binding** list);
+ void remove_all_key_bindings() { remove_all_key_bindings(&key_bindings); }
+ void add_default_key_bindings(Key_Binding** list);
+ Key_Func bound_key_function(int key, int state, Key_Binding* list);
+ Key_Func bound_key_function(int key, int state)
+ { return bound_key_function(key, state, key_bindings); }
+ void default_key_function(Key_Func f) { default_key_function_ = f; }
+
+ // functions for the built in default bindings
+ static int kf_default(int c, TextEditor* e);
+ static int kf_ignore(int c, TextEditor* e);
+ static int kf_backspace(int c, TextEditor* e);
+ static int kf_enter(int c, TextEditor* e);
+ static int kf_move(int c, TextEditor* e);
+ static int kf_shift_move(int c, TextEditor* e);
+ static int kf_ctrl_move(int c, TextEditor* e);
+ static int kf_c_s_move(int c, TextEditor* e);
+ static int kf_home(int, TextEditor* e);
+ static int kf_end(int c, TextEditor* e);
+ static int kf_left(int c, TextEditor* e);
+ static int kf_up(int c, TextEditor* e);
+ static int kf_right(int c, TextEditor* e);
+ static int kf_down(int c, TextEditor* e);
+ static int kf_page_up(int c, TextEditor* e);
+ static int kf_page_down(int c, TextEditor* e);
+ static int kf_insert(int c, TextEditor* e);
+ static int kf_delete(int c, TextEditor* e);
+ static int kf_copy(int c, TextEditor* e);
+ static int kf_cut(int c, TextEditor* e);
+ static int kf_paste(int c, TextEditor* e);
+ static int kf_select_all(int c, TextEditor* e);
+ static int kf_undo(int c, TextEditor* e);
+
+protected:
+ int handle_key();
+ void maybe_do_callback();
+
+ bool insert_mode_;
+ Key_Binding* key_bindings;
+ static Key_Binding* global_key_bindings;
+ Key_Func default_key_function_;
+};
+
+} /* namespace fltk */
+
+#endif
+
+//
+// End of "$Id: TextEditor.h 4899 2006-04-04 13:53:37Z fabien $".
+//
+
+
diff --git a/fltk/fltk/Threads.h b/fltk/fltk/Threads.h
new file mode 100644
index 0000000..879d189
--- /dev/null
+++ b/fltk/fltk/Threads.h
@@ -0,0 +1,206 @@
+#ifndef fltk_Threads_h
+#define fltk_Threads_h
+#include <fltk/FL_API.h>
+
+#if !defined( _WIN32) || defined(__CYGWIN__)
+// pthreads:
+
+#include <pthread.h>
+
+namespace fltk {
+
+/// \name fltk/Threads.h
+//@{
+
+/** Hides whatever the system uses to identify a thread. Used so
+ the "toy" interface is portable. */
+typedef pthread_t Thread;
+
+/** Fork a new thread and make it run \a f(p). Returns negative number
+ on error, otherwise \a t is set to the new thread. */
+inline int create_thread(Thread& t, void *(*f) (void *), void* p) {
+ return pthread_create((pthread_t*)&t, 0, f, p);
+}
+
+/**
+ "Mutual-exclusion lock" for simple multithreaded programs. Calling
+ lock() will wait until nobody else has the lock and then will
+ return. <i>Calling lock() more than once will "deadlock"!</i>
+ To avoid this, use RecursiveMutex.
+*/
+class Mutex {
+ friend class SignalMutex;
+ pthread_mutex_t mutex;
+ Mutex(const Mutex&);
+ Mutex& operator=(const Mutex&);
+protected:
+ Mutex(const pthread_mutexattr_t* a) {pthread_mutex_init(&mutex, a);}
+public:
+ Mutex() {pthread_mutex_init(&mutex, 0);}
+ void lock() {pthread_mutex_lock(&mutex);}
+ void unlock() {pthread_mutex_unlock(&mutex);}
+ bool trylock() {return pthread_mutex_trylock(&mutex) == 0;}
+ ~Mutex() {pthread_mutex_destroy(&mutex);}
+};
+
+/**
+ A portable "semaphore". A thread that holds this lock() can call
+ wait(), which will unlock it, then wait for another thread to
+ call signal(), then lock() it again.
+
+ The other thread can call signal() at any time, though usually
+ it will have called lock() as well, as the lock can be used to
+ protect the data that is actually being shared between the threads.
+
+ If more than one thread is in wait(), then calling signal_one()
+ will only wake one of them up. This may be more efficient, and
+ can be done safely if all threads that call wait() also call
+ signal_one() just before calling unlock().
+
+ Warning: wait() can return even if signal() was not called. You
+ must then check other data (protected by the lock()) to see if
+ the condition really is fulfilled. In many cases this is the
+ best implementation, it is also necessary to work around design
+ errors in Windows, where always returns after 1/2 second to
+ avoid a deadlock due to the non-atomic nature of Windows calls.
+*/
+class SignalMutex : public Mutex {
+ pthread_cond_t cond;
+public:
+ SignalMutex() : Mutex() {pthread_cond_init(&cond, 0);}
+ void signal() {pthread_cond_broadcast(&cond);}
+ void signal_one() {pthread_cond_signal(&cond);}
+ void wait() {pthread_cond_wait(&cond, &mutex);}
+};
+
+// Linux supports recursive locks, use them directly, with some cheating:
+#if defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP) || defined(PTHREAD_MUTEX_RECURSIVE)
+
+class RecursiveMutex : public Mutex {
+public:
+ RecursiveMutex();
+};
+
+#else // standard pthread mutexes need a bit of work to be recursive:
+
+/**
+ "Mutual exclusion lock" to protect data in multithreaded programs.
+ This is a "recursive lock". Calling lock() will wait until nobody
+ else has the lock and then will take it. Calling lock() multiple
+ times by the same thread is allowed, and unlock() must then be
+ called the same number of times before another thread can get the
+ lock.
+*/
+class RecursiveMutex : public Mutex {
+ pthread_t owner;
+ int counter;
+public:
+ RecursiveMutex() : Mutex(), counter(0) {}
+ void lock() {
+ if (!counter || owner != pthread_self()) {
+ Mutex::lock();
+ owner = pthread_self();
+ counter = 1;
+ } else {
+ ++counter;
+ }
+ }
+ bool trylock() {
+ if (!counter || owner != pthread_self()) {
+ if (!Mutex::trylock()) return false;
+ owner = pthread_self();
+ }
+ counter++;
+ return true;
+ }
+ void unlock() {if (!--counter) Mutex::unlock();}
+};
+
+#endif
+
+#else // _WIN32:
+
+# define _WIN32_WINNT 0x0500
+# include <windows.h>
+# include <process.h>
+// undefine some of the more annoying crap:
+# undef DELETE
+# undef ERROR
+# undef IN
+# undef OUT
+# undef POINT
+# undef far
+# undef max
+# undef min
+# undef near
+
+namespace fltk {
+
+typedef unsigned long Thread;
+
+inline int create_thread(Thread& t, void *(*f) (void *), void* p) {
+ return t = (Thread)_beginthread((void( __cdecl * )( void * ))f, 0, p);
+}
+
+class FL_API Mutex {
+ CRITICAL_SECTION cs;
+ Mutex(const Mutex&);
+ Mutex& operator=(const Mutex&);
+public:
+ Mutex() {InitializeCriticalSection(&cs);}
+ void lock() {while (!TryEnterCriticalSection(&cs)) SwitchToThread();}
+ void unlock() {LeaveCriticalSection(&cs);}
+ bool trylock() {return TryEnterCriticalSection(&cs);}
+ ~Mutex() {DeleteCriticalSection(&cs);}
+};
+
+// After many experiments we have determined that this very stupid
+// implementation has the lowest overhead:
+class FL_API SignalMutex : public Mutex {
+public:
+ SignalMutex() : Mutex() {}
+ void signal() {}
+ void signal_one() {}
+ void wait() {
+ // the following three calls should be atomic, sigh...
+ unlock();
+ SwitchToThread();
+ lock();
+ }
+};
+
+typedef Mutex RecursiveMutex;
+
+#endif
+
+/**
+ C++ convienence object for locking a Mutex.
+ Creating a local one of these will lock() the mutex and it means
+ unlock() will be called no matter how a function exits, because
+ the destructor ~Guard() does an unlock().
+
+\code
+ static fltk::Mutex mutex;
+ function() {
+ fltk::Guard guard(mutex);
+ do_stuff;
+ throw_exceptions;
+ if (test()) return;
+ etc;
+ }
+\endcode
+
+*/
+class FL_API Guard {
+ Mutex& lock;
+ public:
+ Guard(Mutex& m) : lock(m) {lock.lock();}
+ Guard(Mutex* m) : lock(*m) {lock.lock();}
+ ~Guard() {lock.unlock();}
+};
+
+//@}
+
+}
+
+#endif
diff --git a/fltk/fltk/ThumbWheel.h b/fltk/fltk/ThumbWheel.h
new file mode 100644
index 0000000..bcf3c9f
--- /dev/null
+++ b/fltk/fltk/ThumbWheel.h
@@ -0,0 +1,54 @@
+//
+// "$Id: ThumbWheel.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Inventor-style thumbwheel control for a single floating point value.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_ThumbWheel_h
+#define fltk_ThumbWheel_h
+
+#ifndef fltk_Valuator_h
+#include "Valuator.h"
+#endif
+
+namespace fltk {
+
+class FL_API ThumbWheel : public Valuator {
+public:
+#ifdef FLTK_1_SLIDER
+ // for back-compatability only
+ enum {HORIZONTAL = 1};
+#endif
+ int handle(int);
+ ThumbWheel(int X,int Y,int W,int H,const char* L=0);
+
+protected:
+ void draw();
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: ThumbWheel.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/TiledGroup.h b/fltk/fltk/TiledGroup.h
new file mode 100644
index 0000000..aa349a9
--- /dev/null
+++ b/fltk/fltk/TiledGroup.h
@@ -0,0 +1,50 @@
+//
+// "$Id: TiledGroup.h 5575 2007-01-02 17:31:40Z spitzak $"
+//
+// The child widgets are expected to be all laid out to touch each other
+// and fill this group. The user can then move the boundaries between
+// them by grabbing the junctions between the children.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_TiledGroup_h
+#define fltk_TiledGroup_h
+
+#include "Group.h"
+
+namespace fltk {
+
+class FL_API TiledGroup : public Group {
+protected:
+ void layout();
+public:
+ int handle(int);
+ TiledGroup(int x,int y,int w,int h, const char*l=0, bool begin=false) :
+ Group(x,y,w,h,l,begin) {}
+ void position(int, int, int, int);
+};
+
+}
+#endif
+
+//
+// End of "$Id: TiledGroup.h 5575 2007-01-02 17:31:40Z spitzak $".
+//
diff --git a/fltk/fltk/TiledImage.h b/fltk/fltk/TiledImage.h
new file mode 100644
index 0000000..267fb51
--- /dev/null
+++ b/fltk/fltk/TiledImage.h
@@ -0,0 +1,50 @@
+//
+// "$Id: TiledImage.h 5810 2007-05-11 22:44:12Z spitzak $"
+//
+// A tiled image completely fills the bounding box passed to it with
+// replications of the internal Image passed to it.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_TiledImage_h
+#define fltk_TiledImage_h
+
+#include "Symbol.h"
+
+namespace fltk {
+
+class FL_API TiledImage : public Symbol {
+protected:
+ const Symbol* image_;
+public:
+ TiledImage(Symbol *i) : Symbol(0), image_(i) {}
+ const Symbol* image() const {return image_;}
+ void image(const Symbol* i) {image_ = i;}
+ void _measure(int& w, int& h) const;
+ void _draw(const Rectangle&) const;
+};
+
+}
+#endif
+
+//
+// End of "$Id: TiledImage.h 5810 2007-05-11 22:44:12Z spitzak $"
+//
diff --git a/fltk/fltk/ToggleButton.h b/fltk/fltk/ToggleButton.h
new file mode 100644
index 0000000..75e0f18
--- /dev/null
+++ b/fltk/fltk/ToggleButton.h
@@ -0,0 +1,44 @@
+//
+// "$Id: ToggleButton.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Button that clicks on and off. You get the state with value().
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_ToggleButton_h
+#define fltk_ToggleButton_h
+
+#include "Button.h"
+
+namespace fltk {
+
+class ToggleButton : public Button {
+public:
+ ToggleButton(int x,int y,int w,int h,const char *l=0)
+ : Button(x,y,w,h,l) {type(TOGGLE);}
+};
+
+}
+#endif
+
+//
+// End of "$Id: ToggleButton.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/ToggleItem.h b/fltk/fltk/ToggleItem.h
new file mode 100644
index 0000000..e6f6009
--- /dev/null
+++ b/fltk/fltk/ToggleItem.h
@@ -0,0 +1,41 @@
+// "$Id: ToggleItem.h 588 2003-06-24 21:10:19Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_ToggleItem_h
+#define fltk_ToggleItem_h
+
+#include "Item.h"
+
+namespace fltk {
+
+/** This widget makes a checkmark in a popup or pulldown Menu.
+ It's behavior in a Browser or MultiBrowser is that it changes its status on multiple clicks (e.g. double click). */
+class ToggleItem : public Item {
+public:
+ ToggleItem(const char* label = 0) : Item(label) {type(TOGGLE);}
+ ToggleItem(const char* label,int shortcut,Callback *callback=0,void *user_data=0, int flags=0)
+ : Item(label,shortcut,callback,user_data,flags) {type(TOGGLE);}
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/Tooltip.h b/fltk/fltk/Tooltip.h
new file mode 100644
index 0000000..5d4db9d
--- /dev/null
+++ b/fltk/fltk/Tooltip.h
@@ -0,0 +1,86 @@
+// "$Id: Tooltip.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_Tooltip_h
+#define fltk_Tooltip_h
+
+#include "MenuWindow.h"
+
+namespace fltk {
+
+class FL_API Tooltip : public MenuWindow {
+public:
+ Tooltip();
+ void draw();
+ void layout();
+
+ static float delay() { return delay_; }
+ static void delay(float f) { delay_ = f; }
+ static bool enabled() { return enabled_; }
+ static void enable(bool b = true) { enabled_ = b; }
+ static void disable() { enabled_ = false; }
+
+ typedef const char* (*Generator)(Widget*, void*);
+ static void enter(Widget*, const Rectangle&, Generator, void* = 0);
+ static void enter(Widget*, const Rectangle&, const char* text);
+ static void enter(Widget*);
+ static void current(Widget*);
+ static void exit();
+
+ static Widget* current_widget() { return current_widget_; }
+ static const Rectangle& current_rectangle() { return current_rectangle_; }
+ static Generator current_generator() { return current_generator_; }
+ static void* current_data() { return current_data_; }
+ static Tooltip* instance() { return instance_; }
+
+ static NamedStyle* default_style;
+#ifdef FLTK_1_WIDGET // back-compatability section:
+ static Widget* current() { return current_widget_; }
+ static Font* font() { return default_style->textfont(); }
+ static void font(Font* i) { default_style->textfont(i); }
+ static float size() { return default_style->labelsize(); }
+ static void size(float s) { default_style->labelsize(s); }
+ static void textcolor(Color c){ default_style->labelcolor(c); }
+ static Color textcolor() { return default_style->labelcolor(); }
+ static void color(Color c) { default_style->color(c); }
+ static Color color() { return default_style->color(); }
+ static void box(Box* b) { default_style->box(b); }
+ static Box* box() { return default_style->box(); }
+#endif
+
+private:
+ static float delay_;
+ static bool enabled_;
+ static Widget* current_widget_;
+ static Rectangle current_rectangle_;
+ static Generator current_generator_;
+ static void* current_data_;
+ static Tooltip* instance_;
+ static void tooltip_timeout(void*);
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Tooltip.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/Valuator.h b/fltk/fltk/Valuator.h
new file mode 100644
index 0000000..82ec50d
--- /dev/null
+++ b/fltk/fltk/Valuator.h
@@ -0,0 +1,93 @@
+// "$Id: Valuator.h 5956 2007-10-17 19:57:31Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_Valuator_h
+#define fltk_Valuator_h
+
+#ifndef fltk_Widget_h
+#include "Widget.h"
+#endif
+
+namespace fltk {
+
+class FL_API Valuator : public Widget {
+
+public:
+
+ double value() const {return value_;}
+ bool value(double);
+
+ double minimum() const {return minimum_;}
+ void minimum(double a) {minimum_ = a;}
+
+ double maximum() const {return maximum_;}
+ void maximum(double a) {maximum_ = a;}
+
+ void range(double a, double b) {minimum_ = a; maximum_ = b;}
+
+ double step() const {return step_;}
+ void step(double a) {step_ = a;}
+
+ double linesize() const;
+ void linesize(double a) {linesize_ = a;}
+ double linesize_setting() const {return linesize_;}
+
+ virtual int format(char*);
+
+ int handle(int);
+
+#ifdef FLTK_1_SLIDER
+ void step(double a, int b) {step(a/b);}
+ void bounds(double a, double b) {minimum_=a; maximum_=b;}
+ void precision(int p) {
+ int B = 1;
+ for (int i=0; i<p; i++) B *= 10;
+ step_ = 1.0f/B;
+ }
+#endif
+
+//protected:
+
+ Valuator(int X, int Y, int W, int H, const char* L);
+ double previous_value() const {return previous_value_;}
+ void handle_push() {previous_value_ = value_;}
+ void handle_drag(double newvalue);
+ void handle_release();
+
+ virtual void value_damage(); // callback whenever value changes
+ void set_value(double v) {value_ = v;} // change w/o doing value_damage
+
+private:
+
+ double value_;
+ static double previous_value_;
+ double minimum_;
+ double maximum_;
+ double step_;
+ double linesize_;
+
+};
+
+}
+
+#endif
+
+// End of "$Id: Valuator.h 5956 2007-10-17 19:57:31Z spitzak $".
diff --git a/fltk/fltk/ValueInput.h b/fltk/fltk/ValueInput.h
new file mode 100644
index 0000000..0fa5a68
--- /dev/null
+++ b/fltk/fltk/ValueInput.h
@@ -0,0 +1,58 @@
+//
+// "$Id: ValueInput.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Text field for inputing a floating-point number
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_ValueInput_h
+#define fltk_ValueInput_h
+
+#include "Valuator.h"
+#include "FloatInput.h"
+
+namespace fltk {
+
+class FL_API ValueInput : public Valuator {
+public:
+ FloatInput input;
+
+ int handle(int);
+ void draw();
+ ValueInput(int x,int y,int w,int h,const char *l=0);
+ ~ValueInput();
+
+protected:
+ void layout();
+ virtual void value_damage(); // cause damage() due to value() changing
+
+private:
+ static void input_cb(Widget*,void*);
+ void increment_cb();
+ static void repeat_callback(void* v);
+};
+
+}
+#endif
+
+//
+// End of "$Id: ValueInput.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/ValueOutput.h b/fltk/fltk/ValueOutput.h
new file mode 100644
index 0000000..1c4a5b3
--- /dev/null
+++ b/fltk/fltk/ValueOutput.h
@@ -0,0 +1,45 @@
+//
+// "$Id: ValueOutput.h 5197 2006-06-14 07:43:46Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@easysw.com".
+//
+
+#ifndef fltk_ValueOutput_h
+#define fltk_ValueOutput_h
+
+#include "Valuator.h"
+
+namespace fltk {
+
+class FL_API ValueOutput : public Valuator {
+public:
+ void draw();
+ int handle(int);
+ ValueOutput(int x,int y,int w,int h,const char *l = 0)
+ : Valuator(x, y, w, h, l) {align(ALIGN_LEFT);}
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: ValueOutput.h 5197 2006-06-14 07:43:46Z spitzak $".
+//
diff --git a/fltk/fltk/ValueSlider.h b/fltk/fltk/ValueSlider.h
new file mode 100644
index 0000000..528ecf2
--- /dev/null
+++ b/fltk/fltk/ValueSlider.h
@@ -0,0 +1,52 @@
+//
+// "$Id: ValueSlider.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_Value_Slider_h
+#define fltk_Value_Slider_h
+
+#include "Slider.h"
+#include "FloatInput.h"
+
+namespace fltk {
+
+class FL_API ValueSlider : public Slider {
+public:
+ FloatInput input;
+ int handle(int);
+ void draw();
+ ValueSlider(int x,int y,int w,int h, const char *l = 0);
+ ~ValueSlider();
+ void layout();
+ virtual void value_damage(); // cause damage() due to value() changing
+
+private:
+ static void input_cb(Widget*,void*);
+ void slider_rect(Rectangle&);
+};
+
+}
+#endif
+
+//
+// End of "$Id: ValueSlider.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/Widget.h b/fltk/fltk/Widget.h
new file mode 100644
index 0000000..2947b12
--- /dev/null
+++ b/fltk/fltk/Widget.h
@@ -0,0 +1,331 @@
+// "$Id: Widget.h 6518 2008-11-11 22:31:26Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_Widget_h
+#define fltk_Widget_h
+
+#include "Style.h"
+#include "Rectangle.h"
+
+namespace fltk {
+
+class FL_API Widget;
+class FL_API Window;
+class FL_API Symbol;
+class FL_API Group;
+class FL_API AssociationType;
+class FL_API AssociationFunctor;
+struct Cursor;
+
+typedef void (Callback )(Widget*, void*);
+typedef Callback* Callback_p; // needed for BORLAND
+typedef void (Callback0)(Widget*);
+typedef void (Callback1)(Widget*, long);
+
+#ifdef FLTK_1_WIDGET // back-compatability section:
+FL_API Font* font(int);
+#endif
+
+class FL_API Widget : public Rectangle {
+ // disable the copy assignment/constructors:
+ Widget & operator=(const Widget &);
+ Widget(const Widget &);
+
+public:
+
+ Widget(int,int,int,int,const char* =0);
+ virtual ~Widget();
+
+ virtual void draw();
+ virtual int handle(int);
+ int send(int event);
+ virtual void layout();
+
+ const Style* style() const { return style_; }
+ void style(const Style* s) { style_ = s; }
+ void style(const Style& s) { style_ = &s; }
+ bool copy_style(const Style* s);
+ static NamedStyle* default_style;
+ static Symbol* default_glyph;
+
+ Group* parent() const { return parent_; }
+ void parent(Group* w) { parent_ = w; }
+ Window* window() const ;
+
+ enum WidgetVisualType {
+ // Values for type() shared by Button and menu Item, and for fake RTTI:
+ RESERVED_TYPE = 0x64,
+ TOGGLE = RESERVED_TYPE+1,
+ RADIO = RESERVED_TYPE+2,
+ GROUP_TYPE = 0xe0,
+ WINDOW_TYPE = 0xf0
+ };
+
+ uchar type() const { return type_; }
+ void type(uchar t) { type_ = t; }
+ bool is_group() const { return type_ >= GROUP_TYPE; }
+ bool is_window() const { return type_ >= WINDOW_TYPE; }
+
+ bool resize(int x,int y,int w,int h);
+ bool position(int x, int y) ;
+ bool resize(int w, int h) ;
+
+ void get_absolute_rect( Rectangle *rect ) const;
+
+ const char* label() const { return label_; }
+ void label(const char* a);
+ void copy_label(const char* a);
+
+ const Symbol* image() const { return image_; }
+ void image(const Symbol* a) { image_ = a; }
+ void image(const Symbol& a) { image_ = &a; }
+
+ const char *tooltip() const { return tooltip_; }
+ void tooltip(const char *t) { tooltip_ = t; }
+
+ unsigned shortcut() const ;
+ void shortcut(unsigned key) ;
+ bool add_shortcut(unsigned key);
+ bool remove_shortcut(unsigned key);
+ void remove_shortcuts() ;
+ unsigned label_shortcut() const;
+ bool test_label_shortcut() const;
+ bool test_shortcut() const ;
+ bool test_shortcut(bool) const;
+
+ Callback_p callback() const { return callback_; }
+ void callback(Callback* c, void* p) { callback_=c; user_data_=p; }
+ void callback(Callback* c) { callback_=c; }
+ void callback(Callback0*c) { callback_=(Callback*)c; }
+ void callback(Callback1*c, long p=0) { callback_=(Callback*)c; user_data_=(void*)p; }
+ void* user_data() const { return user_data_; }
+ void user_data(void* v) { user_data_ = v; }
+ long argument() const { return (long)user_data_; }
+ void argument(long v) { user_data_ = (void*)v; }
+ uchar when() const { return when_; }
+ void when(uchar i) { when_ = i; }
+
+ static void default_callback(Widget*, void*);
+ void do_callback() { callback_(this,user_data_); }
+ void do_callback(Widget* o,void* arg=0) { callback_(o,arg); }
+ void do_callback(Widget* o,long arg) { callback_(o,(void*)arg); }
+ bool contains(const Widget*) const;
+ bool inside(const Widget* o) const { return o && o->contains(this); }
+ bool pushed() const ;
+ bool focused() const ;
+ bool belowmouse() const ;
+
+ Flags flags() const { return flags_; }
+ void flags(Flags f) { flags_ = f; }
+ void set_flag(unsigned f) { flags_ |= f; }
+ void clear_flag(unsigned f) { flags_ &= ~f; }
+ void invert_flag(unsigned f) { flags_ ^= f; }
+ void set_flag(unsigned f,bool b) { flags_ = (flags_&~f)|(b?f:0); }
+ bool flag(unsigned f) const { return (flags_ & f) != 0; }
+ bool any_of(unsigned f) const{ return (flags_ & f) != 0; }
+ bool all_of(unsigned f) const{ return (flags_ & f) == f; }
+
+ bool state() const { return flag(STATE); }
+ bool state(bool);
+ bool set() { return state(true); }
+ bool clear() { return state(false); }
+ void setonly();
+
+ Flags align() const { return flags_&ALIGN_MASK; }
+ void align(unsigned a) { flags_ = (flags_ & (~ALIGN_MASK)) | a; }
+ bool visible() const { return !flag(INVISIBLE); }
+ bool visible_r() const ;
+ void show() ;
+ void hide() ;
+ void set_visible() { clear_flag(INVISIBLE); }
+ void clear_visible() { set_flag(INVISIBLE); }
+ bool active() const { return !flag(INACTIVE); }
+ bool active_r() const ;
+ void activate() ;
+ void activate(int b) { if (b) activate(); else deactivate(); }
+ void deactivate() ;
+ bool output() const { return flag(OUTPUT); }
+ void set_output() { set_flag(OUTPUT); }
+ void clear_output() { clear_flag(OUTPUT); }
+ bool takesevents() const { return !any_of(OUTPUT|INVISIBLE|INACTIVE); }
+ bool changed() const { return flag(CHANGED); }
+ void set_changed() { set_flag(CHANGED); }
+ void clear_changed() { clear_flag(CHANGED); }
+ bool selected() const { return flag(SELECTED); }
+ void set_selected() { set_flag(SELECTED); }
+ void clear_selected() { clear_flag(SELECTED); }
+ bool click_to_focus() { return flag(CLICK_TO_FOCUS); }
+ void set_click_to_focus() { set_flag(CLICK_TO_FOCUS); }
+ void clear_click_to_focus() { clear_flag(CLICK_TO_FOCUS); }
+ bool tab_to_focus() { return flag(TAB_TO_FOCUS); }
+ void set_tab_to_focus() { set_flag(TAB_TO_FOCUS); }
+ void clear_tab_to_focus() { clear_flag(TAB_TO_FOCUS|CLICK_TO_FOCUS); }
+ bool horizontal() const { return !flag(LAYOUT_VERTICAL);}
+ bool vertical() const { return flag(LAYOUT_VERTICAL);}
+ void set_horizontal() { clear_flag(LAYOUT_VERTICAL); }
+ void set_vertical() { set_flag(LAYOUT_VERTICAL); }
+
+ bool take_focus() ;
+ void throw_focus() ;
+
+ void redraw() ;
+ void redraw(uchar c) ;
+ void redraw_label() ;
+ void redraw_highlight() ;
+ void redraw(const Rectangle&);
+ uchar damage() const { return damage_; }
+ void set_damage(uchar c) { damage_ = c; } // should be called damage(c)
+
+ void relayout() ;
+ void relayout(uchar damage) ;
+ uchar layout_damage() const { return layout_damage_; }
+ void layout_damage(uchar c) { layout_damage_ = c; }
+
+ void add_timeout(float) ;
+ void repeat_timeout(float) ;
+ void remove_timeout() ;
+
+ void make_current() const ;
+ void draw_background() const ;
+ void draw_frame() const ;
+ void draw_box() const ;
+ void draw_box(const Rectangle& r) const ; // multiple boxes drawing for a single Widget
+ void draw_label() const ;
+ void draw_label(const Rectangle&, Flags) const ;
+ void draw_glyph(int, const Rectangle&) const ;
+ void cursor(Cursor*) const ;
+
+ void measure_label(int&, int&) const ;
+
+ Box* box() const;
+ Box* buttonbox() const;
+ Symbol* glyph() const;
+ Font* labelfont() const;
+ Font* textfont() const;
+ LabelType* labeltype() const;
+ Color color() const;
+ Color textcolor() const;
+ Color selection_color() const;
+ Color selection_textcolor() const;
+ Color buttoncolor() const;
+ Color labelcolor() const;
+ Color highlight_color() const;
+ Color highlight_textcolor() const;
+ float labelsize() const;
+ float textsize() const;
+ float leading() const;
+ unsigned char scrollbar_align() const;
+ unsigned char scrollbar_width() const;
+
+ void box(Box*) ;
+ void buttonbox(Box*) ;
+ void glyph(Symbol*) ;
+ void labelfont(Font*) ;
+ void textfont(Font*) ;
+ void labeltype(LabelType*) ;
+ void color(Color) ;
+ void textcolor(Color a) ;
+ void selection_color(Color) ;
+ void selection_textcolor(Color);
+ void buttoncolor(Color) ;
+ void labelcolor(Color) ;
+ void highlight_color(Color) ;
+ void highlight_textcolor(Color);
+ void labelsize(float a) ;
+ void textsize(float a) ;
+ void leading(float a) ;
+ void scrollbar_align(unsigned char);
+ void scrollbar_width(unsigned char);
+
+ void add(const AssociationType&, void* data);
+ void set(const AssociationType&, void* data);
+ void* get(const AssociationType&) const;
+ void* foreach(const AssociationType&, AssociationFunctor&) const;
+ bool remove(const AssociationType&, void* data);
+ bool find(const AssociationType&, void* data) const;
+
+#ifdef FLTK_1_WIDGET // back-compatability section:
+
+ Box* down_box() const { return box(); }
+ Box* slider() const { return buttonbox(); }
+ Box* box2() const { return box(); }
+ Box* fly_box() const { return box(); }
+ Color color2() const { return selection_color(); }
+ Color color3() const { return buttoncolor(); }
+ Color down_labelcolor() const { return selection_textcolor(); }
+ Color fly_color() const { return highlight_color(); }
+ Color selected_textcolor() const { return selection_textcolor(); }
+ Color cursor_color() const { return selection_color(); }
+ float text_size() const { return textsize(); }
+ float label_size() const { return labelsize(); }
+
+ void down_box(Box* a) { box(a); }
+ void slider(Box* a) { buttonbox(a); }
+ void fly_box(Box*) { }
+ void color(Color a, Color b) { color(a); selection_color(b); }
+ void color2(Color a) { selection_color(a); }
+ void color3(Color a) { buttoncolor(a); }
+ void down_labelcolor(Color a) { selection_textcolor(a); }
+ void labelfont(unsigned a) { labelfont(font(a)); }
+ void fly_color(Color a) { highlight_color(a); }
+ void textfont(unsigned a) { textfont(font(a)); }
+ void selected_textcolor(Color a) { selection_textcolor(a); }
+ void cursor_color(Color a) { selection_color(a); }
+ void text_size(float n) { textsize(n); }
+ void label_size(float n) { labelsize(n); }
+
+#endif
+
+private:
+
+ const char* label_;
+ const Symbol* image_;
+ unsigned flags_;
+ const Style* style_;
+ Callback* callback_;
+ void* user_data_;
+ const char* tooltip_; // make this into another widget?
+ Group* parent_;
+ uchar type_;
+ uchar damage_;
+ uchar layout_damage_;
+ uchar when_;
+
+};
+
+enum { // Widget::when() values
+ WHEN_NEVER = 0,
+ WHEN_CHANGED = 1,
+ WHEN_RELEASE = 4,
+ WHEN_RELEASE_ALWAYS = 6,
+ WHEN_ENTER_KEY = 8,
+ WHEN_ENTER_KEY_ALWAYS =10,
+ WHEN_ENTER_KEY_CHANGED=11,
+ WHEN_NOT_CHANGED = 2 // modifier bit to disable changed() test
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Widget.h 6518 2008-11-11 22:31:26Z spitzak $".
+//
diff --git a/fltk/fltk/WidgetAssociation.h b/fltk/fltk/WidgetAssociation.h
new file mode 100644
index 0000000..0d4d512
--- /dev/null
+++ b/fltk/fltk/WidgetAssociation.h
@@ -0,0 +1,81 @@
+#ifndef fltk_WidgetAssociation_h
+#define fltk_WidgetAssociation_h
+
+#include <fltk/FL_API.h>
+
+namespace fltk {
+
+class FL_API Widget;
+class FL_API AssociationType;
+
+/*! \brief Class used by the foreach() functions.
+ *
+ * Base class for the association functor that is used in foreach(). If you want to supply
+ * your specific actions to do with the associated data found by the foreach() functions
+ * you need to derive from this class and provide a new handle function.
+ */
+class FL_API AssociationFunctor {
+ public:
+ /*!
+ * For each
+ * found association this function is called. If the function returns true the
+ * loop is aborted and the data pointer for the current association is returned
+ */
+ virtual bool handle(const AssociationType&, const Widget*, void* data) = 0;
+};
+
+/*! \relates AssociationType
+ * This function allows traversing all associations of a certain association type, a certain widget,
+ * both, or none of the constraints.
+ * For each found widget the handle function in the associaionFunctor class is called. If that
+ * function returns true the scan is aborted and the data for the current widget is returned
+ * A NULL pointer for the AssociationType or the Widget pointer means to call the functor for all
+ * AssociationTypes and/or all Widgets.
+ *
+ * The function either returns the first associated data for which the functor returns true, or NULL.
+ * See also Widget::foreach() and AssociationType::foreach().
+ */
+FL_API void* foreach(const AssociationType*, const Widget*, AssociationFunctor&);
+
+/*! \brief Base class for the association type.
+ *
+ * FLTK allows you to attach any kind of user data to a widget. This data is automatically freed when the
+ * widget to which it is attached is destroyed. Internally an association table is used to connect the
+ * widget pointer with the data pointer that is why all the functions concerned with this feature contain
+ * "association" in their name. The advantage of this is that no space is taken on widgets that do not
+ * contain the data (or that have the "default value"), and that the destructor code is not linked in
+ * if the association is not used.
+ *
+ * To be able to associate data and to be able to have a customized way of freeing the data you need
+ * to derive from this class and then create an instance of that class. With the pointer to that instance
+ * the type of the data is identified.
+ *
+ * possible uses:
+ * - assign key shortcuts to certain widgets
+ * - assign a tooltip to some widgets
+ * - assign a help-index to widgets
+ * - assign a unique identifier to widgets to remote controlling
+ * - assign additional layouting data for new container widgets
+ * - assign data needed by typesafe callback mechanisms
+ * - assign all kind of data not always required within a widget / each widget
+ */
+class FL_API AssociationType {
+
+ public:
+ /*! \brief This function is called when associated data is freed
+ * This function must be proveded when creating a data specific subclass. The function
+ * must do whatever is necessary to free associated data. Most of the time it will be a cast
+ * to the right datatype and a delete
+ */
+ virtual void destroy(void* data) const = 0;
+
+ /*! \brief Finds all data of this association type for a widget
+ * This function just calls fltk::foreach(this, wg, fkt). If \a wg
+ * is NULL this function will find all data for any widget.
+ */
+ void* foreach(const Widget* wg, AssociationFunctor& fkt) { return fltk::foreach(this, wg, fkt); }
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/Window.h b/fltk/fltk/Window.h
new file mode 100644
index 0000000..927cd1d
--- /dev/null
+++ b/fltk/fltk/Window.h
@@ -0,0 +1,158 @@
+// "$Id: Window.h 6150 2008-08-04 22:53:30Z spitzak $"
+//
+// Window widget. This must be the outermost group. You can also put
+// them inside other widgets to use the system's window hierarchy.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_Window_h
+#define fltk_Window_h
+
+#include "Group.h"
+
+namespace fltk {
+
+// value for x,y to indicate window system places window
+const int USEDEFAULT = ((int)0x80000000); // same as Win32 value
+
+class CreatedWindow;
+class Monitor;
+
+// implementations of methods of Window are in different files in src/
+
+class FL_API Window : public Group {
+public:
+
+ Window(int,int,int,int, const char* = 0, bool begin = false);
+ Window(int,int, const char* = 0);
+ static NamedStyle* default_style;
+ virtual ~Window();
+
+ const char* label() const {return Widget::label();}
+ const char* iconlabel() const {return iconlabel_;}
+ void label(const char*);
+ void iconlabel(const char*);
+ void label(const char* label, const char* iconlabel);
+ void copy_label(const char* c) {Widget::copy_label(c); label(label());}
+ const void* icon() const {return icon_;}
+ void icon(const void * ic) {icon_ = ic;}
+ static const char* xclass() {return xclass_;}
+ static void xclass(const char* v) {xclass_ = v;}
+
+ void border(bool set) {set ? clear_flag(NOBORDER) : set_flag(NOBORDER);}
+ /*! \deprecated compat. api only, please use Window::border(bool)*/
+ void clear_border() {set_flag(NOBORDER);}
+ bool border() const {return !flag(NOBORDER);}
+ void set_override() {set_flag(NOBORDER|OVERRIDE);}
+ bool override() const {return flag(OVERRIDE); }
+ const Window* child_of() const {return child_of_;}
+ void child_of(const Window* w);
+ void set_modal() {set_flag(MODAL);} // back compatability only!
+ void set_non_modal() {set_flag(NON_MODAL);} // back compatability only!
+
+ bool double_buffer() const {return flag(DOUBLE);}
+ void set_double_buffer() {set_flag(DOUBLE);}
+ void clear_double_buffer() {clear_flag(DOUBLE);}
+ void free_backbuffer();
+
+ virtual void draw_overlay();
+ void redraw_overlay();
+ void erase_overlay();
+
+ void hotspot(int x, int y, bool offscreen = false);
+ void hotspot(const Widget*, bool offscreen = false);
+ void hotspot(const Widget& p, bool offscrn = false) {hotspot(&p,offscrn);}
+ void size_range(int a, int b, int c=0, int d=0, int e=0, int f=0)
+ { minw=(short)a; minh=(short)b; maxw=(short)c; maxh=(short)d; dw=(uchar)e; dh=(uchar)f; size_range_(); }
+ bool get_size_range( int *min_w, int *min_h, int *max_w, int *max_h );
+
+ bool shown() const {return i != 0;}
+ void show();
+ void show(int, char**);
+ void show(const Window* parent);
+ bool exec(const Window* parent = 0, bool grab = false);
+ void make_exec_return(bool);
+ void show_inside(const Window* parent);
+ virtual void destroy();
+
+ void iconize();
+ bool iconic() const;
+
+ void maximize();
+
+ void fullscreen();
+ void fullscreen(const Monitor&);
+ void fullscreen_off(int,int,int,int);
+
+ static void default_callback(Window*, void* v);
+
+ virtual int handle(int);
+ virtual void layout();
+ void system_layout();
+ virtual void flush();
+ virtual void draw();
+
+ static Window* first();
+ static void first(Window*);
+ Window* next();
+
+ void borders( Rectangle *r ) const;
+
+ static const Window* drawing_window() {return drawing_window_;}
+ static const Window* drawing_window_;
+
+ // fabien: used for my cairo experimentations,
+ // not sure i'll keep that opaque backbuffer access :
+ // at least it shouldn't stay public
+ void* backbuffer() const;
+
+protected:
+ virtual void create();
+
+private:
+
+ friend class CreatedWindow;
+ CreatedWindow *i; // points at the system-specific stuff
+ const Window* child_of_;
+ const char* iconlabel_;
+ const void* icon_;
+ // size_range stuff:
+ short minw, minh, maxw, maxh;
+ unsigned char dw, dh, size_range_set;
+ void size_range_();
+ // values for flags():
+ enum {
+ MODAL = 0x80000000,
+ NOBORDER = 0x40000000,
+ OVERRIDE = 0x20000000,
+ NON_MODAL = 0x10000000,
+ DOUBLE = 0x08000000
+ };
+ static const char* xclass_;
+ void _Window(); // constructor innards
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: Window.h 6150 2008-08-04 22:53:30Z spitzak $".
+//
diff --git a/fltk/fltk/WizardGroup.h b/fltk/fltk/WizardGroup.h
new file mode 100644
index 0000000..349d10e
--- /dev/null
+++ b/fltk/fltk/WizardGroup.h
@@ -0,0 +1,59 @@
+//
+// "$Id: WizardGroup.h 4288 2005-04-16 00:13:17Z mike $"
+//
+// WizardGroup widget definitions.
+//
+// Copyright 1999-2006 by Easy Software Products and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+//
+// Include necessary header files...
+//
+
+#ifndef _fltk_WizardGroup_h_
+#define _fltk_WizardGroup_h_
+
+#include "Group.h"
+
+namespace fltk {
+
+class FL_API WizardGroup : public Group {
+ Widget * value_;
+public:
+ WizardGroup(int x,int y,int w,int h, const char * l = 0, bool begin=false)
+ : Group(x,y,w,h,l,begin), value_(0) { box(THIN_UP_BOX);}
+
+ void draw();
+ void next();
+ void prev();
+ void value(Widget *);
+ //! return the current visible child.
+ Widget * value() const { return value_;}
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: WizardGroup.h 4288 2005-04-16 00:13:17Z mike $".
+//
diff --git a/fltk/fltk/WordwrapInput.h b/fltk/fltk/WordwrapInput.h
new file mode 100644
index 0000000..e080501
--- /dev/null
+++ b/fltk/fltk/WordwrapInput.h
@@ -0,0 +1,45 @@
+//
+// "$Id: WordwrapInput.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Small text input field that word-wraps its contents.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_WordwrapInput_h
+#define fltk_WordwrapInput_h
+
+#include "Input.h"
+
+namespace fltk {
+
+// This class is entirely inline. If that changes, add FL_API to its declaration
+class WordwrapInput : public Input {
+public:
+ WordwrapInput(int x,int y,int w,int h,const char *l = 0)
+ : Input(x,y,w,h,l) {type(WORDWRAP);}
+};
+
+}
+#endif
+
+//
+// End of "$Id: WordwrapInput.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/WordwrapOutput.h b/fltk/fltk/WordwrapOutput.h
new file mode 100644
index 0000000..7c39f4c
--- /dev/null
+++ b/fltk/fltk/WordwrapOutput.h
@@ -0,0 +1,45 @@
+//
+// "$Id: WordwrapOutput.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Small text output field that word-wraps its contents.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_WordwrapOutput_h
+#define fltk_WordwrapOutput_h
+
+#include "Output.h"
+
+namespace fltk {
+
+// This class is entirely inline. If that changes, add FL_API to its declaration
+class WordwrapOutput : public Output {
+public:
+ WordwrapOutput(int x,int y,int w,int h,const char *l = 0)
+ : Output(x,y,w,h,l) {type(WORDWRAP);}
+};
+
+}
+#endif
+
+//
+// End of "$Id: WordwrapOutput.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/ask.h b/fltk/fltk/ask.h
new file mode 100644
index 0000000..ad27bf3
--- /dev/null
+++ b/fltk/fltk/ask.h
@@ -0,0 +1,80 @@
+//
+// "$Id: ask.h 6233 2008-09-14 07:54:06Z spitzak $"
+//
+// Copyright 2008 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_ask_h
+#define fltk_ask_h
+
+#include "FL_API.h"
+#include "Style.h"
+
+namespace fltk {
+
+class Widget;
+
+/// \name fltk/ask.h
+//@{
+
+enum {
+ BEEP_DEFAULT = 0,
+ BEEP_MESSAGE,
+ BEEP_ERROR,
+ BEEP_QUESTION,
+ BEEP_PASSWORD,
+ BEEP_NOTIFICATION
+};
+
+FL_API void message(const char *, ...);
+FL_API void alert(const char *, ...);
+FL_API int ask(const char *, ...);
+FL_API int choice(const char *q,
+ const char *b0, const char *b1, const char *b2, ...);
+FL_API int choice_alert(const char *q,
+ const char *b0, const char *b1, const char *b2, ...);
+FL_API const char *input(const char *label, const char *deflt = 0, ...);
+FL_API const char *password(const char *label, const char *deflt = 0, ...);
+FL_API void beep(int type = BEEP_DEFAULT);
+FL_API void beep_on_dialog(bool);
+FL_API bool beep_on_dialog();
+
+extern FL_API NamedStyle* icon_style;
+extern FL_API NamedStyle* message_style;
+
+extern FL_API const char* message_window_label;
+extern FL_API float message_window_timeout;
+
+extern FL_API bool message_window_scrollable;
+
+// pointers you can use to change FLTK to a foreign language:
+extern FL_API const char* no;
+extern FL_API const char* yes;
+extern FL_API const char* ok;
+extern FL_API const char* cancel;
+
+}
+
+//@}
+
+#endif
+
+//
+// End of "$Id: ask.h 6233 2008-09-14 07:54:06Z spitzak $".
+//
diff --git a/fltk/fltk/compat/FL/Enumerations.H b/fltk/fltk/compat/FL/Enumerations.H
new file mode 100644
index 0000000..418cf8e
--- /dev/null
+++ b/fltk/fltk/compat/FL/Enumerations.H
@@ -0,0 +1,357 @@
+//
+// "$Id: Enumerations.H 5389 2006-09-01 15:39:19Z spitzak $"
+//
+// Enumerations for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef Fl_Enumerations_H
+#define Fl_Enumerations_H
+
+# include <fltk/FL_API.h>
+# include <fltk/FL_VERSION.h>
+
+enum Fl_Event { // these should match fltk/events.h
+ FL_NO_EVENT = 0,
+ FL_PUSH = 1,
+ FL_RELEASE = 2,
+ FL_ENTER = 3,
+ FL_LEAVE = 4,
+ FL_DRAG = 5,
+ FL_FOCUS = 6,
+ FL_UNFOCUS = 7,
+ FL_KEYDOWN = 8,
+ FL_KEYBOARD = FL_KEYDOWN,
+ FL_KEYUP = 9,
+ //FL_CLOSE = 10, // not in fltk2.0
+ FL_MOVE = 11,
+ FL_SHORTCUT = 12,
+ FL_DEACTIVATE = 13,
+ FL_ACTIVATE = 14,
+ FL_HIDE = 15,
+ FL_SHOW = 16,
+ FL_PASTE = 17,
+ //FL_SELECTIONCLEAR = 18, // not in fltk2.0
+ FL_MOUSEWHEEL = 19,
+ FL_DND_ENTER = 20,
+ FL_DND_DRAG = 21,
+ FL_DND_LEAVE = 22,
+ FL_DND_RELEASE = 23
+};
+
+enum Fl_When { // These should match values in fltk/Widget.h
+ FL_WHEN_NEVER = 0,
+ FL_WHEN_CHANGED = 1,
+ FL_WHEN_RELEASE = 4,
+ FL_WHEN_RELEASE_ALWAYS= 6,
+ FL_WHEN_ENTER_KEY = 8,
+ FL_WHEN_ENTER_KEY_ALWAYS=10,
+ FL_WHEN_ENTER_KEY_CHANGED=11,
+ FL_WHEN_NOT_CHANGED = 2 // modifier bit to disable changed() test
+};
+
+// These should match symbols in fltk/events.h:
+#define FL_Button 0 // old value was 0xfee8
+#define FL_LEFT_MOUSE 1
+#define FL_MIDDLE_MOUSE 2
+#define FL_RIGHT_MOUSE 3
+#define FL_BackSpace 0xff08
+#define FL_Tab 0xff09
+#define FL_Enter 0xff0d
+#define FL_Pause 0xff13
+#define FL_Scroll_Lock 0xff14
+#define FL_Escape 0xff1b
+#define FL_Home 0xff50
+#define FL_Left 0xff51
+#define FL_Up 0xff52
+#define FL_Right 0xff53
+#define FL_Down 0xff54
+#define FL_Page_Up 0xff55
+#define FL_Page_Down 0xff56
+#define FL_End 0xff57
+#define FL_Print 0xff61
+#define FL_Insert 0xff63
+#define FL_Menu 0xff67 // the "menu/apps" key on XFree86
+#define FL_Help 0xff68 // the 'help' key on Mac keyboards
+#define FL_Num_Lock 0xff7f
+#define FL_KP 0xff80 // use FL_KP+'x' for 'x' on numeric keypad
+#define FL_KP_Enter 0xff8d // same as Fl_KP+'\r'
+#define FL_KP_Last 0xffbd // use to range-check keypad
+#define FL_F 0xffbd // use FL_F+n for function key n
+#define FL_F_Last 0xffe0 // use to range-check function keys
+#define FL_Shift_L 0xffe1
+#define FL_Shift_R 0xffe2
+#define FL_Control_L 0xffe3
+#define FL_Control_R 0xffe4
+#define FL_Caps_Lock 0xffe5
+#define FL_Meta_L 0xffe7
+#define FL_Meta_R 0xffe8
+#define FL_Alt_L 0xffe9
+#define FL_Alt_R 0xffea
+#define FL_Delete 0xffff
+
+#define FL_SHIFT 0x00010000
+#define FL_CAPS_LOCK 0x00020000
+#define FL_CTRL 0x00040000
+#define FL_ALT 0x00080000
+#define FL_NUM_LOCK 0x00100000 // most X servers do this?
+#define FL_META 0x00400000
+#define FL_SCROLL_LOCK 0x00800000
+#define FL_BUTTON1 0x01000000
+#define FL_BUTTON2 0x02000000
+#define FL_BUTTON3 0x04000000
+#define FL_BUTTONS 0x7f000000 // All possible buttons
+#define FL_BUTTON(n) (0x00800000<<(n))
+
+#ifdef __APPLE__
+# define FL_COMMAND FL_META
+#else
+# define FL_COMMAND FL_CTRL
+#endif // __APPLE__
+
+#include <fltk/Style.h>
+
+typedef fltk::Box* Fl_Boxtype;
+
+// Box types. Many of the FRAME types are deleted in fltk2.0, these have
+// been replaced with the equivalent BOX which draws it's inner area:
+#define FL_NO_BOX fltk::NO_BOX
+#define FL_FLAT_BOX fltk::FLAT_BOX
+#define FL_UP_BOX fltk::UP_BOX
+#define FL_DOWN_BOX fltk::DOWN_BOX
+#define FL_UP_FRAME fltk::UP_BOX //
+#define FL_DOWN_FRAME fltk::DOWN_BOX //
+#define FL_THIN_UP_BOX fltk::THIN_UP_BOX
+#define FL_THIN_DOWN_BOX fltk::THIN_DOWN_BOX
+#define FL_THIN_UP_FRAME fltk::THIN_UP_BOX //
+#define FL_THIN_DOWN_FRAME fltk::THIN_DOWN_BOX //
+#define FL_ENGRAVED_BOX fltk::ENGRAVED_BOX
+#define FL_EMBOSSED_BOX fltk::EMBOSSED_BOX
+#define FL_ENGRAVED_FRAME fltk::ENGRAVED_BOX //
+#define FL_EMBOSSED_FRAME fltk::EMBOSSED_BOX //
+#define FL_BORDER_BOX fltk::BORDER_BOX
+#define FL_SHADOW_BOX fltk::SHADOW_BOX
+#define FL_BORDER_FRAME fltk::BORDER_FRAME
+#define FL_SHADOW_FRAME fltk::SHADOW_BOX //
+#define FL_ROUNDED_BOX fltk::ROUNDED_BOX
+#define FL_RSHADOW_BOX fltk::RSHADOW_BOX
+#define FL_ROUNDED_FRAME fltk::ROUNDED_BOX //
+#define FL_RFLAT_BOX fltk::RFLAT_BOX
+#define FL_ROUND_UP_BOX fltk::ROUND_UP_BOX
+#define FL_ROUND_DOWN_BOX fltk::ROUND_DOWN_BOX
+#define FL_DIAMOND_UP_BOX fltk::DIAMOND_UP_BOX
+#define FL_DIAMOND_DOWN_BOX fltk::DIAMOND_DOWN_BOX
+#define FL_OVAL_BOX fltk::OVAL_BOX
+#define FL_OSHADOW_BOX fltk::OSHADOW_BOX
+#define FL_OVAL_FRAME fltk::OVAL_BOX //
+#define FL_OFLAT_BOX fltk::OFLAT_BOX
+#define FL_PLASTIC_UP_BOX fltk::PLASTIC_UP_BOX
+#define FL_PLASTIC_DOWN_BOX fltk::PLASTIC_DOWN_BOX
+#define FL_PLASTIC_UP_FRAME fltk::PLASTIC_UP_BOX //
+#define FL_PLASTIC_DOWN_FRAME fltk::PLASTIC_DOWN_BOX //
+//#define FL_FREE_BOXTYPE not used in fltk 2.0
+
+// conversions of box types to other boxtypes:
+//inline Fl_Boxtype fl_down(Fl_Boxtype b) // not implemented
+//inline Fl_Boxtype fl_frame(Fl_Boxtype b)
+
+// back-compatability box types:
+#define FL_FRAME FL_ENGRAVED_FRAME
+#define FL_FRAME_BOX FL_ENGRAVED_BOX
+#define FL_CIRCLE_BOX FL_ROUND_DOWN_BOX
+#define FL_DIAMOND_BOX FL_DIAMOND_DOWN_BOX
+
+// labeltypes:
+#define FL_NO_LABEL fltk::NO_LABEL
+#define FL_NORMAL_LABEL fltk::NORMAL_LABEL
+#define FL_SHADOW_LABEL fltk::SHADOW_LABEL
+#define FL_ENGRAVED_LABEL fltk::ENGRAVED_LABEL
+#define FL_EMBOSSED_LABEL fltk::EMBOSSED_LABEL
+//#define FL_FREE_LABELTYPE not used in fltk2.0
+#define FL_SYMBOL_LABEL FL_NORMAL_LABEL
+
+#define Fl_Align fltk::Flags
+enum {
+ FL_ALIGN_CENTER = 0,
+ FL_ALIGN_TOP = fltk::ALIGN_TOP,
+ FL_ALIGN_BOTTOM = fltk::ALIGN_BOTTOM,
+ FL_ALIGN_LEFT = fltk::ALIGN_LEFT,
+ FL_ALIGN_RIGHT = fltk::ALIGN_RIGHT,
+ FL_ALIGN_INSIDE = fltk::ALIGN_INSIDE,
+ FL_ALIGN_TEXT_OVER_IMAGE = fltk::ALIGN_BOTTOM|fltk::ALIGN_INSIDE, //
+ FL_ALIGN_IMAGE_OVER_TEXT = 0,
+ FL_ALIGN_CLIP = fltk::ALIGN_CLIP,
+ FL_ALIGN_WRAP = fltk::ALIGN_WRAP,
+ FL_ALIGN_MASK = fltk::ALIGN_MASK,
+ FL_ALIGN_TOP_LEFT = FL_ALIGN_TOP | FL_ALIGN_LEFT,
+ FL_ALIGN_TOP_RIGHT = FL_ALIGN_TOP | FL_ALIGN_RIGHT,
+ FL_ALIGN_BOTTOM_LEFT = FL_ALIGN_BOTTOM | FL_ALIGN_LEFT,
+ FL_ALIGN_BOTTOM_RIGHT = FL_ALIGN_BOTTOM | FL_ALIGN_RIGHT,
+ FL_ALIGN_LEFT_TOP = FL_ALIGN_TOP_LEFT,
+ FL_ALIGN_RIGHT_TOP = FL_ALIGN_TOP_RIGHT,
+ FL_ALIGN_LEFT_BOTTOM = FL_ALIGN_BOTTOM_LEFT,
+ FL_ALIGN_RIGHT_BOTTOM = FL_ALIGN_BOTTOM_RIGHT,
+ FL_ALIGN_NOWRAP = 0
+};
+
+#define FL_HELVETICA fltk::HELVETICA
+#define FL_HELVETICA_BOLD fltk::HELVETICA_BOLD
+#define FL_HELVETICA_ITALIC fltk::HELVETICA_ITALIC
+#define FL_HELVETICA_BOLD_ITALIC fltk::HELVETICA_BOLD_ITALIC
+#define FL_COURIER fltk::COURIER
+#define FL_COURIER_BOLD fltk::COURIER_BOLD
+#define FL_COURIER_ITALIC fltk::COURIER_ITALIC
+#define FL_COURIER_BOLD_ITALIC fltk::COURIER_BOLD_ITALIC
+#define FL_TIMES fltk::TIMES
+#define FL_TIMES_BOLD fltk::TIMES_BOLD
+#define FL_TIMES_ITALIC fltk::TIMES_ITALIC
+#define FL_TIMES_BOLD_ITALIC fltk::TIMES_BOLD_ITALIC
+#define FL_SYMBOL fltk::SYMBOL_FONT
+#define FL_SCREEN fltk::SCREEN_FONT
+#define FL_SCREEN_BOLD fltk::SCREEN_BOLD_FONT
+#define FL_ZAPF_DINGBATS fltk::ZAPF_DINGBATS
+//#define FL_FREE_FONT
+// These used to be added to the above fonts but were sometimes used alone
+// because FL_HELVETICA was zero. Only using these by themselves works now:
+#define FL_BOLD fltk::HELVETICA_BOLD
+#define FL_ITALIC fltk::HELVETICA_ITALIC
+
+#define FL_NORMAL_SIZE (fltk::Widget::default_style->labelsize_)
+#define FL_FOREGROUND_COLOR (fltk::Widget::default_style->labelcolor_)
+#define FL_BACKGROUND2_COLOR (fltk::Widget::default_style->color_)
+#define FL_SELECTION_COLOR (fltk::Widget::default_style->selection_color_)
+
+#define Fl_Color fltk::Color
+enum {
+ FL_GRAY0 = fltk::GRAY00,
+ FL_DARK3 = fltk::GRAY33,
+ FL_DARK2 = fltk::GRAY60,
+ FL_DARK1 = fltk::GRAY66,
+ FL_GRAY = fltk::GRAY75,
+ FL_BACKGROUND_COLOR = fltk::GRAY75,
+ FL_LIGHT1 = fltk::GRAY85,
+ FL_LIGHT2 = fltk::GRAY90,
+ FL_LIGHT3 = fltk::GRAY99,
+
+ FL_BLACK = fltk::BLACK,
+ FL_RED = fltk::RED,
+ FL_GREEN = fltk::GREEN,
+ FL_YELLOW = fltk::YELLOW,
+ FL_BLUE = fltk::BLUE,
+ FL_MAGENTA = fltk::MAGENTA,
+ FL_CYAN = fltk::CYAN,
+ FL_DARK_RED = 72,
+
+ FL_DARK_GREEN = 60,
+ FL_DARK_YELLOW = 76,
+ FL_DARK_BLUE = 136,
+ FL_DARK_MAGENTA = 152,
+ FL_DARK_CYAN = 140,
+
+ FL_WHITE = fltk::WHITE,
+
+ FL_FREE_COLOR = 16,
+ FL_NUM_FREE_COLOR = 16,
+ FL_GRAY_RAMP = fltk::GRAY00,
+ FL_NUM_GRAY = 24,
+ FL_COLOR_CUBE = fltk::BLACK,
+ FL_NUM_RED = 5,
+ FL_NUM_GREEN = 8,
+ FL_NUM_BLUE = 5
+};
+
+#define fl_inactive(c) fltk::inactive(c)
+#define fl_contrast(a,b) fltk::contrast(a,b)
+#define fl_color_average(a,b,c) fltk::lerp(b,a,c)
+#define fl_lighter(c) fltk::lerp(fltk::WHITE,c,.67f)
+#define fl_darker(c) fltk::lerp(fltk::BLACK,c,.67f)
+#define fl_rgb_color fltk::color
+#define fl_gray_ramp(i) (fltk::GRAY00+(i))
+#define fl_color_cube(r,g,b) (((b)*5+(r))*8+(g)+fltk::BLACK)
+
+#include <fltk/Cursor.h>
+#define Fl_Cursor fltk::Cursor*
+#define FL_CURSOR_DEFAULT fltk::CURSOR_DEFAULT
+#define FL_CURSOR_ARROW fltk::CURSOR_ARROW
+#define FL_CURSOR_CROSS fltk::CURSOR_CROSS
+#define FL_CURSOR_WAIT fltk::CURSOR_WAIT
+#define FL_CURSOR_INSERT fltk::CURSOR_INSERT
+#define FL_CURSOR_HAND fltk::CURSOR_HAND
+#define FL_CURSOR_HELP fltk::CURSOR_HELP
+#define FL_CURSOR_MOVE fltk::CURSOR_MOVE
+#define FL_CURSOR_NS fltk::CURSOR_NS
+#define FL_CURSOR_WE fltk::CURSOR_WE
+#define FL_CURSOR_NWSE fltk::CURSOR_NWSE
+#define FL_CURSOR_NESW fltk::CURSOR_NESW
+#define FL_CURSOR_NO fltk::CURSOR_NO
+#define FL_CURSOR_NONE fltk::CURSOR_NONE
+#define FL_CURSOR_N fltk::CURSOR_NS
+#define FL_CURSOR_NE fltk::CURSOR_NESW
+#define FL_CURSOR_E fltk::CURSOR_WE
+#define FL_CURSOR_SE fltk::CURSOR_NWSE
+#define FL_CURSOR_S fltk::CURSOR_NS
+#define FL_CURSOR_SW fltk::CURSOR_NESW
+#define FL_CURSOR_W fltk::CURSOR_WE
+#define FL_CURSOR_NW fltk::CURSOR_NWSE
+
+enum { // must match values in fltk/run.h
+ FL_READ = 1,
+ FL_WRITE = 4,
+ FL_EXCEPT = 8
+};
+
+enum Fl_Mode { // must match values in fltk/visual.h
+ FL_RGB = 0,
+ FL_INDEX = 1,
+ FL_SINGLE = 0,
+ FL_DOUBLE = 2,
+ FL_ACCUM = 4,
+ FL_ALPHA = 8,
+ FL_DEPTH = 16,
+ FL_STENCIL = 32,
+ FL_RGB8 = 64,
+ FL_MULTISAMPLE= 128,
+ FL_STEREO = 256,
+ FL_FAKE_SINGLE = 512 // Fake single buffered windows using double-buffer
+};
+
+#include <fltk/damage.h>
+enum Fl_Damage {
+ FL_DAMAGE_CHILD = fltk::DAMAGE_CHILD,
+ FL_DAMAGE_EXPOSE = fltk::DAMAGE_EXPOSE,
+ FL_DAMAGE_SCROLL = fltk::DAMAGE_SCROLL,
+ FL_DAMAGE_OVERLAY = fltk::DAMAGE_OVERLAY,
+ FL_DAMAGE_ALL = fltk::DAMAGE_ALL
+};
+
+// FLTK 1.0.x compatibility definitions...
+# ifdef FLTK_1_0_COMPAT
+# define contrast fl_contrast
+# define down fl_down
+# define frame fl_frame
+# define inactive fl_inactive
+# endif // FLTK_1_0_COMPAT
+
+#endif
+
+//
+// End of "$Id: Enumerations.H 5389 2006-09-01 15:39:19Z spitzak $".
+//
diff --git a/fltk/fltk/compat/FL/Fl.H b/fltk/fltk/compat/FL/Fl.H
new file mode 100644
index 0000000..7f168d9
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl.H
@@ -0,0 +1,67 @@
+#ifndef Fl_H
+# define Fl_H
+
+#include "Enumerations.H"
+#include <fltk/run.h>
+#include <fltk/events.h>
+#include <fltk/Color.h>
+#include <fltk/Font.h>
+#include <fltk/Box.h>
+#include <fltk/error.h>
+#include <fltk/visual.h>
+#include <fltk/Monitor.h>
+#include <fltk/Widget.h>
+
+namespace Fl = fltk;
+
+typedef fltk::TimeoutHandler Fl_Timeout_Handler;
+
+namespace fltk {
+
+ class Widget;
+
+ // fltk2 does not keep track of selection owner:
+ inline fltk::Widget* selection_owner() {return 0;}
+ inline void selection_owner(fltk::Widget*) {}
+ inline void selection(fltk::Widget &owner, const char* b, int len) {copy(b,len,false);}
+
+ inline void visible_focus(int) {} // fltk2 always acts like this is off
+
+ inline int x() {return Monitor::all().x();}
+ inline int y() {return Monitor::all().y();}
+ inline int w() {return Monitor::all().w();}
+ inline int h() {return Monitor::all().h();}
+
+ inline void set_color(Color c, uchar r, uchar g, uchar b) {
+ set_color_index(c,color(r,g,b));
+ }
+ inline void set_color(Color c, Color d) {set_color_index(c,d);}
+ inline Color get_color(Color c) {return get_color_index(c);}
+ inline void get_color(Color c, uchar&r, uchar&g, uchar&b) {split_color(c,r,g,b);}
+ //inline void free_color(Color, bool overlay=false);
+
+ inline const char* get_font(Font* f) {return f->system_name();}
+ inline const char* get_font_name(Font* f, int* attributes = 0) {
+ if (attributes) return f->name(attributes);
+ else return f->name();
+ }
+ inline int get_font_sizes(Font* f, int*& sizep) {return f->sizes(sizep);}
+
+ inline int box_dx(const Box* b) {return b->dx();}
+ inline int box_dy(const Box* b) {return b->dy();}
+ inline int box_dw(const Box* b) {return b->dw();}
+ inline int box_dh(const Box* b) {return b->dh();}
+
+ inline int event_key(int k) {return event_key_state(k);}
+
+ inline void add_handler(int (*h)(int)) {
+ // rather unsafe typecast of function:
+ add_event_handler((int(*)(int,Window*))(h));
+ }
+
+ inline void delete_widget(Widget* w) {delete w;}
+ inline void do_widget_deletion() {}
+
+}
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Adjuster.H b/fltk/fltk/compat/FL/Fl_Adjuster.H
new file mode 100644
index 0000000..d9f0488
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Adjuster.H
@@ -0,0 +1,7 @@
+#ifndef Fl_Adjuster_H
+#define Fl_Adjuster_H
+
+#include <fltk/Adjuster.h>
+typedef fltk::Adjuster Fl_Adjuster;
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Box.H b/fltk/fltk/compat/FL/Fl_Box.H
new file mode 100644
index 0000000..31c082d
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Box.H
@@ -0,0 +1,17 @@
+//
+// "$Id: Fl_Box.H 4922 2006-04-10 09:30:57Z fabien $"
+//
+// Back-compatability widget.
+
+#ifndef Fl_Box_H
+#define Fl_Box_H
+
+#include "Fl_Widget.H"
+#include <fltk/InvisibleBox.h>
+typedef fltk::InvisibleBox Fl_Box;
+
+#endif
+
+//
+// End of "$Id: Fl_Box.H 4922 2006-04-10 09:30:57Z fabien $".
+//
diff --git a/fltk/fltk/compat/FL/Fl_Browser.H b/fltk/fltk/compat/FL/Fl_Browser.H
new file mode 100644
index 0000000..b94f76b
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Browser.H
@@ -0,0 +1,24 @@
+#ifndef Fl_Browser_H
+#define Fl_Browser_H
+
+#include "Fl_Scrollbar.H"
+#include "Fl_Menu_.H"
+#include <fltk/Browser.h>
+class Fl_Browser : public fltk::Browser {
+public:
+ Fl_Browser(int x, int y, int w, int h, const char* l = 0)
+ :fltk::Browser(x,y,w,h,l) {}
+
+ void make_visible(int n) {goto_index(n); make_item_visible();}
+ bool load(const char* fname) {/* NYI */ return true;}
+ void position(int y) {goto_position(y);}
+};
+
+enum {
+ FL_NORMAL_BROWSER = fltk::Browser::NORMAL,
+ FL_SELECT_BROWSER = fltk::Browser::NORMAL,
+ FL_HOLD_BROWSER = fltk::Browser::NORMAL,
+ FL_MULTI_BROWSER = fltk::Browser::MULTI
+};
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Button.H b/fltk/fltk/compat/FL/Fl_Button.H
new file mode 100644
index 0000000..a49c809
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Button.H
@@ -0,0 +1,16 @@
+#ifndef Fl_Button_H
+#define Fl_Button_H
+
+#include "Fl_Widget.H"
+#include <fltk/Button.h>
+typedef fltk::Button Fl_Button;
+
+enum {
+ FL_NORMAL_BUTTON = 0,
+ FL_TOGGLE_BUTTON = fltk::Button::TOGGLE,
+ FL_RADIO_BUTTON = fltk::Button::RADIO,
+ FL_HIDDEN_BUTTON = fltk::Button::HIDDEN // may not work in 2.0
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Chart.H b/fltk/fltk/compat/FL/Fl_Chart.H
new file mode 100644
index 0000000..eb66b4b
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Chart.H
@@ -0,0 +1,83 @@
+//
+// "$Id: Fl_Chart.H 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Forms chart header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef Fl_Chart_H
+#define Fl_Chart_H
+
+#include <fltk/Widget.h>
+
+// values for type()
+#define FL_BAR_CHART 0
+#define FL_HORBAR_CHART 1
+#define FL_LINE_CHART 2
+#define FL_FILL_CHART 3
+#define FL_SPIKE_CHART 4
+#define FL_PIE_CHART 5
+#define FL_SPECIALPIE_CHART 6
+
+#define FL_FILLED_CHART FL_FILL_CHART // compatibility
+
+#define FL_CHART_MAX 128
+#define FL_CHART_LABEL_MAX 18
+
+struct FL_FORMS_API FL_CHART_ENTRY {
+ float val;
+ uchar col;
+ char str[FL_CHART_LABEL_MAX+1];
+};
+
+class FL_FORMS_API Fl_Chart : public fltk::Widget {
+public:
+ Fl_Chart(int,int,int,int,const char * = 0);
+ ~Fl_Chart();
+ void clear();
+ void add(double, const char * =0, uchar=0);
+ void insert(int, double, const char * =0, uchar=0);
+ void replace(int, double, const char * =0, uchar=0);
+ void bounds(double *a,double *b) const {*a = min; *b = max;}
+ void bounds(double a,double b);
+ int size() const {return numb;}
+ int maxsize() const {return maxnumb;}
+ void maxsize(int);
+ uchar autosize() const {return autosize_;}
+ void autosize(uchar n) {autosize_ = n;}
+
+protected:
+ void draw();
+
+private:
+ uchar autosize_;
+ int numb;
+ int maxnumb;
+ int sizenumb;
+ FL_CHART_ENTRY *entries;
+ double min,max;
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Chart.H 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/compat/FL/Fl_Check_Button.H b/fltk/fltk/compat/FL/Fl_Check_Button.H
new file mode 100644
index 0000000..7351aa0
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Check_Button.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Check_Button_H
+#define Fl_Check_Button_H
+
+#include <fltk/CheckButton.h>
+typedef fltk::CheckButton Fl_Check_Button;
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Choice.H b/fltk/fltk/compat/FL/Fl_Choice.H
new file mode 100644
index 0000000..39c2690
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Choice.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Choice_H
+#define Fl_Choice_H
+
+#include "Fl_Menu_.H"
+#include <fltk/Choice.h>
+typedef fltk::Choice Fl_Choice;
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Clock.H b/fltk/fltk/compat/FL/Fl_Clock.H
new file mode 100644
index 0000000..8366d69
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Clock.H
@@ -0,0 +1,18 @@
+#ifndef Fl_Clock_H
+#define Fl_Clock_H
+
+#include "Fl_Widget.H"
+#include <fltk/Clock.h>
+
+typedef fltk::ClockOutput Fl_Clock_Output;
+typedef fltk::Clock Fl_Clock;
+
+enum {
+ FL_SQUARE_CLOCK = fltk::Clock::SQUARE,
+ FL_ROUND_CLOCK = fltk::Clock::ROUND,
+ FL_ANALOG_CLOCK = fltk::Clock::SQUARE,
+ FL_DIGITAL_CLOCK = fltk::Clock::DIGITAL // nyi
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Color_Chooser.H b/fltk/fltk/compat/FL/Fl_Color_Chooser.H
new file mode 100644
index 0000000..6cb6965
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Color_Chooser.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Color_Chooser_H
+#define Fl_Color_Chooser_H
+
+#include <fltk/ColorChooser.h>
+typedef fltk::ColorChooser Fl_Color_Chooser;
+#define fl_color_chooser fltk::color_chooser
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Counter.H b/fltk/fltk/compat/FL/Fl_Counter.H
new file mode 100644
index 0000000..935c3d5
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Counter.H
@@ -0,0 +1,15 @@
+#ifndef Fl_Counter_H
+#define Fl_Counter_H
+
+#include <fltk/ValueInput.h>
+class Fl_Counter : public fltk::ValueInput {
+public:
+ Fl_Counter(int x, int y, int w, int h, const char* l = 0)
+ : fltk::ValueInput(x,y,w,h,l) {align(fltk::ALIGN_BOTTOM);}
+};
+
+// these don't do anything:
+#define FL_NORMAL_COUNTER 0
+#define FL_SIMPLE_COUNTER 1
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Dial.H b/fltk/fltk/compat/FL/Fl_Dial.H
new file mode 100644
index 0000000..f947cf9
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Dial.H
@@ -0,0 +1,15 @@
+#ifndef Fl_Dial_H
+#define Fl_Dial_H
+
+#include "Fl_Widget.H"
+#include <fltk/Dial.h>
+typedef fltk::Dial Fl_Dial;
+
+enum {
+ FL_NORMAL_DIAL = fltk::Dial::NORMAL,
+ FL_LINE_DIAL = fltk::Dial::LINE,
+ FL_FILL_DIAL = fltk::Dial::FILL
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Double_Window.H b/fltk/fltk/compat/FL/Fl_Double_Window.H
new file mode 100644
index 0000000..fec00af
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Double_Window.H
@@ -0,0 +1,18 @@
+#ifndef Fl_Double_Window_H
+#define Fl_Double_Window_H
+
+#include "Fl_Window.H"
+
+class Fl_Double_Window : public Fl_Window {
+
+public:
+ Fl_Double_Window(int x, int y, int w, int h, const char*l = 0)
+ : Fl_Window(x,y,w,h,l) {set_double_buffer();}
+
+ Fl_Double_Window(int x, int y, const char*l = 0)
+ : Fl_Window(x,y,l) {set_double_buffer();}
+
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_File_Chooser.H b/fltk/fltk/compat/FL/Fl_File_Chooser.H
new file mode 100644
index 0000000..4f6a40d
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_File_Chooser.H
@@ -0,0 +1,16 @@
+#ifndef Fl_File_Chooser_H
+#define Fl_File_Chooser_H
+
+#include "Fl_Widget.H"
+
+#include <fltk/FileChooser.h>
+typedef fltk::FileChooser Fl_File_Chooser;
+
+#include <fltk/file_chooser.h>
+
+//char *fl_dir_chooser(const char *message,const char *fname,int relative=0);
+inline const char *fl_file_chooser(const char *message,const char *pat,const char *fname,int /*relative*/ = 0) {
+ return fltk::file_chooser(message, pat, fname);
+}
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Gl_Window.H b/fltk/fltk/compat/FL/Fl_Gl_Window.H
new file mode 100644
index 0000000..5b390cb
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Gl_Window.H
@@ -0,0 +1,9 @@
+#ifndef Fl_Gl_Window_H
+#define Fl_Gl_Window_H
+
+#include "Fl_Window.H"
+
+#include <fltk/GlWindow.h>
+typedef fltk::GlWindow Fl_Gl_Window;
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Group.H b/fltk/fltk/compat/FL/Fl_Group.H
new file mode 100644
index 0000000..c11ac3f
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Group.H
@@ -0,0 +1,16 @@
+#ifndef Fl_Group_H
+#define Fl_Group_H
+
+#include "Fl_Widget.H"
+#include <fltk/Group.h>
+
+class Fl_Group : public fltk::Group {
+
+public:
+ Fl_Group(int x, int y, int w, int h, const char*l = 0)
+ : fltk::Group(x,y,w,h,l) {begin();}
+ static Fl_Group* current() {return (Fl_Group*)(fltk::Group::current());}
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Hold_Browser.H b/fltk/fltk/compat/FL/Fl_Hold_Browser.H
new file mode 100644
index 0000000..773d6ed
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Hold_Browser.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Hold_Browser_H
+#define Fl_Hold_Browser_H
+
+#include "Fl_Browser.H"
+typedef Fl_Browser Fl_Hold_Browser;
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Hor_Slider.H b/fltk/fltk/compat/FL/Fl_Hor_Slider.H
new file mode 100644
index 0000000..d542978
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Hor_Slider.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Hor_Slider_H
+#define Fl_Hor_Slider_H
+
+#include "Fl_Slider.H"
+typedef fltk::Slider Fl_Hor_Slider;
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Hor_Value_Slider.H b/fltk/fltk/compat/FL/Fl_Hor_Value_Slider.H
new file mode 100644
index 0000000..dbad549
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Hor_Value_Slider.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Hor_Value_Slider_H
+#define Fl_Hor_Value_Slider_H
+
+#include "Fl_Value_Slider.H"
+typedef fltk::ValueSlider Fl_Hor_Value_Slider;
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Input.H b/fltk/fltk/compat/FL/Fl_Input.H
new file mode 100644
index 0000000..7848008
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Input.H
@@ -0,0 +1,27 @@
+#ifndef Fl_Input_H
+#define Fl_Input_H
+
+#include "Fl_Widget.H"
+#include <fltk/Input.h>
+class Fl_Input : public fltk::Input {
+public:
+ Fl_Input(int x, int y, int w, int h, const char* l=0) : fltk::Input(x,y,w,h,l) {}
+ int wrap() const { return type() == fltk::Input::WORDWRAP; }
+ void wrap(int b) { type(b ? fltk::Input::WORDWRAP : fltk::Input::MULTILINE);}
+};
+
+enum {
+ FL_NORMAL_INPUT = fltk::Input::NORMAL,
+ FL_FLOAT_INPUT = 1, // probably needs the IntInput subclass!
+ FL_INT_INPUT = 2,
+//FL_HIDDEN_INPUT // not in fltk2.0
+ FL_MULTILINE_INPUT = fltk::Input::MULTILINE,
+ FL_SECRET_INPUT = fltk::Input::SECRET,
+//FL_INPUT_TYPE = 7,
+//FL_INPUT_READONLY = 8,
+ FL_INPUT_WRAP = fltk::Input::WORDWRAP,
+ FL_MULTILINE_INPUT_WRAP = fltk::Input::WORDWRAP
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Int_Input.H b/fltk/fltk/compat/FL/Fl_Int_Input.H
new file mode 100644
index 0000000..469e9aa
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Int_Input.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Int_Input_H
+#define Fl_Int_Input_H
+
+#include <fltk/IntInput.h>
+typedef fltk::IntInput Fl_Int_Input;
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Light_Button.H b/fltk/fltk/compat/FL/Fl_Light_Button.H
new file mode 100644
index 0000000..ab0ac92
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Light_Button.H
@@ -0,0 +1,9 @@
+#ifndef Fl_Light_Button_H
+#define Fl_Light_Button_H
+
+#include "Fl_Button.H"
+#include <fltk/LightButton.h>
+typedef fltk::LightButton Fl_Light_Button;
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Menu_.H b/fltk/fltk/compat/FL/Fl_Menu_.H
new file mode 100644
index 0000000..49a909e
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Menu_.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Menu__H
+#define Fl_Menu__H
+
+#include "Fl_Menu_Item.H"
+#include <fltk/Menu.h>
+typedef fltk::Menu Fl_Menu_;
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Menu_Bar.H b/fltk/fltk/compat/FL/Fl_Menu_Bar.H
new file mode 100644
index 0000000..465d58e
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Menu_Bar.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Menu_Bar_H
+#define Fl_Menu_Bar_H
+
+#include "Fl_Menu_.H"
+#include <fltk/MenuBar.h>
+typedef fltk::MenuBar Fl_Menu_Bar;
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Menu_Button.H b/fltk/fltk/compat/FL/Fl_Menu_Button.H
new file mode 100644
index 0000000..269e992
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Menu_Button.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Menu_Button_H
+#define Fl_Menu_Button_H
+
+#include "Fl_Menu_.H"
+#include <fltk/PopupMenu.h>
+typedef fltk::PopupMenu Fl_Menu_Button;
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Menu_Item.H b/fltk/fltk/compat/FL/Fl_Menu_Item.H
new file mode 100644
index 0000000..6b7a31a
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Menu_Item.H
@@ -0,0 +1,163 @@
+//
+// "$Id: Fl_Menu_Item.H 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Back-compatability menu items for FLTK. The new fltk::Menu class
+// converts these tables into child fltk::Item and fltk::ItemGroup widgets.
+// You should not use this for new programs.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef Fl_Menu_Item_h
+#define Fl_Menu_Item_h
+
+#include <fltk/Widget.h>
+
+enum { // values for flags:
+ FL_MENU_INACTIVE = 1,
+ FL_MENU_TOGGLE= 2,
+ FL_MENU_VALUE = 4,
+ FL_MENU_RADIO = 8,
+ FL_MENU_INVISIBLE = 0x10,
+ FL_SUBMENU_POINTER = 0x20,
+ FL_SUBMENU = 0x40,
+ FL_MENU_DIVIDER = 0x80,
+ FL_MENU_HORIZONTAL = 0x100 // not used!
+};
+
+namespace fltk {
+ class FL_API Menu;
+}
+
+struct FL_API Fl_Menu_Item {
+ const char *text;
+ int shortcut_;
+ fltk::Callback *callback_;
+ void *user_data_;
+ int flags;
+ fltk::LabelType* labeltype_;
+ fltk::Font* labelfont_;
+ unsigned labelsize_;
+ fltk::Color labelcolor_;
+
+ // Used to add or set an fltk::Menu widget:
+ void add_to(fltk::Menu*, void* data = 0) const;
+
+ // popup menus without using an fltk::Menu widget:
+ // Warning: this is now quite expensive, as it creates a temporary
+ // fltk::Menu and child widgets! These also do not match the fltk 1.0
+ // calls, if there is any callback it is called directly (with the
+ // dummy fltk::Menu as an argument).
+ const Fl_Menu_Item*
+ pulldown(int X, int Y, int W, int H,
+ const Fl_Menu_Item* picked = 0,
+ const char* title = 0) const;
+ const Fl_Menu_Item*
+ popup(int X, int Y, const char* title=0,
+ const Fl_Menu_Item* picked = 0) const {
+ return pulldown(X, Y, 0, 0, picked, title);}
+ const Fl_Menu_Item*
+ test_shortcut() const;
+
+ // return offset of terminating null item:
+ int size() const ;
+
+ // advance a pointer by N items, skipping submenus:
+ const Fl_Menu_Item *next(int=1) const;
+ Fl_Menu_Item *next(int i=1) {
+ return (Fl_Menu_Item*)(((const Fl_Menu_Item*)this)->next(i));}
+
+ const char* label() const {return text;}
+ fltk::LabelType* labeltype() const {return labeltype_;}
+ fltk::Color labelcolor() const {return labelcolor_;}
+ fltk::Font* labelfont() const {return labelfont_;}
+ unsigned labelsize() const {return labelsize_;}
+ fltk::Callback_p callback() const {return callback_;}
+ void* user_data() const {return user_data_;}
+ long argument() const {return (long)user_data_;}
+ int shortcut() const {return shortcut_;}
+ int submenu() const {return flags&(FL_SUBMENU|FL_SUBMENU_POINTER);}
+ int checkbox() const {return flags&FL_MENU_TOGGLE;}
+ int radio() const {return flags&FL_MENU_RADIO;}
+ int value() const {return flags&FL_MENU_VALUE;}
+ int visible() const {return !(flags&FL_MENU_INVISIBLE);}
+ int active() const {return !(flags&FL_MENU_INACTIVE);}
+ int activevisible() const {return !(flags&0x11);}
+
+ void label(const char* a) {text=a;}
+ void label(fltk::LabelType* a,const char* b) {labeltype_ = a; text = b;}
+ void labeltype(fltk::LabelType* a) {labeltype_ = a;}
+ void labelcolor(uchar a) {labelcolor_ = a;}
+ void labelfont(fltk::Font* a) {labelfont_ = a;}
+ void labelsize(uchar a) {labelsize_ = a;}
+ void callback(fltk::Callback* c, void* p) {callback_=c; user_data_=p;}
+ void callback(fltk::Callback* c) {callback_=c;}
+ void callback(fltk::Callback0*c) {callback_=(fltk::Callback*)c;}
+ void callback(fltk::Callback1*c, long p=0) {callback_=(fltk::Callback*)c; user_data_=(void*)p;}
+ void user_data(void* v) {user_data_ = v;}
+ void argument(long v) {user_data_ = (void*)v;}
+ void shortcut(int s) {shortcut_ = s;}
+ void set() {flags |= FL_MENU_VALUE;}
+ void clear() {flags &= ~FL_MENU_VALUE;}
+ void setonly();
+ void show() {flags &= ~FL_MENU_INVISIBLE;}
+ void hide() {flags |= FL_MENU_INVISIBLE;}
+ void activate() {flags &= ~FL_MENU_INACTIVE;}
+ void deactivate() {flags |= FL_MENU_INACTIVE;}
+
+ const Fl_Menu_Item* find_shortcut(int *ip=0) const;
+
+ void do_callback(fltk::Widget* o) const {callback_(o, user_data_);}
+ void do_callback(fltk::Widget* o,void* arg) const {callback_(o, arg);}
+ void do_callback(fltk::Widget* o,long arg) const {callback_(o, (void*)arg);}
+
+ // back-compatability, do not use:
+ int checked() const {return flags&FL_MENU_VALUE;}
+ void check() {flags |= FL_MENU_VALUE;}
+ void uncheck() {flags &= ~FL_MENU_VALUE;}
+
+#if 0
+ int add(const char*, int shortcut, fltk::Callback*, void* =0, int = 0);
+ int add(const char*a, const char* b, fltk::Callback* c,
+ void* d = 0, int e = 0) {
+ return add(a,fltk::old_shortcut(b),c,d,e);}
+#endif
+};
+
+typedef Fl_Menu_Item Fl_Menu; // back compatability with fltk < 1.0
+
+enum { // back-compatability enum:
+ FL_PUP_NONE = 0,
+ FL_PUP_GREY = FL_MENU_INACTIVE,
+ FL_PUP_GRAY = FL_MENU_INACTIVE,
+ FL_MENU_BOX = FL_MENU_TOGGLE,
+ FL_PUP_BOX = FL_MENU_TOGGLE,
+ FL_MENU_CHECK = FL_MENU_VALUE,
+ FL_PUP_CHECK = FL_MENU_VALUE,
+ FL_PUP_RADIO = FL_MENU_RADIO,
+ FL_PUP_INVISIBLE = FL_MENU_INVISIBLE,
+ FL_PUP_SUBMENU = FL_SUBMENU_POINTER
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Menu_Item.H 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/compat/FL/Fl_Output.H b/fltk/fltk/compat/FL/Fl_Output.H
new file mode 100644
index 0000000..cd375ca
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Output.H
@@ -0,0 +1,15 @@
+#ifndef Fl_Output_H
+#define Fl_Output_H
+
+#include "Fl_Input.H"
+#include <fltk/Output.h>
+typedef fltk::Output Fl_Output;
+
+enum {
+ FL_NORMAL_OUTPUT = fltk::Input::NORMAL,
+ FL_MULTILINE_OUTPUT = fltk::Input::MULTILINE,
+ FL_MULTILINE_OUTPUT_WRAP = fltk::Input::WORDWRAP
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Overlay_Window.H b/fltk/fltk/compat/FL/Fl_Overlay_Window.H
new file mode 100644
index 0000000..3a6641f
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Overlay_Window.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Overlay_Window_H
+#define Fl_Overlay_Window_H
+
+#include "Fl_Window.H"
+typedef Fl_Window Fl_Overlay_Window;
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Pack.H b/fltk/fltk/compat/FL/Fl_Pack.H
new file mode 100644
index 0000000..ecd3846
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Pack.H
@@ -0,0 +1,15 @@
+#ifndef Fl_Pack_H
+#define Fl_Pack_H
+
+#include "Fl_Group.H"
+#include <fltk/PackedGroup.h>
+
+class Fl_Pack : public fltk::PackedGroup {
+
+public:
+ Fl_Pack(int x, int y, int w, int h, const char*l = 0)
+ : fltk::PackedGroup(x,y,w,h,l) {begin();}
+
+}; // Fl_Pack class
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Pixmap.H b/fltk/fltk/compat/FL/Fl_Pixmap.H
new file mode 100644
index 0000000..15b0638
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Pixmap.H
@@ -0,0 +1,9 @@
+#ifndef Fl_Pixmap_H
+#define Fl_Pixmap_H
+
+#include "Fl_Widget.H"
+#include "fltk/xpmImage.h"
+
+typedef fltk::xpmImage Fl_Pixmap;
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Return_Button.H b/fltk/fltk/compat/FL/Fl_Return_Button.H
new file mode 100644
index 0000000..506a297
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Return_Button.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Return_Button_H
+#define Fl_Return_Button_H
+
+#include <fltk/ReturnButton.h>
+typedef fltk::ReturnButton Fl_Return_Button;
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Roller.H b/fltk/fltk/compat/FL/Fl_Roller.H
new file mode 100644
index 0000000..6e966f1
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Roller.H
@@ -0,0 +1,13 @@
+#ifndef Fl_Roller_H
+#define Fl_Roller_H
+
+#include "Fl_Valuator.H"
+#include <fltk/ThumbWheel.h>
+
+class Fl_Roller : public fltk::ThumbWheel {
+public:
+ Fl_Roller(int x, int y, int w, int h, const char*l = 0)
+ : fltk::ThumbWheel(x,y,w,h,l) {set_vertical();}
+};
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Scroll.H b/fltk/fltk/compat/FL/Fl_Scroll.H
new file mode 100644
index 0000000..e677e31
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Scroll.H
@@ -0,0 +1,15 @@
+#ifndef Fl_Scroll_H
+#define Fl_Scroll_H
+
+#include "Fl_Group.H"
+#include <fltk/ScrollGroup.h>
+
+class Fl_Scroll : public fltk::ScrollGroup {
+
+public:
+ Fl_Scroll(int x, int y, int w, int h, const char*l = 0)
+ : fltk::ScrollGroup(x,y,w,h,l) {begin();}
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Scrollbar.H b/fltk/fltk/compat/FL/Fl_Scrollbar.H
new file mode 100644
index 0000000..922539a
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Scrollbar.H
@@ -0,0 +1,13 @@
+#ifndef Fl_Scrollbar_H
+#define Fl_Scrollbar_H
+
+#include "Fl_Slider.H"
+#include <fltk/Scrollbar.h>
+
+class Fl_Scrollbar : public fltk::Scrollbar {
+public:
+ Fl_Scrollbar(int x, int y, int w, int h, const char*l = 0)
+ : fltk::Scrollbar(x,y,w,h,l) {set_vertical();}
+};
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Select_Browser.H b/fltk/fltk/compat/FL/Fl_Select_Browser.H
new file mode 100644
index 0000000..ffebc0d
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Select_Browser.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Select_Browser_H
+#define Fl_Select_Browser_H
+
+#include "Fl_Browser.H"
+typedef Fl_Browser Fl_Select_Browser;
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Shared_Image.H b/fltk/fltk/compat/FL/Fl_Shared_Image.H
new file mode 100644
index 0000000..70a4de3
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Shared_Image.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Shared_Image_H
+#define Fl_Shared_Image_H
+
+#include <fltk/SharedImage.h>
+#define Fl_Shared_Image fltk::SharedImage
+#define Fl_Image fltk::Image
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Single_Window.H b/fltk/fltk/compat/FL/Fl_Single_Window.H
new file mode 100644
index 0000000..312e9b8
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Single_Window.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Single_Window_H
+#define Fl_Single_Window_H
+
+#include "Fl_Window.H"
+typedef Fl_Window Fl_Single_Window;
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Slider.H b/fltk/fltk/compat/FL/Fl_Slider.H
new file mode 100644
index 0000000..4a46afc
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Slider.H
@@ -0,0 +1,24 @@
+#ifndef Fl_Slider_H
+#define Fl_Slider_H
+
+#include "Fl_Widget.H"
+#define FLTK_1_SLIDER 1
+#include <fltk/Slider.h>
+
+class Fl_Slider : public fltk::Slider {
+public:
+ Fl_Slider(int x, int y, int w, int h, const char*l = 0)
+ : fltk::Slider(x,y,w,h,l) {set_vertical();}
+};
+
+enum {
+ FL_VERT_SLIDER = fltk::Slider::LINEAR,
+ FL_HOR_SLIDER = fltk::Slider::HORIZONTAL,
+ FL_VERT_FILL_SLIDER = fltk::Slider::FILL,
+ FL_HOR_FILL_SLIDER = fltk::Slider::HORIZONTAL+fltk::Slider::FILL,
+ FL_VERT_NICE_SLIDER = fltk::Slider::LINEAR,
+ FL_HOR_NICE_SLIDER = fltk::Slider::HORIZONTAL
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Tabs.H b/fltk/fltk/compat/FL/Fl_Tabs.H
new file mode 100644
index 0000000..202a705
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Tabs.H
@@ -0,0 +1,15 @@
+#ifndef Fl_Tabs_H
+#define Fl_Tabs_H
+
+#include "Fl_Group.H"
+#include <fltk/TabGroup.h>
+
+class Fl_Tabs : public fltk::TabGroup {
+
+public:
+ Fl_Tabs(int x, int y, int w, int h, const char*l = 0)
+ : fltk::TabGroup(x,y,w,h,l) {begin();}
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Text_Buffer.H b/fltk/fltk/compat/FL/Fl_Text_Buffer.H
new file mode 100644
index 0000000..5886681
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Text_Buffer.H
@@ -0,0 +1,8 @@
+#ifndef Fl_Text_Buffer_H
+#define Fl_Text_Buffer_H
+
+#include "Fl_Widget.H"
+#include <fltk/TextBuffer.h>
+typedef fltk::TextBuffer Fl_Text_Buffer;
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Text_Editor.H b/fltk/fltk/compat/FL/Fl_Text_Editor.H
new file mode 100644
index 0000000..789b971
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Text_Editor.H
@@ -0,0 +1,9 @@
+#ifndef Fl_Text_Editor_H
+#define Fl_Text_Editor_H
+
+#include "Fl_Text_Buffer.H"
+#include <fltk/TextEditor.h>
+typedef fltk::TextEditor Fl_Text_Editor;
+#define Style_Table_Entry StyleTableEntry
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Tile.H b/fltk/fltk/compat/FL/Fl_Tile.H
new file mode 100644
index 0000000..89799ee
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Tile.H
@@ -0,0 +1,15 @@
+#ifndef Fl_Tile_H
+#define Fl_Tile_H
+
+#include "Fl_Widget.H"
+#include <fltk/TiledGroup.h>
+
+class Fl_Tile : public fltk::TiledGroup {
+
+public:
+ Fl_Tile(int x, int y, int w, int h, const char*l = 0)
+ : fltk::TiledGroup(x,y,w,h,l) {begin();}
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Toggle_Button.H b/fltk/fltk/compat/FL/Fl_Toggle_Button.H
new file mode 100644
index 0000000..6fc7bc6
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Toggle_Button.H
@@ -0,0 +1,12 @@
+#ifndef Fl_Toggle_Button_H
+#define Fl_Toggle_Button_H
+
+#include "Fl_Button.H"
+
+class Fl_Toggle_Button : public Fl_Button {
+public:
+ Fl_Toggle_Button(int X,int Y,int W,int H,const char *l=0)
+ : Fl_Button(X,Y,W,H,l) {type(FL_TOGGLE_BUTTON);}
+};
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Toggle_Light_Button.H b/fltk/fltk/compat/FL/Fl_Toggle_Light_Button.H
new file mode 100644
index 0000000..8eae1a3
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Toggle_Light_Button.H
@@ -0,0 +1,10 @@
+#ifndef Fl_Toggle_Light_Button_H
+#define Fl_Toggle_Light_Button_H
+
+
+#include "Fl_Button.H"
+#include <fltk/LightButton.h>
+typedef fltk::LightButton Fl_Toggle_Light_Button;
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Valuator.H b/fltk/fltk/compat/FL/Fl_Valuator.H
new file mode 100644
index 0000000..be391c7
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Valuator.H
@@ -0,0 +1,12 @@
+#ifndef Fl_Valuator_H
+#define Fl_Valuator_H
+
+#include <fltk/Valuator.h>
+#define Fl_Valuator fltk::Valuator
+
+enum {
+ FL_VERTICAL = 0,
+ FL_HORIZONTAL = 1
+};
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Value_Input.H b/fltk/fltk/compat/FL/Fl_Value_Input.H
new file mode 100644
index 0000000..03d719f
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Value_Input.H
@@ -0,0 +1,7 @@
+#ifndef Fl_Value_Input_H
+#define Fl_Value_Input_H
+
+#include <fltk/ValueInput.h>
+typedef fltk::ValueInput Fl_Value_Input;
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Value_Output.H b/fltk/fltk/compat/FL/Fl_Value_Output.H
new file mode 100644
index 0000000..ea4115e
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Value_Output.H
@@ -0,0 +1,11 @@
+#ifndef Fl_Value_Output_H
+#define Fl_Value_Output_H
+
+// The fltk1.1 allowed the user to change the value by dragging the mouse.
+// The fltk2.0 version is strictly for displaying a numeric value.
+// If you want the user to be able to change it, replace with a Value_Input.
+
+#include <fltk/ValueOutput.h>
+typedef fltk::ValueOutput Fl_Value_Output;
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Value_Slider.H b/fltk/fltk/compat/FL/Fl_Value_Slider.H
new file mode 100644
index 0000000..9afda08
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Value_Slider.H
@@ -0,0 +1,14 @@
+#ifndef Fl_Value_Slider_H
+#define Fl_Value_Slider_H
+
+#include "Fl_Slider.H"
+#include <fltk/ValueSlider.h>
+
+class Fl_Value_Slider : public fltk::ValueSlider {
+public:
+ Fl_Value_Slider(int x, int y, int w, int h, const char*l = 0)
+ : fltk::ValueSlider(x,y,w,h,l) {set_vertical();}
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/Fl_Widget.H b/fltk/fltk/compat/FL/Fl_Widget.H
new file mode 100644
index 0000000..16b918a
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Widget.H
@@ -0,0 +1,19 @@
+#ifndef Fl_Widget_H
+#define Fl_Widget_H
+
+#include "Enumerations.H"
+#define FLTK_1_WIDGET 1
+#include <fltk/Widget.h>
+
+typedef fltk::Widget Fl_Widget;
+
+typedef fltk::Callback Fl_Callback;
+typedef Fl_Callback* Fl_Callback_p; // needed for BORLAND
+typedef fltk::Callback0 Fl_Callback0;
+typedef fltk::Callback1 Fl_Callback1;
+
+enum {
+ FL_RESERVED_TYPE = fltk::Widget::RESERVED_TYPE
+};
+
+#endif
diff --git a/fltk/fltk/compat/FL/Fl_Window.H b/fltk/fltk/compat/FL/Fl_Window.H
new file mode 100644
index 0000000..fbb3b84
--- /dev/null
+++ b/fltk/fltk/compat/FL/Fl_Window.H
@@ -0,0 +1,22 @@
+#ifndef Fl_Window_H
+#define Fl_Window_H
+
+#include "Fl_Group.H"
+#include <fltk/Window.h>
+
+class Fl_Window : public fltk::Window {
+
+public:
+ Fl_Window(int x, int y, int w, int h, const char*l = 0)
+ : fltk::Window(x,y,w,h,l) {begin();}
+
+ Fl_Window(int x, int y, const char*l = 0)
+ : fltk::Window(x,y,l) {begin();}
+
+ void border(bool v) {
+ if (!v) clear_border(); // set_border does not work
+ }
+};
+
+#endif
+
diff --git a/fltk/fltk/compat/FL/README b/fltk/fltk/compat/FL/README
new file mode 100644
index 0000000..5301fdd
--- /dev/null
+++ b/fltk/fltk/compat/FL/README
@@ -0,0 +1,35 @@
+These header files are for back-compatability with fltk1.x. Do not
+use these header files in new programs. Use the ones in the fltk
+directory.
+
+Most fltk1.x programs should compile with no changes by using these
+header files and linking with the fltk2.0 library.
+
+Known changes that must be done to fltk1.1 code to make them compile:
+
+Widgets inside groups will need their x,y coordinates fixed as they
+are now relative to the group, not the window.
+
+FL_BOLD, FL_ITALIC - these symbols used to be added to fonts to get
+bold and italic. This no longer works. You should replace them with
+the single symbol for the font (like FL_HELVETICA_BOLD in place of
+FL_HELVETICA+FL_BOLD) or use font->plus(attributes).
+
+Drawing functions are only roughly emulated. You may need to add casts
+to float to get your compiler to locate the correct functions. And if
+you offset by the x,y of the widget you need to remove these offsets.
+
+Some new members of widgets may hide global data. For instance "width"
+and "height" are now members. You can fix this by putting "::" in
+front of the global data names.
+
+If you use the Fl_Browser you are probably going to have trouble. All
+the indexes are offset by 1 from fltk1.1, ie the first item has an
+index of zero, not 1. Adding items with forward slashes in them will
+produce a hierarchy, which is pretty confusing when you don't plan on
+it.
+
+Menu and browser callbacks: the widget passed is the item, not the
+menu or browser. If you use o->parent() to find what window it is in
+you will have to change this, in most cases you can use o->window().
+
diff --git a/fltk/fltk/compat/FL/filename.H b/fltk/fltk/compat/FL/filename.H
new file mode 100644
index 0000000..08dcd86
--- /dev/null
+++ b/fltk/fltk/compat/FL/filename.H
@@ -0,0 +1,21 @@
+#ifndef fl_filename_H
+#define fl_filename_H
+
+#include <fltk/filename.h>
+#include <string.h>
+
+#define fl_filename_name fltk::filename_name
+#define fl_filename_ext fltk::filename_ext
+#define fl_filename_match fltk::filename_match
+#define fl_filename_isdir fltk::filename_isdir
+#define fl_filename_list fltk::filename_list
+
+inline char *fl_filename_setext(char * name, const char *ext) {
+ strcpy(fltk::filename_ext(name), ext ? ext : "");
+ return name;
+}
+#define FL_PATH_MAX PATH_MAX // all buffers are assummed to be at least this long
+FL_API bool fl_filename_expand(char *, const char *from);
+FL_API bool fl_filename_absolute(char *, const char *from, const char* pwd=0);
+
+#endif
diff --git a/fltk/fltk/compat/FL/fl_ask.H b/fltk/fltk/compat/FL/fl_ask.H
new file mode 100644
index 0000000..fdef11e
--- /dev/null
+++ b/fltk/fltk/compat/FL/fl_ask.H
@@ -0,0 +1,13 @@
+#ifndef fl_ask_H
+#define fl_ask_H
+
+#include <fltk/ask.h>
+
+#define fl_message fltk::message
+#define fl_alert fltk::alert
+#define fl_ask fltk::ask
+#define fl_choice fltk::choice
+#define fl_input fltk::input
+#define fl_password fltk::password
+
+#endif
diff --git a/fltk/fltk/compat/FL/fl_draw.H b/fltk/fltk/compat/FL/fl_draw.H
new file mode 100644
index 0000000..12cd1bd
--- /dev/null
+++ b/fltk/fltk/compat/FL/fl_draw.H
@@ -0,0 +1,214 @@
+#ifndef fl_draw_H
+#define fl_draw_H
+
+#include "Enumerations.H"
+#include <fltk/draw.h>
+#include <fltk/Font.h>
+
+inline void fl_color(fltk::Color c) {fltk::setcolor(c);}
+inline void fl_color(uchar r, uchar g, uchar b) {fltk::setcolor(fltk::color(r,g,b));}
+inline fltk::Color fl_color() {return fltk::getcolor();}
+
+// clip:
+inline void fl_push_clip(int x, int y, int w, int h) {fltk::push_clip(x,y,w,h);}
+inline void fl_push_no_clip() {fltk::push_no_clip();}
+#define fl_clip fl_push_clip
+#define fl_pop_clip fltk::pop_clip
+inline int fl_not_clipped(int x, int y, int w, int h) {return fltk::not_clipped(fltk::Rectangle(x,y,w,h));}
+inline int fl_clip_box(int X, int Y, int W, int H, int& x, int& y, int& w, int& h) {
+ fltk::Rectangle r(X,Y,W,H);
+ int i = intersect_with_clip(r);
+ x = r.x(); y = r.y(); w = r.w(); h = r.h();
+ return i;
+}
+
+// points:
+inline void fl_point(int x, int y) {fltk::drawpoint(x,y);}
+
+// line type:
+#define fl_line_style fltk::line_style
+enum {
+ FL_SOLID = fltk::SOLID,
+ FL_DASH = fltk::DASH,
+ FL_DOT = fltk::DOT,
+ FL_DASHDOT = fltk::DASHDOT,
+ FL_DASHDOTDOT = fltk::DASHDOTDOT,
+ FL_CAP_FLAT = fltk::CAP_FLAT,
+ FL_CAP_ROUND = fltk::CAP_ROUND,
+ FL_CAP_SQUARE = fltk::CAP_SQUARE,
+ FL_JOIN_MITER = fltk::JOIN_MITER,
+ FL_JOIN_ROUND = fltk::JOIN_ROUND,
+ FL_JOIN_BEVEL = fltk::JOIN_BEVEL
+};
+
+// rectangles tweaked to exactly fill the pixel rectangle:
+inline void fl_rect(int x, int y, int w, int h) {fltk::strokerect(fltk::Rectangle(x,y,w,h));}
+inline void fl_rect(int x, int y, int w, int h, fltk::Color c) {fltk::setcolor(c); fltk::strokerect(fltk::Rectangle(x,y,w,h));}
+inline void fl_rectf(int x, int y, int w, int h) {fltk::fillrect(fltk::Rectangle(x,y,w,h));}
+inline void fl_rectf(int x, int y, int w, int h, fltk::Color c) {fltk::setcolor(c); fltk::fillrect(fltk::Rectangle(x,y,w,h));}
+
+// line segments:
+inline void fl_line(int x0,int y0, int x1,int y1) {fltk::drawline(x0,y0,x1,y1);}
+inline void fl_line(int x0,int y0, int x1,int y1, int x2,int y2) {
+ fltk::addvertex(x0,y0);
+ fltk::addvertex(x1,y1);
+ fltk::addvertex(x2,y2);
+ fltk::strokepath();
+}
+
+// closed line segments:
+inline void fl_loop(int x0,int y0, int x1,int y1, int x2,int y2) {
+ fltk::addvertex(x0,y0);
+ fltk::addvertex(x1,y1);
+ fltk::addvertex(x2,y2);
+ fltk::closepath();
+ fltk::strokepath();
+}
+inline void fl_loop(int x0,int y0, int x1,int y1, int x2,int y2, int x3,int y3) {
+ fltk::addvertex(x0,y0);
+ fltk::addvertex(x1,y1);
+ fltk::addvertex(x2,y2);
+ fltk::addvertex(x3,y3);
+ fltk::closepath();
+ fltk::strokepath();
+}
+
+// filled polygons
+inline void fl_polygon(int x0,int y0, int x1,int y1, int x2,int y2) {
+ fltk::addvertex(x0,y0);
+ fltk::addvertex(x1,y1);
+ fltk::addvertex(x2,y2);
+ fltk::closepath();
+ fltk::fillpath();
+}
+inline void fl_polygon(int x0,int y0, int x1,int y1, int x2,int y2, int x3,int y3) {
+ fltk::addvertex(x0,y0);
+ fltk::addvertex(x1,y1);
+ fltk::addvertex(x2,y2);
+ fltk::addvertex(x3,y3);
+ fltk::closepath();
+ fltk::fillpath();
+}
+
+// draw rectilinear lines, horizontal segment first:
+inline void fl_xyline(int x, int y, int x1) {
+ fltk::drawline(x,y,x1,y);
+}
+inline void fl_xyline(int x, int y, int x1, int y2) {
+ fltk::addvertex(x,y);
+ fltk::addvertex(x1,y);
+ fltk::addvertex(x1,y2);
+ fltk::strokepath();
+}
+inline void fl_xyline(int x, int y, int x1, int y2, int x3) {
+ fltk::addvertex(x,y);
+ fltk::addvertex(x1,y);
+ fltk::addvertex(x1,y2);
+ fltk::addvertex(x3,y2);
+ fltk::strokepath();
+}
+
+// draw rectilinear lines, vertical segment first:
+inline void fl_yxline(int x, int y, int y1) {
+ fltk::drawline(x,y,x,y1);
+}
+inline void fl_yxline(int x, int y, int y1, int x2) {
+ fltk::addvertex(x,y);
+ fltk::addvertex(x,y1);
+ fltk::addvertex(x2,y1);
+ fltk::strokepath();
+}
+inline void fl_yxline(int x, int y, int y1, int x2, int y3) {
+ fltk::addvertex(x,y);
+ fltk::addvertex(x,y1);
+ fltk::addvertex(x2,y1);
+ fltk::addvertex(x2,y3);
+ fltk::strokepath();
+}
+
+inline void fl_arc(int x,int y,int w,int h,float a,float a2) {fltk::addchord(fltk::Rectangle(x,y,w,h),a,a2); fltk::strokepath();}
+inline void fl_pie(int x,int y,int w,int h,float a,float a2) {fltk::addpie(fltk::Rectangle(x,y,w,h),a,a2); fltk::fillpath();}
+inline void fl_chord(int x,int y,int w,int h,float a,float a2) {fltk::addchord(fltk::Rectangle(x,y,w,h),a,a2); fltk::fillpath();}
+
+// scalable drawing code (code in fl_vertex.C and fl_arc.C):
+#define fl_push_matrix fltk::push_matrix
+#define fl_pop_matrix fltk::pop_matrix
+#define fl_scale fltk::scale
+#define fl_translate fltk::translate
+#define fl_rotate fltk::rotate
+#define fl_mult_matrix fltk::concat
+#define fl_begin_points fltk::newpath
+#define fl_begin_line fltk::newpath
+#define fl_begin_loop fltk::newpath
+#define fl_begin_polygon fltk::newpath
+#define fl_vertex fltk::addvertex
+#define fl_curve fltk::addcurve
+inline void fl_arc(float x,float y,float r, float a1, float a2) {fltk::addarc(x-r,y-r,2*r,2*r,a1,a2);}
+#define fl_circle fltk::addcircle
+#define fl_end_points fltk::drawpoints
+#define fl_end_line fltk::strokepath
+inline void fl_end_loop() {fltk::closepath();fltk::strokepath();}
+#define fl_end_polygon fltk::fillpath
+#define fl_begin_complex_polygon fltk::newpath
+#define fl_gap fltk::closepath
+#define fl_end_complex_polygon fltk::fillpath
+
+// current font: (size was an int in fltk1.1)
+inline void fl_font(fltk::Font* f, float size) {fltk::setfont(f,size);}
+inline void fl_font(int f, float size) {fltk::setfont(fltk::font(f),size);}
+inline fltk::Font* fl_font() {return fltk::getfont();}
+inline float fl_size() {return fltk::getsize();}
+
+// information you can get about the current font:
+inline float fl_height() {return fltk::getascent()+fltk::getdescent();}
+inline float fl_height(int, float size) {return size;}
+inline float fl_descent() {return fltk::getdescent();}
+inline float fl_width(const char* c) {return fltk::getwidth(c);}
+inline float fl_width(const char* c, int n) {return fltk::getwidth(c,n);}
+inline float fl_width(char c) {return fltk::getwidth(&c,1);}
+
+// draw using current font:
+inline void fl_draw(const char* s, int x, int y) {fltk::drawtext(s,x,y);}
+inline void fl_draw(const char* s, int n, int x, int y) {fltk::drawtext(s,n,x,y);}
+inline void fl_measure(const char* s, int& x, int& y) {fltk::measure(s,x,y);}
+inline void fl_draw(const char* s, int x,int y,int w,int h, fltk::Flags f) {fltk::drawtext(s,fltk::Rectangle(x,y,w,h),f);}
+
+// boxtypes:
+//void fl_frame(const char* s, int x, int y, int w, int h);
+//void fl_frame2(const char* s, int x, int y, int w, int h);
+// This no longer works because boxes take a style, not a color:
+// #include <fltk/Box.h>
+// inline void fl_draw_box(fltk::Box* b, int x, int y, int w, int h, fltk::Color c) {b->draw(x,y,w,h,c);}
+
+// images:
+static inline fltk::PixelType fromdelta(int d) {return d==1?fltk::MONO:d==3?fltk::RGB:fltk::RGBx;}
+inline void fl_draw_image(const uchar* p, int x,int y,int w,int h, int delta, int ldelta) {fltk::drawimage(p,fromdelta(delta),fltk::Rectangle(x,y,w,h),ldelta);}
+inline void fl_draw_image(const uchar* p, int x,int y,int w,int h, int delta) {fltk::drawimage(p,fromdelta(delta),fltk::Rectangle(x,y,w,h));}
+
+inline void fl_draw_image_mono(const uchar* p, int x,int y,int w,int h, int delta, int ldelta) {fltk::drawimage(p,fltk::MONO,fltk::Rectangle(x,y,w,h),ldelta);}
+inline void fl_draw_image_mono(const uchar* p, int x,int y,int w,int h, int delta=1) {fltk::drawimage(p,fltk::MONO,fltk::Rectangle(x,y,w,h));}
+
+typedef fltk::DrawImageCallback Fl_Draw_Image_Cb;
+inline void fl_draw_image(Fl_Draw_Image_Cb cb, void* p, int x,int y,int w,int h, int delta=3) {fltk::drawimage(cb,p,fromdelta(delta),fltk::Rectangle(x,y,w,h));}
+inline void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* p, int x,int y,int w,int h, int delta=1) {fltk::drawimage(cb,p,fltk::MONO,fltk::Rectangle(x,y,w,h));}
+
+inline uchar *fl_read_image(uchar *p, int x,int y, int w, int h, int alpha=0) {return fltk::readimage(p, alpha?fltk::RGBA:fltk::RGB, fltk::Rectangle(x,y,w,h));}
+
+inline void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) {fltk::setcolor(fltk::color(r,g,b)); fltk::fillrect(fltk::Rectangle(x,y,w,h));}
+
+#define fl_draw_pixmap fltk::draw_xpm
+#define fl_measure_pixmap fltk::measure_xpm
+#define fl_scroll fltk::scrollrect
+#define fl_shortcut_label fltk::key_name
+#define fl_overlay_rect fltk::overlay_rect
+#define fl_overlay_clear fltk::overlay_clear
+#define fl_draw_symbol fltk::draw_symbol
+#define fl_add_symbol fltk::add_symbol
+#define fl_frame fltk::drawframe2
+#define fl_frame2 fltk::drawframe
+
+#endif
+
+//
+// End of "$Id: fl_draw.H 5939 2007-08-02 14:19:28Z spitzak $".
+//
diff --git a/fltk/fltk/compat/FL/fl_message.H b/fltk/fltk/compat/FL/fl_message.H
new file mode 100644
index 0000000..4f81d69
--- /dev/null
+++ b/fltk/fltk/compat/FL/fl_message.H
@@ -0,0 +1 @@
+#include "fl_ask.H"
diff --git a/fltk/fltk/compat/FL/forms.H b/fltk/fltk/compat/FL/forms.H
new file mode 100644
index 0000000..ab96944
--- /dev/null
+++ b/fltk/fltk/compat/FL/forms.H
@@ -0,0 +1,857 @@
+//
+// "$Id: forms.H 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Forms emulation header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef __FORMS_H__
+#define __FORMS_H__
+
+#include <fltk/Window.h>
+#include <fltk/run.h>
+#include <fltk/draw.h>
+#include <fltk/Color.h>
+#include <fltk/Style.h>
+
+typedef fltk::Widget FL_OBJECT;
+typedef fltk::Window FL_FORM;
+
+////////////////////////////////////////////////////////////////
+// Random constants & symbols defined by forms.h file:
+
+#ifndef NULL
+#define NULL 0
+#endif
+#ifndef FALSE
+#define FALSE 0
+#define TRUE 1
+#endif
+
+#define FL_ON 1
+#define FL_OK 1
+#define FL_VALID 1
+#define FL_PREEMPT 1
+#define FL_AUTO 2
+#define FL_WHEN_NEEDED FL_AUTO
+#define FL_OFF 0
+#define FL_NONE 0
+#define FL_CANCEL 0
+#define FL_INVALID 0
+#define FL_IGNORE -1
+#define FL_CLOSE -2
+
+#define FL_LCOL fltk::BLACK
+#define FL_COL1 fltk::GRAY75
+#define FL_MCOL fltk::GRAY85
+#define FL_LEFT_BCOL fltk::GRAY99
+#define FL_TOP_BCOL fltk::GRAY90
+#define FL_BOTTOM_BCOL fltk::GRAY35
+#define FL_RIGHT_BCOL fltk::GRAY20
+#define FL_INACTIVE fltk::GRAY66
+#define FL_INACTIVE_COL fltk::GRAY66
+#define FL_FREE_COL1 fltk::Color(16)
+#define FL_FREE_COL2 fltk::Color(17)
+#define FL_FREE_COL3 fltk::Color(18)
+#define FL_FREE_COL4 fltk::Color(19)
+#define FL_FREE_COL5 fltk::Color(20)
+#define FL_FREE_COL6 fltk::Color(21)
+#define FL_FREE_COL7 fltk::Color(22)
+#define FL_FREE_COL8 fltk::Color(23)
+#define FL_FREE_COL9 fltk::Color(24)
+#define FL_FREE_COL10 fltk::Color(25)
+#define FL_FREE_COL11 fltk::Color(26)
+#define FL_FREE_COL12 fltk::Color(27)
+#define FL_FREE_COL13 fltk::Color(28)
+#define FL_FREE_COL14 fltk::Color(29)
+#define FL_FREE_COL15 fltk::Color(30)
+#define FL_FREE_COL16 fltk::Color(31)
+#define FL_TOMATO fltk::Color(131)
+#define FL_INDIANRED fltk::Color(164)
+#define FL_SLATEBLUE fltk::Color(195)
+#define FL_DARKGOLD fltk::Color(84)
+#define FL_PALEGREEN fltk::Color(157)
+#define FL_ORCHID fltk::Color(203)
+#define FL_DARKCYAN fltk::Color(189)
+#define FL_DARKTOMATO fltk::Color(113)
+#define FL_WHEAT fltk::Color(174)
+
+#define FL_ALIGN_BESIDE fltk::ALIGN_INSIDE
+
+#define FL_PUP_TOGGLE 2 // FL_MENU_TOGGLE
+#define FL_PUP_INACTIVE 1 // FL_MENU_INACTIVE
+#define FL_NO_FRAME fltk::NO_BOX
+#define FL_ROUNDED3D_UPBOX fltk::ROUND_UP_BOX
+#define FL_ROUNDED3D_DOWNBOX fltk::ROUND_DOWN_BOX
+#define FL_OVAL3D_UPBOX fltk::ROUND_UP_BOX
+#define FL_OVAL3D_DOWNBOX fltk::ROUND_DOWN_BOX
+
+#define FL_MBUTTON1 1
+#define FL_LEFTMOUSE 1
+#define FL_MBUTTON2 2
+#define FL_MIDDLEMOUSE 2
+#define FL_MBUTTON3 3
+#define FL_RIGHTMOUSE 3
+#define FL_MBUTTON4 4
+#define FL_MBUTTON5 5
+
+#define FL_INVALID_STYLE 255
+#define FL_NORMAL_STYLE 0
+#define FL_BOLD_STYLE 1
+#define FL_ITALIC_STYLE 2
+#define FL_BOLDITALIC_STYLE 3
+#define FL_FIXED_STYLE 4
+#define FL_FIXEDBOLD_STYLE 5
+#define FL_FIXEDITALIC_STYLE 6
+#define FL_FIXEDBOLDITALIC_STYLE 7
+#define FL_TIMES_STYLE 8
+#define FL_TIMESBOLD_STYLE 9
+#define FL_TIMESITALIC_STYLE 10
+#define FL_TIMESBOLDITALIC_STYLE 11
+
+// hacks to change the labeltype() when passed to fl_set_object_lstyle():
+#define FL_SHADOW_STYLE 0x100
+#define FL_ENGRAVED_STYLE 0x200
+#define FL_EMBOSSED_STYLE 0x300
+
+// size values are different from XForms, match older Forms:
+#define FL_TINY_SIZE 8
+#define FL_SMALL_SIZE 11 // 10
+#undef FL_NORMAL_SIZE
+#define FL_NORMAL_SIZE 14 // 12
+#define FL_MEDIUM_SIZE 18 // 14
+#define FL_LARGE_SIZE 24 // 18
+#define FL_HUGE_SIZE 32 // 24
+#define FL_DEFAULT_SIZE FL_SMALL_SIZE
+#define FL_TINY_FONT FL_TINY_SIZE
+#define FL_SMALL_FONT FL_SMALL_SIZE
+#define FL_NORMAL_FONT FL_NORMAL_SIZE
+#define FL_MEDIUM_FONT FL_MEDIUM_SIZE
+#define FL_LARGE_FONT FL_LARGE_SIZE
+#define FL_HUGE_FONT FL_HUGE_SIZE
+#define FL_NORMAL_FONT1 FL_SMALL_FONT
+#define FL_NORMAL_FONT2 FL_NORMAL_FONT
+#define FL_DEFAULT_FONT FL_SMALL_FONT
+
+#define FL_RETURN_END_CHANGED FL_WHEN_RELEASE
+#define FL_RETURN_CHANGED FL_WHEN_CHANGED
+#define FL_RETURN_END FL_WHEN_RELEASE_ALWAYS
+#define FL_RETURN_ALWAYS (FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED)
+
+#define FL_BOUND_WIDTH 3
+
+typedef int FL_Coord;
+typedef int FL_COLOR;
+
+////////////////////////////////////////////////////////////////
+// fltk interaction:
+
+#define FL_CMD_OPT void
+extern FL_FORMS_API void fl_initialize(int*, char*[], const char*, FL_CMD_OPT*, int);
+inline void fl_finish() {}
+
+typedef void (*FL_IO_CALLBACK) (int, void*);
+inline void fl_add_io_callback(int fd, short w, FL_IO_CALLBACK cb, void* v) {
+ Fl::add_fd(fd,w,cb,v);}
+inline void fl_remove_io_callback(int fd, short, FL_IO_CALLBACK) {
+ Fl::remove_fd(fd);} // removes all the callbacks!
+
+// type of callback is different and no "id" number is returned:
+inline void fl_add_timeout(long msec, void (*cb)(void*), void* v) {
+ Fl::add_timeout(msec*.001, (Fl_Timeout_Handler)cb, v);}
+inline void fl_remove_timeout(int) {}
+
+// type of callback is different!
+inline void fl_set_idle_callback(void (*cb)()) {Fl::set_idle(cb);}
+
+FL_FORMS_API Fl_Widget* fl_do_forms(void);
+FL_FORMS_API Fl_Widget* fl_check_forms();
+inline Fl_Widget* fl_do_only_forms(void) {return fl_do_forms();}
+inline Fl_Widget* fl_check_only_forms(void) {return fl_check_forms();}
+
+// because of new redraw behavior, these are no-ops:
+inline void fl_freeze_object(Fl_Widget*) {}
+inline void fl_unfreeze_object(Fl_Widget*) {}
+inline void fl_freeze_form(Fl_Window*) {}
+inline void fl_unfreeze_form(Fl_Window*) {}
+inline void fl_freeze_all_forms() {}
+inline void fl_unfreeze_all_forms() {}
+
+inline void fl_set_focus_object(Fl_Window*, Fl_Widget* o) {Fl::focus(o);}
+inline void fl_reset_focus_object(Fl_Widget* o) {Fl::focus(o);}
+#define fl_set_object_focus fl_set_focus_object
+
+// void fl_set_form_atclose(Fl_Window*w,int (*cb)(Fl_Window*,void*),void* v)
+// void fl_set_atclose(int (*cb)(Fl_Window*,void*),void*)
+// fl_set_form_atactivate/atdeactivate not implemented!
+
+////////////////////////////////////////////////////////////////
+// Fl_Widget:
+
+inline void fl_set_object_boxtype(Fl_Widget* o, Fl_Boxtype a) {o->box(a);}
+inline void fl_set_object_lsize(Fl_Widget* o,int s) {o->label_size(s);}
+FL_FORMS_API void fl_set_object_lstyle(Fl_Widget* o,int a);
+inline void fl_set_object_lcol(Fl_Widget* o, unsigned a) {o->label_color((Fl_Color)a);}
+#define fl_set_object_lcolor fl_set_object_lcol
+inline void fl_set_object_lalign(Fl_Widget* o, Fl_Align a) { o->clear_flag(FL_ALIGN_MASK); o->set_flag(a);}
+#define fl_set_object_align fl_set_object_lalign
+inline void fl_set_object_color(Fl_Widget* o,unsigned a,unsigned b) {o->color((Fl_Color)a); o->selection_color((Fl_Color)b);}
+inline void fl_set_object_label(Fl_Widget* o, const char* a) {o->label(a); o->redraw();}
+inline void fl_set_object_position(Fl_Widget*o,int x,int y) {o->position(x,y);}
+inline void fl_set_object_size(Fl_Widget* o, int w, int h) {o->size(w,h);}
+inline void fl_set_object_geometry(Fl_Widget* o,int x,int y,int w,int h) {o->resize(x,y,w,h);}
+
+inline void fl_get_object_geometry(Fl_Widget* o,int*x,int*y,int*w,int*h) {
+ *x = o->x(); *y = o->y(); *w = o->w(); *h = o->h();}
+inline void fl_get_object_position(Fl_Widget* o,int*x,int*y) {
+ *x = o->x(); *y = o->y();}
+
+typedef void (*Forms_CB)(Fl_Widget*, long);
+inline void fl_set_object_callback(Fl_Widget*o,Forms_CB c,long a) {o->callback(c,a);}
+#define fl_set_call_back fl_set_object_callback
+inline void fl_call_object_callback(Fl_Widget* o) {o->do_callback();}
+inline void fl_trigger_object(Fl_Widget* o) {o->do_callback();}
+inline void fl_set_object_return(Fl_Widget* o, int v) {
+ o->when(v|FL_WHEN_RELEASE);}
+
+inline void fl_redraw_object(Fl_Widget* o) {o->redraw();}
+inline void fl_show_object(Fl_Widget* o) {o->show();}
+inline void fl_hide_object(Fl_Widget* o) {o->hide();}
+inline void fl_free_object(Fl_Widget* x) {delete x;}
+inline void fl_delete_object(Fl_Widget* o) {((Fl_Group*)(o->parent()))->remove(*o);}
+inline void fl_activate_object(Fl_Widget* o) {o->activate();}
+inline void fl_deactivate_object(Fl_Widget* o) {o->deactivate();}
+
+inline void fl_add_object(Fl_Window* f, Fl_Widget* x) {f->add(x);}
+inline void fl_insert_object(Fl_Widget* o, Fl_Widget* b) {
+ ((Fl_Group*)(b->parent()))->insert(*o,b);}
+
+inline Fl_Window* FL_ObjWin(Fl_Widget* o) {return o->window();}
+
+////////////////////////////////////////////////////////////////
+// things that appered in the demos a lot that I don't emulate, but
+// I did not want to edit out of all the demos...
+
+inline int fl_get_border_width() {return 3;}
+inline void fl_set_border_width(int) {}
+inline void fl_set_object_dblbuffer(Fl_Widget*, int) {}
+inline void fl_set_form_dblbuffer(Fl_Window*, int) {}
+
+////////////////////////////////////////////////////////////////
+// Fl_Window:
+
+inline void fl_free_form(Fl_Window* x) {delete x;}
+inline void fl_redraw_form(Fl_Window* f) {f->redraw();}
+
+inline Fl_Window* fl_bgn_form(Fl_Boxtype b,int w,int h) {
+ Fl_Window* g = new Fl_Window(w,h,0);
+ g->box(b);
+ return g;
+}
+inline void fl_addto_form(Fl_Window* f) {f->begin();}
+inline Fl_Group* fl_bgn_group() {return new Fl_Group(0,0,0,0,0);}
+inline void fl_addto_group(Fl_Widget* o) {((Fl_Group* )o)->begin();}
+FL_FORMS_API void fl_end_group();
+FL_FORMS_API void fl_end_form();
+#define resizebox _ddfdesign_kludge()
+
+inline void fl_scale_form(Fl_Window* f, double x, double y) {
+ f->resizable(f); f->size(int(f->w()*x),int(f->h()*y));}
+inline void fl_set_form_position(Fl_Window* f,int x,int y) {f->position(x,y);}
+inline void fl_set_form_size(Fl_Window* f, int w, int h) {f->size(w,h);}
+inline void fl_set_form_geometry(Fl_Window* f,int x,int y,int w,int h) {
+ f->resize(x,y,w,h);}
+#define fl_set_initial_placement fl_set_form_geometry
+inline void fl_adjust_form_size(Fl_Window*) {}
+
+FL_FORMS_API void fl_show_form(Fl_Window* f,int p,int b,const char* n);
+enum { // "p" argument values:
+ FL_PLACE_FREE = 0, // make resizable
+ FL_PLACE_MOUSE = 1, // mouse centered on form
+ FL_PLACE_CENTER = 2, // center of the screen
+ FL_PLACE_POSITION = 4,// fixed position, resizable
+ FL_PLACE_SIZE = 8, // fixed size, normal fltk behavior
+ FL_PLACE_GEOMETRY =16,// fixed size and position
+ FL_PLACE_ASPECT = 32, // keep aspect ratio (ignored)
+ FL_PLACE_FULLSCREEN=64,// fill screen
+ FL_PLACE_HOTSPOT = 128,// enables hotspot
+ FL_PLACE_ICONIC = 256,// iconic (ignored)
+ FL_FREE_SIZE=(1<<14), // force resizable
+ FL_FIX_SIZE =(1<<15) // force off resizable
+};
+#define FL_PLACE_FREE_CENTER (FL_PLACE_CENTER|FL_FREE_SIZE)
+#define FL_PLACE_CENTERFREE (FL_PLACE_CENTER|FL_FREE_SIZE)
+enum { // "b" arguement values:
+ FL_NOBORDER = 0,
+ FL_FULLBORDER,
+ FL_TRANSIENT
+//FL_MODAL = (1<<8) // not implemented yet in Forms
+};
+inline void fl_set_form_hotspot(Fl_Window* w,int x,int y) {w->hotspot(x,y);}
+inline void fl_set_form_hotobject(Fl_Window* w, Fl_Widget* o) {w->hotspot(o);}
+extern FL_FORMS_API char fl_flip; // in forms.C
+inline void fl_flip_yorigin() {fl_flip = 1;}
+
+#define fl_prepare_form_window fl_show_form
+inline void fl_show_form_window(Fl_Window*) {}
+
+inline void fl_raise_form(Fl_Window* f) {f->show();}
+
+inline void fl_hide_form(Fl_Window* f) {f->hide();}
+inline void fl_pop_form(Fl_Window* f) {f->show();}
+
+extern FL_FORMS_API char fl_modal_next; // in forms.C
+inline void fl_activate_all_forms() {}
+inline void fl_deactivate_all_forms() {fl_modal_next = 1;}
+inline void fl_deactivate_form(Fl_Window*w) {w->deactivate();}
+inline void fl_activate_form(Fl_Window*w) {w->activate();}
+
+inline void fl_set_form_title(Fl_Window* f, const char* s) {f->label(s);}
+inline void fl_title_form(Fl_Window* f, const char* s) {f->label(s);}
+
+typedef void (*Forms_FormCB)(Fl_Widget*);
+inline void fl_set_form_callback(Fl_Window* f,Forms_FormCB c) {f->callback(c);}
+#define fl_set_form_call_back fl_set_form_callback
+
+inline void fl_init() {}
+inline void fl_set_graphics_mode(int r, int /*d*/) {
+ Fl::visual(r ? FL_RGB : FL_INDEX);
+ // d should add FL_DOUBLE, but that always fails in fltk 2.0
+}
+
+inline int fl_form_is_visible(Fl_Window* f) {return f->visible();}
+
+inline int fl_mouse_button() {return Fl::event_button();}
+#define fl_mousebutton fl_mouse_button
+
+#define fl_free free
+#define fl_malloc malloc
+#define fl_calloc calloc
+#define fl_realloc realloc
+
+////////////////////////////////////////////////////////////////
+// Drawing functions. Only usable inside an Fl_Free object?
+
+#if 0
+inline void fl_drw_box(Fl_Boxtype b,int x,int y,int w,int h,Fl_Color bgc,int=3) {
+ b->draw(x,y,w,h,bgc);}
+inline void fl_drw_frame(Fl_Boxtype b,int x,int y,int w,int h,Fl_Color bgc,int=3) {
+ b->draw(x,y,w,h,bgc,FL_FRAME_ONLY);}
+#endif
+
+inline void fl_drw_text(Fl_Align align, int x, int y, int w, int h,
+ Fl_Color fgcolor, int size, Fl_Font style,
+ const char* s) {
+ fl_font(style,size);
+ fl_color(fgcolor);
+ fl_draw(s,x,y,w,h,align);
+}
+
+// this does not work except for CENTER...
+inline void fl_drw_text_beside(Fl_Align align, int x, int y, int w, int h,
+ Fl_Color fgcolor, int size, Fl_Font style,
+ const char* s) {
+ fl_font(style,size);
+ fl_color(fgcolor);
+ fl_draw(s,x,y,w,h,align);
+}
+
+//inline void fl_set_font_name(Fl_Font n,const char* s) {fl_set_font(n,s);}
+
+inline void fl_mapcolor(Fl_Color c, uchar r, uchar g, uchar b) {
+ fl_set_color(c,fl_rgb(r,g,b));}
+#define fl_set_clipping(x,y,w,h) fl_clip(x,y,w,h)
+#define fl_unset_clipping() fl_pop_clip()
+
+////////////////////////////////////////////////////////////////
+// Forms classes:
+
+inline Fl_Widget* fl_add_new(Fl_Widget* p) {return p;}
+inline Fl_Widget* fl_add_new(uchar t,Fl_Widget* p) {p->type(t); return p;}
+
+#define forms_constructor(type,name) \
+inline type* name(uchar t,int x,int y,int w,int h,const char* l) { \
+ return (type*)(fl_add_new(t, new type(x,y,w,h,l)));}
+#define forms_constructort(type,name) \
+inline type* name(uchar t,int x,int y,int w,int h,const char* l) { \
+ return (type*)(fl_add_new(new type(t,x,y,w,h,l)));}
+#define forms_constructorb(type,name) \
+inline type* name(Fl_Boxtype t,int x,int y,int w,int h,const char* l) { \
+ return (type*)(fl_add_new(new type(t,x,y,w,h,l)));}
+
+#include "Fl_FormsBitmap.h"
+#define FL_NORMAL_BITMAP FL_NO_BOX
+forms_constructorb(Fl_FormsBitmap, fl_add_bitmap)
+inline void fl_set_bitmap_data(Fl_Widget* o, int w, int h, const uchar* b) {
+ ((Fl_FormsBitmap*)o)->set(w,h,b);
+}
+
+#include "Fl_FormsPixmap.h"
+#define FL_NORMAL_PIXMAP FL_NO_BOX
+forms_constructorb(Fl_FormsPixmap, fl_add_pixmap)
+inline void fl_set_pixmap_data(Fl_Widget* o, char*const* b) {
+ ((Fl_FormsPixmap*)o)->set(b);
+}
+//inline void fl_set_pixmap_file(Fl_Widget*, const char*);
+inline void fl_set_pixmap_align(Fl_Widget* o,Fl_Align a,int,int) { o->clear_flag(FL_ALIGN_MASK); o->set_flag(a);}
+//inline void fl_set_pixmap_colorcloseness(int, int, int);
+
+#include <fltk/Fl_Box.h>
+forms_constructorb(Fl_Box, fl_add_box)
+
+#include <fltk/Fl_Browser.h>
+forms_constructor(Fl_Browser, fl_add_browser)
+
+inline void fl_clear_browser(Fl_Widget* o) {
+ ((Fl_Browser*)o)->clear();}
+inline void fl_add_browser_line(Fl_Widget* o, const char* s) {
+ ((Fl_Browser*)o)->add(s);}
+inline void fl_addto_browser(Fl_Widget* o, const char* s) {
+ ((Fl_Browser*)o)->add(s);} /* should also scroll to bottom */
+//inline void fl_addto_browser_chars(Fl_Widget*, const char*)
+//#define fl_append_browser fl_addto_browser_chars
+inline void fl_insert_browser_line(Fl_Widget* o, int n, const char* s) {
+ ((Fl_Browser*)o)->insert(n,s);}
+inline void fl_delete_browser_line(Fl_Widget* o, int n) {
+ ((Fl_Browser*)o)->remove(n);}
+inline void fl_replace_browser_line(Fl_Widget* o, int n, const char* s) {
+ ((Fl_Browser*)o)->replace(n,s);}
+inline char* fl_get_browser_line(Fl_Widget* o, int n) {
+ return (char*)(((Fl_Browser*)o)->text(n));}
+FL_FORMS_API int fl_load_browser(Fl_Widget* o, const char* f);
+inline void fl_select_browser_line(Fl_Widget* o, int n) {
+ ((Fl_Browser*)o)->select(n,1);}
+inline void fl_deselect_browser_line(Fl_Widget* o, int n) {
+ ((Fl_Browser*)o)->select(n,0);}
+inline void fl_deselect_browser(Fl_Widget* o) {
+ ((Fl_Browser*)o)->deselect();}
+inline int fl_isselected_browser_line(Fl_Widget* o, int n) {
+ return ((Fl_Browser*)o)->selected(n);}
+inline int fl_get_browser_topline(Fl_Widget* o) {
+ return ((Fl_Browser*)o)->topline();}
+inline int fl_get_browser(Fl_Widget* o) {
+ return ((Fl_Browser*)o)->value();}
+inline int fl_get_browser_maxline(Fl_Widget* o) {
+ return ((Fl_Browser*)o)->size();}
+//linline int fl_get_browser_screenlines(Fl_Widget*);
+inline void fl_set_browser_topline(Fl_Widget* o, int n) {
+ ((Fl_Browser*)o)->topline(n);}
+inline void fl_set_browser_fontsize(Fl_Widget* o, int s) {
+ ((Fl_Browser*)o)->text_size(s);}
+inline void fl_set_browser_fontstyle(Fl_Widget* o, int s) {
+ ((Fl_Browser*)o)->text_font(fl_fonts+s);}
+inline void fl_set_browser_specialkey(Fl_Widget* o, char c) {
+ ((Fl_Browser*)o)->format_char(c);}
+//inline void fl_set_browser_vscrollbar(Fl_Widget*, int);
+//inline void fl_set_browser_hscrollbar(Fl_Widget*, int);
+//inline void fl_set_browser_leftslider(Fl_Widget*, int);
+//#define fl_set_browser_leftscrollbar fl_set_browser_leftslider
+//inline void fl_set_browser_line_selectable(Fl_Widget*, int, int);
+//inline void fl_get_browser_dimension(Fl_Widget*,int*,int*,int*,int*);
+//inline void fl_set_browser_dblclick_callback(Fl_Widget*,FL_CALLBACKPTR,long);
+//inline void fl_set_browser_xoffset(Fl_Widget*, FL_Coord);
+//inline void fl_set_browser_scrollbarsize(Fl_Widget*, int, int);
+inline void fl_setdisplayed_browser_line(Fl_Widget* o, int n, int i) {
+ ((Fl_Browser*)o)->display(n,i);}
+inline int fl_isdisplayed_browser_line(Fl_Widget* o, int n) {
+ return ((Fl_Browser*)o)->displayed(n);}
+
+#include <fltk/Fl_Button.h>
+
+#define FL_NORMAL_BUTTON 0
+//#define FL_HIDDEN_BUTTON
+#define FL_TOUCH_BUTTON 4
+#define FL_INOUT_BUTTON 5
+#define FL_RETURN_BUTTON 6
+#define FL_HIDDEN_RET_BUTTON 7
+#define FL_PUSH_BUTTON FL_TOGGLE_BUTTON
+#define FL_MENU_BUTTON 9
+
+extern FL_FORMS_API int fl_old_shortcut(const char*);
+
+FL_FORMS_API Fl_Button* fl_add_button(uchar t,int x,int y,int w,int h,const char* l);
+inline int fl_get_button(Fl_Widget* b) {return ((Fl_Button*)b)->value();}
+inline void fl_set_button(Fl_Widget* b, int v) {((Fl_Button*)b)->value(v);}
+inline int fl_get_button_numb(Fl_Widget*) {return Fl::event_button();}
+inline void fl_set_object_shortcut(Fl_Widget* b, const char* s, int=0) {
+ b->shortcut(fl_old_shortcut(s));}
+#define fl_set_button_shortcut fl_set_object_shortcut
+
+#include <fltk/Fl_Light_Button.h>
+forms_constructor(Fl_Light_Button, fl_add_lightbutton)
+
+#include <fltk/Fl_Round_Button.h>
+forms_constructor(Fl_Round_Button, fl_add_roundbutton)
+forms_constructor(Fl_Round_Button, fl_add_round3dbutton)
+
+#include <fltk/Fl_Check_Button.h>
+forms_constructor(Fl_Check_Button, fl_add_checkbutton)
+
+inline Fl_Widget* fl_add_bitmapbutton(int t,int x,int y,int w,int h,const char* l) {Fl_Widget* o = fl_add_button(t,x,y,w,h,l); return o;}
+inline void fl_set_bitmapbutton_data(Fl_Widget* o,int a,int b,uchar* c) {
+ (new Fl_Bitmap(c,a,b))->label(o);} // does not delete old Fl_Bitmap!
+
+inline Fl_Widget* fl_add_pixmapbutton(int t,int x,int y,int w,int h,const char* l) {Fl_Widget* o = fl_add_button(t,x,y,w,h,l); return o;}
+inline void fl_set_pixmapbutton_data(Fl_Widget* o, const char*const* c) {
+ (new Fl_Pixmap(c))->label(o);} // does not delete old Fl_Pixmap!
+
+// Fl_Canvas object not yet implemented!
+
+#include "Fl_Chart.h"
+
+forms_constructor(Fl_Chart, fl_add_chart)
+inline void fl_clear_chart(Fl_Widget* o) {
+ ((Fl_Chart*)o)->clear();}
+inline void fl_add_chart_value(Fl_Widget* o,double v,const char* s,uchar c){
+ ((Fl_Chart*)o)->add(v,s,c);}
+inline void fl_insert_chart_value(Fl_Widget* o, int i, double v, const char* s, uchar c) {
+ ((Fl_Chart*)o)->insert(i,v,s,c);}
+inline void fl_replace_chart_value(Fl_Widget* o, int i, double v, const char* s, uchar c) {
+ ((Fl_Chart*)o)->replace(i,v,s,c);}
+inline void fl_set_chart_bounds(Fl_Widget* o, double a, double b) {
+ ((Fl_Chart*)o)->bounds(a,b);}
+inline void fl_set_chart_maxnumb(Fl_Widget* o, int v) {
+ ((Fl_Chart*)o)->maxsize(v);}
+inline void fl_set_chart_autosize(Fl_Widget* o, int v) {
+ ((Fl_Chart*)o)->autosize(v);}
+inline void fl_set_chart_lstyle(Fl_Widget* o, Fl_Font v) {
+ ((Fl_Chart*)o)->text_font(v);}
+inline void fl_set_chart_lsize(Fl_Widget* o, int v) {
+ ((Fl_Chart*)o)->text_size(v);}
+inline void fl_set_chart_lcolor(Fl_Widget* o, unsigned v) {
+ ((Fl_Chart*)o)->text_color((Fl_Color)v);}
+#define fl_set_chart_lcol fl_set_chart_lcolor
+
+#include <fltk/Fl_Choice.h>
+
+#define FL_NORMAL_CHOICE 0
+#define FL_NORMAL_CHOICE2 0
+#define FL_DROPLIST_CHOICE 0
+
+forms_constructor(Fl_Choice, fl_add_choice)
+inline void fl_clear_choice(Fl_Widget* o) {
+ ((Fl_Choice*)o)->clear();}
+inline void fl_addto_choice(Fl_Widget* o, const char* s) {
+ ((Fl_Choice*)o)->add(s);}
+inline void fl_replace_choice(Fl_Widget* o, int i, const char* s) {
+ ((Fl_Choice*)o)->replace(i-1,s);}
+inline void fl_delete_choice(Fl_Widget* o, int i) {
+ ((Fl_Choice*)o)->remove(i-1);}
+inline void fl_set_choice(Fl_Widget* o, int i) {
+ ((Fl_Choice*)o)->value(i-1);}
+// inline void fl_set_choice_text(Fl_Widget*, const char*);
+inline int fl_get_choice(Fl_Widget* o) {
+ return ((Fl_Choice*)o)->value()+1;}
+// inline const char* fl_get_choice_item_text(Fl_Widget*, int);
+// inline int fl_get_choice_maxitems(Fl_Widget*);
+inline const char* fl_get_choice_text(Fl_Widget* o) {
+ return ((Fl_Choice*)o)->text();}
+inline void fl_set_choice_fontsize(Fl_Widget* o, int x) {
+ ((Fl_Choice*)o)->text_size(x);}
+inline void fl_set_choice_fontstyle(Fl_Widget* o, Fl_Font x) {
+ ((Fl_Choice*)o)->text_font(x);}
+// inline void fl_set_choice_item_mode(Fl_Widget*, int, unsigned);
+// inline void fl_set_choice_item_shortcut(Fl_Widget*, int, const char*);
+
+#include <fltk/Fl_Clock.h>
+forms_constructor(Fl_Clock, fl_add_clock)
+inline void fl_get_clock(Fl_Widget* o, int* h, int* m, int* s) {
+ *h = ((Fl_Clock*)o)->hour();
+ *m = ((Fl_Clock*)o)->minute();
+ *s = ((Fl_Clock*)o)->second();
+}
+
+#include <fltk/Fl_Counter.h>
+forms_constructor(Fl_Counter, fl_add_counter)
+inline void fl_set_counter_value(Fl_Widget* o, double v) {
+ ((Fl_Counter*)o)->value(v);}
+inline void fl_set_counter_bounds(Fl_Widget* o, double a, double b) {
+ ((Fl_Counter*)o)->range(a,b);}
+inline void fl_set_counter_step(Fl_Widget* o, double a, double b) {
+ ((Fl_Counter*)o)->step(a / b);}
+inline void fl_set_counter_precision(Fl_Widget* o, int v) {
+// ((Fl_Counter*)o)->precision(v);}
+ ((Fl_Counter*)o)->step(1/(10^v));}
+inline void fl_set_counter_return(Fl_Widget* o, int v) {
+ ((Fl_Counter*)o)->when(v|FL_WHEN_RELEASE);}
+inline double fl_get_counter_value(Fl_Widget* o) {
+ return ((Fl_Counter*)o)->value();}
+inline void fl_get_counter_bounds(Fl_Widget* o, float* a, float* b) {
+ *a = float(((Fl_Counter*)o)->minimum());
+ *b = float(((Fl_Counter*)o)->maximum());
+}
+//inline void fl_set_counter_filter(Fl_Widget*,const char* (*)(Fl_Widget*,double,int));
+
+// Cursor stuff cannot be emulated because it uses X stuff
+inline void fl_set_cursor(Fl_Window* w, Fl_Cursor c) {w->cursor(c);}
+#define FL_INVISIBLE_CURSOR FL_CURSOR_NONE
+#define FL_DEFAULT_CURSOR FL_CURSOR_DEFAULT
+
+#include <fltk/Fl_Dial.h>
+
+#define FL_DIAL_COL1 FL_GRAY
+#define FL_DIAL_COL2 37
+
+forms_constructor(Fl_Dial, fl_add_dial)
+inline void fl_set_dial_value(Fl_Widget* o, double v) {
+ ((Fl_Dial*)o)->value(v);}
+inline double fl_get_dial_value(Fl_Widget* o) {
+ return ((Fl_Dial*)o)->value();}
+inline void fl_set_dial_bounds(Fl_Widget* o, double a, double b) {
+ ((Fl_Dial*)o)->range(a, b);}
+inline void fl_get_dial_bounds(Fl_Widget* o, float* a, float* b) {
+ *a = float(((Fl_Dial*)o)->minimum());
+ *b = float(((Fl_Dial*)o)->maximum());
+}
+inline void fl_set_dial_return(Fl_Widget* o, int i) {
+ ((Fl_Dial*)o)->when(i|FL_WHEN_RELEASE);}
+inline void fl_set_dial_angles(Fl_Widget* o, int a, int b) {
+ ((Fl_Dial*)o)->angles(a, b);}
+//inline void fl_set_dial_cross(Fl_Widget* o, int);
+// inline void fl_set_dial_direction(Fl_Widget* o, uchar d) {
+// ((Fl_Dial*)o)->direction(d);}
+inline void fl_set_dial_step(Fl_Widget* o, double v) {
+ ((Fl_Dial*)o)->step(v);}
+
+// Frames:
+
+inline Fl_Widget* fl_add_frame(Fl_Boxtype i,int x,int y,int w,int h,const char* l) {
+ return fl_add_box(i,x-3,y-3,w+6,h+6,l);}
+
+// labelframe nyi
+inline Fl_Widget* fl_add_labelframe(Fl_Boxtype i,int x,int y,int w,int h,const char* l) {
+ Fl_Widget* o = fl_add_box(i,x-3,y-3,w+6,h+6,l);
+ o->clear_flag(FL_ALIGN_MASK);
+ o->set_flag(FL_ALIGN_TOP | FL_ALIGN_LEFT);
+ return o;
+}
+
+#include "Fl_Free.h"
+inline Fl_Free*
+fl_add_free(int t,double x,double y,double w,double h,const char* l,
+ FL_HANDLEPTR hdl) {
+ return (Fl_Free*)(fl_add_new(
+ new Fl_Free(t,int(x),int(y),int(w),int(h),l,hdl)));
+}
+
+#include <fltk/fl_ask.h>
+#include <fltk/fl_show_colormap.h>
+
+inline int fl_show_question(const char* c, int = 0) {return fl_ask(c);}
+FL_FORMS_API void fl_show_message(const char *,const char *,const char *);
+FL_FORMS_API void fl_show_alert(const char *,const char *,const char *,int=0);
+FL_FORMS_API int fl_show_question(const char *,const char *,const char *);
+inline const char *fl_show_input(const char *l,const char*d=0) {return fl_input(l,d);}
+/*const*/ char *fl_show_simple_input(const char *label, const char *deflt = 0);
+int fl_show_choice(
+ const char *m1,
+ const char *m2,
+ const char *m3,
+ int numb,
+ const char *b0,
+ const char *b1,
+ const char *b2);
+
+inline void fl_set_goodies_font(int a, unsigned b) {
+ fl_message_style->label_font = fl_fonts+a;
+ fl_message_style->label_size = b;
+}
+#define fl_show_messages fl_message
+inline int fl_show_choices(const char* c,int n,const char* b1,const char* b2,
+ const char* b3, int) {
+ return fl_show_choice(0,c,0,n,b1,b2,b3);
+}
+
+#include <fltk/filename.h>
+#include <fltk/fl_file_chooser.h>
+inline int do_matching(char* a, const char* b) {return filename_match(a,b);}
+
+// Forms-compatable file chooser (implementation in fselect.C):
+FL_FORMS_API char* fl_show_file_selector(const char* message,const char* dir,
+ const char* pat,const char* fname);
+FL_FORMS_API char* fl_get_directory();
+FL_FORMS_API char* fl_get_pattern();
+FL_FORMS_API char* fl_get_filename();
+
+#include <fltk/Fl_Input.h>
+forms_constructor(Fl_Input, fl_add_input)
+inline void fl_set_input(Fl_Widget* o, const char* v) {
+ ((Fl_Input*)o)->value(v);}
+inline void fl_set_input_return(Fl_Widget* o, int x) {
+ ((Fl_Input*)o)->when(x | FL_WHEN_RELEASE);}
+inline void fl_set_input_color(Fl_Widget* o, unsigned a, unsigned /*b*/) {
+ ((Fl_Input*)o)->text_color((Fl_Color)a);
+// ((Fl_Input*)o)->cursor_color((Fl_Color)b);
+}
+// inline void fl_set_input_scroll(Fl_Widget*, int);
+inline void fl_set_input_cursorpos(Fl_Widget* o, int x, int /*y*/) {
+ ((Fl_Input*)o)->position(x);}
+// inline void fl_set_input_selected(Fl_Widget*, int);
+// inline void fl_set_input_selected_range(Fl_Widget*, int, int);
+// inline void fl_set_input_maxchars(Fl_Widget*, int);
+// inline void fl_set_input_format(Fl_Widget*, int, int);
+// inline void fl_set_input_hscrollbar(Fl_Widget*, int);
+// inline void fl_set_input_vscrollbar(Fl_Widget*, int);
+// inline void fl_set_input_xoffset(Fl_Widget*, int);
+// inline void fl_set_input_topline(Fl_Widget*, int);
+// inline void fl_set_input_scrollbarsize(Fl_Widget*, int, int);
+// inline int fl_get_input_topline(Fl_Widget*);
+// inline int fl_get_input_screenlines(Fl_Widget*);
+inline int fl_get_input_cursorpos(Fl_Widget* o, int*x, int*y) {
+ *x = ((Fl_Input*)o)->position(); *y = 0; return *x;}
+// inline int fl_get_input_numberoflines(Fl_Widget*);
+// inline void fl_get_input_format(Fl_Widget*, int*, int*);
+inline const char* fl_get_input(Fl_Widget* o) {return ((Fl_Input*)o)->value();}
+
+#include <fltk/Fl_Menu_Button.h>
+
+// types are not implemented, they all act like FL_PUSH_MENU:
+#define FL_TOUCH_MENU 0
+#define FL_PUSH_MENU 1
+#define FL_PULLDOWN_MENU 2
+forms_constructor(Fl_Menu_Button, fl_add_menu)
+
+inline void fl_clear_menu(Fl_Widget* o) {
+ ((Fl_Menu_Button*)o)->clear();}
+inline void fl_set_menu(Fl_Widget* o, const char* s) {
+ ((Fl_Menu_Button*)o)->clear(); ((Fl_Menu_Button*)o)->add(s);}
+inline void fl_addto_menu(Fl_Widget* o, const char* s) {
+ ((Fl_Menu_Button*)o)->add(s);}
+inline void fl_replace_menu_item(Fl_Widget* o, int i, const char* s) {
+ ((Fl_Menu_Button*)o)->replace(i-1,s);}
+inline void fl_delete_menu_item(Fl_Widget* o, int i) {
+ ((Fl_Menu_Button*)o)->remove(i-1);}
+inline void fl_set_menu_item_shortcut(Fl_Widget* o, int i, const char* s) {
+ ((Fl_Menu_Button*)o)->shortcut(i-1,fl_old_shortcut(s));}
+// inline void fl_set_menu_item_mode(Fl_Widget* o, int i, long x) {
+// ((Fl_Menu_Button*)o)->mode(i-1,x);}
+inline void fl_show_menu_symbol(Fl_Widget*, int ) {
+/* ((Fl_Menu_Button*)o)->show_menu_symbol(i); */}
+// inline void fl_set_menu_popup(Fl_Widget*, int);
+inline int fl_get_menu(Fl_Widget* o) {
+ return ((Fl_Menu_Button*)o)->value()+1;}
+inline const char* fl_get_menu_item_text(Fl_Widget* o, int i) {
+ return ((Fl_Menu_Button*)o)->text(i);}
+inline int fl_get_menu_maxitems(Fl_Widget* o) {
+ return ((Fl_Menu_Button*)o)->size();}
+inline int fl_get_menu_item_mode(Fl_Widget* o, int i) {
+ return ((Fl_Menu_Button*)o)->mode(i);}
+inline const char* fl_get_menu_text(Fl_Widget* o) {
+ return ((Fl_Menu_Button*)o)->text();}
+
+#include "Fl_Positioner.h"
+#define FL_NORMAL_POSITIONER 0
+forms_constructor(Fl_Positioner, fl_add_positioner)
+inline void fl_set_positioner_xvalue(Fl_Widget* o, double v) {
+ ((Fl_Positioner*)o)->xvalue(v);}
+inline double fl_get_positioner_xvalue(Fl_Widget* o) {
+ return ((Fl_Positioner*)o)->xvalue();}
+inline void fl_set_positioner_xbounds(Fl_Widget* o, double a, double b) {
+ ((Fl_Positioner*)o)->xbounds(a,b);}
+inline void fl_get_positioner_xbounds(Fl_Widget* o, float* a, float* b) {
+ *a = float(((Fl_Positioner*)o)->xminimum());
+ *b = float(((Fl_Positioner*)o)->xmaximum());
+}
+inline void fl_set_positioner_yvalue(Fl_Widget* o, double v) {
+ ((Fl_Positioner*)o)->yvalue(v);}
+inline double fl_get_positioner_yvalue(Fl_Widget* o) {
+ return ((Fl_Positioner*)o)->yvalue();}
+inline void fl_set_positioner_ybounds(Fl_Widget* o, double a, double b) {
+ ((Fl_Positioner*)o)->ybounds(a,b);}
+inline void fl_get_positioner_ybounds(Fl_Widget* o, float* a, float* b) {
+ *a = float(((Fl_Positioner*)o)->yminimum());
+ *b = float(((Fl_Positioner*)o)->ymaximum());
+}
+inline void fl_set_positioner_xstep(Fl_Widget* o, double v) {
+ ((Fl_Positioner*)o)->xstep(v);}
+inline void fl_set_positioner_ystep(Fl_Widget* o, double v) {
+ ((Fl_Positioner*)o)->ystep(v);}
+inline void fl_set_positioner_return(Fl_Widget* o, int v) {
+ ((Fl_Positioner*)o)->when(v|FL_WHEN_RELEASE);}
+
+#include <fltk/Fl_Slider.h>
+
+#define FL_HOR_BROWSER_SLIDER FL_HOR_SLIDER
+#define FL_VERT_BROWSER_SLIDER FL_VERT_SLIDER
+
+forms_constructor(Fl_Slider, fl_add_slider)
+#define FL_SLIDER_COL1 FL_GRAY
+inline void fl_set_slider_value(Fl_Widget* o, double v) {
+ ((Fl_Slider*)o)->value(v);}
+inline double fl_get_slider_value(Fl_Widget* o) {
+ return ((Fl_Slider*)o)->value();}
+inline void fl_set_slider_bounds(Fl_Widget* o, double a, double b) {
+ ((Fl_Slider*)o)->range(a, b);}
+inline void fl_get_slider_bounds(Fl_Widget* o, float* a, float* b) {
+ *a = float(((Fl_Slider*)o)->minimum());
+ *b = float(((Fl_Slider*)o)->maximum());
+}
+inline void fl_set_slider_return(Fl_Widget* o, int i) {
+ ((Fl_Slider*)o)->when(i|FL_WHEN_RELEASE);}
+inline void fl_set_slider_step(Fl_Widget* o, double v) {
+ ((Fl_Slider*)o)->step(v);}
+// inline void fl_set_slider_increment(Fl_Widget* o, double v, double);
+inline void fl_set_slider_size(Fl_Widget* o, double v) {
+ ((Fl_Slider*)o)->slider_size(v);}
+
+#include <fltk/Fl_Value_Slider.h>
+forms_constructor(Fl_Value_Slider, fl_add_valslider)
+
+inline void fl_set_slider_precision(Fl_Widget* o, int i) {
+ double v = 1.0;
+ while (i--) v /= 10.0;
+ ((Fl_Value_Slider*)o)->step(v);
+}
+
+// The forms text object was the same as an Fl_Box except it inverted the
+// meaning of FL_ALIGN_INSIDE. Implementation in forms.C
+class FL_FORMS_API Fl_FormsText : public Fl_Widget {
+protected:
+ void draw();
+public:
+ Fl_FormsText(Fl_Boxtype b, int x, int y, int w, int h, const char* l=0)
+ : Fl_Widget(x,y,w,h,l) {box(b); clear_flag(FL_ALIGN_MASK); set_flag(FL_ALIGN_LEFT);}
+};
+#define FL_NORMAL_TEXT FL_NO_BOX
+forms_constructorb(Fl_FormsText, fl_add_text)
+
+#include "Fl_Timer.h"
+forms_constructort(Fl_Timer, fl_add_timer)
+inline void fl_set_timer(Fl_Widget* o, double v) {((Fl_Timer*)o)->value(v);}
+inline double fl_get_timer(Fl_Widget* o) {return ((Fl_Timer*)o)->value();}
+inline void fl_suspend_timer(Fl_Widget* o) {((Fl_Timer*)o)->suspended(1);}
+inline void fl_resume_timer(Fl_Widget* o) {((Fl_Timer*)o)->suspended(0);}
+inline void fl_set_timer_countup(Fl_Widget* o,char d) {((Fl_Timer*)o)->direction(d);}
+FL_FORMS_API void fl_gettime(long* sec, long* usec);
+
+// Fl_XYPlot nyi
+
+
+// stuff from DDForms:
+
+inline int fl_double_click() {return Fl::event_clicks();}
+inline void fl_draw() {Fl::flush();}
+
+#endif /* define __FORMS_H__ */
+
+//
+// End of "$Id: forms.H 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/compat/FL/gl.h b/fltk/fltk/compat/FL/gl.h
new file mode 100644
index 0000000..b6cba63
--- /dev/null
+++ b/fltk/fltk/compat/FL/gl.h
@@ -0,0 +1,19 @@
+#ifndef FL_gl_H
+#define FL_gl_H
+
+#include <fltk/gl.h>
+
+#define gl_start fltk::glstart
+#define gl_finish fltk::glfinish
+#define gl_color fltk::glsetcolor
+#define gl_rect fltk::glstrokerect
+#define gl_rectf fltk::glfillrect
+#define gl_font fltk::glsetfont
+inline float gl_height() {return fltk::glgetascent()+fltk::glgetdescent();}
+#define gl_descent fltk::glgetdescent
+#define gl_width fltk::glgetwidth
+#define gl_draw fltk::gldrawtext
+//void gl_measure(const char*, int& x, int& y);
+#define gl_draw_image fltk::gldrawimage
+
+#endif // !FL_gl_H
diff --git a/fltk/fltk/compat/FL/glut.H b/fltk/fltk/compat/FL/glut.H
new file mode 100644
index 0000000..9545e9a
--- /dev/null
+++ b/fltk/fltk/compat/FL/glut.H
@@ -0,0 +1,2 @@
+#include "Fl_Widget.H"
+#include <fltk/glut.h>
diff --git a/fltk/fltk/compat/FL/math.h b/fltk/fltk/compat/FL/math.h
new file mode 100644
index 0000000..5353cc0
--- /dev/null
+++ b/fltk/fltk/compat/FL/math.h
@@ -0,0 +1 @@
+#include <fltk/math.h>
diff --git a/fltk/fltk/compat/FL/menubar.h b/fltk/fltk/compat/FL/menubar.h
new file mode 100644
index 0000000..83b3af8
--- /dev/null
+++ b/fltk/fltk/compat/FL/menubar.h
@@ -0,0 +1,65 @@
+// This is an additional header file for "DDForms", which was our internal
+// enhancement of Forms. This defines the precursor of the Fl_Menu class.
+//
+// Unfortunately it defined the callbacks as taking a long rather
+// than a void* argument, requiring some dubious casts to emulate it:
+
+#include "Fl_Menu_Bar.h"
+
+struct FL_API MenuEntry {
+ const char *text; /*initial character indicates "type", 0 = end of menu*/
+ ulong bind; /* key binding in forms format (#x, etc) */
+ void (*cb)(Fl_Widget *,long); /* callback */
+ long data; /* value for callback */
+ int flags; /* see below for flags */
+ uchar labeltype;
+ uchar labelfont;
+ uchar labelsize;
+ uchar labelcolor;
+};
+
+#define CHECKED FL_MENU_CHECK
+#define UNCHECKED FL_MENU_BOX
+#define DISABLED FL_MENU_INACTIVE
+
+/* Turn a box into a menu bar: */
+inline void MenuBar(Fl_Widget *o,MenuEntry *m) {
+ Fl_Menu_Bar *mb = new Fl_Menu_Bar(o->x(),o->y(),o->w(),o->h());
+ mb->menu((Fl_Menu_Item*)m);
+ mb->box(0);
+ Fl_Group *g = (Fl_Group *)(o->parent());
+ int i = g->find(*o);
+ g->insert(*mb, i<g->children()-1 ? g->child(i+1) : 0);
+}
+
+/* advance to the Nth item in menu, skipping submenus: */
+inline MenuEntry *MenuGetEntry(MenuEntry *m,int i) {
+ return (MenuEntry*)(((Fl_Menu_Item*)m)->next(i));
+}
+
+/* Init the shortcuts for a widget with a popup menu: */
+inline void MenuSetShortcuts(Fl_Widget *, MenuEntry *) {}
+
+inline void MenuAdd(
+ MenuEntry m[],
+ int, /* number of entries in menutable, ignored here */
+ const char *text,
+ const char *bind,
+ void (*cb)(Fl_Widget *,long),
+ long data,
+ int flags) {
+ ((Fl_Menu_Item*)m)->add(text,bind,(Fl_Callback*)cb,(void *)data,flags);
+}
+
+inline MenuEntry *MenuPopup(Fl_Widget *o,const char *title,MenuEntry *m,
+ int x, int y) {
+ const Fl_Menu_Item* v = ((Fl_Menu_Item*)m)->popup(x,y,title);
+ if (v && v->callback_) v->do_callback(o);
+ return (MenuEntry *)v;
+}
+
+inline MenuEntry *MenuHandleShortcut(Fl_Widget *o,MenuEntry *m,char) {
+ const Fl_Menu_Item* v = ((Fl_Menu_Item*)m)->test_shortcut();
+ if (v && v->callback_) v->do_callback(o);
+ return (MenuEntry *)v;
+}
diff --git a/fltk/fltk/compat/FL/x.H b/fltk/fltk/compat/FL/x.H
new file mode 100644
index 0000000..3278a21
--- /dev/null
+++ b/fltk/fltk/compat/FL/x.H
@@ -0,0 +1,24 @@
+// This emulation header was designed to get flwm to compile. It
+// probably does not work for any other x fltk program.
+
+#ifndef Fl_X_H
+#define Fl_X_H
+
+#include "Enumerations.H"
+#include <fltk/x.h>
+
+#define Fl_X fltk::CreatedWindow
+#define fl_display fltk::xdisplay
+#define fl_screen fltk::xscreen
+#define fl_xevent (&fltk::xevent)
+#define fl_colormap fltk::xcolormap
+#define fl_open_display fltk::open_display
+#define fl_visual fltk::xvisual
+#define fl_xid(w) fltk::xid(w)
+#define fl_event_time fltk::event_time
+#define fl_xpixel(x) fltk::xpixel(x)
+#define fl_window fltk::xwindow
+#define fl_gc fltk::gc
+#define fl_xfont fltk::xfont()
+
+#endif
diff --git a/fltk/fltk/damage.h b/fltk/fltk/damage.h
new file mode 100644
index 0000000..af1acc8
--- /dev/null
+++ b/fltk/fltk/damage.h
@@ -0,0 +1,52 @@
+#ifndef fltk_damage_h
+#define fltk_damage_h
+
+namespace fltk {
+
+/*!
+ Values of the bits stored in Widget::damage().
+
+ When redrawing your widgets you should look at the damage bits to
+ see what parts of your widget need redrawing. The Widget::handle()
+ method can then set individual damage bits to limit the amount of
+ drawing that needs to be done, and the Widget::draw() method can
+ test these bits to decide what to draw:
+
+\code
+MyClass::handle(int event) {
+ ...
+ if (change_to_part1) damage(1);
+ if (change_to_part2) damage(2);
+ if (change_to_part3) damage(4);
+}
+
+MyClass::draw() {
+ if (damage() & fltk::DAMAGE_ALL) {
+ ... draw frame/box and other static stuff ...
+ }
+ if (damage() & (fltk::DAMAGE_ALL | 1)) draw_part1();
+ if (damage() & (fltk::DAMAGE_ALL | 2)) draw_part2();
+ if (damage() & (fltk::DAMAGE_ALL | 4)) draw_part3();
+}
+\endcode
+
+ Except for DAMAGE_ALL, each widget is allowed to assign any meaning
+ to any of the bits it wants. The enumerations are just to provide
+ suggested meanings.
+*/
+enum {
+ DAMAGE_VALUE = 0x01,
+ DAMAGE_PUSHED = 0x02,
+ DAMAGE_SCROLL = 0x04,
+ DAMAGE_OVERLAY = 0x04, // reused value
+ DAMAGE_HIGHLIGHT = 0x08,
+ DAMAGE_CHILD = 0x10,
+ DAMAGE_CHILD_LABEL = 0x20,
+ DAMAGE_EXPOSE = 0x40,
+ DAMAGE_CONTENTS = 0x40, // reused value
+ DAMAGE_ALL = 0x80
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/dirent.h b/fltk/fltk/dirent.h
new file mode 100644
index 0000000..3e03e61
--- /dev/null
+++ b/fltk/fltk/dirent.h
@@ -0,0 +1,31 @@
+//
+// "$Id: dirent.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Directory header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+/* this file is for back-compatability only */
+#include "filename.h"
+
+//
+// End of "$Id: dirent.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/draw.h b/fltk/fltk/draw.h
new file mode 100644
index 0000000..e01a8e1
--- /dev/null
+++ b/fltk/fltk/draw.h
@@ -0,0 +1,223 @@
+// "$Id: draw.h 6233 2008-09-14 07:54:06Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+/*
+ The FLTK drawing library, used by all widgets to draw themselves.
+
+ These functions can only be called when FLTK is setup to draw
+ things. This is only true:
+ - Inside the Widget::draw() virtual function.
+ - Inside the Symbol::draw() virtual function.
+ - After calling Widget::make_current(), before calling wait() or flush().
+ Calling the drawing functions at other times produces undefined results,
+ including crashing.
+*/
+
+#ifndef fltk_draw_h
+#define fltk_draw_h
+
+#include "Flags.h" // for alignment values
+#include "Color.h"
+#include "Rectangle.h"
+#include "PixelType.h"
+
+namespace fltk {
+
+/// \name fltk/draw.h
+//@{
+
+struct Font;
+class Style;
+
+class FL_API GSave {
+ void* data[4]; // hopefully big enough for everybody...
+ public:
+ GSave();
+ ~GSave();
+};
+
+// Transformation
+FL_API void push_matrix();
+FL_API void pop_matrix();
+FL_API void scale(float x, float y);
+FL_API void scale(float x);
+FL_API void translate(float x, float y);
+FL_API void translate(int x, int y);
+FL_API void rotate(float d);
+FL_API void concat(float, float, float, float, float, float);
+FL_API void load_identity();
+
+// get and use transformed positions:
+FL_API void transform(float& x, float& y);
+FL_API void transform_distance(float& x, float& y);
+FL_API void transform(int& x, int& y);
+FL_API void transform(const Rectangle& from, Rectangle& to);
+FL_API void transform(int& x, int& y, int& w, int& h);
+
+// Clipping
+FL_API void push_clip(const Rectangle&);
+//! Same as push_clip(Rectangle(x,y,w,h)) but faster:
+FL_API void push_clip(int X,int Y, int W, int H);
+FL_API void clipout(const Rectangle&);
+FL_API void pop_clip();
+FL_API void push_no_clip();
+FL_API bool not_clipped(const Rectangle&);
+FL_API int intersect_with_clip(Rectangle&);
+
+FL_API void setcolor(Color);
+FL_API void setcolor_alpha(Color, float alpha);
+extern FL_API Color current_color_;
+inline Color getcolor() {return current_color_;}
+
+extern FL_API Color current_bgcolor_;
+inline void setbgcolor(Color c) {current_bgcolor_ = c;}
+inline Color getbgcolor() {return current_bgcolor_;}
+
+extern FL_API const Style* drawstyle_;
+void FL_API drawstyle(const Style* s, Flags);
+inline const Style* drawstyle() {return drawstyle_;}
+
+extern FL_API Flags drawflags_;
+inline void setdrawflags(Flags f) {drawflags_ = f;}
+inline Flags drawflags() {return drawflags_;}
+inline Flags drawflags(Flags f) {return drawflags_ & f;}
+
+// line type:
+FL_API void line_style(int, float width=0, const char* dashes=0);
+enum {
+ SOLID = 0,
+ DASH = 1,
+ DOT = 2,
+ DASHDOT = 3,
+ DASHDOTDOT = 4,
+
+ CAP_FLAT = 0x100,
+ CAP_ROUND = 0x200,
+ CAP_SQUARE = 0x300,
+
+ JOIN_MITER = 0x1000,
+ JOIN_ROUND = 0x2000,
+ JOIN_BEVEL = 0x3000
+};
+extern FL_API int line_style_;
+inline FL_API int line_style() {return line_style_;}
+extern FL_API float line_width_;
+inline FL_API float line_width() {return line_width_;}
+extern FL_API const char* line_dashes_;
+inline FL_API const char* line_dashes() {return line_dashes_;}
+
+// Path construction
+FL_API void newpath();
+FL_API void addvertex(float x, float y);
+FL_API void addvertex(int x, int y);
+FL_API void addvertices(int n, const float v[][2]);
+FL_API void addvertices(int n, const int v[][2]);
+FL_API void addvertices_transformed(int n, const float v[][2]);
+FL_API void addcurve(float,float, float,float, float,float, float,float);
+FL_API void addarc(float x,float y,float w,float h, float a1, float a2);
+FL_API void addpie(const Rectangle& r, float a, float a2);
+FL_API void addchord(const Rectangle& r,float a,float a2);
+FL_API void closepath();
+
+// Shapes and lines
+FL_API void strokepath();
+FL_API void fillpath();
+FL_API void fillstrokepath(Color);
+
+FL_API void fillrect(int, int, int, int);
+inline void fillrect(const Rectangle& r) {fillrect(r.x(),r.y(),r.w(),r.h());}
+FL_API void strokerect(int, int, int, int);
+inline void strokerect(const Rectangle& r) {strokerect(r.x(),r.y(),r.w(),r.h());}
+FL_API void drawline(int x0, int y0, int x1, int y1);
+FL_API void drawline(float x0, float y0, float x1, float y1);
+FL_API void drawpoint(int x, int y);
+FL_API void drawpoint(float x, float y);
+
+// Text
+FL_API void setfont(Font*, float size);
+FL_API void setfont(const char*, float size);
+FL_API void setfont(const char*, int attributes, float size);
+
+// change the encoding used to draw bytes (depreciated)
+extern FL_API const char* encoding_;
+inline const char* get_encoding() {return encoding_;}
+FL_API void set_encoding(const char*);
+
+// information you can get about the current font+size+encoding:
+extern FL_API Font* current_font_;
+extern FL_API float current_size_; // should be 2x2 transformation matrix
+inline Font* getfont() {return current_font_;}
+inline float getsize() {return current_size_;}
+
+// measure things in the current font:
+FL_API float getwidth(const char*);
+FL_API float getwidth(const char*, int length);
+FL_API float getascent();
+FL_API float getdescent();
+
+// draw using current font:
+FL_API void drawtext_transformed(const char*, int n, float x, float y);
+FL_API void drawtext(const char*, float x, float y);
+FL_API void drawtext(const char*, int length, float x, float y);
+
+// the label text formatter:
+FL_API void measure(const char*, int& w, int& h, Flags = 0);
+FL_API void measure(float (*getwidth)(const char*, int),const char*, float& w, float& h, Flags = 0);
+FL_API void drawtext(const char*, const Rectangle&, Flags);
+FL_API void drawtext(void (*textfunction)(const char*,int,float,float),
+ float (*getwidth)(const char*, int),
+ const char* str, const Rectangle& r, Flags flags);
+
+// set where \t characters go in label text formatter:
+extern FL_API const int* column_widths_;
+inline const int* column_widths() {return column_widths_;}
+inline void column_widths(const int* i) {column_widths_ = i;}
+// see also Symbol.h for @-sign commands
+
+// Images
+FL_API void drawimage(const uchar*, PixelType, const Rectangle&);
+FL_API void drawimage(const uchar*, PixelType, const Rectangle&, int linedelta);
+
+typedef const uchar* (*DrawImageCallback)(void* data, int x, int y, int w, uchar* buffer);
+FL_API void drawimage(DrawImageCallback, void*, PixelType, const Rectangle&);
+
+FL_API uchar *readimage(uchar *p, PixelType, const Rectangle&);
+FL_API uchar *readimage(uchar *p, PixelType, const Rectangle&, int linedelta);
+
+FL_API void scrollrect(const Rectangle&, int dx, int dy,
+ void (*draw_area)(void*, const Rectangle&), void*);
+
+#ifndef DOXYGEN /* depreciated: */
+FL_API void drawframe(const char* s, int x, int y, int w, int h);
+FL_API void drawframe2(const char* s, int x, int y, int w, int h);
+FL_API void overlay_rect(int,int,int,int);
+FL_API void overlay_clear();
+#endif
+
+//@}
+
+}
+
+#endif
+
+//
+// End of "$Id: draw.h 6233 2008-09-14 07:54:06Z spitzak $".
+//
diff --git a/fltk/fltk/error.h b/fltk/fltk/error.h
new file mode 100644
index 0000000..6b5d033
--- /dev/null
+++ b/fltk/fltk/error.h
@@ -0,0 +1,24 @@
+/*! \file
+ Functions to report errors and possibly kill the program.
+ You can change these pointers from their default values so that
+ fltk calls your code instead.
+*/
+
+#ifndef fltk_error_h
+#define fltk_error_h
+
+#include "FL_API.h"
+
+namespace fltk {
+
+/// \name fltk/error.h
+//@{
+
+extern FL_API void (*warning)(const char*, ...);
+extern FL_API void (*error)(const char*, ...);
+extern FL_API void (*fatal)(const char*, ...);
+
+//@}
+
+}
+#endif
diff --git a/fltk/fltk/events.h b/fltk/fltk/events.h
new file mode 100644
index 0000000..d1412f0
--- /dev/null
+++ b/fltk/fltk/events.h
@@ -0,0 +1,330 @@
+//
+// "$Id: events.h 6514 2008-11-10 21:10:13Z spitzak $"
+//
+// Event types and data. A Widget::handle() method needs this.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_events_h
+#define fltk_events_h
+
+#include "FL_API.h"
+
+namespace fltk {
+
+/// \name fltk/events.h
+//@{
+
+/*! Numbers passed to Widget::handle() and returned by event(). */
+enum {
+ NO_EVENT = 0,
+ PUSH = 1,
+ RELEASE = 2,
+ ENTER = 3,
+ LEAVE = 4,
+ DRAG = 5,
+ FOCUS = 6,
+ UNFOCUS = 7,
+ KEY = 8,
+ KEYUP = 9,
+ FOCUS_CHANGE = 10,
+ MOVE = 11,
+ SHORTCUT = 12,
+ DEACTIVATE = 13,
+ ACTIVATE = 14,
+ HIDE = 15,
+ SHOW = 16,
+ PASTE = 17,
+ TIMEOUT = 18,
+ MOUSEWHEEL = 19,
+ DND_ENTER = 20,
+ DND_DRAG = 21,
+ DND_LEAVE = 22,
+ DND_RELEASE = 23,
+ TOOLTIP = 24
+};
+
+/*! Values returned by event_key(), passed to event_key_state() and
+ get_key_state(), and used for the low 16 bits of add_shortcut().
+
+ The actual values returned are based on X11 keysym values, though
+ fltk always returns "unshifted" values much like Windows does. A
+ given key always returns the same value no matter what shift keys
+ are held down. Use event_text() to see the results of any shift
+ keys.
+
+ The lowercase letters 'a' through 'z' and the ascii symbols
+ '`', '-', '=', '[', ']', '\\', ',', '.', '/', ';', '\'' and space
+ are used to identify the keys in the main keyboard.
+
+ On X systems unrecognized keys are returned unchanged as their
+ X keysym value. If they have no keysym it uses the scan code
+ or'd with 0x8000, this is what all those blue buttons on a
+ Microsoft keyboard will do. I don't know how to get those
+ buttons on Windows.
+*/
+enum {
+ LeftButton = 1, /*!< PUSH/RELEASE set event_key to this */
+ MiddleButton = 2, /*!< PUSH/RELEASE set event_key to this */
+ RightButton = 3, /*!< PUSH/RELEASE set event_key to this */
+ SpaceKey = 32, /*!< Same as ' ' or 32 */
+ // 'a'-'z', and all punctuation go here in numerical order
+ BackSpaceKey = 0xff08, /*!< Backspace */
+ TabKey = 0xff09, /*!< Tab */
+ ClearKey = 0xff0b, /*!< On some systems with NumLock off '5' produces this */
+ ReturnKey = 0xff0d, /*!< Main Enter key, Windows and X documentation calls this "Return" */
+ PauseKey = 0xff13, /*!< Pause + Break button */
+ ScrollLockKey = 0xff14, /*!< Scroll Lock button */
+ EscapeKey = 0xff1b, /*!< Esc */
+ HomeKey = 0xff50, /*!< Home */
+ LeftKey = 0xff51, /*!< Left */
+ UpKey = 0xff52, /*!< Up arrow */
+ RightKey = 0xff53, /*!< Right arrow */
+ DownKey = 0xff54, /*!< Down arrow */
+ PageUpKey = 0xff55, /*!< Page Up */
+ PageDownKey = 0xff56, /*!< Page Down */
+ EndKey = 0xff57, /*!< End */
+ PrintKey = 0xff61, /*!< Print Scrn key + SysRq key */
+ InsertKey = 0xff63, /*!< Insert */
+ MenuKey = 0xff67, /*!< Key in lower-right with picture of popup menu */
+ HelpKey = 0xff68, /*!< Help key on Macintosh keyboards */
+ NumLockKey = 0xff7f, /*!< NumLock key */
+ Keypad = 0xff80, /*!< Add ASCII to get keypad keys */
+ KeypadEnter = Keypad+'\r', /*!< Keypad+'\\r' */
+ MultiplyKey = Keypad+'*', /*!< Keypad+'*' */
+ AddKey = Keypad+'+', /*!< Keypad+'+' */
+ SubtractKey = Keypad+'-', /*!< Keypad+'-' */
+ DecimalKey = Keypad+'.', /*!< Keypad+'.' */
+ DivideKey = Keypad+'/', /*!< Keypad+'/' */
+ Keypad0 = Keypad+'0', /*!< Keypad+'0' */
+ Keypad1 = Keypad+'1', /*!< Keypad+'1' */
+ Keypad2 = Keypad+'2', /*!< Keypad+'2' */
+ Keypad3 = Keypad+'3', /*!< Keypad+'3' */
+ Keypad4 = Keypad+'4', /*!< Keypad+'4' */
+ Keypad5 = Keypad+'5', /*!< Keypad+'5' */
+ Keypad6 = Keypad+'6', /*!< Keypad+'6' */
+ Keypad7 = Keypad+'7', /*!< Keypad+'7' */
+ Keypad8 = Keypad+'8', /*!< Keypad+'8' */
+ Keypad9 = Keypad+'9', /*!< Keypad+'9' */
+ KeypadLast = 0xffbd, /*!< Keypad+'=', largest legal keypad key */
+ F0Key = 0xffbd, /*!< Add a number to get function key */
+ F1Key = F0Key+1, /*!< F0Key+1 */
+ F2Key = F0Key+2, /*!< F0Key+2 */
+ F3Key = F0Key+3, /*!< F0Key+3 */
+ F4Key = F0Key+4, /*!< F0Key+4 */
+ F5Key = F0Key+5, /*!< F0Key+5 */
+ F6Key = F0Key+6, /*!< F0Key+6 */
+ F7Key = F0Key+7, /*!< F0Key+7 */
+ F8Key = F0Key+8, /*!< F0Key+8 */
+ F9Key = F0Key+9, /*!< F0Key+9 */
+ F10Key = F0Key+10, /*!< F0Key+10 */
+ F11Key = F0Key+11, /*!< F0Key+11 */
+ F12Key = F0Key+12, /*!< F0Key+12 */
+ // use F0Key+n to get function key n
+ LastFunctionKey = F0Key+35, /*!< F0Key+35, largest legal function key */
+ LeftShiftKey = 0xffe1, /*!< Left-hand Shift */
+ RightShiftKey = 0xffe2, /*!< Right-hand Shift */
+ LeftCtrlKey = 0xffe3, /*!< Left-hand Ctrl */
+ RightCtrlKey = 0xffe4, /*!< Right-hand Ctrl */
+ CapsLockKey = 0xffe5, /*!< Caps Lock */
+ LeftMetaKey = 0xffe7, /*!< The left "Windows" or "Apple" key */
+ RightMetaKey = 0xffe8, /*!< The right "Windows" or "Apple" key */
+ LeftAltKey = 0xffe9, /*!< Left-hand Alt (option on Mac) */
+ RightAltKey = 0xffea, /*!< Right-hand Alt (option on Mac) */
+ DeleteKey = 0xffff, /*!< Delete */
+#if defined(__APPLE__)
+ LeftAccKey = LeftCtrlKey,
+ RightAccKey = RightCtrlKey,
+ LeftCmdKey = LeftMetaKey,
+ RightCmdKey = RightMetaKey
+#else
+ LeftAccKey = LeftAltKey,
+ RightAccKey = RightAltKey,
+ LeftCmdKey = LeftCtrlKey,
+ RightCmdKey = RightCtrlKey
+#endif
+};
+
+/*! Flags returned by event_state(), and used as the high 16 bits
+ of Widget::add_shortcut() values (the low 16 bits are all zero, so these
+ may be or'd with key values).
+
+ The inline function BUTTON(n) will turn n (1-8) into the flag for a
+ mouse button.
+*/
+enum {
+ SHIFT = 0x00010000, /*!< Either shift key held down */
+ CAPSLOCK = 0x00020000, /*!< Caps lock is toggled on */
+ CTRL = 0x00040000, /*!< Either ctrl key held down */
+ ALT = 0x00080000, /*!< Either alt key held down */
+ NUMLOCK = 0x00100000, /*!< Num Lock turned on */
+ META = 0x00400000, /*!< "Windows" or the "Apple" keys held down */
+ SCROLLLOCK = 0x00800000, /*!< Scroll Lock turned on */
+ BUTTON1 = 0x01000000, /*!< Left mouse button held down */
+ BUTTON2 = 0x02000000, /*!< Middle mouse button held down */
+ BUTTON3 = 0x04000000, /*!< Right mouse button held down */
+ ANY_BUTTON = 0x7f000000, /*!< Any mouse button (up to 8) */
+#if defined(__APPLE__)
+ ACCELERATOR = CTRL,
+ OPTION = ALT,
+ COMMAND = META
+#else
+ ACCELERATOR = ALT, //!< ALT on Windows/Linux, CTRL on OS/X, use for menu accelerators
+ COMMAND = CTRL, //!< CTRL on Windows/Linux, META on OS/X, use for menu shortcuts
+ OPTION = ALT|META //!< ALT|META on Windows/Linux, just ALT on OS/X, use as a drag modifier
+#endif
+};
+
+inline unsigned BUTTON(int n) {return 0x00800000 << n;}
+
+/*! Device identifier returned by event_device(). This enumeration
+ is useful to get the device type that caused a PUSH, RELEASE,
+ DRAG or MOVE event
+*/
+enum {
+ DEVICE_MOUSE = 0, /*!< Event triggered by the system mouse */
+ DEVICE_STYLUS = 1, /*!< Event triggered by a pen on a tablet, givin pressure and tilt information */
+ DEVICE_ERASER = 2, /*!< Event triggered by an eraser on a tablet, givin pressure and tilt information */
+ DEVICE_CURSOR = 3, /*!< Event triggered by a puck style device on a tablet */
+ DEVICE_AIRBRUSH = 4, /*!< Event triggered by an airbrush on a tablet, giving pressure and tilt information */
+ DEVICE_TOUCH = 5 /*!< Event triggered by touch a touch screen device */
+};
+
+class Rectangle;
+class Widget;
+class Window;
+
+#ifndef DOXYGEN
+
+////////////////////////////////////////////////////////////////
+// Do not use these variables, they may not exist in future versions:
+
+extern FL_API int e_type;
+extern FL_API int e_x;
+extern FL_API int e_y;
+extern FL_API int e_dx;
+extern FL_API int e_dy;
+extern FL_API int e_x_root;
+extern FL_API int e_y_root;
+extern FL_API unsigned e_state;
+extern FL_API int e_clicks;
+extern FL_API unsigned e_is_click;
+extern FL_API unsigned e_keysym;
+extern FL_API unsigned e_length;
+extern FL_API const char* e_text;
+extern FL_API unsigned e_key_repeated;
+extern FL_API float e_pressure;
+extern FL_API float e_x_tilt;
+extern FL_API float e_y_tilt;
+extern FL_API int e_device;
+extern FL_API int compose_state;
+extern FL_API Widget* belowmouse_;
+extern FL_API Widget* pushed_;
+extern FL_API Widget* focus_;
+extern FL_API Widget* modal_;
+extern FL_API bool grab_;
+extern FL_API bool exit_modal_;
+
+////////////////////////////////////////////////////////////////
+#endif
+
+inline int event() {return e_type;}
+inline int event_x() {return e_x;}
+inline int event_y() {return e_y;}
+inline int event_dx() {return e_dx;}
+inline int event_dy() {return e_dy;}
+inline int event_x_root() {return e_x_root;}
+inline int event_y_root() {return e_y_root;}
+inline int event_clicks() {return e_clicks;}
+inline void event_clicks(int i) {e_clicks = i;}
+inline bool event_is_click() {return e_is_click != 0;}
+inline void event_is_click(bool) {e_is_click = 0;} // only false works!
+inline unsigned event_state() {return e_state;}
+inline bool event_state(unsigned i) {return (e_state&i) != 0;}
+inline unsigned event_key() {return e_keysym;}
+inline unsigned event_button() {return e_keysym;}
+FL_API bool event_key_state(unsigned);
+inline const char* event_text() {return e_text;}
+inline unsigned event_length() {return e_length;}
+inline unsigned event_key_repeated() {return e_key_repeated;}
+inline float event_pressure() {return e_pressure;}
+inline float event_x_tilt() {return e_x_tilt;}
+inline float event_y_tilt() {return e_y_tilt;}
+inline int event_device() {return e_device;}
+
+// tests on current event:
+FL_API bool event_inside(const Rectangle&);
+FL_API bool compose(int &del);
+inline void compose_reset() {compose_state = 0;}
+
+// shortcuts:
+FL_API bool try_shortcut();
+FL_API const char* key_name(unsigned key);
+FL_API unsigned key(const char* name);
+
+class FL_API ShortcutFunctor {
+ public:
+ virtual bool handle(const Widget*, unsigned key) = 0;
+};
+FL_API unsigned foreachShortcut(const Widget*, ShortcutFunctor&);
+inline unsigned foreachShortcut(ShortcutFunctor& f) { return foreachShortcut(0,f); }
+
+// get current information, not info from last event:
+FL_API bool get_key_state(unsigned);
+FL_API void get_mouse(int &,int &);
+FL_API bool warp_mouse(int, int);
+
+// event destinations:
+FL_API bool handle(int, Window*);
+FL_API void add_event_handler(int (*h)(int, Window*));
+inline Widget* belowmouse() {return belowmouse_;}
+FL_API void belowmouse(Widget*);
+inline void belowmouse(Widget& w) {belowmouse(&w);}
+inline Widget* pushed() {return pushed_;}
+FL_API void pushed(Widget*);
+inline void pushed(Widget& w) {pushed(&w);}
+inline Widget* focus() {return focus_;}
+FL_API void focus(Widget*);
+inline void focus(Widget& w) {focus(&w);}
+
+// cut/paste/dnd:
+FL_API void copy(const char* stuff, int len, bool clipboard = false);
+FL_API void paste(Widget &receiver, bool clipboard = false);
+FL_API bool dnd();
+
+// Modal widgets (block events going to any other widgets):
+FL_API void modal(Widget*, bool grab = false);
+inline Widget* modal() {return modal_;}
+inline bool grab() {return grab_;}
+inline void exit_modal() {exit_modal_ = true;}
+inline bool exit_modal_flag() {return exit_modal_;}
+
+// for debugging purpose :
+const char *event_name(int event); /// see STR #508
+
+//@}
+
+}
+
+#endif
+
+//
+// $Id: events.h 6514 2008-11-10 21:10:13Z spitzak $
+//
diff --git a/fltk/fltk/file_chooser.h b/fltk/fltk/file_chooser.h
new file mode 100644
index 0000000..17243c6
--- /dev/null
+++ b/fltk/fltk/file_chooser.h
@@ -0,0 +1,47 @@
+// "$Id: file_chooser.h 6233 2008-09-14 07:54:06Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_file_chooser_h
+#define fltk_file_chooser_h
+
+#include "FL_API.h"
+
+namespace fltk {
+
+/// \name fltk/file_chooser.h
+//@{
+
+FL_API void use_system_file_chooser(bool = true);
+
+FL_API const char *dir_chooser(const char *message,const char *fname,int relative=0);
+FL_API const char *file_chooser(const char *message,const char *pattern,
+ const char *filename, int relative = 0);
+FL_API void file_chooser_callback(void (*cb)(const char *));
+
+//@}
+
+}
+
+#endif
+
+//
+// End of "$Id: file_chooser.h 6233 2008-09-14 07:54:06Z spitzak $".
+//
diff --git a/fltk/fltk/filename.h b/fltk/fltk/filename.h
new file mode 100644
index 0000000..6743406
--- /dev/null
+++ b/fltk/fltk/filename.h
@@ -0,0 +1,131 @@
+// "$Id: filename.h 6483 2008-10-22 07:01:02Z spitzak $"
+
+/* Copyright 1998-2006 by Bill Spitzak and others.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Please report all bugs and problems to "fltk-bugs@fltk.org".
+ *
+ * These functions are not in the fltk namespace because they really
+ * should not be part of fltk. They are used by the file chooser.
+ * THESE FUNCTIONS MAY BE CHANGED OR DELETED IN FUTURE VERSIONS. DO
+ * NOT USE THEM, AS THEY ARE NOT AN OFFICIAL PART OF fltk!
+ */
+
+#ifndef fltk_filename_h
+#define fltk_filename_h
+
+#include "FL_API.h"
+
+////////////////////////////////////////////////////////////////
+#ifndef DOXYGEN
+// dirent (what a pain)...
+
+// FC: UNDER WIN32/VC6 long long is undefined, so use __int64 instead
+// for cross platform type compatibility though in fact VC6 uses
+// a 32 bit long to calculate size in the stat struct so don't expect
+// to handle >4GB files here...
+#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) && (_MSC_VER==1200)
+typedef unsigned __int64 FL_FILESIZE_T;
+#else
+typedef unsigned long long FL_FILESIZE_T;
+#endif
+
+#if defined(__WATCOMC__)
+
+# include <sys/types.h>
+# include "direct.h"
+
+#elif defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__)
+// Dummy version used on win32 that just holds a name:
+
+struct dirent {char d_name[1];};
+
+#elif defined(__linux)
+// Newest Linux libc is broken when it emulates the 32-bit dirent, it
+// generates errors when the data like the inode number does not fit, even
+// though we are not going to look at anything other than the name. This
+// code seems to force the 64-bit version to be used:
+
+# ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+# endif
+# include <features.h>
+# include <sys/types.h>
+# include <dirent.h>
+# if defined(__GLIBC_PREREQ)
+# if __GLIBC_PREREQ(2,3)
+# define dirent dirent64
+# define scandir scandir64
+# endif
+# endif
+
+#else
+// warning: on some systems (very few nowadays?) <dirent.h> may not exist.
+// The correct information is in one of these three files:
+// #include <sys/ndir.h>
+// #include <sys/dir.h>
+// #include <ndir.h>
+// plus you must do the following #define:
+// #define dirent direct
+// I recommend you create a /usr/include/dirent.h containing the correct info
+
+# include <sys/types.h>
+# include <dirent.h>
+
+#endif
+
+#ifndef PATH_MAX
+# ifdef _MAX_PATH
+# define PATH_MAX _MAX_PATH
+# else
+# define PATH_MAX 1024
+# endif
+#endif
+
+#endif
+////////////////////////////////////////////////////////////////
+
+namespace fltk {
+
+/// \name fltk/filename.h
+/// Some functions to manipulate filenames, to make portable programs.
+//@{
+
+FL_API int filename_absolute(char *to, int tolen, const char *from, const char* cwd=0);
+FL_API int filename_relative(char *to, int tolen, const char *from, const char* cwd=0);
+FL_API const char *filename_name(const char *);
+inline char* filename_name(char* a) {return (char*)(filename_name((const char*)a));}
+FL_API const char *filename_ext(const char *);
+inline char* filename_ext(char* a) {return (char*)(filename_ext((const char*)a));}
+FL_API bool filename_match(const char *, const char *pattern); // glob match
+FL_API bool filename_exist(const char*);
+FL_API bool filename_isdir(const char*);
+FL_API FL_FILESIZE_T filename_size(const char *); // return size of file
+FL_API long int filename_mtime(const char *); // return modification time
+
+typedef int (File_Sort_F)(const dirent*const*, const dirent*const*);
+FL_API int alphasort(const dirent*const*, const dirent*const*);
+FL_API int casealphasort(const dirent*const*, const dirent*const*);
+FL_API int casenumericsort(const dirent*const*, const dirent*const*);
+FL_API int numericsort(const dirent*const*, const dirent*const*);
+FL_API int filename_list(const char *d, dirent ***list, File_Sort_F *sort);
+FL_API int filename_list(const char *d, dirent ***list); // uses numericsort
+
+//@}
+
+}
+
+#endif
+
+// End of "$Id: filename.h 6483 2008-10-22 07:01:02Z spitzak $".
diff --git a/fltk/fltk/fltk_cairo.h b/fltk/fltk/fltk_cairo.h
new file mode 100644
index 0000000..bf94a3f
--- /dev/null
+++ b/fltk/fltk/fltk_cairo.h
@@ -0,0 +1,48 @@
+// fltk_cairo.h
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+/** \file
+ "Portably" include cairo common definitions for fltk. If fltk is
+ compiled correctly, you can create a cairo "surface" from an fltk
+ Window and then make your own cairo context to draw into it.
+
+ FLTK may also be compiled to use cairo for \e all it's drawing, by
+ adding --enable_cairo when running ./configure. In this case this
+ has already been done when draw() is called, and the cairo context
+ is in fltk::cc.
+*/
+
+#ifndef fltk_cairo_h
+#define fltk_cairo_h
+
+#include <fltk/FL_API.h>
+#include <cairo.h>
+
+namespace fltk {
+ extern FL_API cairo_t * cr;
+ class Window;
+ FL_API cairo_surface_t * cairo_create_surface(Window* w);
+}
+
+#endif
+
+// End of fltk_cairo.h
+
diff --git a/fltk/fltk/forms.h b/fltk/fltk/forms.h
new file mode 100644
index 0000000..78ea696
--- /dev/null
+++ b/fltk/fltk/forms.h
@@ -0,0 +1,854 @@
+//
+// "$Id: forms.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// Forms emulation header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef __FORMS_H__
+#define __FORMS_H__
+
+#include <fltk/Fl.h>
+#include <fltk/Fl_Group.h>
+#include <fltk/Fl_Window.h>
+#include <fltk/fl_draw.h>
+
+typedef Fl_Widget FL_OBJECT;
+typedef Fl_Window FL_FORM;
+
+////////////////////////////////////////////////////////////////
+// Random constants & symbols defined by forms.h file:
+
+#ifndef NULL
+#define NULL 0
+#endif
+#ifndef FALSE
+#define FALSE 0
+#define TRUE 1
+#endif
+
+#define FL_ON 1
+#define FL_OK 1
+#define FL_VALID 1
+#define FL_PREEMPT 1
+#define FL_AUTO 2
+#define FL_WHEN_NEEDED FL_AUTO
+#define FL_OFF 0
+#define FL_NONE 0
+#define FL_CANCEL 0
+#define FL_INVALID 0
+#define FL_IGNORE -1
+#define FL_CLOSE -2
+
+#define FL_LCOL FL_BLACK
+#define FL_COL1 FL_GRAY
+#define FL_MCOL FL_LIGHT1
+#define FL_LEFT_BCOL FL_LIGHT3 // 53 is better match
+#define FL_TOP_BCOL FL_LIGHT2 // 51
+#define FL_BOTTOM_BCOL FL_DARK2 // 40
+#define FL_RIGHT_BCOL FL_DARK3 // 36
+#define FL_INACTIVE FL_INACTIVE_COLOR
+#define FL_INACTIVE_COL FL_INACTIVE_COLOR
+#define FL_FREE_COL1 FL_FREE_COLOR
+#define FL_FREE_COL2 ((Fl_Color)(FL_FREE_COLOR+1))
+#define FL_FREE_COL3 ((Fl_Color)(FL_FREE_COLOR+2))
+#define FL_FREE_COL4 ((Fl_Color)(FL_FREE_COLOR+3))
+#define FL_FREE_COL5 ((Fl_Color)(FL_FREE_COLOR+4))
+#define FL_FREE_COL6 ((Fl_Color)(FL_FREE_COLOR+5))
+#define FL_FREE_COL7 ((Fl_Color)(FL_FREE_COLOR+6))
+#define FL_FREE_COL8 ((Fl_Color)(FL_FREE_COLOR+7))
+#define FL_FREE_COL9 ((Fl_Color)(FL_FREE_COLOR+8))
+#define FL_FREE_COL10 ((Fl_Color)(FL_FREE_COLOR+9))
+#define FL_FREE_COL11 ((Fl_Color)(FL_FREE_COLOR+10))
+#define FL_FREE_COL12 ((Fl_Color)(FL_FREE_COLOR+11))
+#define FL_FREE_COL13 ((Fl_Color)(FL_FREE_COLOR+12))
+#define FL_FREE_COL14 ((Fl_Color)(FL_FREE_COLOR+13))
+#define FL_FREE_COL15 ((Fl_Color)(FL_FREE_COLOR+14))
+#define FL_FREE_COL16 ((Fl_Color)(FL_FREE_COLOR+15))
+#define FL_TOMATO ((Fl_Color)(131))
+#define FL_INDIANRED ((Fl_Color)(164))
+#define FL_SLATEBLUE ((Fl_Color)(195))
+#define FL_DARKGOLD ((Fl_Color)(84))
+#define FL_PALEGREEN ((Fl_Color)(157))
+#define FL_ORCHID ((Fl_Color)(203))
+#define FL_DARKCYAN ((Fl_Color)(189))
+#define FL_DARKTOMATO ((Fl_Color)(113))
+#define FL_WHEAT ((Fl_Color)(174))
+
+#define FL_ALIGN_BESIDE FL_ALIGN_INSIDE
+
+#define FL_PUP_TOGGLE 2 // FL_MENU_TOGGLE
+#define FL_PUP_INACTIVE 1 // FL_MENU_INACTIVE
+#define FL_NO_FRAME FL_NO_BOX
+#define FL_ROUNDED3D_UPBOX FL_ROUND_UP_BOX
+#define FL_ROUNDED3D_DOWNBOX FL_ROUND_DOWN_BOX
+#define FL_OVAL3D_UPBOX FL_ROUND_UP_BOX
+#define FL_OVAL3D_DOWNBOX FL_ROUND_DOWN_BOX
+
+#define FL_MBUTTON1 1
+#define FL_LEFTMOUSE 1
+#define FL_MBUTTON2 2
+#define FL_MIDDLEMOUSE 2
+#define FL_MBUTTON3 3
+#define FL_RIGHTMOUSE 3
+#define FL_MBUTTON4 4
+#define FL_MBUTTON5 5
+
+#define FL_INVALID_STYLE 255
+#define FL_NORMAL_STYLE 0
+#define FL_BOLD_STYLE 1
+#define FL_ITALIC_STYLE 2
+#define FL_BOLDITALIC_STYLE 3
+#define FL_FIXED_STYLE 4
+#define FL_FIXEDBOLD_STYLE 5
+#define FL_FIXEDITALIC_STYLE 6
+#define FL_FIXEDBOLDITALIC_STYLE 7
+#define FL_TIMES_STYLE 8
+#define FL_TIMESBOLD_STYLE 9
+#define FL_TIMESITALIC_STYLE 10
+#define FL_TIMESBOLDITALIC_STYLE 11
+
+// hacks to change the labeltype() when passed to fl_set_object_lstyle():
+#define FL_SHADOW_STYLE 0x100
+#define FL_ENGRAVED_STYLE 0x200
+#define FL_EMBOSSED_STYLE 0x300
+
+// size values are different from XForms, match older Forms:
+#define FL_TINY_SIZE 8
+#define FL_SMALL_SIZE 11 // 10
+#undef FL_NORMAL_SIZE
+#define FL_NORMAL_SIZE 14 // 12
+#define FL_MEDIUM_SIZE 18 // 14
+#define FL_LARGE_SIZE 24 // 18
+#define FL_HUGE_SIZE 32 // 24
+#define FL_DEFAULT_SIZE FL_SMALL_SIZE
+#define FL_TINY_FONT FL_TINY_SIZE
+#define FL_SMALL_FONT FL_SMALL_SIZE
+#define FL_NORMAL_FONT FL_NORMAL_SIZE
+#define FL_MEDIUM_FONT FL_MEDIUM_SIZE
+#define FL_LARGE_FONT FL_LARGE_SIZE
+#define FL_HUGE_FONT FL_HUGE_SIZE
+#define FL_NORMAL_FONT1 FL_SMALL_FONT
+#define FL_NORMAL_FONT2 FL_NORMAL_FONT
+#define FL_DEFAULT_FONT FL_SMALL_FONT
+
+#define FL_RETURN_END_CHANGED FL_WHEN_RELEASE
+#define FL_RETURN_CHANGED FL_WHEN_CHANGED
+#define FL_RETURN_END FL_WHEN_RELEASE_ALWAYS
+#define FL_RETURN_ALWAYS (FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED)
+
+#define FL_BOUND_WIDTH 3
+
+typedef int FL_Coord;
+typedef int FL_COLOR;
+
+////////////////////////////////////////////////////////////////
+// fltk interaction:
+
+#define FL_CMD_OPT void
+extern FL_FORMS_API void fl_initialize(int*, char*[], const char*, FL_CMD_OPT*, int);
+inline void fl_finish() {}
+
+typedef void (*FL_IO_CALLBACK) (int, void*);
+inline void fl_add_io_callback(int fd, short w, FL_IO_CALLBACK cb, void* v) {
+ Fl::add_fd(fd,w,cb,v);}
+inline void fl_remove_io_callback(int fd, short, FL_IO_CALLBACK) {
+ Fl::remove_fd(fd);} // removes all the callbacks!
+
+// type of callback is different and no "id" number is returned:
+inline void fl_add_timeout(long msec, void (*cb)(void*), void* v) {
+ Fl::add_timeout(msec*.001, (Fl_Timeout_Handler)cb, v);}
+inline void fl_remove_timeout(int) {}
+
+// type of callback is different!
+inline void fl_set_idle_callback(void (*cb)()) {Fl::set_idle(cb);}
+
+FL_FORMS_API Fl_Widget* fl_do_forms(void);
+FL_FORMS_API Fl_Widget* fl_check_forms();
+inline Fl_Widget* fl_do_only_forms(void) {return fl_do_forms();}
+inline Fl_Widget* fl_check_only_forms(void) {return fl_check_forms();}
+
+// because of new redraw behavior, these are no-ops:
+inline void fl_freeze_object(Fl_Widget*) {}
+inline void fl_unfreeze_object(Fl_Widget*) {}
+inline void fl_freeze_form(Fl_Window*) {}
+inline void fl_unfreeze_form(Fl_Window*) {}
+inline void fl_freeze_all_forms() {}
+inline void fl_unfreeze_all_forms() {}
+
+inline void fl_set_focus_object(Fl_Window*, Fl_Widget* o) {Fl::focus(o);}
+inline void fl_reset_focus_object(Fl_Widget* o) {Fl::focus(o);}
+#define fl_set_object_focus fl_set_focus_object
+
+// void fl_set_form_atclose(Fl_Window*w,int (*cb)(Fl_Window*,void*),void* v)
+// void fl_set_atclose(int (*cb)(Fl_Window*,void*),void*)
+// fl_set_form_atactivate/atdeactivate not implemented!
+
+////////////////////////////////////////////////////////////////
+// Fl_Widget:
+
+inline void fl_set_object_boxtype(Fl_Widget* o, Fl_Boxtype a) {o->box(a);}
+inline void fl_set_object_lsize(Fl_Widget* o,int s) {o->label_size(s);}
+FL_FORMS_API void fl_set_object_lstyle(Fl_Widget* o,int a);
+inline void fl_set_object_lcol(Fl_Widget* o, unsigned a) {o->label_color((Fl_Color)a);}
+#define fl_set_object_lcolor fl_set_object_lcol
+inline void fl_set_object_lalign(Fl_Widget* o, Fl_Align a) { o->clear_flag(FL_ALIGN_MASK); o->set_flag(a);}
+#define fl_set_object_align fl_set_object_lalign
+inline void fl_set_object_color(Fl_Widget* o,unsigned a,unsigned b) {o->color((Fl_Color)a); o->selection_color((Fl_Color)b);}
+inline void fl_set_object_label(Fl_Widget* o, const char* a) {o->label(a); o->redraw();}
+inline void fl_set_object_position(Fl_Widget*o,int x,int y) {o->position(x,y);}
+inline void fl_set_object_size(Fl_Widget* o, int w, int h) {o->size(w,h);}
+inline void fl_set_object_geometry(Fl_Widget* o,int x,int y,int w,int h) {o->resize(x,y,w,h);}
+
+inline void fl_get_object_geometry(Fl_Widget* o,int*x,int*y,int*w,int*h) {
+ *x = o->x(); *y = o->y(); *w = o->w(); *h = o->h();}
+inline void fl_get_object_position(Fl_Widget* o,int*x,int*y) {
+ *x = o->x(); *y = o->y();}
+
+typedef void (*Forms_CB)(Fl_Widget*, long);
+inline void fl_set_object_callback(Fl_Widget*o,Forms_CB c,long a) {o->callback(c,a);}
+#define fl_set_call_back fl_set_object_callback
+inline void fl_call_object_callback(Fl_Widget* o) {o->do_callback();}
+inline void fl_trigger_object(Fl_Widget* o) {o->do_callback();}
+inline void fl_set_object_return(Fl_Widget* o, int v) {
+ o->when(v|FL_WHEN_RELEASE);}
+
+inline void fl_redraw_object(Fl_Widget* o) {o->redraw();}
+inline void fl_show_object(Fl_Widget* o) {o->show();}
+inline void fl_hide_object(Fl_Widget* o) {o->hide();}
+inline void fl_free_object(Fl_Widget* x) {delete x;}
+inline void fl_delete_object(Fl_Widget* o) {((Fl_Group*)(o->parent()))->remove(*o);}
+inline void fl_activate_object(Fl_Widget* o) {o->activate();}
+inline void fl_deactivate_object(Fl_Widget* o) {o->deactivate();}
+
+inline void fl_add_object(Fl_Window* f, Fl_Widget* x) {f->add(x);}
+inline void fl_insert_object(Fl_Widget* o, Fl_Widget* b) {
+ ((Fl_Group*)(b->parent()))->insert(*o,b);}
+
+inline Fl_Window* FL_ObjWin(Fl_Widget* o) {return o->window();}
+
+////////////////////////////////////////////////////////////////
+// things that appered in the demos a lot that I don't emulate, but
+// I did not want to edit out of all the demos...
+
+inline int fl_get_border_width() {return 3;}
+inline void fl_set_border_width(int) {}
+inline void fl_set_object_dblbuffer(Fl_Widget*, int) {}
+inline void fl_set_form_dblbuffer(Fl_Window*, int) {}
+
+////////////////////////////////////////////////////////////////
+// Fl_Window:
+
+inline void fl_free_form(Fl_Window* x) {delete x;}
+inline void fl_redraw_form(Fl_Window* f) {f->redraw();}
+
+inline Fl_Window* fl_bgn_form(Fl_Boxtype b,int w,int h) {
+ Fl_Window* g = new Fl_Window(w,h,0);
+ g->box(b);
+ return g;
+}
+inline void fl_addto_form(Fl_Window* f) {f->begin();}
+inline Fl_Group* fl_bgn_group() {return new Fl_Group(0,0,0,0,0);}
+inline void fl_addto_group(Fl_Widget* o) {((Fl_Group* )o)->begin();}
+FL_FORMS_API void fl_end_group();
+FL_FORMS_API void fl_end_form();
+#define resizebox _ddfdesign_kludge()
+
+inline void fl_scale_form(Fl_Window* f, double x, double y) {
+ f->resizable(f); f->size(int(f->w()*x),int(f->h()*y));}
+inline void fl_set_form_position(Fl_Window* f,int x,int y) {f->position(x,y);}
+inline void fl_set_form_size(Fl_Window* f, int w, int h) {f->size(w,h);}
+inline void fl_set_form_geometry(Fl_Window* f,int x,int y,int w,int h) {
+ f->resize(x,y,w,h);}
+#define fl_set_initial_placement fl_set_form_geometry
+inline void fl_adjust_form_size(Fl_Window*) {}
+
+FL_FORMS_API void fl_show_form(Fl_Window* f,int p,int b,const char* n);
+enum { // "p" argument values:
+ FL_PLACE_FREE = 0, // make resizable
+ FL_PLACE_MOUSE = 1, // mouse centered on form
+ FL_PLACE_CENTER = 2, // center of the screen
+ FL_PLACE_POSITION = 4,// fixed position, resizable
+ FL_PLACE_SIZE = 8, // fixed size, normal fltk behavior
+ FL_PLACE_GEOMETRY =16,// fixed size and position
+ FL_PLACE_ASPECT = 32, // keep aspect ratio (ignored)
+ FL_PLACE_FULLSCREEN=64,// fill screen
+ FL_PLACE_HOTSPOT = 128,// enables hotspot
+ FL_PLACE_ICONIC = 256,// iconic (ignored)
+ FL_FREE_SIZE=(1<<14), // force resizable
+ FL_FIX_SIZE =(1<<15) // force off resizable
+};
+#define FL_PLACE_FREE_CENTER (FL_PLACE_CENTER|FL_FREE_SIZE)
+#define FL_PLACE_CENTERFREE (FL_PLACE_CENTER|FL_FREE_SIZE)
+enum { // "b" arguement values:
+ FL_NOBORDER = 0,
+ FL_FULLBORDER,
+ FL_TRANSIENT
+//FL_MODAL = (1<<8) // not implemented yet in Forms
+};
+inline void fl_set_form_hotspot(Fl_Window* w,int x,int y) {w->hotspot(x,y);}
+inline void fl_set_form_hotobject(Fl_Window* w, Fl_Widget* o) {w->hotspot(o);}
+extern FL_FORMS_API char fl_flip; // in forms.C
+inline void fl_flip_yorigin() {fl_flip = 1;}
+
+#define fl_prepare_form_window fl_show_form
+inline void fl_show_form_window(Fl_Window*) {}
+
+inline void fl_raise_form(Fl_Window* f) {f->show();}
+
+inline void fl_hide_form(Fl_Window* f) {f->hide();}
+inline void fl_pop_form(Fl_Window* f) {f->show();}
+
+extern FL_FORMS_API char fl_modal_next; // in forms.C
+inline void fl_activate_all_forms() {}
+inline void fl_deactivate_all_forms() {fl_modal_next = 1;}
+inline void fl_deactivate_form(Fl_Window*w) {w->deactivate();}
+inline void fl_activate_form(Fl_Window*w) {w->activate();}
+
+inline void fl_set_form_title(Fl_Window* f, const char* s) {f->label(s);}
+inline void fl_title_form(Fl_Window* f, const char* s) {f->label(s);}
+
+typedef void (*Forms_FormCB)(Fl_Widget*);
+inline void fl_set_form_callback(Fl_Window* f,Forms_FormCB c) {f->callback(c);}
+#define fl_set_form_call_back fl_set_form_callback
+
+inline void fl_init() {}
+inline void fl_set_graphics_mode(int r, int /*d*/) {
+ Fl::visual(r ? FL_RGB : FL_INDEX);
+ // d should add FL_DOUBLE, but that always fails in fltk 2.0
+}
+
+inline int fl_form_is_visible(Fl_Window* f) {return f->visible();}
+
+inline int fl_mouse_button() {return Fl::event_button();}
+#define fl_mousebutton fl_mouse_button
+
+#define fl_free free
+#define fl_malloc malloc
+#define fl_calloc calloc
+#define fl_realloc realloc
+
+////////////////////////////////////////////////////////////////
+// Drawing functions. Only usable inside an Fl_Free object?
+
+#if 0
+inline void fl_drw_box(Fl_Boxtype b,int x,int y,int w,int h,Fl_Color bgc,int=3) {
+ b->draw(x,y,w,h,bgc);}
+inline void fl_drw_frame(Fl_Boxtype b,int x,int y,int w,int h,Fl_Color bgc,int=3) {
+ b->draw(x,y,w,h,bgc,FL_FRAME_ONLY);}
+#endif
+
+inline void fl_drw_text(Fl_Align align, int x, int y, int w, int h,
+ Fl_Color fgcolor, int size, Fl_Font style,
+ const char* s) {
+ fl_font(style,size);
+ fl_color(fgcolor);
+ fl_draw(s,x,y,w,h,align);
+}
+
+// this does not work except for CENTER...
+inline void fl_drw_text_beside(Fl_Align align, int x, int y, int w, int h,
+ Fl_Color fgcolor, int size, Fl_Font style,
+ const char* s) {
+ fl_font(style,size);
+ fl_color(fgcolor);
+ fl_draw(s,x,y,w,h,align);
+}
+
+//inline void fl_set_font_name(Fl_Font n,const char* s) {fl_set_font(n,s);}
+
+inline void fl_mapcolor(Fl_Color c, uchar r, uchar g, uchar b) {
+ fl_set_color(c,fl_rgb(r,g,b));}
+#define fl_set_clipping(x,y,w,h) fl_clip(x,y,w,h)
+#define fl_unset_clipping() fl_pop_clip()
+
+////////////////////////////////////////////////////////////////
+// Forms classes:
+
+inline Fl_Widget* fl_add_new(Fl_Widget* p) {return p;}
+inline Fl_Widget* fl_add_new(uchar t,Fl_Widget* p) {p->type(t); return p;}
+
+#define forms_constructor(type,name) \
+inline type* name(uchar t,int x,int y,int w,int h,const char* l) { \
+ return (type*)(fl_add_new(t, new type(x,y,w,h,l)));}
+#define forms_constructort(type,name) \
+inline type* name(uchar t,int x,int y,int w,int h,const char* l) { \
+ return (type*)(fl_add_new(new type(t,x,y,w,h,l)));}
+#define forms_constructorb(type,name) \
+inline type* name(Fl_Boxtype t,int x,int y,int w,int h,const char* l) { \
+ return (type*)(fl_add_new(new type(t,x,y,w,h,l)));}
+
+#include "Fl_FormsBitmap.h"
+#define FL_NORMAL_BITMAP FL_NO_BOX
+forms_constructorb(Fl_FormsBitmap, fl_add_bitmap)
+inline void fl_set_bitmap_data(Fl_Widget* o, int w, int h, const uchar* b) {
+ ((Fl_FormsBitmap*)o)->set(w,h,b);
+}
+
+#include "Fl_FormsPixmap.h"
+#define FL_NORMAL_PIXMAP FL_NO_BOX
+forms_constructorb(Fl_FormsPixmap, fl_add_pixmap)
+inline void fl_set_pixmap_data(Fl_Widget* o, char*const* b) {
+ ((Fl_FormsPixmap*)o)->set(b);
+}
+//inline void fl_set_pixmap_file(Fl_Widget*, const char*);
+inline void fl_set_pixmap_align(Fl_Widget* o,Fl_Align a,int,int) { o->clear_flag(FL_ALIGN_MASK); o->set_flag(a);}
+//inline void fl_set_pixmap_colorcloseness(int, int, int);
+
+#include <fltk/Fl_Box.h>
+forms_constructorb(Fl_Box, fl_add_box)
+
+#include <fltk/Fl_Browser.h>
+forms_constructor(Fl_Browser, fl_add_browser)
+
+inline void fl_clear_browser(Fl_Widget* o) {
+ ((Fl_Browser*)o)->clear();}
+inline void fl_add_browser_line(Fl_Widget* o, const char* s) {
+ ((Fl_Browser*)o)->add(s);}
+inline void fl_addto_browser(Fl_Widget* o, const char* s) {
+ ((Fl_Browser*)o)->add(s);} /* should also scroll to bottom */
+//inline void fl_addto_browser_chars(Fl_Widget*, const char*)
+//#define fl_append_browser fl_addto_browser_chars
+inline void fl_insert_browser_line(Fl_Widget* o, int n, const char* s) {
+ ((Fl_Browser*)o)->insert(n,s);}
+inline void fl_delete_browser_line(Fl_Widget* o, int n) {
+ ((Fl_Browser*)o)->remove(n);}
+inline void fl_replace_browser_line(Fl_Widget* o, int n, const char* s) {
+ ((Fl_Browser*)o)->replace(n,s);}
+inline char* fl_get_browser_line(Fl_Widget* o, int n) {
+ return (char*)(((Fl_Browser*)o)->text(n));}
+FL_FORMS_API int fl_load_browser(Fl_Widget* o, const char* f);
+inline void fl_select_browser_line(Fl_Widget* o, int n) {
+ ((Fl_Browser*)o)->select(n,1);}
+inline void fl_deselect_browser_line(Fl_Widget* o, int n) {
+ ((Fl_Browser*)o)->select(n,0);}
+inline void fl_deselect_browser(Fl_Widget* o) {
+ ((Fl_Browser*)o)->deselect();}
+inline int fl_isselected_browser_line(Fl_Widget* o, int n) {
+ return ((Fl_Browser*)o)->selected(n);}
+inline int fl_get_browser_topline(Fl_Widget* o) {
+ return ((Fl_Browser*)o)->topline();}
+inline int fl_get_browser(Fl_Widget* o) {
+ return ((Fl_Browser*)o)->value();}
+inline int fl_get_browser_maxline(Fl_Widget* o) {
+ return ((Fl_Browser*)o)->size();}
+//linline int fl_get_browser_screenlines(Fl_Widget*);
+inline void fl_set_browser_topline(Fl_Widget* o, int n) {
+ ((Fl_Browser*)o)->topline(n);}
+inline void fl_set_browser_fontsize(Fl_Widget* o, int s) {
+ ((Fl_Browser*)o)->text_size(s);}
+inline void fl_set_browser_fontstyle(Fl_Widget* o, int s) {
+ ((Fl_Browser*)o)->text_font(fl_fonts+s);}
+inline void fl_set_browser_specialkey(Fl_Widget* o, char c) {
+ ((Fl_Browser*)o)->format_char(c);}
+//inline void fl_set_browser_vscrollbar(Fl_Widget*, int);
+//inline void fl_set_browser_hscrollbar(Fl_Widget*, int);
+//inline void fl_set_browser_leftslider(Fl_Widget*, int);
+//#define fl_set_browser_leftscrollbar fl_set_browser_leftslider
+//inline void fl_set_browser_line_selectable(Fl_Widget*, int, int);
+//inline void fl_get_browser_dimension(Fl_Widget*,int*,int*,int*,int*);
+//inline void fl_set_browser_dblclick_callback(Fl_Widget*,FL_CALLBACKPTR,long);
+//inline void fl_set_browser_xoffset(Fl_Widget*, FL_Coord);
+//inline void fl_set_browser_scrollbarsize(Fl_Widget*, int, int);
+inline void fl_setdisplayed_browser_line(Fl_Widget* o, int n, int i) {
+ ((Fl_Browser*)o)->display(n,i);}
+inline int fl_isdisplayed_browser_line(Fl_Widget* o, int n) {
+ return ((Fl_Browser*)o)->displayed(n);}
+
+#include <fltk/Fl_Button.h>
+
+#define FL_NORMAL_BUTTON 0
+//#define FL_HIDDEN_BUTTON
+#define FL_TOUCH_BUTTON 4
+#define FL_INOUT_BUTTON 5
+#define FL_RETURN_BUTTON 6
+#define FL_HIDDEN_RET_BUTTON 7
+#define FL_PUSH_BUTTON FL_TOGGLE_BUTTON
+#define FL_MENU_BUTTON 9
+
+FL_FORMS_API Fl_Button* fl_add_button(uchar t,int x,int y,int w,int h,const char* l);
+inline int fl_get_button(Fl_Widget* b) {return ((Fl_Button*)b)->value();}
+inline void fl_set_button(Fl_Widget* b, int v) {((Fl_Button*)b)->value(v);}
+inline int fl_get_button_numb(Fl_Widget*) {return Fl::event_button();}
+inline void fl_set_object_shortcut(Fl_Widget* b, const char* s, int=0) {
+ b->shortcut(fltk::key(s));}
+#define fl_set_button_shortcut fl_set_object_shortcut
+
+#include <fltk/Fl_Light_Button.h>
+forms_constructor(Fl_Light_Button, fl_add_lightbutton)
+
+#include <fltk/Fl_Round_Button.h>
+forms_constructor(Fl_Round_Button, fl_add_roundbutton)
+forms_constructor(Fl_Round_Button, fl_add_round3dbutton)
+
+#include <fltk/Fl_Check_Button.h>
+forms_constructor(Fl_Check_Button, fl_add_checkbutton)
+
+inline Fl_Widget* fl_add_bitmapbutton(int t,int x,int y,int w,int h,const char* l) {Fl_Widget* o = fl_add_button(t,x,y,w,h,l); return o;}
+inline void fl_set_bitmapbutton_data(Fl_Widget* o,int a,int b,uchar* c) {
+ (new Fl_Bitmap(c,a,b))->label(o);} // does not delete old Fl_Bitmap!
+
+inline Fl_Widget* fl_add_pixmapbutton(int t,int x,int y,int w,int h,const char* l) {Fl_Widget* o = fl_add_button(t,x,y,w,h,l); return o;}
+inline void fl_set_pixmapbutton_data(Fl_Widget* o, const char*const* c) {
+ (new Fl_Pixmap(c))->label(o);} // does not delete old Fl_Pixmap!
+
+// Fl_Canvas object not yet implemented!
+
+#include "Fl_Chart.h"
+
+forms_constructor(Fl_Chart, fl_add_chart)
+inline void fl_clear_chart(Fl_Widget* o) {
+ ((Fl_Chart*)o)->clear();}
+inline void fl_add_chart_value(Fl_Widget* o,double v,const char* s,uchar c){
+ ((Fl_Chart*)o)->add(v,s,c);}
+inline void fl_insert_chart_value(Fl_Widget* o, int i, double v, const char* s, uchar c) {
+ ((Fl_Chart*)o)->insert(i,v,s,c);}
+inline void fl_replace_chart_value(Fl_Widget* o, int i, double v, const char* s, uchar c) {
+ ((Fl_Chart*)o)->replace(i,v,s,c);}
+inline void fl_set_chart_bounds(Fl_Widget* o, double a, double b) {
+ ((Fl_Chart*)o)->bounds(a,b);}
+inline void fl_set_chart_maxnumb(Fl_Widget* o, int v) {
+ ((Fl_Chart*)o)->maxsize(v);}
+inline void fl_set_chart_autosize(Fl_Widget* o, int v) {
+ ((Fl_Chart*)o)->autosize(v);}
+inline void fl_set_chart_lstyle(Fl_Widget* o, Fl_Font v) {
+ ((Fl_Chart*)o)->text_font(v);}
+inline void fl_set_chart_lsize(Fl_Widget* o, int v) {
+ ((Fl_Chart*)o)->text_size(v);}
+inline void fl_set_chart_lcolor(Fl_Widget* o, unsigned v) {
+ ((Fl_Chart*)o)->text_color((Fl_Color)v);}
+#define fl_set_chart_lcol fl_set_chart_lcolor
+
+#include <fltk/Fl_Choice.h>
+
+#define FL_NORMAL_CHOICE 0
+#define FL_NORMAL_CHOICE2 0
+#define FL_DROPLIST_CHOICE 0
+
+forms_constructor(Fl_Choice, fl_add_choice)
+inline void fl_clear_choice(Fl_Widget* o) {
+ ((Fl_Choice*)o)->clear();}
+inline void fl_addto_choice(Fl_Widget* o, const char* s) {
+ ((Fl_Choice*)o)->add(s);}
+inline void fl_replace_choice(Fl_Widget* o, int i, const char* s) {
+ ((Fl_Choice*)o)->replace(i-1,s);}
+inline void fl_delete_choice(Fl_Widget* o, int i) {
+ ((Fl_Choice*)o)->remove(i-1);}
+inline void fl_set_choice(Fl_Widget* o, int i) {
+ ((Fl_Choice*)o)->value(i-1);}
+// inline void fl_set_choice_text(Fl_Widget*, const char*);
+inline int fl_get_choice(Fl_Widget* o) {
+ return ((Fl_Choice*)o)->value()+1;}
+// inline const char* fl_get_choice_item_text(Fl_Widget*, int);
+// inline int fl_get_choice_maxitems(Fl_Widget*);
+inline const char* fl_get_choice_text(Fl_Widget* o) {
+ return ((Fl_Choice*)o)->text();}
+inline void fl_set_choice_fontsize(Fl_Widget* o, int x) {
+ ((Fl_Choice*)o)->text_size(x);}
+inline void fl_set_choice_fontstyle(Fl_Widget* o, Fl_Font x) {
+ ((Fl_Choice*)o)->text_font(x);}
+// inline void fl_set_choice_item_mode(Fl_Widget*, int, unsigned);
+// inline void fl_set_choice_item_shortcut(Fl_Widget*, int, const char*);
+
+#include <fltk/Fl_Clock.h>
+forms_constructor(Fl_Clock, fl_add_clock)
+inline void fl_get_clock(Fl_Widget* o, int* h, int* m, int* s) {
+ *h = ((Fl_Clock*)o)->hour();
+ *m = ((Fl_Clock*)o)->minute();
+ *s = ((Fl_Clock*)o)->second();
+}
+
+#include <fltk/Fl_Counter.h>
+forms_constructor(Fl_Counter, fl_add_counter)
+inline void fl_set_counter_value(Fl_Widget* o, double v) {
+ ((Fl_Counter*)o)->value(v);}
+inline void fl_set_counter_bounds(Fl_Widget* o, double a, double b) {
+ ((Fl_Counter*)o)->range(a,b);}
+inline void fl_set_counter_step(Fl_Widget* o, double a, double b) {
+ ((Fl_Counter*)o)->step(a / b);}
+inline void fl_set_counter_precision(Fl_Widget* o, int v) {
+// ((Fl_Counter*)o)->precision(v);}
+ ((Fl_Counter*)o)->step(1/(10^v));}
+inline void fl_set_counter_return(Fl_Widget* o, int v) {
+ ((Fl_Counter*)o)->when(v|FL_WHEN_RELEASE);}
+inline double fl_get_counter_value(Fl_Widget* o) {
+ return ((Fl_Counter*)o)->value();}
+inline void fl_get_counter_bounds(Fl_Widget* o, float* a, float* b) {
+ *a = float(((Fl_Counter*)o)->minimum());
+ *b = float(((Fl_Counter*)o)->maximum());
+}
+//inline void fl_set_counter_filter(Fl_Widget*,const char* (*)(Fl_Widget*,double,int));
+
+// Cursor stuff cannot be emulated because it uses X stuff
+inline void fl_set_cursor(Fl_Window* w, Fl_Cursor c) {w->cursor(c);}
+#define FL_INVISIBLE_CURSOR FL_CURSOR_NONE
+#define FL_DEFAULT_CURSOR FL_CURSOR_DEFAULT
+
+#include <fltk/Fl_Dial.h>
+
+#define FL_DIAL_COL1 FL_GRAY
+#define FL_DIAL_COL2 37
+
+forms_constructor(Fl_Dial, fl_add_dial)
+inline void fl_set_dial_value(Fl_Widget* o, double v) {
+ ((Fl_Dial*)o)->value(v);}
+inline double fl_get_dial_value(Fl_Widget* o) {
+ return ((Fl_Dial*)o)->value();}
+inline void fl_set_dial_bounds(Fl_Widget* o, double a, double b) {
+ ((Fl_Dial*)o)->range(a, b);}
+inline void fl_get_dial_bounds(Fl_Widget* o, float* a, float* b) {
+ *a = float(((Fl_Dial*)o)->minimum());
+ *b = float(((Fl_Dial*)o)->maximum());
+}
+inline void fl_set_dial_return(Fl_Widget* o, int i) {
+ ((Fl_Dial*)o)->when(i|FL_WHEN_RELEASE);}
+inline void fl_set_dial_angles(Fl_Widget* o, int a, int b) {
+ ((Fl_Dial*)o)->angles(a, b);}
+//inline void fl_set_dial_cross(Fl_Widget* o, int);
+// inline void fl_set_dial_direction(Fl_Widget* o, uchar d) {
+// ((Fl_Dial*)o)->direction(d);}
+inline void fl_set_dial_step(Fl_Widget* o, double v) {
+ ((Fl_Dial*)o)->step(v);}
+
+// Frames:
+
+inline Fl_Widget* fl_add_frame(Fl_Boxtype i,int x,int y,int w,int h,const char* l) {
+ return fl_add_box(i,x-3,y-3,w+6,h+6,l);}
+
+// labelframe nyi
+inline Fl_Widget* fl_add_labelframe(Fl_Boxtype i,int x,int y,int w,int h,const char* l) {
+ Fl_Widget* o = fl_add_box(i,x-3,y-3,w+6,h+6,l);
+ o->clear_flag(FL_ALIGN_MASK);
+ o->set_flag(FL_ALIGN_TOP | FL_ALIGN_LEFT);
+ return o;
+}
+
+#include "Fl_Free.h"
+inline Fl_Free*
+fl_add_free(int t,double x,double y,double w,double h,const char* l,
+ FL_HANDLEPTR hdl) {
+ return (Fl_Free*)(fl_add_new(
+ new Fl_Free(t,int(x),int(y),int(w),int(h),l,hdl)));
+}
+
+#include <fltk/fl_ask.h>
+#include <fltk/fl_show_colormap.h>
+
+inline int fl_show_question(const char* c, int = 0) {return fl_ask(c);}
+FL_FORMS_API void fl_show_message(const char *,const char *,const char *);
+FL_FORMS_API void fl_show_alert(const char *,const char *,const char *,int=0);
+FL_FORMS_API int fl_show_question(const char *,const char *,const char *);
+inline const char *fl_show_input(const char *l,const char*d=0) {return fl_input(l,d);}
+/*const*/ char *fl_show_simple_input(const char *label, const char *deflt = 0);
+int fl_show_choice(
+ const char *m1,
+ const char *m2,
+ const char *m3,
+ int numb,
+ const char *b0,
+ const char *b1,
+ const char *b2);
+
+inline void fl_set_goodies_font(int a, unsigned b) {
+ fl_message_style->label_font = fl_fonts+a;
+ fl_message_style->label_size = b;
+}
+#define fl_show_messages fl_message
+inline int fl_show_choices(const char* c,int n,const char* b1,const char* b2,
+ const char* b3, int) {
+ return fl_show_choice(0,c,0,n,b1,b2,b3);
+}
+
+#include <fltk/filename.h>
+#include <fltk/fl_file_chooser.h>
+inline int do_matching(char* a, const char* b) {return filename_match(a,b);}
+
+// Forms-compatable file chooser (implementation in fselect.C):
+FL_FORMS_API char* fl_show_file_selector(const char* message,const char* dir,
+ const char* pat,const char* fname);
+FL_FORMS_API char* fl_get_directory();
+FL_FORMS_API char* fl_get_pattern();
+FL_FORMS_API char* fl_get_filename();
+
+#include <fltk/Fl_Input.h>
+forms_constructor(Fl_Input, fl_add_input)
+inline void fl_set_input(Fl_Widget* o, const char* v) {
+ ((Fl_Input*)o)->text(v);}
+inline void fl_set_input_return(Fl_Widget* o, int x) {
+ ((Fl_Input*)o)->when(x | FL_WHEN_RELEASE);}
+inline void fl_set_input_color(Fl_Widget* o, unsigned a, unsigned /*b*/) {
+ ((Fl_Input*)o)->text_color((Fl_Color)a);
+// ((Fl_Input*)o)->cursor_color((Fl_Color)b);
+}
+// inline void fl_set_input_scroll(Fl_Widget*, int);
+inline void fl_set_input_cursorpos(Fl_Widget* o, int x, int /*y*/) {
+ ((Fl_Input*)o)->position(x);}
+// inline void fl_set_input_selected(Fl_Widget*, int);
+// inline void fl_set_input_selected_range(Fl_Widget*, int, int);
+// inline void fl_set_input_maxchars(Fl_Widget*, int);
+// inline void fl_set_input_format(Fl_Widget*, int, int);
+// inline void fl_set_input_hscrollbar(Fl_Widget*, int);
+// inline void fl_set_input_vscrollbar(Fl_Widget*, int);
+// inline void fl_set_input_xoffset(Fl_Widget*, int);
+// inline void fl_set_input_topline(Fl_Widget*, int);
+// inline void fl_set_input_scrollbarsize(Fl_Widget*, int, int);
+// inline int fl_get_input_topline(Fl_Widget*);
+// inline int fl_get_input_screenlines(Fl_Widget*);
+inline int fl_get_input_cursorpos(Fl_Widget* o, int*x, int*y) {
+ *x = ((Fl_Input*)o)->position(); *y = 0; return *x;}
+// inline int fl_get_input_numberoflines(Fl_Widget*);
+// inline void fl_get_input_format(Fl_Widget*, int*, int*);
+inline const char* fl_get_input(Fl_Widget* o) {return ((Fl_Input*)o)->text();}
+
+#include <fltk/Fl_Menu_Button.h>
+
+// types are not implemented, they all act like FL_PUSH_MENU:
+#define FL_TOUCH_MENU 0
+#define FL_PUSH_MENU 1
+#define FL_PULLDOWN_MENU 2
+forms_constructor(Fl_Menu_Button, fl_add_menu)
+
+inline void fl_clear_menu(Fl_Widget* o) {
+ ((Fl_Menu_Button*)o)->clear();}
+inline void fl_set_menu(Fl_Widget* o, const char* s) {
+ ((Fl_Menu_Button*)o)->clear(); ((Fl_Menu_Button*)o)->add(s);}
+inline void fl_addto_menu(Fl_Widget* o, const char* s) {
+ ((Fl_Menu_Button*)o)->add(s);}
+inline void fl_replace_menu_item(Fl_Widget* o, int i, const char* s) {
+ ((Fl_Menu_Button*)o)->replace(i-1,s);}
+inline void fl_delete_menu_item(Fl_Widget* o, int i) {
+ ((Fl_Menu_Button*)o)->remove(i-1);}
+inline void fl_set_menu_item_shortcut(Fl_Widget* o, int i, const char* s) {
+ ((Fl_Menu_Button*)o)->shortcut(i-1,fltk::key(s));}
+// inline void fl_set_menu_item_mode(Fl_Widget* o, int i, long x) {
+// ((Fl_Menu_Button*)o)->mode(i-1,x);}
+inline void fl_show_menu_symbol(Fl_Widget*, int ) {
+/* ((Fl_Menu_Button*)o)->show_menu_symbol(i); */}
+// inline void fl_set_menu_popup(Fl_Widget*, int);
+inline int fl_get_menu(Fl_Widget* o) {
+ return ((Fl_Menu_Button*)o)->value()+1;}
+inline const char* fl_get_menu_item_text(Fl_Widget* o, int i) {
+ return ((Fl_Menu_Button*)o)->text(i);}
+inline int fl_get_menu_maxitems(Fl_Widget* o) {
+ return ((Fl_Menu_Button*)o)->size();}
+inline int fl_get_menu_item_mode(Fl_Widget* o, int i) {
+ return ((Fl_Menu_Button*)o)->mode(i);}
+inline const char* fl_get_menu_text(Fl_Widget* o) {
+ return ((Fl_Menu_Button*)o)->text();}
+
+#include "Fl_Positioner.h"
+#define FL_NORMAL_POSITIONER 0
+forms_constructor(Fl_Positioner, fl_add_positioner)
+inline void fl_set_positioner_xvalue(Fl_Widget* o, double v) {
+ ((Fl_Positioner*)o)->xvalue(v);}
+inline double fl_get_positioner_xvalue(Fl_Widget* o) {
+ return ((Fl_Positioner*)o)->xvalue();}
+inline void fl_set_positioner_xbounds(Fl_Widget* o, double a, double b) {
+ ((Fl_Positioner*)o)->xbounds(a,b);}
+inline void fl_get_positioner_xbounds(Fl_Widget* o, float* a, float* b) {
+ *a = float(((Fl_Positioner*)o)->xminimum());
+ *b = float(((Fl_Positioner*)o)->xmaximum());
+}
+inline void fl_set_positioner_yvalue(Fl_Widget* o, double v) {
+ ((Fl_Positioner*)o)->yvalue(v);}
+inline double fl_get_positioner_yvalue(Fl_Widget* o) {
+ return ((Fl_Positioner*)o)->yvalue();}
+inline void fl_set_positioner_ybounds(Fl_Widget* o, double a, double b) {
+ ((Fl_Positioner*)o)->ybounds(a,b);}
+inline void fl_get_positioner_ybounds(Fl_Widget* o, float* a, float* b) {
+ *a = float(((Fl_Positioner*)o)->yminimum());
+ *b = float(((Fl_Positioner*)o)->ymaximum());
+}
+inline void fl_set_positioner_xstep(Fl_Widget* o, double v) {
+ ((Fl_Positioner*)o)->xstep(v);}
+inline void fl_set_positioner_ystep(Fl_Widget* o, double v) {
+ ((Fl_Positioner*)o)->ystep(v);}
+inline void fl_set_positioner_return(Fl_Widget* o, int v) {
+ ((Fl_Positioner*)o)->when(v|FL_WHEN_RELEASE);}
+
+#include <fltk/Fl_Slider.h>
+
+#define FL_HOR_BROWSER_SLIDER FL_HOR_SLIDER
+#define FL_VERT_BROWSER_SLIDER FL_VERT_SLIDER
+
+forms_constructor(Fl_Slider, fl_add_slider)
+#define FL_SLIDER_COL1 FL_GRAY
+inline void fl_set_slider_value(Fl_Widget* o, double v) {
+ ((Fl_Slider*)o)->value(v);}
+inline double fl_get_slider_value(Fl_Widget* o) {
+ return ((Fl_Slider*)o)->value();}
+inline void fl_set_slider_bounds(Fl_Widget* o, double a, double b) {
+ ((Fl_Slider*)o)->range(a, b);}
+inline void fl_get_slider_bounds(Fl_Widget* o, float* a, float* b) {
+ *a = float(((Fl_Slider*)o)->minimum());
+ *b = float(((Fl_Slider*)o)->maximum());
+}
+inline void fl_set_slider_return(Fl_Widget* o, int i) {
+ ((Fl_Slider*)o)->when(i|FL_WHEN_RELEASE);}
+inline void fl_set_slider_step(Fl_Widget* o, double v) {
+ ((Fl_Slider*)o)->step(v);}
+// inline void fl_set_slider_increment(Fl_Widget* o, double v, double);
+inline void fl_set_slider_size(Fl_Widget* o, double v) {
+ ((Fl_Slider*)o)->slider_size(v);}
+
+#include <fltk/Fl_Value_Slider.h>
+forms_constructor(Fl_Value_Slider, fl_add_valslider)
+
+inline void fl_set_slider_precision(Fl_Widget* o, int i) {
+ double v = 1.0;
+ while (i--) v /= 10.0;
+ ((Fl_Value_Slider*)o)->step(v);
+}
+
+// The forms text object was the same as an Fl_Box except it inverted the
+// meaning of FL_ALIGN_INSIDE. Implementation in forms.C
+class FL_FORMS_API Fl_FormsText : public Fl_Widget {
+protected:
+ void draw();
+public:
+ Fl_FormsText(Fl_Boxtype b, int x, int y, int w, int h, const char* l=0)
+ : Fl_Widget(x,y,w,h,l) {box(b); clear_flag(FL_ALIGN_MASK); set_flag(FL_ALIGN_LEFT);}
+};
+#define FL_NORMAL_TEXT FL_NO_BOX
+forms_constructorb(Fl_FormsText, fl_add_text)
+
+#include "Fl_Timer.h"
+forms_constructort(Fl_Timer, fl_add_timer)
+inline void fl_set_timer(Fl_Widget* o, double v) {((Fl_Timer*)o)->value(v);}
+inline double fl_get_timer(Fl_Widget* o) {return ((Fl_Timer*)o)->value();}
+inline void fl_suspend_timer(Fl_Widget* o) {((Fl_Timer*)o)->suspended(1);}
+inline void fl_resume_timer(Fl_Widget* o) {((Fl_Timer*)o)->suspended(0);}
+inline void fl_set_timer_countup(Fl_Widget* o,char d) {((Fl_Timer*)o)->direction(d);}
+FL_FORMS_API void fl_gettime(long* sec, long* usec);
+
+// Fl_XYPlot nyi
+
+
+// stuff from DDForms:
+
+inline int fl_double_click() {return Fl::event_clicks();}
+inline void fl_draw() {Fl::flush();}
+
+#endif /* define __FORMS_H__ */
+
+//
+// End of "$Id: forms.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/gl.h b/fltk/fltk/gl.h
new file mode 100644
index 0000000..5b065e3
--- /dev/null
+++ b/fltk/fltk/gl.h
@@ -0,0 +1,114 @@
+// "$Id: gl.h 6233 2008-09-14 07:54:06Z spitzak $"
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// You must include this instead of GL/gl.h to get the Microsoft
+// APIENTRY stuff included (from <windows.h>) prior to the OpenGL
+// header files.
+//
+// This file also provides "missing" OpenGL functions, and
+// gl_start() and gl_finish() to allow OpenGL to be used in any window
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+/*! \file
+ Portably include the OpenGL header files, and define a few OpenGL
+ drawing functions provided by fltk. You may want to use the
+ OpenGL Extension Wrangler (glew), which will make it much easier
+ to call modern OpenGL extensions. If so, include glew.h before
+ this file, or define USE_GLEW to 1 before including this.
+*/
+
+#ifndef gl_draw_H
+#define gl_draw_H
+
+#ifndef DOXYGEN
+#include "Color.h"
+#include "Flags.h"
+
+#if USE_GLEW
+# include <GL/glew.h>
+#elif defined(__GLEW_H__)
+ /* do nothing if they included glew.h */
+#else
+
+# define GL_GLEXT_PROTOTYPES 1
+# ifdef _WIN32
+# include <windows.h>
+# undef OPAQUE
+# undef DELETE
+# undef ERROR
+# undef IN
+# undef OUT
+# undef POINT
+# undef far
+# undef max
+# undef min
+# undef near
+# include <GL/gl.h>
+# elif defined(__APPLE__)
+# ifndef APIENTRY
+# define APIENTRY
+# endif
+# include <OpenGL/gl.h>
+# else
+# include <GL/gl.h>
+# endif
+
+# if !defined(GL_VERSION_1_4) || defined(DOXYGEN)
+FL_GL_API void glWindowPos2i(int x, int y);
+# endif
+
+#endif
+#endif
+
+namespace fltk {
+
+struct Font;
+
+/// \name fltk/gl.h
+//@{
+
+FL_GL_API void glstart();
+FL_GL_API void glfinish();
+
+FL_GL_API void glsetcolor(Color);
+
+FL_GL_API void glstrokerect(int x,int y,int w,int h);
+inline void glfillrect(int x,int y,int w,int h) {glRecti(x,y,x+w,y+h);}
+
+FL_GL_API void glsetfont(Font* f, float size);
+FL_GL_API float glgetascent();
+FL_GL_API float glgetdescent();
+FL_GL_API float glgetwidth(const char *);
+FL_GL_API float glgetwidth(const char *, int n);
+
+FL_GL_API void gldrawtext(const char*);
+FL_GL_API void gldrawtext(const char*, int n);
+FL_GL_API void gldrawtext(const char*, float x, float y, float z = 0);
+FL_GL_API void gldrawtext(const char*, int n, float x, float y, float z = 0);
+
+FL_GL_API void gldrawimage(const uchar *, int x,int y,int w,int h, int d=3, int ld=0);
+
+//@}
+
+}
+#endif
+
+//
+// End of "$Id: gl.h 6233 2008-09-14 07:54:06Z spitzak $".
+//
diff --git a/fltk/fltk/gl2opengl.h b/fltk/fltk/gl2opengl.h
new file mode 100644
index 0000000..021827a
--- /dev/null
+++ b/fltk/fltk/gl2opengl.h
@@ -0,0 +1,35 @@
+/* gl.h
+
+ GL to OpenGL translator.
+ If you include this, you might be able to port old GL programs.
+ There are also much better emulators available on the net.
+
+*/
+
+#include <fltk/gl.h>
+#include "gl_draw.h"
+
+inline void clear() {glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);}
+#define RGBcolor(r,g,b) glColor3ub(r,g,b)
+#define bgnline() glBegin(GL_LINE_STRIP)
+#define bgnpolygon() glBegin(GL_POLYGON)
+#define bgnclosedline() glBegin(GL_LINE_LOOP)
+#define endline() glEnd()
+#define endpolygon() glEnd()
+#define endclosedline() glEnd()
+#define v2f(v) glVertex2fv(v)
+#define v2s(v) glVertex2sv(v)
+#define cmov(x,y,z) glRasterPos3f(x,y,z)
+#define charstr(s) gl_draw(s)
+#define fmprstr(s) gl_draw(s)
+typedef float Matrix[4][4];
+inline void pushmatrix() {glPushMatrix();}
+inline void popmatrix() {glPopMatrix();}
+inline void multmatrix(Matrix m) {glMultMatrixf((float *)m);}
+inline void color(int n) {glIndexi(n);}
+inline void rect(int x,int y,int r,int t) {gl_rect(x,y,r-x,t-y);}
+inline void rectf(int x,int y,int r,int t) {glRectf(x,y,r+1,t+1);}
+inline void recti(int x,int y,int r,int t) {gl_rect(x,y,r-x,t-y);}
+inline void rectfi(int x,int y,int r,int t) {glRecti(x,y,r+1,t+1);}
+inline void rects(int x,int y,int r,int t) {gl_rect(x,y,r-x,t-y);}
+inline void rectfs(int x,int y,int r,int t) {glRects(x,y,r+1,t+1);}
diff --git a/fltk/fltk/glut.h b/fltk/fltk/glut.h
new file mode 100644
index 0000000..5c87c26
--- /dev/null
+++ b/fltk/fltk/glut.h
@@ -0,0 +1,490 @@
+//
+// "$Id: glut.h 6521 2008-11-12 20:49:58Z spitzak $"
+//
+// GLUT emulation header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+// Emulation of GLUT using fltk.
+
+// GLUT is Copyright (c) Mark J. Kilgard, 1994, 1995, 1996:
+// "This program is freely distributable without licensing fees and is
+// provided without guarantee or warrantee expressed or implied. This
+// program is -not- in the public domain."
+
+// Although I have copied the GLUT API, none of my code is based on
+// any GLUT implementation details and is therefore covered by the LGPL.
+
+// FLTK does not include the GLUT drawing functions (such as
+// glutWireTeapot()) or the stroke fonts but the declarations for the
+// drawing functions are included here because otherwise there is no
+// way to get them along with this. To use them you will have to
+// link in the original GLUT library, put -lglut *after* -lfltk2.
+
+// Commented out lines indicate parts of GLUT that are not emulated.
+
+#ifndef __glut_h__
+# define __glut_h__
+
+# include "gl.h"
+
+////////////////////////////////////////////////////////////////
+// GLUT is emulated using this window class and these static variables
+// (plus several more static variables hidden in glut.C):
+
+# include <fltk/run.h>
+# include <fltk/events.h>
+# include <fltk/GlWindow.h>
+# include <fltk/Cursor.h>
+# include <fltk/visual.h>
+
+namespace fltk {
+
+ class FL_GLUT_API GlutWindow : public fltk::GlWindow {
+ void _init();
+ int mouse_down;
+ protected:
+ void draw();
+ void draw_overlay();
+ int handle(int);
+ public: // so the inline functions work
+ int number;
+ int menu[3];
+ void make_current();
+ void (*display)();
+ void (*overlaydisplay)();
+ void (*reshape)(int w, int h);
+ void (*keyboard)(uchar, int x, int y);
+ void (*mouse)(int b, int state, int x, int y);
+ void (*motion)(int x, int y);
+ void (*passivemotion)(int x, int y);
+ void (*entry)(int);
+ void (*visibility)(int);
+ void (*special)(int, int x, int y);
+ GlutWindow(int w, int h, const char *);
+ GlutWindow(int x, int y, int w, int h, const char *);
+ ~GlutWindow();
+ };
+}
+
+extern FL_GLUT_API fltk::GlutWindow *glut_window; // the current window
+extern FL_GLUT_API int glut_menu; // the current menu
+
+// function pointers that are not per-window:
+extern FL_GLUT_API void (*glut_idle_function)();
+extern FL_GLUT_API void (*glut_menustate_function)(int);
+extern FL_GLUT_API void (*glut_menustatus_function)(int,int,int);
+
+////////////////////////////////////////////////////////////////
+
+//# define GLUT_API_VERSION This does not match any version of GLUT exactly...
+
+FL_GLUT_API void glutInit(int *argcp, char **argv); // creates first window
+
+FL_GLUT_API void glutInitDisplayMode(unsigned int mode);
+enum {
+ GLUT_RGB = fltk::RGB_COLOR,
+ GLUT_RGBA = fltk::RGB_COLOR,
+ GLUT_INDEX = fltk::INDEXED_COLOR,
+ GLUT_SINGLE = fltk::SINGLE_BUFFER,
+ GLUT_DOUBLE = fltk::DOUBLE_BUFFER,
+ GLUT_ACCUM = fltk::ACCUM_BUFFER,
+ GLUT_ALPHA = fltk::ALPHA_BUFFER,
+ GLUT_DEPTH = fltk::DEPTH_BUFFER,
+ GLUT_STENCIL = fltk::STENCIL_BUFFER,
+ GLUT_MULTISAMPLE = fltk::MULTISAMPLE,
+ GLUT_STEREO = fltk::STEREO
+//GLUT_LUMINANCE = 512
+};
+
+FL_GLUT_API void glutInitWindowPosition(int x, int y);
+
+FL_GLUT_API void glutInitWindowSize(int w, int h);
+
+FL_GLUT_API void glutMainLoop();
+
+FL_GLUT_API int glutCreateWindow(const char *title);
+
+FL_GLUT_API int glutCreateSubWindow(int win, int x, int y, int width, int height);
+
+FL_GLUT_API void glutDestroyWindow(int win);
+
+inline void glutPostRedisplay() {glut_window->redraw();}
+
+FL_GLUT_API void glutPostWindowRedisplay(int win);
+
+FL_GLUT_API void glutSwapBuffers();
+
+inline int glutGetWindow() {return glut_window->number;}
+
+FL_GLUT_API void glutSetWindow(int win);
+
+inline void glutSetWindowTitle(const char *t) {glut_window->label(t);}
+
+inline void glutSetIconTitle(const char *t) {glut_window->iconlabel(t);}
+
+inline void glutPositionWindow(int x, int y) {glut_window->position(x,y);}
+
+inline void glutReshapeWindow(int w, int h) {glut_window->resize(w,h);}
+
+inline void glutPopWindow() {glut_window->show();}
+
+//inline void glutPushWindow();
+
+inline void glutIconifyWindow() {glut_window->iconize();}
+
+inline void glutShowWindow() {glut_window->show();}
+
+inline void glutHideWindow() {glut_window->hide();}
+
+inline void glutFullScreen() {glut_window->fullscreen();}
+
+inline void glutSetCursor(fltk::Cursor* cursor) {glut_window->cursor(cursor);}
+// notice that the numeric values are different than glut:
+
+//#define GLUT_CURSOR_RIGHT_ARROW
+//#define GLUT_CURSOR_LEFT_ARROW
+#define GLUT_CURSOR_INFO fltk::CURSOR_HAND
+//#define GLUT_CURSOR_DESTROY
+#define GLUT_CURSOR_HELP fltk::CURSOR_HELP
+//#define GLUT_CURSOR_CYCLE
+//#define GLUT_CURSOR_SPRAY
+#define GLUT_CURSOR_WAIT fltk::CURSOR_WAIT
+#define GLUT_CURSOR_TEXT fltk::CURSOR_INSERT
+#define GLUT_CURSOR_CROSSHAIR fltk::CURSOR_CROSS
+#define GLUT_CURSOR_UP_DOWN fltk::CURSOR_NS
+#define GLUT_CURSOR_TOP_SIDE fltk::CURSOR_NS
+#define GLUT_CURSOR_BOTTOM_SIDE fltk::CURSOR_NS
+#define GLUT_CURSOR_LEFT_RIGHT fltk::CURSOR_WE
+#define GLUT_CURSOR_LEFT_SIDE fltk::CURSOR_WE
+#define GLUT_CURSOR_RIGHT_SIDE fltk::CURSOR_WE
+#define GLUT_CURSOR_TOP_LEFT_CORNER fltk::CURSOR_NWSE
+#define GLUT_CURSOR_TOP_RIGHT_CORNER fltk::CURSOR_NESW
+#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER fltk::CURSOR_NWSE
+#define GLUT_CURSOR_BOTTOM_LEFT_CORNER fltk::CURSOR_NESW
+#define GLUT_CURSOR_INHERIT fltk::CURSOR_DEFAULT
+#define GLUT_CURSOR_NONE fltk::CURSOR_NONE
+#define GLUT_CURSOR_FULL_CROSSHAIR fltk::CURSOR_CROSS
+//inline void glutWarpPointer(int x, int y);
+
+inline void glutEstablishOverlay() {glut_window->make_overlay_current();}
+
+inline void glutRemoveOverlay() {glut_window->hide_overlay();}
+
+inline void glutUseLayer(GLenum layer) {
+ layer ? glut_window->make_overlay_current() : glut_window->make_current();}
+enum {GLUT_NORMAL, GLUT_OVERLAY};
+
+inline void glutPostOverlayRedisplay() {glut_window->redraw_overlay();}
+
+inline void glutShowOverlay() {glut_window->redraw_overlay();}
+
+inline void glutHideOverlay() {glut_window->hide_overlay();}
+
+FL_GLUT_API int glutCreateMenu(void (*)(int));
+
+FL_GLUT_API void glutDestroyMenu(int menu);
+
+inline int glutGetMenu() {return glut_menu;}
+
+inline void glutSetMenu(int m) {glut_menu = m;}
+
+FL_GLUT_API void glutAddMenuEntry(const char *label, int value);
+
+FL_GLUT_API void glutAddSubMenu(const char *label, int submenu);
+
+FL_GLUT_API void glutChangeToMenuEntry(int item, const char *label, int value);
+
+FL_GLUT_API void glutChangeToSubMenu(int item, const char *label, int submenu);
+
+FL_GLUT_API void glutRemoveMenuItem(int item);
+
+inline void glutAttachMenu(int b) {glut_window->menu[b] = glut_menu;}
+
+inline void glutDetachMenu(int b) {glut_window->menu[b] = 0;}
+
+inline void glutDisplayFunc(void (*f)()) {glut_window->display = f;}
+
+inline void glutReshapeFunc(void (*f)(int w, int h)) {glut_window->reshape=f;}
+
+inline void glutKeyboardFunc(void (*f)(uchar key, int x, int y)) {
+ glut_window->keyboard = f;}
+
+inline void glutMouseFunc(void (*f)(int b, int state, int x, int y)) {
+ glut_window->mouse = f;}
+enum {
+ GLUT_LEFT_BUTTON = 0,
+ GLUT_MIDDLE_BUTTON = 1,
+ GLUT_RIGHT_BUTTON = 2,
+ GLUT_DOWN = 0,
+ GLUT_UP = 1
+};
+
+inline void glutMotionFunc(void (*f)(int x, int y)) {glut_window->motion= f;}
+
+inline void glutPassiveMotionFunc(void (*f)(int x, int y)) {
+ glut_window->passivemotion= f;}
+
+inline void glutEntryFunc(void (*f)(int s)) {glut_window->entry = f;}
+enum {GLUT_LEFT, GLUT_ENTERED};
+
+inline void glutVisibilityFunc(void (*f)(int s)) {glut_window->visibility=f;}
+enum {GLUT_NOT_VISIBLE, GLUT_VISIBLE};
+
+FL_GLUT_API void glutIdleFunc(void (*f)());
+
+// Warning: this cast may not work on all machines:
+inline void glutTimerFunc(unsigned int msec, void (*f)(int), int value) {
+ fltk::add_timeout(msec*.001f, (fltk::TimeoutHandler)f, (void *)value);
+}
+
+inline void glutMenuStateFunc(void (*f)(int state)) {
+ glut_menustate_function = f;}
+
+inline void glutMenuStatusFunc(void (*f)(int status, int x, int y)) {
+ glut_menustatus_function = f;}
+enum {GLUT_MENU_NOT_IN_USE, GLUT_MENU_IN_USE};
+
+inline void glutSpecialFunc(void (*f)(int key, int x, int y)) {
+ glut_window->special = f;}
+enum {
+ GLUT_KEY_F1 = 1,
+ GLUT_KEY_F2 = 2,
+ GLUT_KEY_F3 = 3,
+ GLUT_KEY_F4 = 4,
+ GLUT_KEY_F5 = 5,
+ GLUT_KEY_F6 = 6,
+ GLUT_KEY_F7 = 7,
+ GLUT_KEY_F8 = 8,
+ GLUT_KEY_F9 = 9,
+ GLUT_KEY_F10 = 10,
+ GLUT_KEY_F11 = 11,
+ GLUT_KEY_F12 = 12,
+// WARNING: Different values than Glut uses:
+ GLUT_KEY_LEFT = fltk::LeftKey,
+ GLUT_KEY_UP = fltk::UpKey,
+ GLUT_KEY_RIGHT = fltk::RightKey,
+ GLUT_KEY_DOWN = fltk::DownKey,
+ GLUT_KEY_PAGE_UP = fltk::PageUpKey,
+ GLUT_KEY_PAGE_DOWN = fltk::PageDownKey,
+ GLUT_KEY_HOME = fltk::HomeKey,
+ GLUT_KEY_END = fltk::EndKey,
+ GLUT_KEY_INSERT = fltk::InsertKey
+};
+//inline void glutSpaceballMotionFunc(void (*)(int x, int y, int z));
+
+//inline void glutSpaceballRotateFunc(void (*)(int x, int y, int z));
+
+//inline void glutSpaceballButtonFunc(void (*)(int button, int state));
+
+//inline void glutButtonBoxFunc(void (*)(int button, int state));
+
+//inline void glutDialsFunc(void (*)(int dial, int value));
+
+//inline void glutTabletMotionFunc(void (*)(int x, int y));
+
+//inline void glutTabletButtonFunc(void (*)(int button, int state, int x, int y));
+
+inline void glutOverlayDisplayFunc(void (*f)()) {
+ glut_window->overlaydisplay = f;}
+
+//inline void glutWindowStatusFunc(void (*)(int state));
+//enum {GLUT_HIDDEN, GLUT_FULLY_RETAINED, GLUT_PARTIALLY_RETAINED,
+// GLUT_FULLY_COVERED};
+
+//inline void glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue);
+
+//inline GLfloat glutGetColor(int ndx, int component);
+//#define GLUT_RED 0
+//#define GLUT_GREEN 1
+//#define GLUT_BLUE 2
+
+//inline void glutCopyColormap(int win);
+
+// Warning: values are changed from GLUT!
+// Also relies on the GL_ symbols having values greater than 100
+int glutGet(GLenum type);
+enum {
+ GLUT_RETURN_ZERO = 0,
+ GLUT_WINDOW_X,
+ GLUT_WINDOW_Y,
+ GLUT_WINDOW_WIDTH,
+ GLUT_WINDOW_HEIGHT,
+ GLUT_WINDOW_PARENT,
+//GLUT_WINDOW_NUM_CHILDREN,
+//GLUT_WINDOW_CURSOR,
+ GLUT_SCREEN_WIDTH,
+ GLUT_SCREEN_HEIGHT,
+//GLUT_SCREEN_WIDTH_MM,
+//GLUT_SCREEN_HEIGHT_MM,
+ GLUT_MENU_NUM_ITEMS,
+ GLUT_DISPLAY_MODE_POSSIBLE,
+ GLUT_INIT_WINDOW_X,
+ GLUT_INIT_WINDOW_Y,
+ GLUT_INIT_WINDOW_WIDTH,
+ GLUT_INIT_WINDOW_HEIGHT,
+ GLUT_INIT_DISPLAY_MODE,
+//GLUT_ELAPSED_TIME,
+ GLUT_WINDOW_BUFFER_SIZE
+};
+
+# define GLUT_WINDOW_STENCIL_SIZE GL_STENCIL_BITS
+# define GLUT_WINDOW_DEPTH_SIZE GL_DEPTH_BITS
+# define GLUT_WINDOW_RED_SIZE GL_RED_BITS
+# define GLUT_WINDOW_GREEN_SIZE GL_GREEN_BITS
+# define GLUT_WINDOW_BLUE_SIZE GL_BLUE_BITS
+# define GLUT_WINDOW_ALPHA_SIZE GL_ALPHA_BITS
+# define GLUT_WINDOW_ACCUM_RED_SIZE GL_ACCUM_RED_BITS
+# define GLUT_WINDOW_ACCUM_GREEN_SIZE GL_ACCUM_GREEN_BITS
+# define GLUT_WINDOW_ACCUM_BLUE_SIZE GL_ACCUM_BLUE_BITS
+# define GLUT_WINDOW_ACCUM_ALPHA_SIZE GL_ACCUM_ALPHA_BITS
+# define GLUT_WINDOW_DOUBLEBUFFER GL_DOUBLEBUFFER
+# define GLUT_WINDOW_RGBA GL_RGBA
+# define GLUT_WINDOW_COLORMAP_SIZE GL_INDEX_BITS
+# ifdef GL_SAMPLES_SGIS
+# define GLUT_WINDOW_NUM_SAMPLES GL_SAMPLES_SGIS
+# else
+# define GLUT_WINDOW_NUM_SAMPLES GLUT_RETURN_ZERO
+# endif
+# define GLUT_WINDOW_STEREO GL_STEREO
+
+//int glutDeviceGet(GLenum type);
+//#define GLUT_HAS_KEYBOARD 600
+//#define GLUT_HAS_MOUSE 601
+//#define GLUT_HAS_SPACEBALL 602
+//#define GLUT_HAS_DIAL_AND_BUTTON_BOX 603
+//#define GLUT_HAS_TABLET 604
+//#define GLUT_NUM_MOUSE_BUTTONS 605
+//#define GLUT_NUM_SPACEBALL_BUTTONS 606
+//#define GLUT_NUM_BUTTON_BOX_BUTTONS 607
+//#define GLUT_NUM_DIALS 608
+//#define GLUT_NUM_TABLET_BUTTONS 609
+
+// WARNING: these values are different than Glut uses:
+enum {
+ GLUT_ACTIVE_SHIFT = fltk::SHIFT,
+ GLUT_ACTIVE_CTRL = fltk::CTRL,
+ GLUT_ACTIVE_ALT = fltk::ALT
+};
+inline int glutGetModifiers() {return fltk::event_state() & (GLUT_ACTIVE_SHIFT | GLUT_ACTIVE_CTRL | GLUT_ACTIVE_ALT);}
+
+int glutLayerGet(GLenum);
+# define GLUT_OVERLAY_POSSIBLE 800
+//#define GLUT_LAYER_IN_USE 801
+//#define GLUT_HAS_OVERLAY 802
+# define GLUT_TRANSPARENT_INDEX 803
+# define GLUT_NORMAL_DAMAGED 804
+# define GLUT_OVERLAY_DAMAGED 805
+
+//inline int glutVideoResizeGet(GLenum param);
+//#define GLUT_VIDEO_RESIZE_POSSIBLE 900
+//#define GLUT_VIDEO_RESIZE_IN_USE 901
+//#define GLUT_VIDEO_RESIZE_X_DELTA 902
+//#define GLUT_VIDEO_RESIZE_Y_DELTA 903
+//#define GLUT_VIDEO_RESIZE_WIDTH_DELTA 904
+//#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 905
+//#define GLUT_VIDEO_RESIZE_X 906
+//#define GLUT_VIDEO_RESIZE_Y 907
+//#define GLUT_VIDEO_RESIZE_WIDTH 908
+//#define GLUT_VIDEO_RESIZE_HEIGHT 909
+
+//inline void glutSetupVideoResizing();
+
+//inline void glutStopVideoResizing();
+
+//inline void glutVideoResize(int x, int y, int width, int height);
+
+//inline void glutVideoPan(int x, int y, int width, int height);
+
+////////////////////////////////////////////////////////////////
+// Emulated GLUT drawing functions:
+
+// Font argument must be a void* for compatability, so...
+extern FL_GLUT_API struct Glut_Bitmap_Font {fltk::Font* font; int size;}
+ glutBitmap9By15, glutBitmap8By13, glutBitmapTimesRoman10,
+ glutBitmapTimesRoman24, glutBitmapHelvetica10, glutBitmapHelvetica12,
+ glutBitmapHelvetica18;
+# define GLUT_BITMAP_9_BY_15 (&glutBitmap9By15)
+# define GLUT_BITMAP_8_BY_13 (&glutBitmap8By13)
+# define GLUT_BITMAP_TIMES_ROMAN_10 (&glutBitmapTimesRoman10)
+# define GLUT_BITMAP_TIMES_ROMAN_24 (&glutBitmapTimesRoman24)
+# define GLUT_BITMAP_HELVETICA_10 (&glutBitmapHelvetica10)
+# define GLUT_BITMAP_HELVETICA_12 (&glutBitmapHelvetica12)
+# define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18)
+
+FL_GLUT_API void glutBitmapCharacter(void *font, int character);
+FL_GLUT_API int glutBitmapWidth(void *font, int character);
+FL_GLUT_API int glutBitmapLength(void *font, const unsigned char* string);
+
+////////////////////////////////////////////////////////////////
+// GLUT drawing functions. These are NOT emulated but you can
+// link in the glut library to get them. This assumes the object
+// files in GLUT remain as they currently are so that there are
+// not symbol conflicts with the above.
+
+extern "C" {
+
+extern int APIENTRY glutExtensionSupported(char *name);
+
+/* Stroke font constants (use these in GLUT program). */
+# ifdef WIN32
+# define GLUT_STROKE_ROMAN ((void*)0)
+# define GLUT_STROKE_MONO_ROMAN ((void*)1)
+# else
+extern void *glutStrokeRoman;
+# define GLUT_STROKE_ROMAN (&glutStrokeRoman)
+extern void *glutStrokeMonoRoman;
+# define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman)
+# endif
+
+/* GLUT font sub-API */
+extern void APIENTRY glutStrokeCharacter(void *font, int character);
+extern int APIENTRY glutStrokeWidth(void *font, int character);
+
+/* GLUT pre-built models sub-API */
+extern void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
+extern void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
+extern void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+extern void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+extern void APIENTRY glutWireCube(GLdouble size);
+extern void APIENTRY glutSolidCube(GLdouble size);
+extern void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+extern void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+extern void APIENTRY glutWireDodecahedron();
+extern void APIENTRY glutSolidDodecahedron();
+extern void APIENTRY glutWireTeapot(GLdouble size);
+extern void APIENTRY glutSolidTeapot(GLdouble size);
+extern void APIENTRY glutWireOctahedron();
+extern void APIENTRY glutSolidOctahedron();
+extern void APIENTRY glutWireTetrahedron();
+extern void APIENTRY glutSolidTetrahedron();
+extern void APIENTRY glutWireIcosahedron();
+extern void APIENTRY glutSolidIcosahedron();
+
+}
+
+#endif /* !__glut_h__ */
+
+//
+// End of "$Id: glut.h 6521 2008-11-12 20:49:58Z spitzak $".
+//
diff --git a/fltk/fltk/layout.h b/fltk/fltk/layout.h
new file mode 100644
index 0000000..6b110da
--- /dev/null
+++ b/fltk/fltk/layout.h
@@ -0,0 +1,41 @@
+#ifndef fltk_layout_h
+#define fltk_layout_h
+
+namespace fltk {
+
+/*!
+ Values of the bits stored in Widget::layout_damage().
+
+ When a widget resized or moved (or when it is initially created),
+ flags are set in Widget::layout_damage() to indicate the layout is
+ damaged. This will cause the virtual function Widget::layout() to be
+ called just before fltk attempts to draw the windows on the screen.
+ This is useful because often calculating the new layout is quite
+ expensive, this expense is now deferred until the user will actually
+ see the new size.
+
+ Some Group widgets such as fltk::PackedGroup will also use the
+ virtual Widget::layout() function to find out how big a widget
+ should be. A Widget is allowed to change it's own dimensions in
+ layout() (except it is not allowed to change it if called a second
+ time with no changes other than it's x/y position). This allows
+ widgets to resize to fit their contents.
+
+ The layout bits are turned on by calling Widget::relayout().
+*/
+enum {
+ LAYOUT_X = 0x01, /*!< Widget::x() changed by resize() */
+ LAYOUT_Y = 0x02, /*!< Widget::y() changed by resize() */
+ LAYOUT_XY = 0x03, /*!< Same as LAYOUT_X|LAYOUT_Y */
+ LAYOUT_W = 0x04, /*!< Widget::w() changed by resize() */
+ LAYOUT_H = 0x08, /*!< Widget::h() changed by resize() */
+ LAYOUT_WH = 0x0C, /*!< Same as LAYOUT_W|LAYOUT_H */
+ LAYOUT_XYWH = 0x0F, /*!< Same as LAYOUT_XY|LAYOUT_WH */
+ LAYOUT_CHILD = 0x10, /*!< Widget::layout() needs to be called on a child of this group widget. */
+ LAYOUT_USER = 0x20, /*!< The moving/resizing is being caused by the user and not internal code. */
+ LAYOUT_DAMAGE = 0x80 /*!< Widget::relayout() was called. */
+};
+
+}
+
+#endif
diff --git a/fltk/fltk/load_plugin.h b/fltk/fltk/load_plugin.h
new file mode 100644
index 0000000..fe234b1
--- /dev/null
+++ b/fltk/fltk/load_plugin.h
@@ -0,0 +1,14 @@
+/*! \file
+ This is a convienence function for portable loading of a plugin
+ and possibly returing a symbol in that plugin. The function is
+ \e not in the fltk namespace!
+*/
+
+#ifndef fl_load_plugin_h
+#define fl_load_plugin_h
+
+#include "FL_API.h"
+
+FL_API void* load_plugin(const char* name, const char* symbol);
+
+#endif
diff --git a/fltk/fltk/mac.r b/fltk/fltk/mac.r
new file mode 100644
index 0000000..7501143
--- /dev/null
+++ b/fltk/fltk/mac.r
@@ -0,0 +1,13 @@
+data 'MBAR' (128) {
+ $"0001 0080" /* ...x */
+};
+
+data 'MENU' (128, "Apple") {
+ $"0080 0000 0000 0000 0000 FFFF FFFB 0114" /* .x........xxxx.. */
+ $"0A41 626F 7574 2046 4C54 4B00 0000 0001" /* xAbout FLTK..... */
+ $"2D00 0000 0000" /* -..... */
+};
+
+data 'carb' (0) {
+};
+
diff --git a/fltk/fltk/math.h b/fltk/fltk/math.h
new file mode 100644
index 0000000..ae56143
--- /dev/null
+++ b/fltk/fltk/math.h
@@ -0,0 +1,92 @@
+//
+// "$Id: math.h 4886 2006-03-30 09:55:32Z fabien $"
+//
+// The purpose of this header file is to make math.h look the same as
+// Unix on other operating systems.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fl_math_h
+#define fl_math_h
+
+#include <math.h>
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+/* things missing from <math.h> on Windows: */
+# include <float.h>
+
+# ifndef M_PI
+# define M_PI 3.14159265358979323846
+# define M_PI_2 1.57079632679489661923
+# define M_PI_4 0.78539816339744830962
+# define M_1_PI 0.31830988618379067154
+# define M_2_PI 0.63661977236758134308
+# define M_SQRT2 1.41421356237309504880
+# define M_SQRT1_2 0.70710678118654752440
+# endif
+
+# define rint(v) floor((v)+.5)
+# define copysign _copysign
+# define drand48() ((double)rand()/RAND_MAX)
+# define srand48(n) srand((n));
+
+#endif
+
+#ifdef __EMX__
+# include <float.h>
+#endif
+
+// define missing 'f' versions of functions:
+#if 1 // All systems seem to be missing rintf:
+# define rintf(v) floorf((v)+.5f)
+#endif
+#if defined(__APPLE__) || defined(__sun__) || defined(__BORLANDC__)
+# define floorf(a) ((float)floor(a))
+# define ceilf(a) ((float)ceil(a))
+# define fmodf(a,b) ((float)fmod(a,b))
+# undef fabsf
+# define fabsf(a) ((float)fabs(a))
+# define sinf(a) ((float)sin(a))
+# define cosf(a) ((float)cos(a))
+# define tanf(a) ((float)tan(a))
+# define asinf(a) ((float)asin(a))
+# define acosf(a) ((float)acos(a))
+# define atanf(a) ((float)atan(a))
+# define atan2f(a,b) ((float)atan2(a,b))
+# define expf(a) ((float)exp(a))
+# define logf(a) ((float)log(a))
+# define log10f(a) ((float)log10(a))
+# undef sqrtf
+# define sqrtf(a) ((float)sqrt(a))
+#endif
+#ifdef __alpha // powf is broken on alphas, at least in gcc
+# define powf(a,b) ((float)pow(a,b))
+#endif
+#ifdef _WIN32
+# define expm1f(a) ((float)expm1(a))
+# define log1pf(a) ((float)log1p(a))
+#endif
+
+#endif
+
+//
+// End of "$Id: math.h 4886 2006-03-30 09:55:32Z fabien $".
+//
diff --git a/fltk/fltk/osx.h b/fltk/fltk/osx.h
new file mode 100644
index 0000000..3c862f9
--- /dev/null
+++ b/fltk/fltk/osx.h
@@ -0,0 +1,147 @@
+// "$Id: osx.h 6233 2008-09-14 07:54:06Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+/** \file
+
+Declarations of FLTK symbols and interfaces that only exist if FLTK is
+compiled on Windows. It is recommended you avoid using this header
+file, and that you segregate code requiring it to it's own source
+file.
+
+FLTK is currently using the Carbon interface, and this includes
+the <Carbon/Carbon.h> header file. A macro is used to rename the
+Carbon "Style" as "XStyle" to avoid conflicts with FLTK. (all
+drawing is using Quartz, however!)
+
+Many of the functions have the same name and purpose as ones defined
+in x11.h, just with different return types. Due to how Doxygen works,
+the X version of these is described here.
+*/
+
+#ifndef fltk_osx_h
+#define fltk_osx_h
+
+# ifndef DOXYGEN
+// Standard MacOS Carbon API includes...
+# define Style XStyle
+# include <Carbon/Carbon.h>
+# undef Style
+
+// Now make some fixes to the headers...
+# undef check // Dunno where this comes from...
+# endif
+
+# include "draw.h"
+
+////////////////////////////////////////////////////////////////
+
+namespace fltk {
+
+/// \name fltk/osx.h
+//@{
+
+////////////////////////////////////////////////////////////////
+// constant information about the display:
+
+//extern FL_API void *qdisplay;
+extern FL_API void open_display();
+extern FL_API void close_display();
+extern FL_API WindowPtr quartz_window;
+extern FL_API CGContextRef quartz_gc;
+extern FL_API Handle system_menu;
+extern FL_API class SystemMenuBar *system_menu_bar;
+
+////////////////////////////////////////////////////////////////
+// event handling:
+
+// we want some way to access last message from system
+
+// Register a function to call when user opens a file in finder:
+extern void open_callback(void (*cb)(const char* name));
+
+////////////////////////////////////////////////////////////////
+// drawing functions:
+
+extern FL_API void clip_region(RgnHandle);
+extern FL_API RgnHandle clip_region();
+extern FL_API void draw_into(CGContextRef xid, int w, int h);
+extern FL_API void stop_drawing(CGImageRef xid);
+# define HFONT const char* // points at name of font!
+extern FL_API HFONT xfont();
+
+extern FL_API void clear_quartz_clipping();
+extern FL_API void begin_quartz_image(CGRect&, const Rectangle&);
+extern FL_API void end_quartz_image();
+
+////////////////////////////////////////////////////////////////
+# ifdef fltk_Window_h // only include this if <fltk/Window.h> was included
+
+// When fltk tells X about a window, one of these objects is created.
+// Warning: this object is highly subject to change! It's definition
+// is only here so that fltk::xid(Window) can be declared inline:
+
+class FL_API CreatedWindow {
+public:
+ WindowPtr xid; // used by main windows
+ Window* window;
+ RgnHandle region; // damage region
+ void expose(const Rectangle&);
+ CreatedWindow* next;
+ RgnHandle subRegion; // region which clips out children
+ CreatedWindow *children, *brother;
+ bool wait_for_expose;
+ bool need_new_subRegion;
+ bool overlay;
+ static CreatedWindow* first;
+ static CreatedWindow* find(const Window* window) {return window->i;}
+ static int borders(const Window* w, int& dx, int& dy, int& dw, int& dh);
+ // Quartz additions:
+ CGContextRef gc;
+};
+
+extern FL_API void fill_quartz_context();
+extern FL_API void release_quartz_context(CreatedWindow *x=0);
+
+// convert xid <-> Window:
+//inline WindowPtr xid(const Window*w) {return CreatedWindow::find(w)->xid;}
+WindowPtr xid(const Window*);
+Window* find(WindowPtr xid);
+
+extern CursPtr default_cursor;
+extern CursPtr current_cursor;
+extern const Widget* cursor_for;
+
+# endif //Fl_Window_H
+
+//@}
+
+}
+
+# if USE_CAIRO
+# include <fltk/fltk_cairo.h>
+# include <cairo-quartz.h>
+# else
+ typedef struct _cairo cairo_t;
+# endif
+
+#endif
+
+// End of "$Id: osx.h 6233 2008-09-14 07:54:06Z spitzak $".
diff --git a/fltk/fltk/pnmImage.h b/fltk/fltk/pnmImage.h
new file mode 100644
index 0000000..f151c7b
--- /dev/null
+++ b/fltk/fltk/pnmImage.h
@@ -0,0 +1,45 @@
+// "$Id: pnmImage.h 4288 2005-04-16 00:13:17Z mike $"
+//
+// PNM image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2005 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+#ifndef fltk_pnm_Image_h
+#define fltk_pnm_Image_h
+
+#include "SharedImage.h"
+
+namespace fltk {
+
+class FL_IMAGES_API pnmImage : public SharedImage {
+public:
+ pnmImage(const char* filename);
+ // virtual function overrides
+ bool fetch();
+};
+
+}
+
+#endif
+
+// End of "$Id: pnmImage.h 4288 2005-04-16 00:13:17Z mike $".
diff --git a/fltk/fltk/rgbImage.h b/fltk/fltk/rgbImage.h
new file mode 100644
index 0000000..88cde8b
--- /dev/null
+++ b/fltk/fltk/rgbImage.h
@@ -0,0 +1,50 @@
+//
+// "$Id: rgbImage.h 5568 2006-12-30 07:54:24Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+// This is an obsolete class from fltk2 development. All functionality
+// has been moved to the base Image class.
+
+#ifndef fltk_rgbImage_h
+#define fltk_rgbImage_h
+
+#include "Image.h"
+
+namespace fltk {
+
+class FL_API rgbImage : public Image {
+public:
+ //bool write_jpeg(const char *filename, int quality=75, int dpi=150);
+ rgbImage(const char* name=0) : Image(name) {}
+ rgbImage(const uchar* d, PixelType p, int W, int H) :
+ Image(d,p,W,H,fltk::depth(p)*W) {}
+ rgbImage(const uchar* d, PixelType p, int W, int H, int linedelta) :
+ Image(d,p,W,H,linedelta) {}
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: rgbImage.h 5568 2006-12-30 07:54:24Z spitzak $".
+//
diff --git a/fltk/fltk/run.h b/fltk/fltk/run.h
new file mode 100644
index 0000000..cf545c1
--- /dev/null
+++ b/fltk/fltk/run.h
@@ -0,0 +1,93 @@
+// "$Id: run.h 6233 2008-09-14 07:54:06Z spitzak $"
+//
+// The basic fltk runtime. Every program needs to call this somewhere.
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_run_h
+#define fltk_run_h
+
+#include "FL_API.h"
+#ifdef check
+# undef check
+#endif
+
+namespace fltk {
+
+/// \name fltk/run.h
+//@{
+
+FL_API void display(const char*);
+FL_API int arg(int, char**, int&);
+FL_API int args(int, char**, int&, int (*)(int,char**,int&) = 0);
+extern FL_API const char* const help;
+FL_API void args(int, char**);
+FL_API bool enable_tablet_events();
+
+FL_API int wait();
+FL_API int wait(float time);
+FL_API int check();
+FL_API int ready();
+FL_API int run();
+FL_API void flush();
+FL_API void redraw();
+extern FL_API int damage_;
+inline void damage(int d) {damage_ = d;}
+inline int damage() {return damage_;}
+
+/*! Type of function passed to add_timeout(), add_check(), and add_idle() */
+typedef void (*TimeoutHandler)(void*);
+
+FL_API double get_time_secs();
+
+FL_API void add_timeout(float t, TimeoutHandler, void* v = 0);
+FL_API void repeat_timeout(float t, TimeoutHandler,void* = 0);
+FL_API bool has_timeout(TimeoutHandler, void* = 0);
+FL_API void remove_timeout(TimeoutHandler, void* = 0);
+
+FL_API void add_check(TimeoutHandler, void* = 0);
+FL_API bool has_check(TimeoutHandler, void* = 0);
+FL_API void remove_check(TimeoutHandler, void* = 0);
+
+FL_API void add_idle(TimeoutHandler, void* = 0);
+FL_API bool has_idle(TimeoutHandler, void* = 0);
+FL_API void remove_idle(TimeoutHandler, void* = 0);
+
+// For back-compatability only:
+extern FL_API void (*idle)();
+inline void set_idle(void (*cb)()) {idle = cb;}
+
+/*! Type of function passed to add_fd() */
+typedef void (*FileHandler)(int fd, void*);
+enum {READ = 1, WRITE = 4, EXCEPT = 8};
+FL_API void add_fd(int fd, int when, FileHandler, void* =0);
+FL_API void add_fd(int fd, FileHandler, void* = 0);
+FL_API void remove_fd(int, int when = -1);
+
+FL_API void lock();
+FL_API void unlock();
+FL_API void awake(void* message = 0);
+FL_API void* thread_message();
+FL_API bool in_main_thread();
+
+//@}
+
+}
+
+#endif
diff --git a/fltk/fltk/show_colormap.h b/fltk/fltk/show_colormap.h
new file mode 100644
index 0000000..8810417
--- /dev/null
+++ b/fltk/fltk/show_colormap.h
@@ -0,0 +1,36 @@
+// "$Id: show_colormap.h 6233 2008-09-14 07:54:06Z spitzak $"
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_show_colormap_h
+#define fltk_show_colormap_h
+
+#include "FL_API.h"
+#include "Color.h"
+
+namespace fltk {
+FL_API Color show_colormap(Color oldcol);
+}
+
+#endif
+
+//
+// End of "$Id: show_colormap.h 6233 2008-09-14 07:54:06Z spitzak $".
+//
diff --git a/fltk/fltk/string.h b/fltk/fltk/string.h
new file mode 100644
index 0000000..84e283a
--- /dev/null
+++ b/fltk/fltk/string.h
@@ -0,0 +1,89 @@
+/* "$Id: string.h 5961 2007-10-17 20:54:58Z spitzak $"
+ *
+ * Copyright 1998-2006 by Bill Spitzak and others.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Please report all bugs and problems to "fltk-bugs@fltk.org".
+ */
+
+/*! \file
+
+ Provides definitions for C string manipulation functions so that
+ portable programs may be written. None of these functions are in
+ the fltk namespace.
+
+ In most cases the functions are provided by your operation system,
+ or are simple renames of operating system functions.
+
+ This file is designed to work on Windows, Linux, and BSD systems.
+ It may need to be edited to work on other systems. Please try
+ to do this by adding #if statements so this file remains portable.
+
+ Some versions of fltk wrote this file using autoconf. I never liked
+ this because I could not share the header file between systems, so
+ I have reverted to a constant version.
+*/
+
+#ifndef fltk_string_h
+#define fltk_string_h
+
+#ifndef DOXYGEN
+
+# include <string.h>
+# include <stdarg.h> /* for va_list */
+# include <stdio.h> /* for sprintf, vsprintf, snprintf and vsnprintf */
+
+/* Windows has equivalent functions, but being Microsoft they added
+ gratuitoius changes to the names to stop code from being portable: */
+#if (defined(_WIN32) && !defined(__CYGWIN__)) || defined(__EMX__)
+# define strcasecmp(s,t) _stricmp(s, t)
+# define strncasecmp(s,t,n) _strnicmp(s, t, n)
+# define vsnprintf _vsnprintf
+# define snprintf _snprintf
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#endif
+
+#include "FL_API.h"
+
+FL_API extern char* newstring(const char *);
+
+#if defined(DOXYGEN) || defined(__MWERKS__)
+FL_API extern int strcasecmp(const char *, const char *);
+FL_API extern int strncasecmp(const char *, const char *, size_t);
+#endif
+
+#if defined(DOXYGEN) || !defined(__linux) && !defined(_WIN32) && !defined(__FreeBSD__) && !defined(__APPLE__)
+FL_API extern int snprintf(char *, size_t, const char *, ...);
+FL_API extern int vsnprintf(char *, size_t, const char *, va_list ap);
+#endif
+
+#if defined(DOXYGEN) || !defined(__FreeBSD__) && !defined(__APPLE__)
+FL_API extern size_t strlcat(char *, const char *, size_t);
+FL_API extern size_t strlcpy(char *, const char *, size_t);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/*
+ * End of "$Id: string.h 5961 2007-10-17 20:54:58Z spitzak $".
+ */
diff --git a/fltk/fltk/string.h.in b/fltk/fltk/string.h.in
new file mode 100644
index 0000000..d5bda20
--- /dev/null
+++ b/fltk/fltk/string.h.in
@@ -0,0 +1,130 @@
+/* "$Id: string.h.in 4115 2005-03-14 04:48:51Z spitzak $"
+ *
+ * Copyright 1998-2005 by Bill Spitzak and others.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Please report all bugs and problems to "fltk-bugs@fltk.org".
+ */
+
+/* This file was produced by the fltk configure script, and is thus
+ platform-specific. You may be able to use the unmodified string.h
+ included in the fltk source instead, it has different #if statements
+ to make it portable to the most popular platforms.
+*/
+
+#ifndef fltk_string_h
+#define fltk_string_h
+
+#undef HAVE_STRING_H
+#undef HAVE_STRINGS_H
+
+#undef HAVE_VSNPRINTF
+#undef HAVE_SNPRINTF
+#undef HAVE_STRCASECMP
+#undef HAVE_STRLCAT
+#undef HAVE_STRLCPY
+#undef HAVE_STRNCASECMP
+
+#include "FL_API.h"
+
+#ifdef HAVE_STRING_H
+# include <string.h>
+#elif defined(HAVE_STRINGS_H)
+# include <strings.h>
+#endif
+
+#if 1 /* for va_list */
+# include <stdarg.h>
+#endif
+
+#if 1 /* for sprintf, vsprintf, snprintf and vsnprintf */
+# include <stdio.h>
+#endif
+
+#if 0
+# include <stdlib.h>
+#endif
+
+#if 0
+# include <ctype.h>
+/* Unixware defines these macros in above header for the obsolete BSD
+ functions, get rid of them as it prevents you making a variable
+ named "index"! */
+# ifdef index
+# undef index
+# endif
+# ifdef rindex
+# undef rindex
+# endif
+#endif
+
+#if 0 /*defined(__MWERKS__)*/
+/* MetroWerks' CodeWarrior put some functions in <extras.h> but that
+ file does not play well with others, so we don't include it. */
+# include <extras.h>
+#endif
+
+/* Windows has equivalent functions, but being Microsoft they added
+ gratuitoius changes to the names to stop code from being portable: */
+#if (defined(_WIN32) && !defined(__CYGWIN__)) || defined(__EMX__)
+# define strcasecmp(s,t) stricmp(s, t)
+# define strncasecmp(s,t,n) strnicmp(s, t, n)
+# define vsnprintf _vsnprintf
+# define snprintf _snprintf
+#endif
+
+/*! \addtogroup utilities
+ \{ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+FL_API extern const char* newstring(const char *);
+
+#if defined(DOXYGEN) || !defined(HAVE_STRCASECMP)
+FL_API extern int strcasecmp(const char *, const char *);
+#endif
+
+#if defined(DOXYGEN) || !defined(HAVE_STRNCASECMP)
+FL_API extern int strncasecmp(const char *, const char *, size_t);
+#endif
+
+#if defined(DOXYGEN) || !defined(HAVE_SNPRINTF)
+FL_API extern int snprintf(char *, size_t, const char *, ...);
+#endif
+
+#if defined(DOXYGEN) || !defined(HAVE_VSNPRINTF)
+FL_API extern int vsnprintf(char *, size_t, const char *, va_list ap);
+#endif
+
+#if defined(DOXYGEN) || !defined(HAVE_STRLCAT)
+FL_API extern size_t strlcat(char *, const char *, size_t);
+#endif
+
+#if defined(DOXYGEN) || !defined(HAVE_STRLCPY)
+FL_API extern size_t strlcpy(char *, const char *, size_t);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/*! \} */
+
+#endif
+
+/*
+ * End of "$Id: string.h.in 4115 2005-03-14 04:48:51Z spitzak $".
+ */
diff --git a/fltk/fltk/utf.h b/fltk/fltk/utf.h
new file mode 100644
index 0000000..05509cd
--- /dev/null
+++ b/fltk/fltk/utf.h
@@ -0,0 +1,54 @@
+/* "$Id: utf.h 5197 2006-06-14 07:43:46Z spitzak $"
+ *
+ * Copyright 1998-2006 by Bill Spitzak and others.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Please report all bugs and problems to "fltk-bugs@fltk.org".
+ */
+/*! \file
+ Functions to manipulate UTF-8 strings and convert from/to legacy
+ encodings. These functions are \e not in the fltk namespace.
+*/
+
+#ifndef fltk_utf_h
+#define fltk_utf_h
+
+#include "FL_API.h"
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+FL_API int utf8bytes(unsigned ucs);
+
+FL_API unsigned utf8decode(const char*, const char* end, int* len);
+FL_API int utf8encode(unsigned, char*);
+FL_API const char* utf8fwd(const char*, const char* start, const char* end);
+FL_API const char* utf8back(const char*, const char* start, const char* end);
+
+FL_API unsigned utf8towc(const char*, unsigned, wchar_t*, unsigned);
+FL_API unsigned utf8tomb(const char*, unsigned, char*, unsigned);
+FL_API unsigned utf8toa (const char*, unsigned, char*, unsigned);
+FL_API unsigned utf8fromwc(char*, unsigned, const wchar_t*, unsigned);
+FL_API unsigned utf8frommb(char*, unsigned, const char*, unsigned);
+FL_API unsigned utf8froma (char*, unsigned, const char*, unsigned);
+FL_API int utf8locale();
+FL_API int utf8test(const char*, unsigned);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/fltk/fltk/visual.h b/fltk/fltk/visual.h
new file mode 100644
index 0000000..47a80cd
--- /dev/null
+++ b/fltk/fltk/visual.h
@@ -0,0 +1,56 @@
+// "$Id: visual.h 6233 2008-09-14 07:54:06Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+#ifndef fltk_visual_h
+#define fltk_visual_h
+
+#include "FL_API.h"
+
+namespace fltk {
+
+/// \name fltk/visual.h
+//@{
+
+enum {
+ RGB_COLOR = 0,
+ INDEXED_COLOR = 1,
+ SINGLE_BUFFER = 0,
+ DOUBLE_BUFFER = 2,
+ ACCUM_BUFFER = 4,
+ ALPHA_BUFFER = 8,
+ DEPTH_BUFFER = 16,
+ STENCIL_BUFFER= 32,
+ RGB24_COLOR = 64,
+ MULTISAMPLE = 128,
+ STEREO = 256
+};
+
+extern FL_API bool visual(int);
+
+extern FL_GL_API bool glVisual(int);
+
+extern FL_API void own_colormap();
+
+//@}
+
+}
+
+#endif
diff --git a/fltk/fltk/win32.h b/fltk/fltk/win32.h
new file mode 100644
index 0000000..c405d0a
--- /dev/null
+++ b/fltk/fltk/win32.h
@@ -0,0 +1,195 @@
+// "$Id: win32.h 6233 2008-09-14 07:54:06Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+/** \file
+
+Declarations of FLTK symbols and interfaces that only exist if FLTK is
+compiled on Windows. It is recommended you avoid using this header
+file, and that you segregate code requiring it to it's own source
+file.
+
+This header includes the horrible <windows.h> header file, followed
+by a large list of undef's to get rid of name conflicts. It is recommended
+you use this if you need any windows functions rather than including
+that file directly.
+
+You can probably combine FLTK with other libraries that make their own
+WIN32 window classes. The easiest way is to call fltk::wait(), it
+will call DispatchMessage() for all messages to the other windows. If
+your other library insists on reading all the events, it will still
+work (as long as it calls DispatchMessage()), but you will
+have to arrange for the function fltk::flush() to be called regularily
+so that widgets are updated. Timeouts, the idle function, and file
+descriptor callbacks will not work in this case.
+
+Many of the functions have the same name and purpose as ones defined
+in x11.h, just with different return types. Due to how Doxygen works,
+the X version of these is described here.
+*/
+
+#if defined(_MSC_VER)
+# pragma once /* speeds up compilation */
+#endif
+
+#ifndef fltk_win32_h
+#define fltk_win32_h
+
+#ifndef DOXYGEN
+
+#ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+
+# include <windows.h>
+# include <winuser.h>
+# undef DELETE
+# undef ERROR
+# undef IN
+# undef OPAQUE
+# undef OUT
+# undef POINT
+//#undef far
+# undef max
+# undef min
+//#undef near
+
+#if USE_CAIRO
+# include <fltk/fltk_cairo.h>
+# include <cairo-win32.h>
+#endif
+
+extern "C" {
+
+// Function pointer declarations
+// WAS: I suspect these can be put into win32/run.cxx!
+
+typedef HWND (WINAPI *pfCreateWindowExW)(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
+typedef HMODULE (WINAPI *pfLoadLibraryW)(LPCWSTR lpFileName);
+typedef BOOL (WINAPI *pfPeekMessage)(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg);
+typedef BOOL (WINAPI *pfGetMessage)(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
+typedef LRESULT (WINAPI *pfDispatchMessage)(const MSG *lpmsg);
+typedef BOOL (WINAPI *pfSetWindowTextW)(HWND hWnd, LPCWSTR lpString);
+typedef LRESULT (WINAPI *pfDefWindowProc)(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
+typedef BOOL (WINAPI *pfPostMessage)(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
+typedef int (WINAPI *pfMessageBoxW)(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType);
+
+typedef HFONT (WINAPI *pfCreateFontIndirectW)(CONST LOGFONTW *);
+typedef BOOL (WINAPI *pfGetTextMetricsW)(HDC, LPTEXTMETRICW);
+
+extern pfCreateWindowExW __CreateWindowExW;
+extern pfLoadLibraryW __LoadLibraryW;
+extern pfPeekMessage __PeekMessage;
+extern pfGetMessage __GetMessage;
+extern pfDispatchMessage __DispatchMessage;
+extern pfSetWindowTextW __SetWindowTextW;
+extern pfDefWindowProc __DefWindowProc;
+extern pfPostMessage __PostMessage;
+extern pfMessageBoxW __MessageBoxW;
+
+extern pfCreateFontIndirectW __CreateFontIndirectW;
+extern pfGetTextMetricsW __GetTextMetricsW;
+
+}; /* extern "C" */
+#endif // !DOXYGEN
+
+#include "draw.h"
+
+namespace fltk {
+
+/// \name fltk/win32.h
+//@{
+
+////////////////////////////////////////////////////////////////
+// constant information about the display:
+
+extern FL_API void open_display();
+extern FL_API void close_display();
+extern FL_API HINSTANCE xdisplay;
+extern FL_API HPALETTE xpalette; // non-zero only on 8-bit displays!
+
+////////////////////////////////////////////////////////////////
+// event handling:
+
+extern FL_API MSG msg;
+
+////////////////////////////////////////////////////////////////
+// drawing functions:
+
+extern FL_API HDC dc;
+extern FL_API HDC getDC();
+extern FL_API HFONT xfont();
+extern FL_API TEXTMETRICW* textmetric();
+extern FL_API COLORREF current_xpixel;
+extern FL_API COLORREF xpixel(Color i);
+extern FL_API HPEN setpen();
+extern FL_API HBRUSH setbrush();
+extern FL_API void clip_region(HRGN);
+extern FL_API HRGN clip_region();
+
+extern FL_API void draw_into(HBITMAP, int w, int h);
+extern FL_API void stop_drawing(HBITMAP);
+extern FL_API void stop_drawing(HWND);
+
+////////////////////////////////////////////////////////////////
+#ifdef fltk_Window_h // only include this if <fltk/Fl_Window.h> was included
+
+// When fltk tells X about a window, one of these objects is created.
+// Warning: this object is highly subject to change! It's definition
+// is only here so that fl_xid can be declared inline:
+
+class FL_API CreatedWindow {
+public:
+ HWND xid;
+ HDC dc;
+ HBITMAP backbuffer;
+ HDC bdc;
+ Window* window;
+ HRGN region;
+ void expose(const Rectangle&);
+ CreatedWindow* next;
+ bool wait_for_expose;
+ bool backbuffer_bad; // used for XDBE
+ bool overlay; // true if redraw_overlay was called
+ HCURSOR cursor;
+ const Widget* cursor_for;
+ static CreatedWindow* first;
+ static CreatedWindow* find(const Window* window) {return window->i;}
+ void set_minmax(LPMINMAXINFO minmax);
+ static void create(Window*);
+};
+
+// convert xid <-> Window:
+inline HWND xid(const Window*w) {return CreatedWindow::find(w)->xid;}
+Window* find(HWND xid);
+
+extern FL_API HCURSOR default_cursor;
+
+#endif // Fl_Window_H
+
+//@}
+
+}
+
+#endif
+
+//
+// End of "$Id: win32.h 6233 2008-09-14 07:54:06Z spitzak $".
+//
diff --git a/fltk/fltk/x.h b/fltk/fltk/x.h
new file mode 100644
index 0000000..9377b31
--- /dev/null
+++ b/fltk/fltk/x.h
@@ -0,0 +1,47 @@
+// "$Id: x.h 5586 2007-01-07 07:23:21Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+/** \file
+ "Portably" include either x11.h, win32.h, or osx.h header files,
+ depending on your system. Since the system-specific interfaces
+ resemble each other somewhat, use of this header and some macros
+ may allow you to merge system-specific code for different systems
+ together.
+*/
+
+#ifndef fltk_x_h
+# define fltk_x_h
+# if defined(_WIN32) && !USE_X11
+# include "win32.h"
+# elif defined(__APPLE__) && !USE_X11
+# include "osx.h"
+# else
+# define USE_X11 1
+# include "x11.h"
+# endif
+#endif
+
+#if USE_CAIRO
+# include "fltk_cairo.h"
+#endif
+//
+// End of "$Id: x.h 5586 2007-01-07 07:23:21Z spitzak $".
+//
diff --git a/fltk/fltk/x11.h b/fltk/fltk/x11.h
new file mode 100644
index 0000000..1376d95
--- /dev/null
+++ b/fltk/fltk/x11.h
@@ -0,0 +1,185 @@
+// "$Id: x.h 5140 2006-05-22 04:46:07Z spitzak $"
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+
+/** \file
+
+Declarations of FLTK symbols and interfaces that only exist if FLTK
+is compiled to use X11, as it is by default on Unix. It is recommended
+you avoid using this header file, and that you segregate code requiring
+it to it's own source file.
+
+This header includes the Xlib.h, Xutil.h, Xatom.h, XInput.h, and XI.h
+header files, with sufficent wrappers to avoid conflicts with FLTK.
+In particular a macro is used so that "Window" is replaced by "XWindow"
+in these headers. You should use this rather than including the X
+header files directly.
+
+*/
+
+#ifndef fltk_x11_h
+# define fltk_x11_h
+
+////////////////////////////////////////////////////////////////
+// Try to get the parts of Xlib.h included while avoiding warnings:
+
+# ifndef DOXYGEN
+# define Window XWindow
+
+// pragmas are to fix the broken SGI Irix Xlib header files:
+# if !defined(__GNUC__) && (defined(_ABIN32) || defined(_ABI64))
+# pragma set woff 3322
+# endif
+# include <X11/Xlib.h>
+# include <X11/Xutil.h>
+# if !defined(__GNUC__) && (defined(_ABIN32) || defined(_ABI64))
+# pragma reset woff 3322
+# endif
+
+# include <X11/Xatom.h>
+
+# if USE_XFT && !MAKEDEPEND
+# include <X11/Xft/Xft.h>
+# else
+ typedef struct _XftDraw XftDraw;
+ typedef struct _XftFont XftFont;
+# endif
+
+# include <X11/extensions/XInput.h>
+# include <X11/extensions/XI.h>
+
+# undef Window
+
+# if defined(__FreeBSD__) || defined(__APPLE__) || defined(__CYGWIN__)
+ typedef unsigned long ulong;
+ typedef unsigned int uint;
+ typedef unsigned char uchar;
+# endif
+
+# endif // !DOXYGEN
+
+#include "draw.h"
+
+extern FL_API Region XRectangleRegion(int x, int y, int w, int h);
+
+namespace fltk {
+
+/// \name fltk/x11.h
+//@{
+
+////////////////////////////////////////////////////////////////
+// constant info about the X server connection:
+
+extern FL_API void open_display();
+extern FL_API void open_display(Display*);
+extern FL_API void close_display();
+
+extern FL_API Display* xdisplay;
+extern FL_API XWindow message_window;
+extern FL_API int xscreen;
+extern FL_API XVisualInfo* xvisual;
+extern FL_API Colormap xcolormap;
+
+////////////////////////////////////////////////////////////////
+// event handling:
+
+// feed events into fltk by setting xevent and calling handle:
+extern FL_API XEvent xevent;
+extern FL_API bool handle();
+
+// set by last xevent with a timestamp:
+extern FL_API ulong event_time;
+
+////////////////////////////////////////////////////////////////
+// DnD:
+
+extern FL_API XWindow dnd_source_window;
+extern FL_API Atom *dnd_source_types;
+extern FL_API Atom dnd_type;
+extern FL_API Atom dnd_source_action;
+extern FL_API Atom dnd_action;
+
+////////////////////////////////////////////////////////////////
+// drawing functions:
+
+extern FL_API XftDraw* xftc;
+extern FL_API GC gc;
+extern FL_API XWindow xwindow;
+extern FL_API ulong current_xpixel;
+extern FL_API ulong xpixel(Color i);
+extern FL_API void clip_region(Region);
+extern FL_API Region clip_region();
+
+extern FL_API void draw_into(XWindow, int w, int h);
+extern FL_API void stop_drawing(XWindow);
+
+extern FL_API XFontStruct* xfont();
+extern FL_API XftFont* xftfont();
+
+////////////////////////////////////////////////////////////////
+// only include this if <fltk/Window.h> was included:
+# if defined(fltk_Window_h) || defined(DOXYGEN)
+
+/**
+ When fltk tells X about a window, one of these objects is created.
+ Warning: this object is highly subject to change! It's definition
+ is only here so that xid(Window) can be declared inline:
+*/
+class FL_API CreatedWindow {
+public:
+ XWindow xid;
+ XWindow backbuffer;
+ XWindow frontbuffer;
+ Window *window;
+ Region region;
+ void expose(const Rectangle&);
+ CreatedWindow *next;
+ bool wait_for_expose;
+ bool backbuffer_bad; // used for XDBE
+ bool overlay; // true if redraw_overlay was called
+ ::Cursor cursor;
+ const Widget* cursor_for;
+ static CreatedWindow* first;
+ static CreatedWindow* find(const Window* window) {return window->i;}
+ void sendxjunk();
+ static void create(Window*,
+ XVisualInfo*, Colormap,
+ int background = -1);
+ static CreatedWindow* set_xid(Window*, XWindow);
+ Rectangle current_size;
+};
+
+// convert xid <-> Window:
+inline XWindow xid(const Window*w) {return CreatedWindow::find(w)->xid;}
+Window* find(XWindow xid);
+
+# endif // Window_h
+
+//@}
+
+} // namespace fltk
+
+# if USE_CAIRO
+# include <fltk/fltk_cairo.h>
+# include <cairo-xlib.h>
+# else
+ typedef struct _cairo cairo_t;
+# endif
+#endif
diff --git a/fltk/fltk/xbmImage.h b/fltk/fltk/xbmImage.h
new file mode 100644
index 0000000..f2bd773
--- /dev/null
+++ b/fltk/fltk/xbmImage.h
@@ -0,0 +1,50 @@
+//
+// "$Id: xbmImage.h 5581 2007-01-05 03:04:04Z spitzak $"
+//
+// Image subclass for in-memory xbm data (you #include the .xbm file
+// and then construct this).
+//
+// Copyright 2002 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_xbmImage_h
+#define fltk_xbmImage_h
+
+#include "Image.h"
+
+namespace fltk {
+
+class FL_API xbmImage : public Image {
+public:
+ const unsigned char *array;
+ xbmImage(const unsigned char *bits, int w,int h) :
+ Image(fltk::MASK,w,h), array(bits) {}
+ xbmImage(const char *bits, int w, int h) :
+ Image(fltk::MASK,w,h), array((const unsigned char *)bits) {}
+ bool fetch();
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: xbmImage.h 5581 2007-01-05 03:04:04Z spitzak $".
+//
diff --git a/fltk/fltk/xpmImage.h b/fltk/fltk/xpmImage.h
new file mode 100644
index 0000000..de0ebb0
--- /dev/null
+++ b/fltk/fltk/xpmImage.h
@@ -0,0 +1,59 @@
+//
+// "$Id: xpmImage.h 5568 2006-12-30 07:54:24Z spitzak $"
+//
+// Image subclass that draws the data from an xpm format file.
+// XPM is a file format designed for small icons in X, it can
+// be convienently #include'd to inline the image into a program.
+// Just pass the pointer defined by the file to the constructor.
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#ifndef fltk_xpmImage_h
+#define fltk_xpmImage_h
+
+#include "Image.h"
+
+namespace fltk {
+
+class FL_API xpmImage : public Image {
+public:
+ const char * const * data;
+ // XPM files define the data all kinds of ways, so the constructor
+ // is overloaded to accept all the ones we have seen:
+ xpmImage(const char * const * d, const char* name = 0) :
+ Image(name), data(d) {}
+ xpmImage(const unsigned char* const * d, const char* name = 0) :
+ Image(name), data((char**)d) {}
+ xpmImage(char ** d, const char* name = 0) :
+ Image(name), data(d) {}
+ bool fetch();
+
+ //! For xpmFileImage to reuse fetch() code.
+ static bool fetch(Image&, const char* const* data);
+};
+
+}
+
+#endif
+
+//
+// End of "$Id: xpmImage.h 5568 2006-12-30 07:54:24Z spitzak $".
+//
diff --git a/fltk/lib/README b/fltk/lib/README
new file mode 100644
index 0000000..5686bc3
--- /dev/null
+++ b/fltk/lib/README
@@ -0,0 +1,34 @@
+README.lib
+----------
+
+This directory is used as a destination for the libraries fltk
+compiles. "make install" will copy them to /usr/local/lib by default.
+
+Fltk will compile a number of libraries, the multiple libraries are
+designed to avoid having programs depend on libraries they are not
+acutally using. For instance if the OpenGL functions were put into the
+main fltk library you would be forced to link OpenGL even if your
+program is not using it. This is a design problem with present-day
+implementations of shared libraries on both Unix and Windows.
+
+The libraries are:
+
+ fltk2 - the core of fltk2, most programs only need this
+ fltk2_images - functions that use glut, png, jpg, other image libraries
+ fltk2_gl - Fl_Gl_Window and functions that use OpenGL
+ fltk2_glut - glut emulation functions
+ fltk2_forms - forms emulation functions
+
+Under UNIX you can compile either shared or static libraries. Static
+libraries are the default and have names like libfltk2.a. Shared
+libraries have (on most Unix systems) names like libfltk2.so.2. To
+enable shared libraries run "./configure --enable-shared".
+
+Under Microsoft Visual C++ a successful build of all projects and
+configurations will contain debug (fltk2d.lib and fltk2dlld.lib) and
+release (fltk2.lib fltk2dll.lib) libraries for you to link to. Both are
+built using the multi-threaded settings. The DLL files (fltk2dll.dll
+and fltk2dlld.dll) required for a complete DLL-based binary distribution
+are located in the "visualc" directory. WAS: is this correct? What
+about when you use GCC or BC++?
+
diff --git a/fltk/make.sh b/fltk/make.sh
new file mode 100755
index 0000000..04c8506
--- /dev/null
+++ b/fltk/make.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+./configure --disable-gl --disable-cairo --disable-threads --enable-static --disable-shared && make
+