diff options
author | Bastian Wissler | 2009-04-01 18:57:04 +0200 |
---|---|---|
committer | Bastian Wissler | 2009-04-01 18:57:04 +0200 |
commit | fd33e001bb3ab76b6aef97f641ddcbee9ab384ef (patch) | |
tree | eb485719b893df5068da6c063c094ae2aa32621b | |
parent | vmchooser source: (diff) | |
download | vmchooser-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
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 + |