[Library] r9011 - in branches/branch-3.0: . fluid ide/VisualC2008 ide/VisualC2010 ide/VisualC6 ide/Xcode4/FLTK.xcodeproj include include/fltk3 include/fltk3gl include/fltk3images include/fltk3jpeg include/fltk3png include/fltk3zlib src src/fltk3 src/fltk3gl src/fltk3images test

GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[Library] r9011 - in branches/branch-3.0: . fluid ide/VisualC2008 ide/VisualC2010 ide/VisualC6 ide/Xcode4/FLTK.xcodeproj include include/fltk3 include/fltk3gl include/fltk3images include/fltk3jpeg include/fltk3png include/fltk3zlib src src/fltk3 src/fltk3gl src/fltk3images test fltk-dev Aug 25, 2011 top right image
 
Author: matt
Date: 2011-08-25 14:50:59 -0700 (Thu, 25 Aug 2011)
New Revision: 9011
Log:
FLTK3:

This is the big one. Everything is now renamed and more or less in its final position.

This is tested on OSX Xcode and command line and compiles without any warnings.

It has not been tested with Linux/Unix/Cygwin or VisualC.



Added:
   branches/branch-3.0/include/fltk3/all.h
   branches/branch-3.0/include/fltk3/fltk3.h
   branches/branch-3.0/include/fltk3images/
   branches/branch-3.0/include/fltk3images/BMPImage.h
   branches/branch-3.0/include/fltk3images/GIFImage.h
   branches/branch-3.0/include/fltk3images/HelpDialog.h
   branches/branch-3.0/include/fltk3images/JPEGImage.h
   branches/branch-3.0/include/fltk3images/PNGImage.h
   branches/branch-3.0/include/fltk3images/PNMImage.h
   branches/branch-3.0/include/fltk3images/all.h
   branches/branch-3.0/include/fltk3images/fltk3images.h
   branches/branch-3.0/include/fltk3jpeg/all.h
   branches/branch-3.0/include/fltk3jpeg/fltk3jpeg.h
   branches/branch-3.0/include/fltk3png/all.h
   branches/branch-3.0/include/fltk3png/fltk3png.h
   branches/branch-3.0/include/fltk3zlib/all.h
   branches/branch-3.0/include/fltk3zlib/fltk3zlib.h
   branches/branch-3.0/src/fltk3/Adjuster.cxx
   branches/branch-3.0/src/fltk3/Bitmap.cxx
   branches/branch-3.0/src/fltk3/Box.cxx
   branches/branch-3.0/src/fltk3/Browser.cxx
   branches/branch-3.0/src/fltk3/Browser_.cxx
   branches/branch-3.0/src/fltk3/Browser_load.cxx
   branches/branch-3.0/src/fltk3/Button.cxx
   branches/branch-3.0/src/fltk3/Chart.cxx
   branches/branch-3.0/src/fltk3/CheckBrowser.cxx
   branches/branch-3.0/src/fltk3/CheckButton.cxx
   branches/branch-3.0/src/fltk3/Choice.cxx
   branches/branch-3.0/src/fltk3/Clock.cxx
   branches/branch-3.0/src/fltk3/ColorChooser.cxx
   branches/branch-3.0/src/fltk3/Counter.cxx
   branches/branch-3.0/src/fltk3/Device.cxx
   branches/branch-3.0/src/fltk3/Dial.cxx
   branches/branch-3.0/src/fltk3/DoubleWindow.cxx
   branches/branch-3.0/src/fltk3/FileBrowser.cxx
   branches/branch-3.0/src/fltk3/FileChooser.cxx
   branches/branch-3.0/src/fltk3/FileChooser.fl
   branches/branch-3.0/src/fltk3/FileChooser2.cxx
   branches/branch-3.0/src/fltk3/FileIcon.cxx
   branches/branch-3.0/src/fltk3/FileInput.cxx
   branches/branch-3.0/src/fltk3/GDIPrinter.cxx
   branches/branch-3.0/src/fltk3/Group.cxx
   branches/branch-3.0/src/fltk3/HelpView.cxx
   branches/branch-3.0/src/fltk3/Image.cxx
   branches/branch-3.0/src/fltk3/Input.cxx
   branches/branch-3.0/src/fltk3/Input_.cxx
   branches/branch-3.0/src/fltk3/LightButton.cxx
   branches/branch-3.0/src/fltk3/Menu.cxx
   branches/branch-3.0/src/fltk3/MenuBar.cxx
   branches/branch-3.0/src/fltk3/MenuButton.cxx
   branches/branch-3.0/src/fltk3/MenuWindow.cxx
   branches/branch-3.0/src/fltk3/Menu_.cxx
   branches/branch-3.0/src/fltk3/Menu_add.cxx
   branches/branch-3.0/src/fltk3/Menu_global.cxx
   branches/branch-3.0/src/fltk3/MultiLabel.cxx
   branches/branch-3.0/src/fltk3/NativeFileChooser.cxx
   branches/branch-3.0/src/fltk3/NativeFileChooser_common.cxx
   branches/branch-3.0/src/fltk3/OverlayWindow.cxx
   branches/branch-3.0/src/fltk3/PackedGroup.cxx
   branches/branch-3.0/src/fltk3/PagedDevice.cxx
   branches/branch-3.0/src/fltk3/Pixmap.cxx
   branches/branch-3.0/src/fltk3/Positioner.cxx
   branches/branch-3.0/src/fltk3/PostScript.cxx
   branches/branch-3.0/src/fltk3/Preferences.cxx
   branches/branch-3.0/src/fltk3/Printer.cxx
   branches/branch-3.0/src/fltk3/Progress.cxx
   branches/branch-3.0/src/fltk3/RepeatButton.cxx
   branches/branch-3.0/src/fltk3/ReturnButton.cxx
   branches/branch-3.0/src/fltk3/Roller.cxx
   branches/branch-3.0/src/fltk3/RoundButton.cxx
   branches/branch-3.0/src/fltk3/ScrollGroup.cxx
   branches/branch-3.0/src/fltk3/Scrollbar.cxx
   branches/branch-3.0/src/fltk3/SharedImage.cxx
   branches/branch-3.0/src/fltk3/SingleWindow.cxx
   branches/branch-3.0/src/fltk3/Slider.cxx
   branches/branch-3.0/src/fltk3/Style.cxx
   branches/branch-3.0/src/fltk3/SysMenuBar.cxx
   branches/branch-3.0/src/fltk3/TabGroup.cxx
   branches/branch-3.0/src/fltk3/Table.cxx
   branches/branch-3.0/src/fltk3/TableRow.cxx
   branches/branch-3.0/src/fltk3/TextBuffer.cxx
   branches/branch-3.0/src/fltk3/TextDisplay.cxx
   branches/branch-3.0/src/fltk3/TextEditor.cxx
   branches/branch-3.0/src/fltk3/TiledGroup.cxx
   branches/branch-3.0/src/fltk3/TiledImage.cxx
   branches/branch-3.0/src/fltk3/Tooltip.cxx
   branches/branch-3.0/src/fltk3/Tree.cxx
   branches/branch-3.0/src/fltk3/TreeItem.cxx
   branches/branch-3.0/src/fltk3/TreeItemArray.cxx
   branches/branch-3.0/src/fltk3/TreePrefs.cxx
   branches/branch-3.0/src/fltk3/Valuator.cxx
   branches/branch-3.0/src/fltk3/ValueInput.cxx
   branches/branch-3.0/src/fltk3/ValueOutput.cxx
   branches/branch-3.0/src/fltk3/ValueSlider.cxx
   branches/branch-3.0/src/fltk3/Widget.cxx
   branches/branch-3.0/src/fltk3/Window.cxx
   branches/branch-3.0/src/fltk3/Window_fullscreen.cxx
   branches/branch-3.0/src/fltk3/Window_hotspot.cxx
   branches/branch-3.0/src/fltk3/Window_iconize.cxx
   branches/branch-3.0/src/fltk3/Wizard.cxx
   branches/branch-3.0/src/fltk3/XBMImage.cxx
   branches/branch-3.0/src/fltk3/XPMImage.cxx
   branches/branch-3.0/src/fltk3/abort.cxx
   branches/branch-3.0/src/fltk3/add_idle.cxx
   branches/branch-3.0/src/fltk3/aimm.h
   branches/branch-3.0/src/fltk3/allfiles.xbm
   branches/branch-3.0/src/fltk3/arc.cxx
   branches/branch-3.0/src/fltk3/arci.cxx
   branches/branch-3.0/src/fltk3/arg.cxx
   branches/branch-3.0/src/fltk3/ask.cxx
   branches/branch-3.0/src/fltk3/boxtype.cxx
   branches/branch-3.0/src/fltk3/call_main.cxx
   branches/branch-3.0/src/fltk3/cgdebug.h
   branches/branch-3.0/src/fltk3/cmap.cxx
   branches/branch-3.0/src/fltk3/cmap.h
   branches/branch-3.0/src/fltk3/cocoa.mm
   branches/branch-3.0/src/fltk3/cocoaNativeFileChooser.mm
   branches/branch-3.0/src/fltk3/cocoaQuartzPrinter.mm
   branches/branch-3.0/src/fltk3/cocoa_color.cxx
   branches/branch-3.0/src/fltk3/cocoa_draw_image.cxx
   branches/branch-3.0/src/fltk3/cocoa_font.cxx
   branches/branch-3.0/src/fltk3/cocoa_get_key.cxx
   branches/branch-3.0/src/fltk3/cocoa_interface.cxx
   branches/branch-3.0/src/fltk3/cocoa_read_image.cxx
   branches/branch-3.0/src/fltk3/cocoa_set_fonts.cxx
   branches/branch-3.0/src/fltk3/color.cxx
   branches/branch-3.0/src/fltk3/compose.cxx
   branches/branch-3.0/src/fltk3/cursor.cxx
   branches/branch-3.0/src/fltk3/curve.cxx
   branches/branch-3.0/src/fltk3/d1.xbm
   branches/branch-3.0/src/fltk3/d1_mask.xbm
   branches/branch-3.0/src/fltk3/diamond_box.cxx
   branches/branch-3.0/src/fltk3/display.cxx
   branches/branch-3.0/src/fltk3/dnd.cxx
   branches/branch-3.0/src/fltk3/draw.cxx
   branches/branch-3.0/src/fltk3/draw_image.cxx
   branches/branch-3.0/src/fltk3/draw_pixmap.cxx
   branches/branch-3.0/src/fltk3/dump_compose.c
   branches/branch-3.0/src/fltk3/encoding_latin1.cxx
   branches/branch-3.0/src/fltk3/encoding_mac_roman.cxx
   branches/branch-3.0/src/fltk3/engraved_label.cxx
   branches/branch-3.0/src/fltk3/ew.xbm
   branches/branch-3.0/src/fltk3/ew_mask.xbm
   branches/branch-3.0/src/fltk3/fastarrow.h
   branches/branch-3.0/src/fltk3/file_dir.cxx
   branches/branch-3.0/src/fltk3/filename_absolute.cxx
   branches/branch-3.0/src/fltk3/filename_expand.cxx
   branches/branch-3.0/src/fltk3/filename_ext.cxx
   branches/branch-3.0/src/fltk3/filename_isdir.cxx
   branches/branch-3.0/src/fltk3/filename_list.cxx
   branches/branch-3.0/src/fltk3/filename_match.cxx
   branches/branch-3.0/src/fltk3/filename_setext.cxx
   branches/branch-3.0/src/fltk3/flstring.c
   branches/branch-3.0/src/fltk3/flstring.h
   branches/branch-3.0/src/fltk3/font.cxx
   branches/branch-3.0/src/fltk3/font.h
   branches/branch-3.0/src/fltk3/get_key.cxx
   branches/branch-3.0/src/fltk3/get_system_colors.cxx
   branches/branch-3.0/src/fltk3/grab.cxx
   branches/branch-3.0/src/fltk3/gtk.cxx
   branches/branch-3.0/src/fltk3/labeltype.cxx
   branches/branch-3.0/src/fltk3/line_style.cxx
   branches/branch-3.0/src/fltk3/lock.cxx
   branches/branch-3.0/src/fltk3/mediumarrow.h
   branches/branch-3.0/src/fltk3/new.xbm
   branches/branch-3.0/src/fltk3/ns.xbm
   branches/branch-3.0/src/fltk3/ns_mask.xbm
   branches/branch-3.0/src/fltk3/numericsort.cxx
   branches/branch-3.0/src/fltk3/open_uri.cxx
   branches/branch-3.0/src/fltk3/oval_box.cxx
   branches/branch-3.0/src/fltk3/overlay.cxx
   branches/branch-3.0/src/fltk3/overlay_visual.cxx
   branches/branch-3.0/src/fltk3/own_colormap.cxx
   branches/branch-3.0/src/fltk3/plastic.cxx
   branches/branch-3.0/src/fltk3/print_panel.cxx
   branches/branch-3.0/src/fltk3/print_panel.h
   branches/branch-3.0/src/fltk3/ps_image.cxx
   branches/branch-3.0/src/fltk3/read_image.cxx
   branches/branch-3.0/src/fltk3/rect.cxx
   branches/branch-3.0/src/fltk3/round_box.cxx
   branches/branch-3.0/src/fltk3/rounded_box.cxx
   branches/branch-3.0/src/fltk3/scandir.cxx
   branches/branch-3.0/src/fltk3/screen_xywh.cxx
   branches/branch-3.0/src/fltk3/scroll_area.cxx
   branches/branch-3.0/src/fltk3/set_font.cxx
   branches/branch-3.0/src/fltk3/set_fonts.cxx
   branches/branch-3.0/src/fltk3/shadow_box.cxx
   branches/branch-3.0/src/fltk3/shortcut.cxx
   branches/branch-3.0/src/fltk3/show_colormap.cxx
   branches/branch-3.0/src/fltk3/slowarrow.h
   branches/branch-3.0/src/fltk3/symbols.cxx
   branches/branch-3.0/src/fltk3/tile.xpm
   branches/branch-3.0/src/fltk3/up.xbm
   branches/branch-3.0/src/fltk3/utf.cxx
   branches/branch-3.0/src/fltk3/utf8.cxx
   branches/branch-3.0/src/fltk3/vertex.cxx
   branches/branch-3.0/src/fltk3/visual.cxx
   branches/branch-3.0/src/fltk3/vsnprintf.c
   branches/branch-3.0/src/fltk3/win32.cxx
   branches/branch-3.0/src/fltk3/win32NativeFileChooser.cxx
   branches/branch-3.0/src/fltk3/win32_color.cxx
   branches/branch-3.0/src/fltk3/win32_dnd.cxx
   branches/branch-3.0/src/fltk3/win32_draw_image.cxx
   branches/branch-3.0/src/fltk3/win32_font.cxx
   branches/branch-3.0/src/fltk3/win32_get_key.cxx
   branches/branch-3.0/src/fltk3/win32_read_image.cxx
   branches/branch-3.0/src/fltk3/win32_scandir.cxx
   branches/branch-3.0/src/fltk3/win32_set_fonts.cxx
   branches/branch-3.0/src/fltk3/x11.cxx
   branches/branch-3.0/src/fltk3/x11NativeFileChooser.cxx
   branches/branch-3.0/src/fltk3/x11_dnd.cxx
   branches/branch-3.0/src/fltk3/x11_font.cxx
   branches/branch-3.0/src/fltk3/x11_set_fonts.cxx
   branches/branch-3.0/src/fltk3/xcolor.h
   branches/branch-3.0/src/fltk3/xft_font.cxx
   branches/branch-3.0/src/fltk3/xft_set_fonts.cxx
   branches/branch-3.0/src/fltk3/xutf8/
   branches/branch-3.0/src/fltk3images/BMPImage.cxx
   branches/branch-3.0/src/fltk3images/FileIcon2.cxx
   branches/branch-3.0/src/fltk3images/GIFImage.cxx
   branches/branch-3.0/src/fltk3images/HelpDialog.cxx
   branches/branch-3.0/src/fltk3images/HelpDialog.fl
   branches/branch-3.0/src/fltk3images/HelpDialogDox.cxx
   branches/branch-3.0/src/fltk3images/JPEGImage.cxx
   branches/branch-3.0/src/fltk3images/PNGImage.cxx
   branches/branch-3.0/src/fltk3images/PNMImage.cxx
   branches/branch-3.0/src/fltk3images/images_core.cxx
Removed:
   branches/branch-3.0/include/fltk3/BMPImage.h
   branches/branch-3.0/include/fltk3/GIFImage.h
   branches/branch-3.0/include/fltk3/HelpDialog.h
   branches/branch-3.0/include/fltk3/JPEGImage.h
   branches/branch-3.0/include/fltk3/PNGImage.h
   branches/branch-3.0/include/fltk3/PNMImage.h
   branches/branch-3.0/include/fltk3/forms.h
   branches/branch-3.0/src/core/
Modified:
   branches/branch-3.0/configure.in
   branches/branch-3.0/fltk.flw
   branches/branch-3.0/fluid/Fl_Function_Type.cxx
   branches/branch-3.0/fluid/Fl_Group_Type.cxx
   branches/branch-3.0/fluid/Fl_Menu_Type.cxx
   branches/branch-3.0/fluid/Fl_Type.cxx
   branches/branch-3.0/fluid/Fl_Type.h
   branches/branch-3.0/fluid/Fl_Widget_Type.cxx
   branches/branch-3.0/fluid/Fl_Window_Type.cxx
   branches/branch-3.0/fluid/Fluid_Image.cxx
   branches/branch-3.0/fluid/code.cxx
   branches/branch-3.0/fluid/factory.cxx
   branches/branch-3.0/fluid/file.cxx
   branches/branch-3.0/fluid/file_make.cxx
   branches/branch-3.0/fluid/fluid.cxx
   branches/branch-3.0/fluid/makedepend
   branches/branch-3.0/fluid/template_panel.cxx
   branches/branch-3.0/fluid/undo.cxx
   branches/branch-3.0/ide/VisualC2008/fltk3.vcproj
   branches/branch-3.0/ide/VisualC2008/fltk3images.vcproj
   branches/branch-3.0/ide/VisualC2010/fltk3.vcxproj
   branches/branch-3.0/ide/VisualC2010/fltk3images.vcxproj
   branches/branch-3.0/ide/VisualC6/fltk3.dsp
   branches/branch-3.0/ide/VisualC6/fltk3images.dsp
   branches/branch-3.0/ide/Xcode4/FLTK.xcodeproj/project.pbxproj
   branches/branch-3.0/include/fltk3gl/all.h
   branches/branch-3.0/include/fltk3gl/fltk3gl.h
   branches/branch-3.0/src/Makefile
   branches/branch-3.0/src/fltk3/run.cxx
   branches/branch-3.0/src/fltk3gl/GLChoice.cxx
   branches/branch-3.0/src/fltk3gl/GLWindow.cxx
   branches/branch-3.0/src/makedepend
   branches/branch-3.0/test/file_chooser.cxx
   branches/branch-3.0/test/help.cxx
   branches/branch-3.0/test/makedepend
   branches/branch-3.0/test/menubar.cxx
   branches/branch-3.0/test/sudoku.cxx

Modified: branches/branch-3.0/configure.in
===================================================================
--- branches/branch-3.0/configure.in	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/configure.in	2011-08-25 21:50:59 UTC (rev 9011)
@@ -31,7 +31,7 @@
 AC_PREREQ(2.50)
 
 dnl Required file in package...
-AC_INIT(src/core/Fl.cxx)
+AC_INIT(src/fltk3/run.cxx)
 
 dnl So --with-archflags option is used during "checking size of long"
 if test `uname` = Darwin; then

Modified: branches/branch-3.0/fltk.flw
===================================================================
--- branches/branch-3.0/fltk.flw	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fltk.flw	2011-08-25 21:50:59 UTC (rev 9011)
@@ -12,9 +12,9 @@
   uuid_Xcode4_ReleaseBuildConfiguration {C5259E66-FBF8-43A2-B30F-8D59BBE3CF16}
   uuid_VC2008_Workspace {D21EA206-7BBC-4F5B-8518-A798E56EE0FC}
   uuid_VC2010_Workspace {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}
-  build_env 64
+  build_env 1
 } {
-  folder Applications {
+  folder Applications {open
     uuid_Xcode4_Group {137F861A-5702-45AC-821B-A2C51A17F780}
   } {
     app_target Fluid {
@@ -334,9 +334,25 @@
       target_path lib
       makefile_path src
     } {
-      folder Headers {
+      folder Headers {open
         uuid_Xcode4_Group {C2F00625-E401-4002-85F6-FA183D17629D}
       } {
+        file_ref {all.h} {
+          uuid_Xcode4_BuildFile {9E850E7A-3E87-45D8-9C32-299A0B34F920}
+          uuid_Xcode4_FileRef {DDEC0AB0-A3B1-46ED-A7CC-1090FA5FD9DC}
+          uuid_Xcode4_BuildFileInHeaders {6EC5A8E1-B2EE-44F9-9EE3-80C3505CDA66}
+          build_env 96
+          list_env 124
+          filename_and_path {include/fltk3/all.h}
+        }
+        file_ref {fltk3.h} {
+          uuid_Xcode4_BuildFile {9ABADC91-1800-47C9-8E88-2C4F7EC7BBF5}
+          uuid_Xcode4_FileRef {15B1A08E-DA32-48B0-904D-004A1C92EDD1}
+          uuid_Xcode4_BuildFileInHeaders {39576718-B602-42A5-839B-9B7E885D7837}
+          build_env 96
+          list_env 124
+          filename_and_path {include/fltk3/fltk3.h}
+        }
         file_ref {Adjuster.h} {
           uuid_Xcode4_BuildFile {19D0A8A7-81F6-48F4-A42B-0A0DBBC3770F}
           uuid_Xcode4_FileRef {1CDC310C-BCD1-48E9-90F6-541607EE265B}
@@ -361,14 +377,6 @@
           list_env 124
           filename_and_path {include/fltk3/Bitmap.h}
         }
-        file_ref {BMPImage.h} {
-          uuid_Xcode4_BuildFile {B02F1ACA-8C63-4C41-A0FA-429D42B66E10}
-          uuid_Xcode4_FileRef {5B9A35BB-8AE6-4627-BE89-BB6BF86DBDA1}
-          uuid_Xcode4_BuildFileInHeaders {26C1F556-804D-49CA-B330-7472D37CCAA4}
-          build_env 96
-          list_env 124
-          filename_and_path {include/fltk3/BMPImage.h}
-        }
         file_ref {Box.h} {
           uuid_Xcode4_BuildFile {A443E7E1-065D-4CA8-9E14-C567C120B62E}
           uuid_Xcode4_FileRef {0800D21F-C11C-4581-BA43-356FDB90C72D}
@@ -625,14 +633,6 @@
           list_env 124
           filename_and_path {include/fltk3/Free.h}
         }
-        file_ref {GIFImage.h} {
-          uuid_Xcode4_BuildFile {E1645FE3-A511-42A3-873D-131C575CF91A}
-          uuid_Xcode4_FileRef {605121E0-DA10-4363-AD06-B3FF977E11C8}
-          uuid_Xcode4_BuildFileInHeaders {8845649A-5BB6-4BA3-879C-1952D0C93211}
-          build_env 96
-          list_env 124
-          filename_and_path {include/fltk3/GIFImage.h}
-        }
         file_ref {Group.h} {
           uuid_Xcode4_BuildFile {2D46FE73-1213-4993-9C58-3AD4F912D0F1}
           uuid_Xcode4_FileRef {91EA0376-23A2-4777-B42C-16F89603F364}
@@ -641,14 +641,6 @@
           list_env 124
           filename_and_path {include/fltk3/Group.h}
         }
-        file_ref {HelpDialog.h} {
-          uuid_Xcode4_BuildFile {039E6910-80A1-4672-8705-02AC45E81900}
-          uuid_Xcode4_FileRef {0925F193-41B3-477E-B5AD-81F5397661F3}
-          uuid_Xcode4_BuildFileInHeaders {F7A66B0A-98D9-44E3-B704-829151BB84FB}
-          build_env 96
-          list_env 124
-          filename_and_path {include/fltk3/HelpDialog.h}
-        }
         file_ref {HelpView.h} {
           uuid_Xcode4_BuildFile {35AC3DE1-3781-43C2-A095-E3DC454BDCD4}
           uuid_Xcode4_FileRef {0CD096CD-1274-4A7C-9EC2-74191B646DB4}
@@ -737,14 +729,6 @@
           list_env 124
           filename_and_path {include/fltk3/IntInput.h}
         }
-        file_ref {JPEGImage.h} {
-          uuid_Xcode4_BuildFile {E924726D-D8F9-42F3-99B6-0B33A6E07929}
-          uuid_Xcode4_FileRef {60A217E0-989A-441E-96AA-E8B7D7B44D49}
-          uuid_Xcode4_BuildFileInHeaders {30029E6A-2C65-48E5-8722-0B7CFEBA9CF8}
-          build_env 96
-          list_env 124
-          filename_and_path {include/fltk3/JPEGImage.h}
-        }
         file_ref {LightButton.h} {
           uuid_Xcode4_BuildFile {CC28845A-AB92-4F7F-8BAB-D7C630F0AD00}
           uuid_Xcode4_FileRef {5A390823-6671-4644-BA82-DC6AB1FB4B81}
@@ -945,22 +929,6 @@
           list_env 124
           filename_and_path {include/fltk3/Plugin.h}
         }
-        file_ref {PNGImage.h} {
-          uuid_Xcode4_BuildFile {5D9E7161-6EC7-4233-AA60-D021CB0DFC59}
-          uuid_Xcode4_FileRef {25BEA285-CF71-4ED0-B043-193DEA1014E2}
-          uuid_Xcode4_BuildFileInHeaders {E3127242-7B17-4B32-9FCC-1F2101B769A4}
-          build_env 96
-          list_env 124
-          filename_and_path {include/fltk3/PNGImage.h}
-        }
-        file_ref {PNMImage.h} {
-          uuid_Xcode4_BuildFile {4C35DB58-66D6-4FE6-8D74-0F09B1B8EC70}
-          uuid_Xcode4_FileRef {EC95850E-4FC1-4DEB-A8EB-551759E4EBC2}
-          uuid_Xcode4_BuildFileInHeaders {CBE8880E-97E1-45DC-8CC0-78ED5298EAAE}
-          build_env 96
-          list_env 124
-          filename_and_path {include/fltk3/PNMImage.h}
-        }
         file_ref {Positioner.h} {
           uuid_Xcode4_BuildFile {62B3D61F-3AE4-4EF7-8084-F0A6FBD55B84}
           uuid_Xcode4_FileRef {813FC874-2EAA-4EDF-A759-0016EDAE447C}
@@ -1425,6 +1393,14 @@
           list_env 124
           filename_and_path {include/fltk3/x.h}
         }
+        file_ref {Xutf8.h} {
+          uuid_Xcode4_BuildFile {A0588617-DA9D-48BB-8001-E0414DBCBAA2}
+          uuid_Xcode4_FileRef {2E1B4089-1661-448E-8219-3960A46CDE69}
+          uuid_Xcode4_BuildFileInHeaders {E0943D9D-3EC5-4918-9A46-090378EBF9DF}
+          build_env 96
+          list_env 124
+          filename_and_path {include/fltk3/Xutf8.h}
+        }
         file_ref {XBMImage.h} {
           uuid_Xcode4_BuildFile {8AF480EA-F1C2-4A25-9AD4-658E8600CB70}
           uuid_Xcode4_FileRef {9F6F453D-C13B-4551-9976-F2088679FDAA}
@@ -1441,41 +1417,33 @@
           list_env 124
           filename_and_path {include/fltk3/XPMImage.h}
         }
-        file_ref {Xutf8.h} {
-          uuid_Xcode4_BuildFile {A0588617-DA9D-48BB-8001-E0414DBCBAA2}
-          uuid_Xcode4_FileRef {2E1B4089-1661-448E-8219-3960A46CDE69}
-          uuid_Xcode4_BuildFileInHeaders {E0943D9D-3EC5-4918-9A46-090378EBF9DF}
-          build_env 96
-          list_env 124
-          filename_and_path {include/fltk3/Xutf8.h}
-        }
       }
       folder Sources {
         uuid_Xcode4_Group {91990322-0AF9-42F2-A077-713540EE5AB1}
       } {
-        file_ref {Fl_cocoa.mm} {
+        file_ref {cocoa.mm} {
           uuid_Xcode4_BuildFile {99D08647-5486-4C7E-8CC9-51B70074F29C}
           uuid_Xcode4_FileRef {F6BB47B6-F621-4FC2-A7DC-BFD6B7C5F16D}
           uuid_Xcode4_BuildFileInSources {69C261B5-4876-4079-9B0B-EBCE4F62E633}
           build_env 99
           list_env 96
-          filename_and_path {src/core/Fl_cocoa.mm}
+          filename_and_path {src/fltk3/cocoa.mm}
         }
-        file_ref {Fl_Native_File_Chooser_MAC.mm} {
+        file_ref {cocoaNativeFileChooser.mm} {
           uuid_Xcode4_BuildFile {60D9759F-404F-4A7C-A356-2F92BC2F400F}
           uuid_Xcode4_FileRef {B23CCB73-2D6F-4196-8925-2B663827C3EE}
           uuid_Xcode4_BuildFileInSources {02BBCA82-9B2B-44D0-9C15-96A37443CA28}
           build_env 99
           list_env 96
-          filename_and_path {src/core/Fl_Native_File_Chooser_MAC.mm}
+          filename_and_path {src/fltk3/cocoaNativeFileChooser.mm}
         }
-        file_ref {Fl_Quartz_Printer.mm} {
+        file_ref {cocoaQuartzPrinter.mm} {
           uuid_Xcode4_BuildFile {982B3E9E-7B79-4E84-A10F-7270A2EB17A5}
           uuid_Xcode4_FileRef {10A048C4-1F53-4215-8F9A-E8829C9F77EA}
           uuid_Xcode4_BuildFileInSources {B7920395-B4B5-480F-BB30-14BE46AA357D}
           build_env 99
           list_env 96
-          filename_and_path {src/core/Fl_Quartz_Printer.mm}
+          filename_and_path {src/fltk3/cocoaQuartzPrinter.mm}
         }
         file_ref {run.cxx} {
           uuid_Xcode4_BuildFile {5E78E80A-9D1C-4351-9F3E-B2944D622982}
@@ -1483,930 +1451,930 @@
           uuid_Xcode4_BuildFileInSources {008DDC0F-78E3-4A40-8F42-9408DA34594C}
           filename_and_path {src/fltk3/run.cxx}
         }
-        file_ref {Fl_Adjuster.cxx} {
+        file_ref {Adjuster.cxx} {
           uuid_Xcode4_BuildFile {91FE1840-74E4-4847-8B8E-D8952CEAF112}
           uuid_Xcode4_FileRef {ECEA64F2-F8B3-4A76-B195-748D6949AD76}
           uuid_Xcode4_BuildFileInSources {2271ACEB-F7A7-435C-8F11-380D4086EF24}
-          filename_and_path {src/core/Fl_Adjuster.cxx}
+          filename_and_path {src/fltk3/Adjuster.cxx}
         }
-        file_ref {Fl_Bitmap.cxx} {
+        file_ref {Bitmap.cxx} {
           uuid_Xcode4_BuildFile {E9733D69-4D22-4B2E-B89C-81D879FA8FC5}
           uuid_Xcode4_FileRef {D68004A5-9E82-4A55-B1D1-365E2E22B59B}
           uuid_Xcode4_BuildFileInSources {87F292ED-EBB4-4EBB-BAC3-FF7CAEA18EC5}
-          filename_and_path {src/core/Fl_Bitmap.cxx}
+          filename_and_path {src/fltk3/Bitmap.cxx}
         }
-        file_ref {Fl_Box.cxx} {
+        file_ref {Box.cxx} {
           uuid_Xcode4_BuildFile {F4F6FEBB-918A-4AC7-813D-7B3E68C40425}
           uuid_Xcode4_FileRef {81608512-8823-4586-AF62-6E7935A2B539}
           uuid_Xcode4_BuildFileInSources {D3D9C65E-F19F-4B98-BE09-98BD5E8C7725}
-          filename_and_path {src/core/Fl_Box.cxx}
+          filename_and_path {src/fltk3/Box.cxx}
         }
-        file_ref {Fl_Browser.cxx} {
+        file_ref {Browser.cxx} {
           uuid_Xcode4_BuildFile {DA189983-8D64-4A1D-96B0-2E367C8C4CC6}
           uuid_Xcode4_FileRef {5CE1FF6E-BFDC-4925-A6BE-F6B954C22170}
           uuid_Xcode4_BuildFileInSources {F343A0DF-4678-4211-8A50-FC76857BF06F}
-          filename_and_path {src/core/Fl_Browser.cxx}
+          filename_and_path {src/fltk3/Browser.cxx}
         }
-        file_ref {Fl_Browser_.cxx} {
+        file_ref {Browser_.cxx} {
           uuid_Xcode4_BuildFile {545A2839-E435-4EB6-839C-22C991346FF0}
           uuid_Xcode4_FileRef {2FC85E98-E2B4-484F-815B-75078EBBA1CC}
           uuid_Xcode4_BuildFileInSources {9036C344-A95E-4174-8C78-610EB425415E}
-          filename_and_path {src/core/Fl_Browser_.cxx}
+          filename_and_path {src/fltk3/Browser_.cxx}
         }
-        file_ref {Fl_Browser_load.cxx} {
+        file_ref {Browser_load.cxx} {
           uuid_Xcode4_BuildFile {C18A3B76-19AC-4503-9A82-6386F545EFE7}
           uuid_Xcode4_FileRef {B89AE0F9-320A-489A-A15A-34AEA064E6FF}
           uuid_Xcode4_BuildFileInSources {C96803EE-BABD-4805-97B5-C7008A9507D0}
-          filename_and_path {src/core/Fl_Browser_load.cxx}
+          filename_and_path {src/fltk3/Browser_load.cxx}
         }
-        file_ref {Fl_Button.cxx} {
+        file_ref {Button.cxx} {
           uuid_Xcode4_BuildFile {07627EF8-0726-4AEE-A7BE-5B01D59A2320}
           uuid_Xcode4_FileRef {70F96088-141B-442E-AF9B-5EAE13E45EFD}
           uuid_Xcode4_BuildFileInSources {DE2BB513-7AFF-460D-8095-4D0C6D632F84}
-          filename_and_path {src/core/Fl_Button.cxx}
+          filename_and_path {src/fltk3/Button.cxx}
         }
-        file_ref {Fl_Chart.cxx} {
+        file_ref {Chart.cxx} {
           uuid_Xcode4_BuildFile {A6F1AA20-5E36-4069-95D7-B2ADB04EACBB}
           uuid_Xcode4_FileRef {39250031-7441-4BDF-ABE1-745EE2786E57}
           uuid_Xcode4_BuildFileInSources {B0CAF4D1-1E41-4BDD-AF60-C1F8DFCA17AA}
-          filename_and_path {src/core/Fl_Chart.cxx}
+          filename_and_path {src/fltk3/Chart.cxx}
         }
-        file_ref {Fl_Check_Browser.cxx} {
+        file_ref {CheckBrowser.cxx} {
           uuid_Xcode4_BuildFile {2D43DF76-FFA8-46BE-8CC7-97E71F74AB36}
           uuid_Xcode4_FileRef {F6EC011E-29BD-4ADB-B4C8-EEC9E72E52E7}
           uuid_Xcode4_BuildFileInSources {37D83B9E-5F12-4F75-9351-7841D83CC630}
-          filename_and_path {src/core/Fl_Check_Browser.cxx}
+          filename_and_path {src/fltk3/CheckBrowser.cxx}
         }
-        file_ref {Fl_Check_Button.cxx} {
+        file_ref {CheckButton.cxx} {
           uuid_Xcode4_BuildFile {6F0253C7-58FE-4E3E-A84D-ACA19AE0B60F}
           uuid_Xcode4_FileRef {490C9DC5-6833-46C7-A0F5-F3D9C9795A6D}
           uuid_Xcode4_BuildFileInSources {B34F20AC-057A-41BD-B8E5-05E3F37A17B1}
-          filename_and_path {src/core/Fl_Check_Button.cxx}
+          filename_and_path {src/fltk3/CheckButton.cxx}
         }
-        file_ref {Fl_Choice.cxx} {
+        file_ref {Choice.cxx} {
           uuid_Xcode4_BuildFile {3BD02867-1A12-4C3A-AE6C-5D570873345C}
           uuid_Xcode4_FileRef {6356BFF2-3C95-496B-8310-FA86D8F77F5C}
           uuid_Xcode4_BuildFileInSources {16189C32-2A6C-4A8A-BAF6-4DFE1DBD4A2E}
-          filename_and_path {src/core/Fl_Choice.cxx}
+          filename_and_path {src/fltk3/Choice.cxx}
         }
-        file_ref {Fl_Clock.cxx} {
+        file_ref {Clock.cxx} {
           uuid_Xcode4_BuildFile {64809F27-28E9-4E6E-95D6-BF69AE67D5FD}
           uuid_Xcode4_FileRef {1C4F7DBF-440E-4FD8-A83E-F098D786280A}
           uuid_Xcode4_BuildFileInSources {4BB96489-76E9-44BD-A619-51624DCAD9BA}
-          filename_and_path {src/core/Fl_Clock.cxx}
+          filename_and_path {src/fltk3/Clock.cxx}
         }
-        file_ref {Fl_Color_Chooser.cxx} {
+        file_ref {ColorChooser.cxx} {
           uuid_Xcode4_BuildFile {F4AB783F-377F-4E93-8461-F7D5660002E3}
           uuid_Xcode4_FileRef {4CF353D8-81FC-4DE3-9189-39E910629419}
           uuid_Xcode4_BuildFileInSources {2D847DBF-42FA-4B1F-8C9F-587D52345529}
-          filename_and_path {src/core/Fl_Color_Chooser.cxx}
+          filename_and_path {src/fltk3/ColorChooser.cxx}
         }
-        file_ref {Fl_Counter.cxx} {
+        file_ref {Counter.cxx} {
           uuid_Xcode4_BuildFile {45E38AE7-C514-4BBB-A2CE-4B897029509D}
           uuid_Xcode4_FileRef {96D41530-E053-46CC-8B6F-C1EBDBF7E11E}
           uuid_Xcode4_BuildFileInSources {B2BB321C-34B1-4D09-9434-7E63F4A99288}
-          filename_and_path {src/core/Fl_Counter.cxx}
+          filename_and_path {src/fltk3/Counter.cxx}
         }
-        file_ref {Fl_Device.cxx} {
+        file_ref {Device.cxx} {
           uuid_Xcode4_BuildFile {9CBCE251-1829-44C4-BAF4-F95523E02EDF}
           uuid_Xcode4_FileRef {CB4EA804-687E-4579-AB3B-DE67EA64E9FB}
           uuid_Xcode4_BuildFileInSources {B1AB3E6C-AA35-4A2D-9177-44469F0CB1D8}
-          filename_and_path {src/core/Fl_Device.cxx}
+          filename_and_path {src/fltk3/Device.cxx}
         }
-        file_ref {Fl_Dial.cxx} {
+        file_ref {Dial.cxx} {
           uuid_Xcode4_BuildFile {F4D1986C-C2AB-46EA-951E-0F696A73F7F5}
           uuid_Xcode4_FileRef {FDB40722-2840-4C62-98C1-D38291CAB607}
           uuid_Xcode4_BuildFileInSources {1369E7AD-84B4-4FD2-9D04-99627B063564}
-          filename_and_path {src/core/Fl_Dial.cxx}
+          filename_and_path {src/fltk3/Dial.cxx}
         }
-        file_ref {Fl_Double_Window.cxx} {
+        file_ref {DoubleWindow.cxx} {
           uuid_Xcode4_BuildFile {6E8494D3-F35B-4D9F-846B-5EFE8203DC04}
           uuid_Xcode4_FileRef {D65E879C-A8F7-46EF-94C2-E474B73853BC}
           uuid_Xcode4_BuildFileInSources {43FA5D81-2826-46FC-95B5-175515727381}
-          filename_and_path {src/core/Fl_Double_Window.cxx}
+          filename_and_path {src/fltk3/DoubleWindow.cxx}
         }
-        file_ref {Fl_File_Browser.cxx} {
+        file_ref {FileBrowser.cxx} {
           uuid_Xcode4_BuildFile {3C81269D-295A-4C8D-93B4-9A7B72027FE2}
           uuid_Xcode4_FileRef {31B32445-8CFD-4811-A4C7-628F7D814264}
           uuid_Xcode4_BuildFileInSources {ECCA6DC4-1741-433D-AE93-BFDE5390C8D1}
-          filename_and_path {src/core/Fl_File_Browser.cxx}
+          filename_and_path {src/fltk3/FileBrowser.cxx}
         }
-        file_ref {Fl_File_Chooser.cxx} {
+        file_ref {FileChooser.cxx} {
           uuid_Xcode4_BuildFile {3B24302E-E655-42B1-8195-4A65633638BE}
           uuid_Xcode4_FileRef {E74C762F-3E71-4C17-8E8F-783C5BA2394A}
           uuid_Xcode4_BuildFileInSources {049EB013-455E-45FB-A557-6567D1DB2191}
-          filename_and_path {src/core/Fl_File_Chooser.cxx}
+          filename_and_path {src/fltk3/FileChooser.cxx}
         }
-        file_ref {Fl_File_Chooser2.cxx} {
+        file_ref {FileChooser2.cxx} {
           uuid_Xcode4_BuildFile {22A4B14E-FC3A-4D9F-A56C-07AD36664F71}
           uuid_Xcode4_FileRef {A7770A7F-FF59-489E-AB60-3811A3BFB46C}
           uuid_Xcode4_BuildFileInSources {17819EFD-407A-4954-8402-474A47FF9A97}
-          filename_and_path {src/core/Fl_File_Chooser2.cxx}
+          filename_and_path {src/fltk3/FileChooser2.cxx}
         }
-        file_ref {Fl_File_Icon.cxx} {
+        file_ref {FileIcon.cxx} {
           uuid_Xcode4_BuildFile {AF7F7642-24A6-444F-9A16-C020F722E332}
           uuid_Xcode4_FileRef {19FA31AE-9089-4E73-97EA-56F68EC5D035}
           uuid_Xcode4_BuildFileInSources {3DCD457D-328B-485F-8CAE-463ED9EE4246}
-          filename_and_path {src/core/Fl_File_Icon.cxx}
+          filename_and_path {src/fltk3/FileIcon.cxx}
         }
-        file_ref {Fl_File_Input.cxx} {
+        file_ref {FileInput.cxx} {
           uuid_Xcode4_BuildFile {E80A34C3-962D-4260-9AE8-3099080002B9}
           uuid_Xcode4_FileRef {D05F5EBC-72FF-49FD-912F-BB5399F2DDC2}
           uuid_Xcode4_BuildFileInSources {8F4CA13F-413A-400F-8266-4ABF3D647078}
-          filename_and_path {src/core/Fl_File_Input.cxx}
+          filename_and_path {src/fltk3/FileInput.cxx}
         }
-        file_ref {Fl_Group.cxx} {
+        file_ref {Group.cxx} {
           uuid_Xcode4_BuildFile {18D56E2C-8A51-4AC4-8247-489E424C5E2D}
           uuid_Xcode4_FileRef {A5952FB9-CE93-48E3-8F3E-9906B15F1B22}
           uuid_Xcode4_BuildFileInSources {99FB6408-3164-4FB6-8895-DA2F31644F95}
-          filename_and_path {src/core/Fl_Group.cxx}
+          filename_and_path {src/fltk3/Group.cxx}
         }
-        file_ref {Fl_Help_View.cxx} {
+        file_ref {HelpView.cxx} {
           uuid_Xcode4_BuildFile {E452ED95-DA10-4107-8505-81FF885CB929}
           uuid_Xcode4_FileRef {047B650C-DBF4-44C6-8D05-A009B49D48D6}
           uuid_Xcode4_BuildFileInSources {5D0D1C84-6B6B-4157-A676-0974C4878E5E}
-          filename_and_path {src/core/Fl_Help_View.cxx}
+          filename_and_path {src/fltk3/HelpView.cxx}
         }
-        file_ref {Fl_Image.cxx} {
+        file_ref {Image.cxx} {
           uuid_Xcode4_BuildFile {DF973496-4200-49AA-BC93-249BA2210DA0}
           uuid_Xcode4_FileRef {E01E16F1-143B-485F-B5FC-F6258C32F5F6}
           uuid_Xcode4_BuildFileInSources {DE9BFEBC-9FBA-49A7-86CB-DD7151D3A983}
-          filename_and_path {src/core/Fl_Image.cxx}
+          filename_and_path {src/fltk3/Image.cxx}
         }
-        file_ref {Fl_Input.cxx} {
+        file_ref {Input.cxx} {
           uuid_Xcode4_BuildFile {76FB90B7-4336-4503-9BE1-BAFE1C6595FD}
           uuid_Xcode4_FileRef {184F6210-C542-4DA1-83AC-8711FD7A0384}
           uuid_Xcode4_BuildFileInSources {1DC72F81-A8D1-4EAC-A118-87F7C91CC055}
-          filename_and_path {src/core/Fl_Input.cxx}
+          filename_and_path {src/fltk3/Input.cxx}
         }
-        file_ref {Fl_Input_.cxx} {
+        file_ref {Input_.cxx} {
           uuid_Xcode4_BuildFile {48A7C3EF-5BA8-4979-B113-AD2901649800}
           uuid_Xcode4_FileRef {A8924614-71DC-4863-9895-60692D538E50}
           uuid_Xcode4_BuildFileInSources {22D48105-5628-4901-9056-E590708B7A5C}
-          filename_and_path {src/core/Fl_Input_.cxx}
+          filename_and_path {src/fltk3/Input_.cxx}
         }
-        file_ref {Fl_Light_Button.cxx} {
+        file_ref {LightButton.cxx} {
           uuid_Xcode4_BuildFile {A7701349-FD57-46A0-84D3-B65C795C834B}
           uuid_Xcode4_FileRef {36C72097-8E40-47E8-914C-FB7F861ACD51}
           uuid_Xcode4_BuildFileInSources {EDFFE30A-F0F2-4A3C-BBFA-CC51818EFD3C}
-          filename_and_path {src/core/Fl_Light_Button.cxx}
+          filename_and_path {src/fltk3/LightButton.cxx}
         }
-        file_ref {Fl_Menu.cxx} {
+        file_ref {Menu.cxx} {
           uuid_Xcode4_BuildFile {FC5ADC05-7CB3-4213-9C1A-5F737CC9EDAE}
           uuid_Xcode4_FileRef {4672B51C-C45E-4BD5-8083-1C8403D7EAA5}
           uuid_Xcode4_BuildFileInSources {FB4C0311-03FE-4E29-A8FE-55B021C93B23}
-          filename_and_path {src/core/Fl_Menu.cxx}
+          filename_and_path {src/fltk3/Menu.cxx}
         }
-        file_ref {Fl_Menu_.cxx} {
+        file_ref {Menu_.cxx} {
           uuid_Xcode4_BuildFile {F4886C34-73DF-44FB-A100-AD10EEC6340F}
           uuid_Xcode4_FileRef {DE9E57A2-6320-4D65-8B5C-485F9D820566}
           uuid_Xcode4_BuildFileInSources {24D66152-234B-40E8-96E4-9BE455EEA9CD}
-          filename_and_path {src/core/Fl_Menu_.cxx}
+          filename_and_path {src/fltk3/Menu_.cxx}
         }
-        file_ref {Fl_Menu_Bar.cxx} {
+        file_ref {MenuBar.cxx} {
           uuid_Xcode4_BuildFile {F690A4A3-C410-4C28-8B0C-DD694D66E06E}
           uuid_Xcode4_FileRef {265C00BF-D5DC-4849-813B-19E9A10BE42A}
           uuid_Xcode4_BuildFileInSources {BD7AE3AE-8500-4770-86A5-3D5C7D63A102}
-          filename_and_path {src/core/Fl_Menu_Bar.cxx}
+          filename_and_path {src/fltk3/MenuBar.cxx}
         }
-        file_ref {Fl_Menu_Button.cxx} {
+        file_ref {MenuButton.cxx} {
           uuid_Xcode4_BuildFile {FD9004A1-F802-4C5D-9225-5344D737A373}
           uuid_Xcode4_FileRef {58FD2064-F6B4-447C-BCF8-E8998D2E68DB}
           uuid_Xcode4_BuildFileInSources {1EC305B7-05F0-4FD7-A035-7FAC4486CAEA}
-          filename_and_path {src/core/Fl_Menu_Button.cxx}
+          filename_and_path {src/fltk3/MenuButton.cxx}
         }
-        file_ref {Fl_Menu_Window.cxx} {
+        file_ref {MenuWindow.cxx} {
           uuid_Xcode4_BuildFile {8C7C9611-0CD1-4C32-847B-11A750EB0745}
           uuid_Xcode4_FileRef {CBE03F81-8878-47F2-8580-C669735AEFC9}
           uuid_Xcode4_BuildFileInSources {63C85999-1423-4DE8-A091-764292A98548}
-          filename_and_path {src/core/Fl_Menu_Window.cxx}
+          filename_and_path {src/fltk3/MenuWindow.cxx}
         }
-        file_ref {Fl_Menu_add.cxx} {
+        file_ref {Menu_add.cxx} {
           uuid_Xcode4_BuildFile {83EF6417-50A0-4E49-8D93-357ECA893443}
           uuid_Xcode4_FileRef {C649ABF1-FC49-41C2-B145-EEF11539FB5F}
           uuid_Xcode4_BuildFileInSources {A5B4D789-9B30-4430-9193-9A2FCFC14069}
-          filename_and_path {src/core/Fl_Menu_add.cxx}
+          filename_and_path {src/fltk3/Menu_add.cxx}
         }
-        file_ref {Fl_Menu_global.cxx} {
+        file_ref {Menu_global.cxx} {
           uuid_Xcode4_BuildFile {8FA4327A-A0BD-4F1B-A447-93E87A9BCE1C}
           uuid_Xcode4_FileRef {25D17230-B6AF-4AF7-B3C0-2995DA9C6F23}
           uuid_Xcode4_BuildFileInSources {6C148F33-17A5-4AF2-9A68-A5C91E171DE8}
-          filename_and_path {src/core/Fl_Menu_global.cxx}
+          filename_and_path {src/fltk3/Menu_global.cxx}
         }
-        file_ref {Fl_Multi_Label.cxx} {
+        file_ref {MultiLabel.cxx} {
           uuid_Xcode4_BuildFile {2F50A0D8-B6F7-490A-A8EC-11F893AC8AB9}
           uuid_Xcode4_FileRef {37D57C7D-DA2D-4296-AA55-229B1A3BFC20}
           uuid_Xcode4_BuildFileInSources {46A6752E-635C-4E9A-AA63-5B7155C93484}
-          filename_and_path {src/core/Fl_Multi_Label.cxx}
+          filename_and_path {src/fltk3/MultiLabel.cxx}
         }
-        file_ref {Fl_Native_File_Chooser.cxx} {
+        file_ref {NativeFileChooser.cxx} {
           uuid_Xcode4_BuildFile {3CCD0677-B052-4EAB-847D-EA18F342D11F}
           uuid_Xcode4_FileRef {FC634C34-9189-40E6-90A4-8D42EF923847}
           uuid_Xcode4_BuildFileInSources {B30D6189-B227-4351-BD2F-EAAB376B6779}
-          filename_and_path {src/core/Fl_Native_File_Chooser.cxx}
+          filename_and_path {src/fltk3/NativeFileChooser.cxx}
         }
-        file_ref {Fl_Overlay_Window.cxx} {
+        file_ref {OverlayWindow.cxx} {
           uuid_Xcode4_BuildFile {50CCB3E9-D605-4F6C-97EA-4607BFC19BEC}
           uuid_Xcode4_FileRef {CEF1A66A-1E4B-4A61-A236-82B007C52832}
           uuid_Xcode4_BuildFileInSources {5857DE8B-5066-46E4-89B9-03B693032DB4}
-          filename_and_path {src/core/Fl_Overlay_Window.cxx}
+          filename_and_path {src/fltk3/OverlayWindow.cxx}
         }
-        file_ref {Fl_Pack.cxx} {
+        file_ref {PackedGroup.cxx} {
           uuid_Xcode4_BuildFile {2EC07AEA-4325-4E47-8D60-139740EAE1C2}
           uuid_Xcode4_FileRef {0F0129FF-794E-4E1D-9091-7900F59B9FB5}
           uuid_Xcode4_BuildFileInSources {5C93DA84-CF25-4D54-ACD5-CFE6763AA2F8}
-          filename_and_path {src/core/Fl_Pack.cxx}
+          filename_and_path {src/fltk3/PackedGroup.cxx}
         }
-        file_ref {Fl_Paged_Device.cxx} {
+        file_ref {PagedDevice.cxx} {
           uuid_Xcode4_BuildFile {3851F580-32C6-4733-9167-C8CBD7610692}
           uuid_Xcode4_FileRef {680EF039-6F4F-4B31-B176-BD222AD802F6}
           uuid_Xcode4_BuildFileInSources {BFD45A93-42FD-4D79-8F8D-953B663EB28F}
-          filename_and_path {src/core/Fl_Paged_Device.cxx}
+          filename_and_path {src/fltk3/PagedDevice.cxx}
         }
-        file_ref {Fl_Pixmap.cxx} {
+        file_ref {Pixmap.cxx} {
           uuid_Xcode4_BuildFile {C4D7E2E9-314F-4361-AD85-CDBEB0E9B9A8}
           uuid_Xcode4_FileRef {9AEB9365-32CF-48CF-8810-7F9B2046454D}
           uuid_Xcode4_BuildFileInSources {EBD65896-39D0-45DE-9F3B-66A8B55D8A75}
-          filename_and_path {src/core/Fl_Pixmap.cxx}
+          filename_and_path {src/fltk3/Pixmap.cxx}
         }
-        file_ref {Fl_Positioner.cxx} {
+        file_ref {Positioner.cxx} {
           uuid_Xcode4_BuildFile {AFC22C98-7D5A-47AD-8F79-8AE0ABA64048}
           uuid_Xcode4_FileRef {9EB992B1-D710-426E-A89D-8F3306A07426}
           uuid_Xcode4_BuildFileInSources {78781310-D555-4403-B4E1-EF0EA0E1E765}
-          filename_and_path {src/core/Fl_Positioner.cxx}
+          filename_and_path {src/fltk3/Positioner.cxx}
         }
-        file_ref {Fl_Printer.cxx} {
+        file_ref {Printer.cxx} {
           uuid_Xcode4_BuildFile {7BA4A607-6C7B-4BB0-B8CB-0F7B4F3EDE3F}
           uuid_Xcode4_FileRef {53F2F9DE-99B0-4879-AD46-BA1EA21D0246}
           uuid_Xcode4_BuildFileInSources {C759F618-3B69-4CCC-A1E6-73E8DBD7488D}
-          filename_and_path {src/core/Fl_Printer.cxx}
+          filename_and_path {src/fltk3/Printer.cxx}
         }
-        file_ref {Fl_Preferences.cxx} {
+        file_ref {Preferences.cxx} {
           uuid_Xcode4_BuildFile {B6CC4604-60B8-4F7A-B134-C1D8EC515A12}
           uuid_Xcode4_FileRef {59610374-761E-4912-BDCE-5F669B7B3FA5}
           uuid_Xcode4_BuildFileInSources {96257899-ED70-4DA5-83C8-42BB3FAC5200}
-          filename_and_path {src/core/Fl_Preferences.cxx}
+          filename_and_path {src/fltk3/Preferences.cxx}
         }
-        file_ref {Fl_Progress.cxx} {
+        file_ref {Progress.cxx} {
           uuid_Xcode4_BuildFile {20F00948-E2C6-4027-BE38-4BD07D34D62E}
           uuid_Xcode4_FileRef {B62169E8-CBE5-4A83-8893-D176E6E4DD9F}
           uuid_Xcode4_BuildFileInSources {486D31DD-6CF6-4B78-B16A-9D3B44B6284E}
-          filename_and_path {src/core/Fl_Progress.cxx}
+          filename_and_path {src/fltk3/Progress.cxx}
         }
-        file_ref {Fl_Repeat_Button.cxx} {
+        file_ref {RepeatButton.cxx} {
           uuid_Xcode4_BuildFile {A494B047-B897-48AC-B463-91BA94498C6B}
           uuid_Xcode4_FileRef {F2E611B0-825F-4087-AD5E-6863D06946BC}
           uuid_Xcode4_BuildFileInSources {4E4DEB0F-5530-4490-8B70-6CDBB682FBAF}
-          filename_and_path {src/core/Fl_Repeat_Button.cxx}
+          filename_and_path {src/fltk3/RepeatButton.cxx}
         }
-        file_ref {Fl_Return_Button.cxx} {
+        file_ref {ReturnButton.cxx} {
           uuid_Xcode4_BuildFile {87CE402C-87A8-4C9C-AB9A-0F4D9B28E093}
           uuid_Xcode4_FileRef {69E296C0-6A1A-43E1-A97D-9905A82EE913}
           uuid_Xcode4_BuildFileInSources {5B4F6F77-657B-4161-8495-8F9D9DCE19F1}
-          filename_and_path {src/core/Fl_Return_Button.cxx}
+          filename_and_path {src/fltk3/ReturnButton.cxx}
         }
-        file_ref {Fl_Roller.cxx} {
+        file_ref {Roller.cxx} {
           uuid_Xcode4_BuildFile {07E3396B-982F-4ACA-A15F-604C0F96FB37}
           uuid_Xcode4_FileRef {A5526E66-615E-4C5D-BEFD-4A34647C13A4}
           uuid_Xcode4_BuildFileInSources {01570F25-D56A-4F38-A635-7167DA170772}
-          filename_and_path {src/core/Fl_Roller.cxx}
+          filename_and_path {src/fltk3/Roller.cxx}
         }
-        file_ref {Fl_Round_Button.cxx} {
+        file_ref {RoundButton.cxx} {
           uuid_Xcode4_BuildFile {8CE9A2F5-45BE-4D71-845A-3BCEFBC1D0AF}
           uuid_Xcode4_FileRef {5DA33AF3-3DC1-4878-970E-E2E5BE824A96}
           uuid_Xcode4_BuildFileInSources {F32B3FAD-0BC4-4B34-9E26-9E69FA6158E3}
-          filename_and_path {src/core/Fl_Round_Button.cxx}
+          filename_and_path {src/fltk3/RoundButton.cxx}
         }
-        file_ref {Fl_Scroll.cxx} {
+        file_ref {ScrollGroup.cxx} {
           uuid_Xcode4_BuildFile {0105EB4F-2FD7-4B85-B5D8-B09B33CEBC16}
           uuid_Xcode4_FileRef {135F7AE4-1BF1-474C-BB37-117ED80BB12D}
           uuid_Xcode4_BuildFileInSources {B506EE63-364E-4744-9C3F-94D382B52F62}
-          filename_and_path {src/core/Fl_Scroll.cxx}
+          filename_and_path {src/fltk3/ScrollGroup.cxx}
         }
-        file_ref {Fl_Scrollbar.cxx} {
+        file_ref {Scrollbar.cxx} {
           uuid_Xcode4_BuildFile {5C70A5A9-A67B-4B14-9D23-ABBDCE533FD9}
           uuid_Xcode4_FileRef {6F7BEB35-6EBF-499D-A9F5-BD43167B1FB8}
           uuid_Xcode4_BuildFileInSources {5622DE29-66EB-4F16-8F99-3642F1607BC6}
-          filename_and_path {src/core/Fl_Scrollbar.cxx}
+          filename_and_path {src/fltk3/Scrollbar.cxx}
         }
-        file_ref {Fl_Shared_Image.cxx} {
+        file_ref {SharedImage.cxx} {
           uuid_Xcode4_BuildFile {8A0C023A-0383-430E-95D8-B9AEA5E17969}
           uuid_Xcode4_FileRef {8580401C-DB11-4629-931A-AA44CAD127AC}
           uuid_Xcode4_BuildFileInSources {7CB9D27B-4F25-4039-8052-62DE828F280B}
-          filename_and_path {src/core/Fl_Shared_Image.cxx}
+          filename_and_path {src/fltk3/SharedImage.cxx}
         }
-        file_ref {Fl_Single_Window.cxx} {
+        file_ref {SingleWindow.cxx} {
           uuid_Xcode4_BuildFile {C6BD816D-59B7-4C3C-A83A-A78D32B5BDBC}
           uuid_Xcode4_FileRef {17A03BA5-0404-4989-A516-C22F7D8BDCEE}
           uuid_Xcode4_BuildFileInSources {550F71EE-612D-428E-8D5C-55BC0A890F88}
-          filename_and_path {src/core/Fl_Single_Window.cxx}
+          filename_and_path {src/fltk3/SingleWindow.cxx}
         }
-        file_ref {Fl_Slider.cxx} {
+        file_ref {Slider.cxx} {
           uuid_Xcode4_BuildFile {05A570C7-6790-48AF-B07E-3DA2E4738B28}
           uuid_Xcode4_FileRef {085FAF82-6F59-4F42-AB4C-349D927A8BAA}
           uuid_Xcode4_BuildFileInSources {052ACB65-EF8A-454B-AFDB-BD3FDFA7B7C1}
-          filename_and_path {src/core/Fl_Slider.cxx}
+          filename_and_path {src/fltk3/Slider.cxx}
         }
         file_ref {Style.cxx} {
           uuid_Xcode4_BuildFile {DD895EB1-D352-4D09-99D7-D9DE1758D9F9}
           uuid_Xcode4_FileRef {CAA3AD96-0CC5-4893-8893-68022791C783}
           uuid_Xcode4_BuildFileInSources {19513486-168E-430B-88A7-6896DF857E7B}
-          filename_and_path {src/core/Style.cxx}
+          filename_and_path {src/fltk3/Style.cxx}
         }
-        file_ref {Fl_Sys_Menu_Bar.cxx} {
+        file_ref {SysMenuBar.cxx} {
           uuid_Xcode4_BuildFile {FC5F7A11-9A94-4596-BCF0-458EB54BF587}
           uuid_Xcode4_FileRef {43C12A4D-7C89-4BAE-B250-C5E2307220CC}
           uuid_Xcode4_BuildFileInSources {B7E4B117-9D18-4D8B-A68F-4BDF4AD5127B}
-          filename_and_path {src/core/Fl_Sys_Menu_Bar.cxx}
+          filename_and_path {src/fltk3/SysMenuBar.cxx}
         }
-        file_ref {Fl_Table.cxx} {
+        file_ref {Table.cxx} {
           uuid_Xcode4_BuildFile {BFA14DC7-600F-49DF-99DF-24A48C8142E6}
           uuid_Xcode4_FileRef {02584243-5408-4D4A-96A5-3FA806F5BCFA}
           uuid_Xcode4_BuildFileInSources {E0D6CAE3-0A6F-47A7-9A4B-CE1FB5C61EBA}
-          filename_and_path {src/core/Fl_Table.cxx}
+          filename_and_path {src/fltk3/Table.cxx}
         }
-        file_ref {Fl_Table_Row.cxx} {
+        file_ref {TableRow.cxx} {
           uuid_Xcode4_BuildFile {8B6C6698-82A4-490F-B7D9-3AB8182B0DD4}
           uuid_Xcode4_FileRef {7097EA09-FB87-4E3F-B29A-4E64EBE28CA8}
           uuid_Xcode4_BuildFileInSources {56C8DD01-88A0-4126-BD4E-B59F64F2047B}
-          filename_and_path {src/core/Fl_Table_Row.cxx}
+          filename_and_path {src/fltk3/TableRow.cxx}
         }
-        file_ref {Fl_Tabs.cxx} {
+        file_ref {TabGroup.cxx} {
           uuid_Xcode4_BuildFile {BDA1F834-FADD-4394-A2A3-67616F09DB47}
           uuid_Xcode4_FileRef {77126381-0CA1-4F19-8800-48B51FF6A61B}
           uuid_Xcode4_BuildFileInSources {135F22EC-8E13-48D2-AB1C-CF4BF223E1EA}
-          filename_and_path {src/core/Fl_Tabs.cxx}
+          filename_and_path {src/fltk3/TabGroup.cxx}
         }
-        file_ref {Fl_Text_Buffer.cxx} {
+        file_ref {TextBuffer.cxx} {
           uuid_Xcode4_BuildFile {9BD37A78-D289-47A9-BBA2-7B67CEFEB0DA}
           uuid_Xcode4_FileRef {8867A20B-7B96-4B4E-BBE1-E492D157D617}
           uuid_Xcode4_BuildFileInSources {1ABCEAD8-C819-4B1E-971C-A1F949D56A9B}
-          filename_and_path {src/core/Fl_Text_Buffer.cxx}
+          filename_and_path {src/fltk3/TextBuffer.cxx}
         }
-        file_ref {Fl_Text_Display.cxx} {
+        file_ref {TextDisplay.cxx} {
           uuid_Xcode4_BuildFile {1A94F4A9-95C0-4A75-8DE5-8945E353D597}
           uuid_Xcode4_FileRef {E5E1DA87-AA6C-460E-90F4-2C8D9411CDB9}
           uuid_Xcode4_BuildFileInSources {9B434666-39BA-4D16-8A78-77F8CF1A44C7}
-          filename_and_path {src/core/Fl_Text_Display.cxx}
+          filename_and_path {src/fltk3/TextDisplay.cxx}
         }
-        file_ref {Fl_Text_Editor.cxx} {
+        file_ref {TextEditor.cxx} {
           uuid_Xcode4_BuildFile {A507F8F6-5687-406F-A0B0-A424A3CB162B}
           uuid_Xcode4_FileRef {5995AACC-72D1-4AAA-A20A-84D4CEE88139}
           uuid_Xcode4_BuildFileInSources {038A56E9-A8EE-4DC7-971B-3C3FD59EF7FA}
-          filename_and_path {src/core/Fl_Text_Editor.cxx}
+          filename_and_path {src/fltk3/TextEditor.cxx}
         }
-        file_ref {Fl_Tile.cxx} {
+        file_ref {TiledGroup.cxx} {
           uuid_Xcode4_BuildFile {3870255E-E9C6-4D50-9C26-E04A6CA659C9}
           uuid_Xcode4_FileRef {A3F6667D-AF2F-460F-809F-4BDDED6E95FC}
           uuid_Xcode4_BuildFileInSources {45E744C6-8C6C-4F03-913D-2D3B7F9F04EE}
-          filename_and_path {src/core/Fl_Tile.cxx}
+          filename_and_path {src/fltk3/TiledGroup.cxx}
         }
-        file_ref {Fl_Tiled_Image.cxx} {
+        file_ref {TiledImage.cxx} {
           uuid_Xcode4_BuildFile {C043B0DE-0983-418C-88CB-5CB7F7F4A60A}
           uuid_Xcode4_FileRef {4C92BA7B-29EF-46D2-91C9-348D49388F69}
           uuid_Xcode4_BuildFileInSources {E9D3E58E-0CCD-4003-845F-E0C0B2BC43EA}
-          filename_and_path {src/core/Fl_Tiled_Image.cxx}
+          filename_and_path {src/fltk3/TiledImage.cxx}
         }
-        file_ref {Fl_Tooltip.cxx} {
+        file_ref {Tooltip.cxx} {
           uuid_Xcode4_BuildFile {36ACF63E-9691-4DFE-8918-CA3610F13FAD}
           uuid_Xcode4_FileRef {22CA4A41-F913-4DAC-A13D-CC57F6A6F244}
           uuid_Xcode4_BuildFileInSources {90FFE6AA-D57A-4579-BAB9-1C971983C991}
-          filename_and_path {src/core/Fl_Tooltip.cxx}
+          filename_and_path {src/fltk3/Tooltip.cxx}
         }
-        file_ref {Fl_Tree.cxx} {
+        file_ref {Tree.cxx} {
           uuid_Xcode4_BuildFile {AE64AF6B-751E-4D4E-B923-16EFC07C9234}
           uuid_Xcode4_FileRef {214492E9-38C0-491D-AC42-F4E1EF8FEAA3}
           uuid_Xcode4_BuildFileInSources {68148315-74B0-49C3-9C8F-FE81AA36873D}
-          filename_and_path {src/core/Fl_Tree.cxx}
+          filename_and_path {src/fltk3/Tree.cxx}
         }
-        file_ref {Fl_Tree_Item.cxx} {
+        file_ref {TreeItem.cxx} {
           uuid_Xcode4_BuildFile {03133ABA-346B-4DEC-B667-9E9A78C07AD7}
           uuid_Xcode4_FileRef {D9F29791-60DE-48C5-9266-701106AB7E8E}
           uuid_Xcode4_BuildFileInSources {9A57CF11-9BC9-40E0-B6C2-E305BAEF98A7}
-          filename_and_path {src/core/Fl_Tree_Item.cxx}
+          filename_and_path {src/fltk3/TreeItem.cxx}
         }
-        file_ref {Fl_Tree_Item_Array.cxx} {
+        file_ref {TreeItemArray.cxx} {
           uuid_Xcode4_BuildFile {A082BAF2-ECA2-4E15-A323-76837C355BE9}
           uuid_Xcode4_FileRef {D6CBFFFA-2FE1-4D65-883E-F592FACE5284}
           uuid_Xcode4_BuildFileInSources {D2A37420-118D-4BAF-A60C-C4B971A051DE}
-          filename_and_path {src/core/Fl_Tree_Item_Array.cxx}
+          filename_and_path {src/fltk3/TreeItemArray.cxx}
         }
-        file_ref {Fl_Tree_Prefs.cxx} {
+        file_ref {TreePrefs.cxx} {
           uuid_Xcode4_BuildFile {D18C9E57-25E8-4D5D-8A64-59536C9DD869}
           uuid_Xcode4_FileRef {CFFE37EE-309C-43FC-BCE5-41E02E7B592D}
           uuid_Xcode4_BuildFileInSources {68CC4C36-27B6-4DA0-9B5A-A5E1BCEE853E}
-          filename_and_path {src/core/Fl_Tree_Prefs.cxx}
+          filename_and_path {src/fltk3/TreePrefs.cxx}
         }
-        file_ref {Fl_Valuator.cxx} {
+        file_ref {Valuator.cxx} {
           uuid_Xcode4_BuildFile {2BE8F141-3682-40D9-86E6-ED82BFF69E75}
           uuid_Xcode4_FileRef {35EB53B1-EE73-4CA2-A8DE-47D037A4970E}
           uuid_Xcode4_BuildFileInSources {4A519B4F-67A2-43BF-9740-82E3DA6D3231}
-          filename_and_path {src/core/Fl_Valuator.cxx}
+          filename_and_path {src/fltk3/Valuator.cxx}
         }
-        file_ref {Fl_Value_Input.cxx} {
+        file_ref {ValueInput.cxx} {
           uuid_Xcode4_BuildFile {44BC0D55-DA69-4BD4-9F19-B42DD0F34E4E}
           uuid_Xcode4_FileRef {1685625E-A5F8-463D-BE13-D96C29D7D314}
           uuid_Xcode4_BuildFileInSources {BD78190E-0B6A-4932-85C7-DA11B71AFEDA}
-          filename_and_path {src/core/Fl_Value_Input.cxx}
+          filename_and_path {src/fltk3/ValueInput.cxx}
         }
-        file_ref {Fl_Value_Output.cxx} {
+        file_ref {ValueOutput.cxx} {
           uuid_Xcode4_BuildFile {4EA1B94C-4E2A-4416-A2D4-2552A132F55A}
           uuid_Xcode4_FileRef {7553A0E7-0663-41E1-AE1E-E07C7DB0DDE5}
           uuid_Xcode4_BuildFileInSources {7E26A26E-5A02-440D-8966-60F1255F67D7}
-          filename_and_path {src/core/Fl_Value_Output.cxx}
+          filename_and_path {src/fltk3/ValueOutput.cxx}
         }
-        file_ref {Fl_Value_Slider.cxx} {
+        file_ref {ValueSlider.cxx} {
           uuid_Xcode4_BuildFile {2AF743E0-9646-472E-9B92-7D02BD5C25D0}
           uuid_Xcode4_FileRef {07F5E789-E549-43E0-B527-FB1FE46B9744}
           uuid_Xcode4_BuildFileInSources {00BFB74D-1DF3-4632-9997-B303AFF72C8E}
-          filename_and_path {src/core/Fl_Value_Slider.cxx}
+          filename_and_path {src/fltk3/ValueSlider.cxx}
         }
-        file_ref {Fl_Widget.cxx} {
+        file_ref {Widget.cxx} {
           uuid_Xcode4_BuildFile {9B2E9C9D-3B03-453C-B5ED-887C12F26BBC}
           uuid_Xcode4_FileRef {C5F5E189-F794-4C76-B727-E18198ADF418}
           uuid_Xcode4_BuildFileInSources {C8308863-F3C1-47E0-8715-2A26C5442423}
-          filename_and_path {src/core/Fl_Widget.cxx}
+          filename_and_path {src/fltk3/Widget.cxx}
         }
-        file_ref {Fl_Window.cxx} {
+        file_ref {Window.cxx} {
           uuid_Xcode4_BuildFile {92A1ED53-56AF-4774-ADED-DC90687267DF}
           uuid_Xcode4_FileRef {8E1A3A4F-8323-456A-9EC0-B1C80AF48D54}
           uuid_Xcode4_BuildFileInSources {EAFF1F86-859B-4124-B744-7D388FCCEA28}
-          filename_and_path {src/core/Fl_Window.cxx}
+          filename_and_path {src/fltk3/Window.cxx}
         }
-        file_ref {Fl_Window_fullscreen.cxx} {
+        file_ref {Window_fullscreen.cxx} {
           uuid_Xcode4_BuildFile {06F92B62-70C7-4220-9B40-9E49613889D5}
           uuid_Xcode4_FileRef {7679F6CC-1F04-4C95-82A8-45ADD9B921DA}
           uuid_Xcode4_BuildFileInSources {C62F4F9E-5D2F-4E98-A29C-451146033106}
-          filename_and_path {src/core/Fl_Window_fullscreen.cxx}
+          filename_and_path {src/fltk3/Window_fullscreen.cxx}
         }
-        file_ref {Fl_Window_hotspot.cxx} {
+        file_ref {Window_hotspot.cxx} {
           uuid_Xcode4_BuildFile {01838D98-2D61-477B-8251-BFEF7F7934B1}
           uuid_Xcode4_FileRef {B5E58AC3-DBBC-4921-9066-AABABE238301}
           uuid_Xcode4_BuildFileInSources {A76E032A-9937-4086-80F0-B370163BB493}
-          filename_and_path {src/core/Fl_Window_hotspot.cxx}
+          filename_and_path {src/fltk3/Window_hotspot.cxx}
         }
-        file_ref {Fl_Window_iconize.cxx} {
+        file_ref {Window_iconize.cxx} {
           uuid_Xcode4_BuildFile {C23C9712-2419-4812-927C-ADFAB6DF91C0}
           uuid_Xcode4_FileRef {C34CF806-B0A3-4A4A-B3B1-502CDFD23D3B}
           uuid_Xcode4_BuildFileInSources {E373B7F4-2FFB-4CEE-9357-7586F6D255E9}
-          filename_and_path {src/core/Fl_Window_iconize.cxx}
+          filename_and_path {src/fltk3/Window_iconize.cxx}
         }
-        file_ref {Fl_Wizard.cxx} {
+        file_ref {Wizard.cxx} {
           uuid_Xcode4_BuildFile {0ECB24E4-43CE-497B-AE79-CFB4AA24EE9F}
           uuid_Xcode4_FileRef {A84F1844-4DC5-4FCD-925E-20F4809D2871}
           uuid_Xcode4_BuildFileInSources {72DEB4A9-12C7-445B-82A8-8DB9C103EF90}
-          filename_and_path {src/core/Fl_Wizard.cxx}
+          filename_and_path {src/fltk3/Wizard.cxx}
         }
-        file_ref {Fl_XBM_Image.cxx} {
+        file_ref {XBMImage.cxx} {
           uuid_Xcode4_BuildFile {0331C1F4-F50E-40CE-A3DF-DBCE1026AEE5}
           uuid_Xcode4_FileRef {9A21D7ED-A598-46CE-9BEF-FF2BB0EDD969}
           uuid_Xcode4_BuildFileInSources {F4974EC2-D5E9-4919-8325-C1F3AEB0CC0D}
-          filename_and_path {src/core/Fl_XBM_Image.cxx}
+          filename_and_path {src/fltk3/XBMImage.cxx}
         }
-        file_ref {Fl_XPM_Image.cxx} {
+        file_ref {XPMImage.cxx} {
           uuid_Xcode4_BuildFile {BA6520FE-E8C8-46CE-97D2-B2004FBA58EB}
           uuid_Xcode4_FileRef {302A3FA8-E0E6-4BBF-BFFF-61815255E28C}
           uuid_Xcode4_BuildFileInSources {A7891F57-3F3F-4B7F-B2EF-B57A4D70C5D4}
-          filename_and_path {src/core/Fl_XPM_Image.cxx}
+          filename_and_path {src/fltk3/XPMImage.cxx}
         }
-        file_ref {Fl_abort.cxx} {
+        file_ref {abort.cxx} {
           uuid_Xcode4_BuildFile {76CBBC9B-34FC-4D1D-8B91-4364D399C78E}
           uuid_Xcode4_FileRef {671B96BA-1F00-4285-B741-6287EE31AB76}
           uuid_Xcode4_BuildFileInSources {230F7BA0-D22C-4FF3-BDAC-74F889B89DFF}
-          filename_and_path {src/core/Fl_abort.cxx}
+          filename_and_path {src/fltk3/abort.cxx}
         }
-        file_ref {Fl_add_idle.cxx} {
+        file_ref {add_idle.cxx} {
           uuid_Xcode4_BuildFile {995D8E2D-7F48-4AA5-BC5D-1EE141C7D5B7}
           uuid_Xcode4_FileRef {1821AF47-D43D-4B6F-BAF7-0C8239CB0CF8}
           uuid_Xcode4_BuildFileInSources {EC8E6A4E-E23B-4501-9094-B62AEC330000}
-          filename_and_path {src/core/Fl_add_idle.cxx}
+          filename_and_path {src/fltk3/add_idle.cxx}
         }
-        file_ref {Fl_arg.cxx} {
+        file_ref {arg.cxx} {
           uuid_Xcode4_BuildFile {3DBCCC28-455E-4B3D-A821-A87B87661BAB}
           uuid_Xcode4_FileRef {8E5EB755-F5D6-4F27-8C0C-B3BD5109FC0C}
           uuid_Xcode4_BuildFileInSources {A87E247A-A9E6-4714-843A-A9F46B7DFEE1}
-          filename_and_path {src/core/Fl_arg.cxx}
+          filename_and_path {src/fltk3/arg.cxx}
         }
-        file_ref {Fl_compose.cxx} {
+        file_ref {compose.cxx} {
           uuid_Xcode4_BuildFile {008D083F-48BF-4D00-91BE-4A038C38678F}
           uuid_Xcode4_FileRef {AA048ACB-ADC4-4FE4-9FEE-77DF739595BD}
           uuid_Xcode4_BuildFileInSources {867ED2B3-580E-4431-AD43-EC19CBA63053}
-          filename_and_path {src/core/Fl_compose.cxx}
+          filename_and_path {src/fltk3/compose.cxx}
         }
-        file_ref {Fl_display.cxx} {
+        file_ref {display.cxx} {
           uuid_Xcode4_BuildFile {7CD1939D-5904-41CA-8EDF-051E74AF82AD}
           uuid_Xcode4_FileRef {44287148-A93A-4F14-BF82-CF1A80C4EA41}
           uuid_Xcode4_BuildFileInSources {EF8285FB-C1F0-4987-9920-B186F7E61B8A}
-          filename_and_path {src/core/Fl_display.cxx}
+          filename_and_path {src/fltk3/display.cxx}
         }
-        file_ref {Fl_get_key.cxx} {
+        file_ref {get_key.cxx} {
           uuid_Xcode4_BuildFile {A82ED410-8A3B-4306-8DB8-B26F032BF0B4}
           uuid_Xcode4_FileRef {A8DC358A-CD4F-4EDF-BCC0-1853A9A8AE55}
           uuid_Xcode4_BuildFileInSources {11ADE417-BC90-4DDF-8E9C-777EEE8083CE}
-          filename_and_path {src/core/Fl_get_key.cxx}
+          filename_and_path {src/fltk3/get_key.cxx}
         }
-        file_ref {Fl_get_system_colors.cxx} {
+        file_ref {get_system_colors.cxx} {
           uuid_Xcode4_BuildFile {304D9DBC-B02C-4B24-9313-78D56E0DB732}
           uuid_Xcode4_FileRef {FEADB63E-10A5-4C86-BDC0-C7427884C5C5}
           uuid_Xcode4_BuildFileInSources {05360A38-1464-4542-ADD3-F1DC5DE74075}
-          filename_and_path {src/core/Fl_get_system_colors.cxx}
+          filename_and_path {src/fltk3/get_system_colors.cxx}
         }
-        file_ref {Fl_grab.cxx} {
+        file_ref {grab.cxx} {
           uuid_Xcode4_BuildFile {63ABEAB0-ACB7-4C09-907A-41FB050A8D7C}
           uuid_Xcode4_FileRef {76AA6E6C-3BA9-4D36-8E49-3F1EF8125874}
           uuid_Xcode4_BuildFileInSources {DF2B279A-3F18-4376-A29F-EF041DAF6A30}
-          filename_and_path {src/core/Fl_grab.cxx}
+          filename_and_path {src/fltk3/grab.cxx}
         }
-        file_ref {Fl_lock.cxx} {
+        file_ref {lock.cxx} {
           uuid_Xcode4_BuildFile {590BA941-4384-40FA-AFFA-2CA40D153532}
           uuid_Xcode4_FileRef {7FAC5183-623B-4758-B960-41D044E55B90}
           uuid_Xcode4_BuildFileInSources {F08C8B0E-2FA4-4A06-8350-642417682E0C}
-          filename_and_path {src/core/Fl_lock.cxx}
+          filename_and_path {src/fltk3/lock.cxx}
         }
-        file_ref {Fl_own_colormap.cxx} {
+        file_ref {own_colormap.cxx} {
           uuid_Xcode4_BuildFile {2A1194F3-22E2-490B-AD07-E1CAB1EBB610}
           uuid_Xcode4_FileRef {013DBB50-59E0-4063-B31F-D57E3C31E2A9}
           uuid_Xcode4_BuildFileInSources {D93BEFC6-7FD5-48E3-935B-5D96C57C91B9}
-          filename_and_path {src/core/Fl_own_colormap.cxx}
+          filename_and_path {src/fltk3/own_colormap.cxx}
         }
-        file_ref {Fl_visual.cxx} {
+        file_ref {visual.cxx} {
           uuid_Xcode4_BuildFile {899B51B6-BAE8-4D54-942F-B2CD51DE703F}
           uuid_Xcode4_FileRef {1626800F-6D7F-4052-88E8-7EF69E2468DD}
           uuid_Xcode4_BuildFileInSources {D57FBCFB-33F0-4145-A643-4334A7F80562}
-          filename_and_path {src/core/Fl_visual.cxx}
+          filename_and_path {src/fltk3/visual.cxx}
         }
-        file_ref {Fl_x.cxx} {
+        file_ref {x11.cxx} {
           uuid_Xcode4_BuildFile {4FEC890B-E99A-4CC0-B4FA-8A61FFB4C5AD}
           uuid_Xcode4_FileRef {F285310A-3E4D-4595-B259-6AD6965104C8}
           uuid_Xcode4_BuildFileInSources {D9007598-62D1-4DEA-BB6B-B7B00EF91A73}
-          filename_and_path {src/core/Fl_x.cxx}
+          filename_and_path {src/fltk3/x11.cxx}
         }
         file_ref {filename_absolute.cxx} {
           uuid_Xcode4_BuildFile {9C057CB7-470D-474A-8A65-F3EB5D64C178}
           uuid_Xcode4_FileRef {04A6409B-1DA2-4F77-8692-2F0417606460}
           uuid_Xcode4_BuildFileInSources {AABCD211-5E58-4F6F-8407-F05C5B24F9F8}
-          filename_and_path {src/core/filename_absolute.cxx}
+          filename_and_path {src/fltk3/filename_absolute.cxx}
         }
         file_ref {filename_expand.cxx} {
           uuid_Xcode4_BuildFile {53B53EC9-FB0E-4CA1-908C-AD77EC9602D1}
           uuid_Xcode4_FileRef {F9F779F2-6B64-4A82-B453-84BD4A837595}
           uuid_Xcode4_BuildFileInSources {B1C7F800-5F13-4AF7-8785-DF351ED0339C}
-          filename_and_path {src/core/filename_expand.cxx}
+          filename_and_path {src/fltk3/filename_expand.cxx}
         }
         file_ref {filename_ext.cxx} {
           uuid_Xcode4_BuildFile {D613722A-19E9-4250-953B-907DFE7B14FC}
           uuid_Xcode4_FileRef {210616B2-483B-418C-9D2D-89C418A5CD3B}
           uuid_Xcode4_BuildFileInSources {80D7B46E-ED1F-468B-8C5B-E65A968CCDF8}
-          filename_and_path {src/core/filename_ext.cxx}
+          filename_and_path {src/fltk3/filename_ext.cxx}
         }
         file_ref {filename_isdir.cxx} {
           uuid_Xcode4_BuildFile {6C9314CD-21BC-40F7-8415-73B0E190D503}
           uuid_Xcode4_FileRef {C07EC3AE-3C83-4B3E-9966-35A28058E2CA}
           uuid_Xcode4_BuildFileInSources {3211F94B-69C8-49ED-B0E1-2B661D48CC63}
-          filename_and_path {src/core/filename_isdir.cxx}
+          filename_and_path {src/fltk3/filename_isdir.cxx}
         }
         file_ref {filename_list.cxx} {
           uuid_Xcode4_BuildFile {F2152084-2546-45BA-8321-EB4ADC4D82C9}
           uuid_Xcode4_FileRef {F08599CC-AC58-4DC3-9A01-8C41395AB3D0}
           uuid_Xcode4_BuildFileInSources {8C352F42-1C2F-4C09-B088-AEE742F1FA19}
-          filename_and_path {src/core/filename_list.cxx}
+          filename_and_path {src/fltk3/filename_list.cxx}
         }
         file_ref {filename_match.cxx} {
           uuid_Xcode4_BuildFile {D2F1A161-BF18-4766-B901-D2BF0C467D27}
           uuid_Xcode4_FileRef {AB171A4B-B928-4010-BDE1-1F82E10FD0AD}
           uuid_Xcode4_BuildFileInSources {BF87576C-B066-4869-859A-D0477380B991}
-          filename_and_path {src/core/filename_match.cxx}
+          filename_and_path {src/fltk3/filename_match.cxx}
         }
         file_ref {filename_setext.cxx} {
           uuid_Xcode4_BuildFile {B68A8072-65B1-4E62-8618-393D6277AB38}
           uuid_Xcode4_FileRef {003AA96B-483E-4BCF-BB09-CF9C7585B088}
           uuid_Xcode4_BuildFileInSources {53ADEE51-9229-4C76-A145-4FAE4A79CA21}
-          filename_and_path {src/core/filename_setext.cxx}
+          filename_and_path {src/fltk3/filename_setext.cxx}
         }
-        file_ref {fl_arc.cxx} {
+        file_ref {arc.cxx} {
           uuid_Xcode4_BuildFile {F2D72D4B-3CD3-424B-BCBE-E6ED0B1ADE19}
           uuid_Xcode4_FileRef {876B6A63-7D11-413F-926D-F400FC3119DD}
           uuid_Xcode4_BuildFileInSources {CF3BDDBE-929B-42C9-B756-D8C9B4C8A1D2}
-          filename_and_path {src/core/fl_arc.cxx}
+          filename_and_path {src/fltk3/arc.cxx}
         }
-        file_ref {fl_arci.cxx} {
+        file_ref {arci.cxx} {
           uuid_Xcode4_BuildFile {201C7772-F8EA-46A9-8675-1DC75946FF84}
           uuid_Xcode4_FileRef {E52CB16D-9900-4D70-ACBA-7698063934AA}
           uuid_Xcode4_BuildFileInSources {3C758F19-115F-4754-92FA-29F331A7A741}
-          filename_and_path {src/core/fl_arci.cxx}
+          filename_and_path {src/fltk3/arci.cxx}
         }
-        file_ref {fl_ask.cxx} {
+        file_ref {ask.cxx} {
           uuid_Xcode4_BuildFile {7888A1B7-3CC5-44AD-B3AB-20E7A8B7289F}
           uuid_Xcode4_FileRef {60E7DD73-D034-4D69-BA46-619166E2E30F}
           uuid_Xcode4_BuildFileInSources {F10B0DD6-7998-48AA-AE32-78A6D8879B1C}
-          filename_and_path {src/core/fl_ask.cxx}
+          filename_and_path {src/fltk3/ask.cxx}
         }
-        file_ref {fl_boxtype.cxx} {
+        file_ref {boxtype.cxx} {
           uuid_Xcode4_BuildFile {FFD22E0B-E0EC-485B-8838-5DF7DC9649AC}
           uuid_Xcode4_FileRef {BC14596F-6410-40F3-96F5-930B8CE39DAF}
           uuid_Xcode4_BuildFileInSources {7CD1A504-D74F-4F06-AAA0-B99DFB39DF46}
-          filename_and_path {src/core/fl_boxtype.cxx}
+          filename_and_path {src/fltk3/boxtype.cxx}
         }
-        file_ref {fl_call_main.cxx} {
+        file_ref {call_main.cxx} {
           uuid_Xcode4_BuildFile {E0BFCC98-3264-4E4F-A465-DAD81F5A9450}
           uuid_Xcode4_FileRef {8B35EF2F-2920-4F0F-A82D-D8472B46BDD7}
           uuid_Xcode4_BuildFileInSources {36978A2B-1507-4071-9AD5-7F9BDA3F8D90}
-          filename_and_path {src/core/fl_call_main.cxx}
+          filename_and_path {src/fltk3/call_main.cxx}
         }
-        file_ref {fl_color.cxx} {
+        file_ref {color.cxx} {
           uuid_Xcode4_BuildFile {27FB3CD2-EF50-4CE1-A940-76EE40C14C3D}
           uuid_Xcode4_FileRef {02716487-AA34-406A-9C95-983284DE5A34}
           uuid_Xcode4_BuildFileInSources {E5A3C248-605C-4BC2-BA7A-9BF5550D91DA}
-          filename_and_path {src/core/fl_color.cxx}
+          filename_and_path {src/fltk3/color.cxx}
         }
-        file_ref {fl_cursor.cxx} {
+        file_ref {cursor.cxx} {
           uuid_Xcode4_BuildFile {191125BA-A890-4754-AB59-D8FB26F9328A}
           uuid_Xcode4_FileRef {C832D220-A5C0-4938-8129-C2CB8FBAFED8}
           uuid_Xcode4_BuildFileInSources {79967B56-B64B-423D-B3EA-8097A7A830CF}
-          filename_and_path {src/core/fl_cursor.cxx}
+          filename_and_path {src/fltk3/cursor.cxx}
         }
-        file_ref {fl_curve.cxx} {
+        file_ref {curve.cxx} {
           uuid_Xcode4_BuildFile {56EADAE0-20B2-430D-B01C-FA223EA97E3A}
           uuid_Xcode4_FileRef {53EC964E-94FC-461A-A2EF-7CA3BF80B206}
           uuid_Xcode4_BuildFileInSources {B2341118-0C6D-4D9E-876D-4B5EC32E75A1}
-          filename_and_path {src/core/fl_curve.cxx}
+          filename_and_path {src/fltk3/curve.cxx}
         }
-        file_ref {fl_diamond_box.cxx} {
+        file_ref {diamond_box.cxx} {
           uuid_Xcode4_BuildFile {E40B19F0-5E9F-4EC7-9899-F4528B9AA70D}
           uuid_Xcode4_FileRef {5557266E-5E95-4208-AE3A-EA3B72D5DF09}
           uuid_Xcode4_BuildFileInSources {2BF48610-D394-48FD-8CF6-4319B5C7950E}
-          filename_and_path {src/core/fl_diamond_box.cxx}
+          filename_and_path {src/fltk3/diamond_box.cxx}
         }
-        file_ref {fl_dnd.cxx} {
+        file_ref {dnd.cxx} {
           uuid_Xcode4_BuildFile {298EDA4F-8AF0-4A92-AFC1-9408CFCD5712}
           uuid_Xcode4_FileRef {D1E006BE-6D34-4468-9F0D-9085A8E51304}
           uuid_Xcode4_BuildFileInSources {207AE6E5-9923-44E6-84D3-5AEC30896F39}
-          filename_and_path {src/core/fl_dnd.cxx}
+          filename_and_path {src/fltk3/dnd.cxx}
         }
-        file_ref {fl_draw.cxx} {
+        file_ref {draw.cxx} {
           uuid_Xcode4_BuildFile {4F438445-50DE-4B76-BBFF-BC46EBBFA664}
           uuid_Xcode4_FileRef {3CF0F8B5-7C8D-4462-B572-4A122D6549B0}
           uuid_Xcode4_BuildFileInSources {363F858B-A81F-4AFF-A530-A54242350184}
-          filename_and_path {src/core/fl_draw.cxx}
+          filename_and_path {src/fltk3/draw.cxx}
         }
-        file_ref {fl_draw_image.cxx} {
+        file_ref {draw_image.cxx} {
           uuid_Xcode4_BuildFile {4665DB5F-068D-4310-B2C0-AE689AA85929}
           uuid_Xcode4_FileRef {F608DA64-EF05-49A3-ABAC-C7C9E7494BEA}
           uuid_Xcode4_BuildFileInSources {F546A37A-4D5E-4409-9163-28738A3E4227}
-          filename_and_path {src/core/fl_draw_image.cxx}
+          filename_and_path {src/fltk3/draw_image.cxx}
         }
-        file_ref {fl_draw_pixmap.cxx} {
+        file_ref {draw_pixmap.cxx} {
           uuid_Xcode4_BuildFile {E4923B73-9025-450C-BB43-97FC0850A83A}
           uuid_Xcode4_FileRef {B6E2BA6C-59E0-4F18-AD7D-164F016C0FF0}
           uuid_Xcode4_BuildFileInSources {30E10499-75E4-4180-8EB1-884A87A5DD43}
-          filename_and_path {src/core/fl_draw_pixmap.cxx}
+          filename_and_path {src/fltk3/draw_pixmap.cxx}
         }
-        file_ref {fl_encoding_latin1.cxx} {
+        file_ref {encoding_latin1.cxx} {
           uuid_Xcode4_BuildFile {B00A9E35-5560-4825-904B-EF57CD4C0A92}
           uuid_Xcode4_FileRef {0BEBF5A7-7773-43BE-91CC-B0DFBB6BDA08}
           uuid_Xcode4_BuildFileInSources {DE48D544-6329-4439-8CA5-E1D3FDA1F6E0}
-          filename_and_path {src/core/fl_encoding_latin1.cxx}
+          filename_and_path {src/fltk3/encoding_latin1.cxx}
         }
-        file_ref {fl_encoding_mac_roman.cxx} {
+        file_ref {encoding_mac_roman.cxx} {
           uuid_Xcode4_BuildFile {8555518A-BE8E-4BFA-B667-6551E92013A8}
           uuid_Xcode4_FileRef {C2BF9CDF-E31E-4895-A45D-5AAF3768C51B}
           uuid_Xcode4_BuildFileInSources {ABB49E92-5D1D-47B4-8863-06E5EBD8142A}
-          filename_and_path {src/core/fl_encoding_mac_roman.cxx}
+          filename_and_path {src/fltk3/encoding_mac_roman.cxx}
         }
-        file_ref {fl_engraved_label.cxx} {
+        file_ref {engraved_label.cxx} {
           uuid_Xcode4_BuildFile {52DA813A-9A95-4890-A38D-19B026277F95}
           uuid_Xcode4_FileRef {0522E1C2-0E5A-4C29-A956-E8CD45EF1B4D}
           uuid_Xcode4_BuildFileInSources {15FDFD86-96C6-4012-A0D0-F022C221FBAC}
-          filename_and_path {src/core/fl_engraved_label.cxx}
+          filename_and_path {src/fltk3/engraved_label.cxx}
         }
-        file_ref {fl_file_dir.cxx} {
+        file_ref {file_dir.cxx} {
           uuid_Xcode4_BuildFile {8F52E66B-DE06-408C-9FA4-1444637F7B80}
           uuid_Xcode4_FileRef {1BF9BBF4-D53A-424A-8C0A-D3B0D92797FF}
           uuid_Xcode4_BuildFileInSources {EB81F388-5E43-4527-9396-969A7D312740}
-          filename_and_path {src/core/fl_file_dir.cxx}
+          filename_and_path {src/fltk3/file_dir.cxx}
         }
-        file_ref {fl_font.cxx} {
+        file_ref {font.cxx} {
           uuid_Xcode4_BuildFile {DAECD573-97D2-4295-8321-13B8F8BC23A6}
           uuid_Xcode4_FileRef {1CFFB72A-F54F-4002-AE50-C1BCF9F0C89C}
           uuid_Xcode4_BuildFileInSources {C9F44B46-D3FF-4EA3-9D30-1E9AB89600F8}
-          filename_and_path {src/core/fl_font.cxx}
+          filename_and_path {src/fltk3/font.cxx}
         }
-        file_ref {fl_gtk.cxx} {
+        file_ref {gtk.cxx} {
           uuid_Xcode4_BuildFile {1FB7855F-AB31-4B42-AA73-93B07D746272}
           uuid_Xcode4_FileRef {E3303C9A-F31B-4B23-8AC3-863A5C000D0C}
           uuid_Xcode4_BuildFileInSources {EFCDA004-6B05-439D-AD1D-A8747F6CF4B9}
-          filename_and_path {src/core/fl_gtk.cxx}
+          filename_and_path {src/fltk3/gtk.cxx}
         }
-        file_ref {fl_labeltype.cxx} {
+        file_ref {labeltype.cxx} {
           uuid_Xcode4_BuildFile {A91665C1-0010-43EE-8A86-9EC869983557}
           uuid_Xcode4_FileRef {95F43A2D-21DE-4899-9F5B-1DB341E90C3A}
           uuid_Xcode4_BuildFileInSources {4598BB77-92AB-4548-B34E-78B261C56140}
-          filename_and_path {src/core/fl_labeltype.cxx}
+          filename_and_path {src/fltk3/labeltype.cxx}
         }
-        file_ref {fl_line_style.cxx} {
+        file_ref {line_style.cxx} {
           uuid_Xcode4_BuildFile {70D1EF40-CEE3-4460-9437-445EF6570006}
           uuid_Xcode4_FileRef {5FD374C4-6C63-497E-9F2B-1B396390EEE5}
           uuid_Xcode4_BuildFileInSources {A59E78B8-0AD1-490B-ABBF-87C212D49294}
-          filename_and_path {src/core/fl_line_style.cxx}
+          filename_and_path {src/fltk3/line_style.cxx}
         }
-        file_ref {fl_open_uri.cxx} {
+        file_ref {open_uri.cxx} {
           uuid_Xcode4_BuildFile {AE238B51-38F4-4F2E-BC0B-78F3746B987F}
           uuid_Xcode4_FileRef {5515C9CC-3DEB-4ED1-8B65-42966A9B7E06}
           uuid_Xcode4_BuildFileInSources {BE74DB33-04BD-4EEC-A847-755EB62B76EB}
-          filename_and_path {src/core/fl_open_uri.cxx}
+          filename_and_path {src/fltk3/open_uri.cxx}
         }
-        file_ref {fl_oval_box.cxx} {
+        file_ref {oval_box.cxx} {
           uuid_Xcode4_BuildFile {5C5315ED-224F-4077-A54A-D916A09FD43D}
           uuid_Xcode4_FileRef {554EB894-1B49-46DC-9B44-004AF565327A}
           uuid_Xcode4_BuildFileInSources {61BF99BB-9B5E-4A8F-B47A-362BE0170B8A}
-          filename_and_path {src/core/fl_oval_box.cxx}
+          filename_and_path {src/fltk3/oval_box.cxx}
         }
-        file_ref {fl_overlay.cxx} {
+        file_ref {overlay.cxx} {
           uuid_Xcode4_BuildFile {13DECC0A-91E0-4B09-9A65-7565C4E4DE00}
           uuid_Xcode4_FileRef {5536CF51-0B6B-499F-9C91-C2E4898D00BA}
           uuid_Xcode4_BuildFileInSources {C4F171DD-B2C3-45AB-B493-13C66A684B76}
-          filename_and_path {src/core/fl_overlay.cxx}
+          filename_and_path {src/fltk3/overlay.cxx}
         }
-        file_ref {fl_overlay_visual.cxx} {
+        file_ref {overlay_visual.cxx} {
           uuid_Xcode4_BuildFile {B447BDF4-E847-4FC6-A720-0CDF4002BA4E}
           uuid_Xcode4_FileRef {3132F016-7D43-43BE-B074-445C9F20DB50}
           uuid_Xcode4_BuildFileInSources {305944C7-0273-41CA-B68D-4B8634805326}
-          filename_and_path {src/core/fl_overlay_visual.cxx}
+          filename_and_path {src/fltk3/overlay_visual.cxx}
         }
-        file_ref {fl_plastic.cxx} {
+        file_ref {plastic.cxx} {
           uuid_Xcode4_BuildFile {E84D52FD-DECE-4423-8099-1101A9B16E65}
           uuid_Xcode4_FileRef {D9934C34-B4C6-45E9-9D8D-302562D201D1}
           uuid_Xcode4_BuildFileInSources {40F29FD8-75BE-4958-9975-880694258FAB}
-          filename_and_path {src/core/fl_plastic.cxx}
+          filename_and_path {src/fltk3/plastic.cxx}
         }
-        file_ref {fl_read_image.cxx} {
+        file_ref {read_image.cxx} {
           uuid_Xcode4_BuildFile {89292870-50B2-4B4C-9C47-BDD54D8F9A95}
           uuid_Xcode4_FileRef {1FA85C80-2951-4144-A92D-E37E598C9B19}
           uuid_Xcode4_BuildFileInSources {C91AB9AC-9EA0-4F8B-982E-2C9D52A00338}
-          filename_and_path {src/core/fl_read_image.cxx}
+          filename_and_path {src/fltk3/read_image.cxx}
         }
-        file_ref {fl_rect.cxx} {
+        file_ref {rect.cxx} {
           uuid_Xcode4_BuildFile {7DFE2DA4-C5ED-4447-8F6A-3F7D514DEDA3}
           uuid_Xcode4_FileRef {82F1E1FC-8B3C-460B-A309-ABE348A6FD1B}
           uuid_Xcode4_BuildFileInSources {39238B46-6210-41AC-B7DC-4153DA9EE223}
-          filename_and_path {src/core/fl_rect.cxx}
+          filename_and_path {src/fltk3/rect.cxx}
         }
-        file_ref {fl_round_box.cxx} {
+        file_ref {round_box.cxx} {
           uuid_Xcode4_BuildFile {54AED6D6-19AA-4960-A913-C1DDE3A04981}
           uuid_Xcode4_FileRef {C791DFA1-9A90-4016-B393-FF1205CA92D3}
           uuid_Xcode4_BuildFileInSources {FE83B31E-A46A-4A32-A89D-E1A6D243B8C2}
-          filename_and_path {src/core/fl_round_box.cxx}
+          filename_and_path {src/fltk3/round_box.cxx}
         }
-        file_ref {fl_rounded_box.cxx} {
+        file_ref {rounded_box.cxx} {
           uuid_Xcode4_BuildFile {07653622-17B7-423E-8440-FA89462F116C}
           uuid_Xcode4_FileRef {557E8041-0084-4B1C-9D36-CF44F1C0F5BE}
           uuid_Xcode4_BuildFileInSources {AD0B8E3D-D68A-481D-8F9F-69BAC55B967F}
-          filename_and_path {src/core/fl_rounded_box.cxx}
+          filename_and_path {src/fltk3/rounded_box.cxx}
         }
-        file_ref {fl_scroll_area.cxx} {
+        file_ref {scroll_area.cxx} {
           uuid_Xcode4_BuildFile {62206CE3-C4B8-41A3-B0B2-E87558EF8359}
           uuid_Xcode4_FileRef {0E08EA1C-BD91-44D4-A0EA-0D4243805A2C}
           uuid_Xcode4_BuildFileInSources {FCAEAB49-901B-4E09-A421-B91C2138610D}
-          filename_and_path {src/core/fl_scroll_area.cxx}
+          filename_and_path {src/fltk3/scroll_area.cxx}
         }
-        file_ref {fl_set_font.cxx} {
+        file_ref {set_font.cxx} {
           uuid_Xcode4_BuildFile {A21C7DBB-77B4-4145-94D3-C8F4E0F7A704}
           uuid_Xcode4_FileRef {C7ED2C14-A368-4077-A484-B5C6DDCAC057}
           uuid_Xcode4_BuildFileInSources {2952645A-BFB2-4D1A-AA4B-9C938ADA48F9}
-          filename_and_path {src/core/fl_set_font.cxx}
+          filename_and_path {src/fltk3/set_font.cxx}
         }
-        file_ref {fl_set_fonts.cxx} {
+        file_ref {set_fonts.cxx} {
           uuid_Xcode4_BuildFile {2D99B7D6-2146-4F22-B7C4-7CF6B353B3B6}
           uuid_Xcode4_FileRef {22603052-0721-416C-9BC9-9117FA96A7E6}
           uuid_Xcode4_BuildFileInSources {83BEAD36-5B66-40D1-BDE6-01CAD030A36B}
-          filename_and_path {src/core/fl_set_fonts.cxx}
+          filename_and_path {src/fltk3/set_fonts.cxx}
         }
-        file_ref {fl_shadow_box.cxx} {
+        file_ref {shadow_box.cxx} {
           uuid_Xcode4_BuildFile {5F09A8BB-4F72-4A29-9D89-1B3686738A5F}
           uuid_Xcode4_FileRef {2C5EEC89-51E9-41FB-8530-FBF66EEA73B1}
           uuid_Xcode4_BuildFileInSources {03E51C61-09BD-4D5D-8C34-E11561CDE5EB}
-          filename_and_path {src/core/fl_shadow_box.cxx}
+          filename_and_path {src/fltk3/shadow_box.cxx}
         }
-        file_ref {fl_shortcut.cxx} {
+        file_ref {shortcut.cxx} {
           uuid_Xcode4_BuildFile {6DC429A2-4E0F-46F0-9928-C972C13F3A79}
           uuid_Xcode4_FileRef {BFCE21B1-56B8-4D68-B7AE-BFB8E2D65029}
           uuid_Xcode4_BuildFileInSources {1915B2B4-3576-473D-8C68-044EC53616C9}
-          filename_and_path {src/core/fl_shortcut.cxx}
+          filename_and_path {src/fltk3/shortcut.cxx}
         }
-        file_ref {fl_show_colormap.cxx} {
+        file_ref {show_colormap.cxx} {
           uuid_Xcode4_BuildFile {09571C9D-E0F2-44E1-B3BB-BEA58AF6DB6E}
           uuid_Xcode4_FileRef {76D6638A-FCA0-47DD-97AC-02F20B149360}
           uuid_Xcode4_BuildFileInSources {CA982582-BAB9-4F43-AE95-97787D7118DA}
-          filename_and_path {src/core/fl_show_colormap.cxx}
+          filename_and_path {src/fltk3/show_colormap.cxx}
         }
-        file_ref {fl_symbols.cxx} {
+        file_ref {symbols.cxx} {
           uuid_Xcode4_BuildFile {E5E13729-9359-407A-ADAE-8CA9BF1153A4}
           uuid_Xcode4_FileRef {ECAFDF98-A4C6-47A4-AAC5-CBBAA9E2B887}
           uuid_Xcode4_BuildFileInSources {3F497BC1-2E55-4693-A590-93B1AB680203}
-          filename_and_path {src/core/fl_symbols.cxx}
+          filename_and_path {src/fltk3/symbols.cxx}
         }
-        file_ref {fl_utf8.cxx} {
+        file_ref {utf8.cxx} {
           uuid_Xcode4_BuildFile {1D28C444-CF47-48A3-B7BD-AC7FC031BF60}
           uuid_Xcode4_FileRef {C82D09C9-A25C-4969-AA75-C1844388A904}
           uuid_Xcode4_BuildFileInSources {E05DB01E-3C7C-4D10-B25A-24C5B0A9984E}
-          filename_and_path {src/core/fl_utf8.cxx}
+          filename_and_path {src/fltk3/utf8.cxx}
         }
-        file_ref {fl_utf.cxx} {
+        file_ref {utf.cxx} {
           uuid_Xcode4_BuildFile {AB04400B-9F1A-4F37-888C-89372FDCF7F7}
           uuid_Xcode4_FileRef {574878A1-4FD8-42FA-9BD2-ABE5009BD0DE}
           uuid_Xcode4_BuildFileInSources {DBA6ED75-939E-4F8A-B1F2-9A110D95B619}
-          filename_and_path {src/core/fl_utf.cxx}
+          filename_and_path {src/fltk3/utf.cxx}
         }
-        file_ref {fl_vertex.cxx} {
+        file_ref {vertex.cxx} {
           uuid_Xcode4_BuildFile {62CA9151-24C4-427F-8D7C-E667CB1A6005}
           uuid_Xcode4_FileRef {6C74D84D-D2D9-473C-B4EF-A2916D41A606}
           uuid_Xcode4_BuildFileInSources {0DA67340-5E06-45F0-98AB-1EF4FFEF7D18}
-          filename_and_path {src/core/fl_vertex.cxx}
+          filename_and_path {src/fltk3/vertex.cxx}
         }
         file_ref {numericsort.cxx} {
           uuid_Xcode4_BuildFile {BDD37F5E-669D-45D0-AEA7-84934BD116C6}
           uuid_Xcode4_FileRef {2286DB22-6117-4F0A-BEE5-E39D655B21BB}
           uuid_Xcode4_BuildFileInSources {F9A99DC4-A8F3-48B7-B098-CACFF2242B0F}
-          filename_and_path {src/core/numericsort.cxx}
+          filename_and_path {src/fltk3/numericsort.cxx}
         }
         file_ref {ps_image.cxx} {
           uuid_Xcode4_BuildFile {3FCA9BA2-08F4-4493-AAC5-1C5BA6C19BF9}
           uuid_Xcode4_FileRef {472AB397-43B4-4F36-8D30-46796562F422}
           uuid_Xcode4_BuildFileInSources {7B5F222A-9CA7-4A2B-BB10-915A4853951A}
-          filename_and_path {src/core/ps_image.cxx}
+          filename_and_path {src/fltk3/ps_image.cxx}
         }
         file_ref {scandir.cxx} {
           uuid_Xcode4_BuildFile {91F32552-6EBD-41A3-A404-C13499D47D1B}
           uuid_Xcode4_FileRef {1E2B1DAE-2CA8-4E24-9D70-7648A5F0E604}
           uuid_Xcode4_BuildFileInSources {611144BE-9E25-4734-BEB0-17AA14E629C2}
-          filename_and_path {src/core/scandir.cxx}
+          filename_and_path {src/fltk3/scandir.cxx}
         }
         file_ref {screen_xywh.cxx} {
           uuid_Xcode4_BuildFile {898DCC19-92C6-4CAD-8F97-795C17BF0F8E}
           uuid_Xcode4_FileRef {4302C79C-040D-4155-9A83-7B77750879E4}
           uuid_Xcode4_BuildFileInSources {ED67E26F-DB1F-48D1-A1D9-9717C2196D3A}
-          filename_and_path {src/core/screen_xywh.cxx}
+          filename_and_path {src/fltk3/screen_xywh.cxx}
         }
         file_ref {flstring.c} {
           uuid_Xcode4_BuildFile {1B622B06-3765-4E90-BE13-155DFCBAB791}
           uuid_Xcode4_FileRef {EF672C7C-6AF9-43D0-8320-CBAED55C8145}
           uuid_Xcode4_BuildFileInSources {F4C279B7-3932-4279-8131-B75DFA0C11E5}
-          filename_and_path {src/core/flstring.c}
+          filename_and_path {src/fltk3/flstring.c}
         }
         file_ref {vsnprintf.c} {
           uuid_Xcode4_BuildFile {22C4313D-D9D6-41BD-BA8B-E3CE07600FE1}
           uuid_Xcode4_FileRef {4024031C-0F34-4A2D-A3F2-9D9373805457}
           uuid_Xcode4_BuildFileInSources {2A8804F6-AFE8-4FED-BF50-8CAEF1B22A54}
-          filename_and_path {src/core/vsnprintf.c}
+          filename_and_path {src/fltk3/vsnprintf.c}
         }
         file_ref {case.c} {
           uuid_Xcode4_BuildFile {F9589A9E-897C-4D01-9853-40C736FE4C03}
           uuid_Xcode4_FileRef {6A8D0240-7AD5-4648-B663-8D1B5B0D8F30}
           uuid_Xcode4_BuildFileInSources {C8A52709-D6A3-46B6-8BC2-631AC161BB93}
-          filename_and_path {src/core/xutf8/case.c}
+          filename_and_path {src/fltk3/xutf8/case.c}
         }
         file_ref {is_right2left.c} {
           uuid_Xcode4_BuildFile {5D197D19-28FF-4FA8-B83B-F0796D18D7C7}
           uuid_Xcode4_FileRef {15064F3F-0F6F-4A59-8531-9E361125C187}
           uuid_Xcode4_BuildFileInSources {8DB42169-E703-4087-8E7D-743F1AAADA6D}
-          filename_and_path {src/core/xutf8/is_right2left.c}
+          filename_and_path {src/fltk3/xutf8/is_right2left.c}
         }
         file_ref {is_spacing.c} {
           uuid_Xcode4_BuildFile {33D01DE7-EC28-45C9-AC26-AB81F6F7E056}
           uuid_Xcode4_FileRef {35196210-B2C0-48F9-88B8-7DB816C06ED2}
           uuid_Xcode4_BuildFileInSources {2FAB16B4-529A-454C-8FDD-480347534445}
-          filename_and_path {src/core/xutf8/is_spacing.c}
+          filename_and_path {src/fltk3/xutf8/is_spacing.c}
         }
         file_ref {keysym2Ucs.c} {
           uuid_Xcode4_BuildFileInSources {5947D812-BC7F-4400-9267-2ED8879F5C8C}
           uuid_Xcode4_FileRef {6FB3D799-D5E6-4B46-B0D8-241B52F0EF44}
           build_env 3
           list_env 0
-          filename_and_path {src/core/xutf8/keysym2Ucs.c}
+          filename_and_path {src/fltk3/xutf8/keysym2Ucs.c}
         }
         file_ref {utf8Input.c} {
           uuid_Xcode4_BuildFileInSources {25B5DE2D-97EE-4E32-9CA8-05174FB0DB2F}
           uuid_Xcode4_FileRef {77C2578B-D9D9-4526-BB2D-01C1C3C80034}
           build_env 3
           list_env 0
-          filename_and_path {src/core/xutf8/utf8Input.c}
+          filename_and_path {src/fltk3/xutf8/utf8Input.c}
         }
         file_ref {utf8Utils.c} {
           uuid_Xcode4_BuildFileInSources {24005306-9985-4AC5-BE6D-6D7500E3217E}
           uuid_Xcode4_FileRef {737A139C-1672-4BB4-8105-7BBD5750BA73}
           build_env 3
           list_env 0
-          filename_and_path {src/core/xutf8/utf8Utils.c}
+          filename_and_path {src/fltk3/xutf8/utf8Utils.c}
         }
         file_ref {utf8Wrap.c} {
           uuid_Xcode4_BuildFileInSources {C7B16874-D0F9-451B-82FE-5CDE5ED6E374}
           uuid_Xcode4_FileRef {46AA9D55-FF6A-42F9-9D65-167B6C61CD4A}
           build_env 3
           list_env 0
-          filename_and_path {src/core/xutf8/utf8Wrap.c}
+          filename_and_path {src/fltk3/xutf8/utf8Wrap.c}
         }
       }
-      folder Libraries {open
+      folder Libraries {
         uuid_Xcode4_Group {5495DB62-2621-4D95-824E-7D7E0FD9E613}
       } {
         file_ref {Cocoa.framework} {
@@ -2497,7 +2465,7 @@
           filename_and_path {include/fltk3gl/GLWindow.h}
         }
       }
-      folder Sources {open
+      folder Sources {
         uuid_Xcode4_Group {AF239AB5-D7A8-4916-B8FD-AB46E12676A0}
       } {
         file_ref {GLChoice.cxx} {
@@ -2561,7 +2529,7 @@
           filename_and_path {src/fltk3gl/glut_font.cxx}
         }
       }
-      folder Libraries {open
+      folder Libraries {
         uuid_Xcode4_Group {7FA05EA9-A69A-4DF5-856E-FB09F85F9A93}
       } {
         file_ref {AGL.framework} {
@@ -2601,7 +2569,7 @@
           location 3
         }
       }
-      folder Dependencies {open
+      folder Dependencies {
         uuid_Xcode4_Group {5AD936C1-6A47-4960-8FF6-30D89A6A3DA1}
       } {
         target_dependency fltk3 {
@@ -2613,7 +2581,7 @@
         }
       }
     }
-    lib_target fltk3images {
+    lib_target fltk3images {open
       uuid_Xcode4_FluidBuildRule {3B6D1711-B7F7-4646-9550-CCC0D38666DB}
       uuid_Xcode4_ProductFileReference {BF7522F0-DF30-4FBE-B61F-D44FB67C2110}
       uuid_Xcode4_FrameworksBuildPhase {E922EF9B-6694-4CD8-9E64-646407893DE6}
@@ -2630,51 +2598,119 @@
       target_path lib
       makefile_path src
     } {
+      folder Headers {open
+        uuid_Xcode4_Group {572634D5-961B-429A-BD3D-A5E0B8ADA06D}
+      } {
+        file_ref {all.h} {
+          uuid_Xcode4_BuildFile {2CE8F302-A99F-4C82-94FF-FF9EFAFC8698}
+          uuid_Xcode4_FileRef {1010B13D-EDA7-4521-A769-8067E16E3514}
+          uuid_Xcode4_BuildFileInHeaders {8EFCC7E9-3D05-4924-824D-5C994B2C58AC}
+          build_env 96
+          list_env 124
+          filename_and_path {include/fltk3images/all.h}
+        }
+        file_ref {fltk3images.h} {
+          uuid_Xcode4_BuildFile {8BB652FC-9526-474B-84AB-AB5807963823}
+          uuid_Xcode4_FileRef {2C2435D9-9D93-417A-A741-7667983C81F3}
+          uuid_Xcode4_BuildFileInHeaders {F0C926FC-BB9C-4326-8184-DDBCAB2B38A6}
+          build_env 96
+          list_env 124
+          filename_and_path {include/fltk3images/fltk3images.h}
+        }
+        file_ref {BMPImage.h} {
+          uuid_Xcode4_BuildFile {B02F1ACA-8C63-4C41-A0FA-429D42B66E10}
+          uuid_Xcode4_FileRef {5B9A35BB-8AE6-4627-BE89-BB6BF86DBDA1}
+          uuid_Xcode4_BuildFileInHeaders {26C1F556-804D-49CA-B330-7472D37CCAA4}
+          build_env 96
+          list_env 124
+          filename_and_path {include/fltk3images/BMPImage.h}
+        }
+        file_ref {GIFImage.h} {
+          uuid_Xcode4_BuildFile {E1645FE3-A511-42A3-873D-131C575CF91A}
+          uuid_Xcode4_FileRef {605121E0-DA10-4363-AD06-B3FF977E11C8}
+          uuid_Xcode4_BuildFileInHeaders {8845649A-5BB6-4BA3-879C-1952D0C93211}
+          build_env 96
+          list_env 124
+          filename_and_path {include/fltk3images/GIFImage.h}
+        }
+        file_ref {HelpDialog.h} {
+          uuid_Xcode4_BuildFile {039E6910-80A1-4672-8705-02AC45E81900}
+          uuid_Xcode4_FileRef {0925F193-41B3-477E-B5AD-81F5397661F3}
+          uuid_Xcode4_BuildFileInHeaders {F7A66B0A-98D9-44E3-B704-829151BB84FB}
+          build_env 96
+          list_env 124
+          filename_and_path {include/fltk3images/HelpDialog.h}
+        }
+        file_ref {JPEGImage.h} {
+          uuid_Xcode4_BuildFile {E924726D-D8F9-42F3-99B6-0B33A6E07929}
+          uuid_Xcode4_FileRef {60A217E0-989A-441E-96AA-E8B7D7B44D49}
+          uuid_Xcode4_BuildFileInHeaders {30029E6A-2C65-48E5-8722-0B7CFEBA9CF8}
+          build_env 96
+          list_env 124
+          filename_and_path {include/fltk3images/JPEGImage.h}
+        }
+        file_ref {PNGImage.h} {
+          uuid_Xcode4_BuildFile {5D9E7161-6EC7-4233-AA60-D021CB0DFC59}
+          uuid_Xcode4_FileRef {25BEA285-CF71-4ED0-B043-193DEA1014E2}
+          uuid_Xcode4_BuildFileInHeaders {E3127242-7B17-4B32-9FCC-1F2101B769A4}
+          build_env 96
+          list_env 124
+          filename_and_path {include/fltk3images/PNGImage.h}
+        }
+        file_ref {PNMImage.h} {
+          uuid_Xcode4_BuildFile {4C35DB58-66D6-4FE6-8D74-0F09B1B8EC70}
+          uuid_Xcode4_FileRef {EC95850E-4FC1-4DEB-A8EB-551759E4EBC2}
+          uuid_Xcode4_BuildFileInHeaders {CBE8880E-97E1-45DC-8CC0-78ED5298EAAE}
+          build_env 96
+          list_env 124
+          filename_and_path {include/fltk3images/PNMImage.h}
+        }
+      }
       folder Sources {
         uuid_Xcode4_Group {E2718243-909A-4978-97ED-407EA35C2EB3}
       } {
-        file_ref {Fl_BMP_Image.cxx} {
+        file_ref {BMPImage.cxx} {
           uuid_Xcode4_BuildFileInSources {E6582F0C-0750-4240-82F3-E8318102A2E1}
           uuid_Xcode4_FileRef {BEBF4248-3EAD-4A52-AAA4-E820B7383470}
-          filename_and_path {src/core/Fl_BMP_Image.cxx}
+          filename_and_path {src/fltk3images/BMPImage.cxx}
         }
-        file_ref {Fl_File_Icon2.cxx} {
+        file_ref {FileIcon2.cxx} {
           uuid_Xcode4_BuildFileInSources {4527A184-6B41-4768-86C4-ACF47AB984FD}
           uuid_Xcode4_FileRef {7655FB1C-DE8D-4283-BC6F-56486E0C6765}
-          filename_and_path {src/core/Fl_File_Icon2.cxx}
+          filename_and_path {src/fltk3images/FileIcon2.cxx}
         }
-        file_ref {Fl_GIF_Image.cxx} {
+        file_ref {GIFImage.cxx} {
           uuid_Xcode4_BuildFileInSources {61475B35-29FB-4C24-8830-ECA24AD4D896}
           uuid_Xcode4_FileRef {CFAC1FAE-3A10-47AA-AFCF-D8465E2BC5E9}
-          filename_and_path {src/core/Fl_GIF_Image.cxx}
+          filename_and_path {src/fltk3images/GIFImage.cxx}
         }
-        file_ref {Fl_Help_Dialog.cxx} {
+        file_ref {HelpDialog.cxx} {
           uuid_Xcode4_BuildFileInSources {D0C37235-7804-45A7-899C-281EC063120A}
           uuid_Xcode4_FileRef {0EDA91FF-EE99-4E85-8C47-3C2A2CD72D46}
-          filename_and_path {src/core/Fl_Help_Dialog.cxx}
+          filename_and_path {src/fltk3images/HelpDialog.cxx}
         }
-        file_ref {Fl_JPEG_Image.cxx} {
+        file_ref {images_core.cxx} {
+          uuid_Xcode4_BuildFileInSources {C99E8BD8-E953-4FF3-8C5D-3186E07EE04C}
+          uuid_Xcode4_FileRef {6ADD9C72-9A09-406D-A836-86A180529588}
+          filename_and_path {src/fltk3images/images_core.cxx}
+        }
+        file_ref {JPEGImage.cxx} {
           uuid_Xcode4_BuildFileInSources {633E5465-917A-472C-A60F-0F991EB5A771}
           uuid_Xcode4_FileRef {771C095F-B545-47EB-A972-E68EACA213AB}
-          filename_and_path {src/core/Fl_JPEG_Image.cxx}
+          filename_and_path {src/fltk3images/JPEGImage.cxx}
         }
-        file_ref {Fl_PNG_Image.cxx} {
+        file_ref {PNGImage.cxx} {
           uuid_Xcode4_BuildFileInSources {6C957398-2885-42CA-94E3-6A7DE9ADFFDD}
           uuid_Xcode4_FileRef {E1BECD1D-5322-476A-97C7-1A355469A00E}
-          filename_and_path {src/core/Fl_PNG_Image.cxx}
+          filename_and_path {src/fltk3images/PNGImage.cxx}
         }
-        file_ref {Fl_PNM_Image.cxx} {
+        file_ref {PNMImage.cxx} {
           uuid_Xcode4_BuildFileInSources {E8B17358-E01C-468D-BA98-FD841B2BD4D5}
           uuid_Xcode4_FileRef {948DEE29-B0C3-4360-8B48-E166578DD9C0}
-          filename_and_path {src/core/Fl_PNM_Image.cxx}
+          filename_and_path {src/fltk3images/PNMImage.cxx}
         }
-        file_ref {fl_images_core.cxx} {
-          uuid_Xcode4_BuildFileInSources {C99E8BD8-E953-4FF3-8C5D-3186E07EE04C}
-          uuid_Xcode4_FileRef {6ADD9C72-9A09-406D-A836-86A180529588}
-          filename_and_path {src/core/fl_images_core.cxx}
-        }
       }
-      folder Dependencies {open
+      folder Dependencies {
         uuid_Xcode4_Group {5C231979-6ADE-4A65-9BA7-0688B9D02387}
       } {
         target_dependency fltk3 {
@@ -2700,7 +2736,7 @@
         }
       }
     }
-    lib_target fltk3png {
+    lib_target fltk3png {open
       uuid_Xcode4_FluidBuildRule {B468177C-52F4-4139-A3FF-67AB6002BC34}
       uuid_Xcode4_ProductFileReference {06A7B68E-69DF-48DF-9752-4CC40872987D}
       uuid_Xcode4_FrameworksBuildPhase {E6A799B5-B767-4119-BAAE-E6ABAED46318}
@@ -2816,7 +2852,7 @@
         }
       }
     }
-    lib_target fltk3jpeg {
+    lib_target fltk3jpeg {open
       uuid_Xcode4_FluidBuildRule {657AA958-2632-4A29-B657-91775A869EBC}
       uuid_Xcode4_ProductFileReference {C03975F6-58DD-41B5-9A0D-D73961888340}
       uuid_Xcode4_FrameworksBuildPhase {65CF0CCA-3098-403B-A9B6-70000827BCE8}
@@ -2834,7 +2870,7 @@
       target_path lib
       makefile_path src
     } {
-      folder Sources {open
+      folder Sources {
         uuid_Xcode4_Group {C49343E4-9CEB-4F51-A1BB-E511537472C9}
       } {
         file_ref {jaricom.c} {
@@ -3080,7 +3116,7 @@
         }
       }
     }
-    lib_target fltk3zlib {
+    lib_target fltk3zlib {open
       uuid_Xcode4_FluidBuildRule {123C1072-0C58-4F44-AD82-E57DC97E4F36}
       uuid_Xcode4_ProductFileReference {AFDEBB8C-A6BB-4318-814D-9D4B6586BF8B}
       uuid_Xcode4_FrameworksBuildPhase {DEBCC581-E57F-4C21-8DA4-57A0CC89BBE4}
@@ -3190,10 +3226,10 @@
       }
     }
   }
-  folder Tests {open
+  folder Tests {
     uuid_Xcode4_Group {5B388C4A-A5BB-4166-B79C-7335DA628E4D}
   } {
-    app_target Demo {open
+    app_target Demo {
       uuid_Xcode4_FluidBuildRule {2D727B96-E7A2-4AE3-9D7A-4F7F659C111E}
       uuid_Xcode4_CopyFilesBuildPhase {5CEA130D-C6C9-4262-85E4-33EDAE54E1AF}
       uuid_Xcode4_ProductFileReference {84AB5A59-0B0A-4F0C-8A1E-D4A51C07CE22}
@@ -3648,7 +3684,7 @@
         location 2
       }
     }
-    app_target adjuster {open
+    app_target adjuster {
       uuid_Xcode4_FluidBuildRule {7F4E1728-AA0B-4CE8-A872-92E1BEF787E1}
       uuid_Xcode4_CopyFilesBuildPhase {32C8A51E-56B3-4B97-80CE-687395BC6B83}
       uuid_Xcode4_ProductFileReference {A7E21FA5-F599-4F5F-B681-9AF31A556B3A}
@@ -3677,7 +3713,7 @@
         uuid_Xcode4_TargetDependency {69469051-2637-4BD1-9BD6-8C5E20160426}
       }
     }
-    app_target arc {open
+    app_target arc {
       uuid_Xcode4_FluidBuildRule {699A7A9E-A60C-4507-B347-0C3DBA393555}
       uuid_Xcode4_CopyFilesBuildPhase {79C869C0-BB2B-476D-A4F6-B8FC170EDD99}
       uuid_Xcode4_ProductFileReference {5DBEAD2F-EA63-465C-8B2D-B3CB08805827}
@@ -3706,7 +3742,7 @@
         uuid_Xcode4_TargetDependency {D6D7D6B9-C331-4AF8-B823-116BBA47DF6A}
       }
     }
-    app_target ask {open
+    app_target ask {
       uuid_Xcode4_FluidBuildRule {FBFDA712-92F6-47C9-AE68-858A73813070}
       uuid_Xcode4_CopyFilesBuildPhase {D57D8419-3DEF-4005-94DC-DDE99B2AA71B}
       uuid_Xcode4_ProductFileReference {4DC5C5FF-FB6A-4895-A9F2-CA805C76B0BF}

Modified: branches/branch-3.0/fluid/Fl_Function_Type.cxx
===================================================================
--- branches/branch-3.0/fluid/Fl_Function_Type.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/Fl_Function_Type.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -31,7 +31,7 @@
 #include "Fl_Type.h"
 #include <fltk3/ask.h>
 #include <fltk3/FileChooser.h>
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 #include <stdio.h>
 #include <stdlib.h>
 

Modified: branches/branch-3.0/fluid/Fl_Group_Type.cxx
===================================================================
--- branches/branch-3.0/fluid/Fl_Group_Type.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/Fl_Group_Type.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -35,7 +35,7 @@
 #include <fltk3/Table.h>
 #include <fltk3/message.h>
 #include "Fl_Widget_Type.h"
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 
 // Override group's resize behavior to do nothing to children:
 void igroup::resize(int X, int Y, int W, int H) {

Modified: branches/branch-3.0/fluid/Fl_Menu_Type.cxx
===================================================================
--- branches/branch-3.0/fluid/Fl_Menu_Type.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/Fl_Menu_Type.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -40,7 +40,7 @@
 #include <fltk3/ValueInput.h>
 #include <fltk3/TextDisplay.h>
 #include <fltk3/Wrapper.h>
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 #include <stdio.h>
 #include <stdlib.h>
 

Modified: branches/branch-3.0/fluid/Fl_Type.cxx
===================================================================
--- branches/branch-3.0/fluid/Fl_Type.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/Fl_Type.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -43,7 +43,7 @@
 #include <fltk3/draw.h>
 #include <fltk3/filename.h>
 #include <stdlib.h>
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 #include <stdio.h>
 
 #include "Fl_Type.h"

Modified: branches/branch-3.0/fluid/Fl_Type.h
===================================================================
--- branches/branch-3.0/fluid/Fl_Type.h	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/Fl_Type.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -152,6 +152,7 @@
   virtual const char *title(); // string for browser
   virtual const char *type_name() = 0; // type for code output
   virtual const char *alt_type_name() { return type_name(); } // alternate type for FLTK1 file reading
+  virtual const char *include_path() { return 0; }
 
   const char *name() const {return name_;}
   void name(const char *);
@@ -622,6 +623,7 @@
   void open();
   virtual const char *type_name() {return "class";}
   virtual const char *alt_type_name() { return type_name(); }
+  virtual const char *include_path() { return "fltk3"; }
   int is_parent() const {return 1;}
   int is_decl_block() const {return 1;}
   int is_class() const {return 1;}
@@ -678,6 +680,7 @@
   Fl_Widget_Type();
   Fl_Type *make();
   void open();
+  virtual const char *include_path() { return "fltk3"; }
 
   const char *extra_code(int n) const {return extra_code_[n];}
   void extra_code(int n,const char *);

Modified: branches/branch-3.0/fluid/Fl_Widget_Type.cxx
===================================================================
--- branches/branch-3.0/fluid/Fl_Widget_Type.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/Fl_Widget_Type.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -35,7 +35,7 @@
 #include <fltk3/Slider.h>
 #include <fltk3/Spinner.h>
 #include <fltk3/Window.h>
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -1960,8 +1960,7 @@
 void Fl_Widget_Type::write_static() {
   const char* t = subclassname(this);
   if (!subclass() || (is_class() && !strncmp(t, "fltk3::", 7))) {
-    // FIXME: this will not work for fltk3gl and fltk3images any more!
-    write_declare("#include <fltk3/%s.h>", t+7);
+    write_declare("#include <%s/%s.h>", include_path(), t+7);
   }
   for (int n=0; n < NUM_EXTRA_CODE; n++) {
     if (extra_code(n) && isdeclare(extra_code(n)))

Modified: branches/branch-3.0/fluid/Fl_Window_Type.cxx
===================================================================
--- branches/branch-3.0/fluid/Fl_Window_Type.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/Fl_Window_Type.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -1359,7 +1359,7 @@
 ////////////////////////////////////////////////////////////////
 
 #include <stdio.h>
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 
 void Fl_Window_Type::write_code1() {
   Fl_Widget_Type::write_code1();

Modified: branches/branch-3.0/fluid/Fluid_Image.cxx
===================================================================
--- branches/branch-3.0/fluid/Fluid_Image.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/Fluid_Image.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -29,7 +29,7 @@
 #include <fltk3/Widget.h>
 #include "Fl_Type.h"
 #include "Fluid_Image.h"
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 #include <stdio.h>
 #include <errno.h>
 #include <stdlib.h>
@@ -57,7 +57,6 @@
     // Write Pixmap data...
     write_c("\n");
     if (pixmap_header_written != write_number) {
-      // FIXME: this will have to be fltk3image/...
       write_c("#include <fltk3/Pixmap.h>\n");
       pixmap_header_written = write_number;
     }
@@ -106,7 +105,7 @@
     // Write jpeg image data...
     write_c("\n");
     if (jpeg_header_written != write_number) {
-      write_c("#include <fltk3/JPEGImage.h>\n");
+      write_c("#include <fltk3images/JPEGImage.h>\n");
       jpeg_header_written = write_number;
     }
     write_c("static unsigned char %s[] =\n",

Modified: branches/branch-3.0/fluid/code.cxx
===================================================================
--- branches/branch-3.0/fluid/code.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/code.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -27,7 +27,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 #include <stdarg.h>
 
 #include <fltk3/run.h>

Modified: branches/branch-3.0/fluid/factory.cxx
===================================================================
--- branches/branch-3.0/fluid/factory.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/factory.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -39,7 +39,7 @@
 #include <fltk3/Pixmap.h>
 #include <fltk3/Tree.h>
 #include <stdio.h>
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 #include "undo.h"
 
 #include "Fl_Widget_Type.h"

Modified: branches/branch-3.0/fluid/file.cxx
===================================================================
--- branches/branch-3.0/fluid/file.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/file.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -33,7 +33,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 // FIXME: either make the interface public or remove this include statement!
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 #include <stdarg.h>
 #include "alignment_panel.h"
 #include "workspace_panel.h"

Modified: branches/branch-3.0/fluid/file_make.cxx
===================================================================
--- branches/branch-3.0/fluid/file_make.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/file_make.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -281,7 +281,7 @@
   fprintf(out, "AC_PREREQ(2.50)\n");
   fprintf(out, "\n");
   fprintf(out, "dnl Required file in package...\n");
-  fprintf(out, "AC_INIT(src/core/Fl.cxx)\n");
+  fprintf(out, "AC_INIT(src/fltk3/run.cxx)\n");
   fprintf(out, "\n");
   fprintf(out, "dnl So --with-archflags option is used during \"checking size of long\"\n");
   fprintf(out, "if test `uname` = Darwin; then\n");

Modified: branches/branch-3.0/fluid/fluid.cxx
===================================================================
--- branches/branch-3.0/fluid/fluid.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/fluid.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -30,7 +30,7 @@
 #include <fltk3/Box.h>
 #include <fltk3/Button.h>
 #include <fltk3/FileIcon.h>
-#include <fltk3/HelpDialog.h>
+#include <fltk3images/HelpDialog.h>
 #include <fltk3/HoldBrowser.h>
 #include <fltk3/MenuBar.h>
 #include <fltk3/Input.h>
@@ -38,7 +38,7 @@
 #include <fltk3/ask.h>
 #include <fltk3/draw.h>
 #include <fltk3/FileChooser.h>
-#include <fltk3/PNGImage.h>
+#include <fltk3images/PNGImage.h>
 #include <fltk3/Printer.h>
 #include <fltk3/message.h>
 #include <fltk3/filename.h>
@@ -48,7 +48,7 @@
 #include <sys/stat.h>
 #include <time.h> // time(), localtime(), etc.
 
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 #include "alignment_panel.h"
 #include "function_panel.h"
 #include "template_panel.h"

Modified: branches/branch-3.0/fluid/makedepend
===================================================================
--- branches/branch-3.0/fluid/makedepend	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/makedepend	2011-08-25 21:50:59 UTC (rev 9011)
@@ -50,7 +50,7 @@
 Fl_Function_Type.o: ../include/fltk3/PackedGroup.h
 Fl_Function_Type.o: ../include/fltk3/WizardGroup.h ../include/fltk3/Menu_.h
 Fl_Function_Type.o: ../include/fltk3/InputChoice.h ../include/fltk3/MenuBar.h
-Fl_Function_Type.o: ../src/core/flstring.h ../include/fltk3/Export.h
+Fl_Function_Type.o: ../src/fltk3/flstring.h ../include/fltk3/Export.h
 Fl_Function_Type.o: ../include/config.h function_panel.h
 Fl_Function_Type.o: ../include/fltk3/LightButton.h
 Fl_Function_Type.o: ../include/fltk3/TextEditor.h
@@ -83,7 +83,7 @@
 Fl_Group_Type.o: ../include/fltk3/MenuButton.h ../include/fltk3/Menu_.h
 Fl_Group_Type.o: ../include/fltk3/Choice.h ../include/fltk3/InputChoice.h
 Fl_Group_Type.o: ../include/fltk3/Input.h ../include/fltk3/Input_.h
-Fl_Group_Type.o: ../include/fltk3/MenuBar.h ../src/core/flstring.h
+Fl_Group_Type.o: ../include/fltk3/MenuBar.h ../src/fltk3/flstring.h
 Fl_Group_Type.o: ../include/fltk3/Export.h ../include/config.h
 Fl_Menu_Type.o: ../include/fltk3/run.h ../include/fltk3/utf8.h
 Fl_Menu_Type.o: ../include/fltk3/Export.h ../include/fltk3/types.h
@@ -120,7 +120,7 @@
 Fl_Menu_Type.o: ../include/fltk3/ReturnButton.h
 Fl_Menu_Type.o: ../include/fltk3/RoundButton.h ../include/fltk3/message.h
 Fl_Menu_Type.o: ../include/fltk3/ask.h ../include/fltk3/ValueInput.h
-Fl_Menu_Type.o: ../src/core/flstring.h ../include/fltk3/Export.h
+Fl_Menu_Type.o: ../src/fltk3/flstring.h ../include/fltk3/Export.h
 Fl_Menu_Type.o: ../include/config.h ../include/fltk3/Output.h
 Fl_Menu_Type.o: Shortcut_Button.h
 Fl_Type.o: ../include/fltk3/run.h ../include/fltk3/utf8.h
@@ -139,7 +139,7 @@
 Fl_Type.o: ../include/fltk3/Image.h ../include/fltk3/Bitmap.h
 Fl_Type.o: ../include/fltk3/Image.h ../include/fltk3/Pixmap.h
 Fl_Type.o: ../include/fltk3/RGBImage.h ../include/fltk3/filename.h
-Fl_Type.o: ../src/core/flstring.h ../include/fltk3/Export.h
+Fl_Type.o: ../src/fltk3/flstring.h ../include/fltk3/Export.h
 Fl_Type.o: ../include/config.h Fl_Type.h ../include/fltk3/DoubleWindow.h
 Fl_Type.o: ../include/fltk3/Menu.h ../include/fltk3/MenuItem.h Fluid_Image.h
 Fl_Type.o: ../include/fltk3/SharedImage.h ../include/fltk3/TabGroup.h
@@ -215,7 +215,7 @@
 Fl_Widget_Type.o: ../include/fltk3/run.h ../include/fltk3/ReturnButton.h
 Fl_Widget_Type.o: ../include/fltk3/RoundButton.h ../include/fltk3/message.h
 Fl_Widget_Type.o: ../include/fltk3/ask.h ../include/fltk3/Slider.h
-Fl_Widget_Type.o: ../src/core/flstring.h ../include/fltk3/Export.h
+Fl_Widget_Type.o: ../src/fltk3/flstring.h ../include/fltk3/Export.h
 Fl_Widget_Type.o: ../include/config.h widget_panel.h
 Fl_Widget_Type.o: ../include/fltk3/ValueInput.h
 Fl_Widget_Type.o: ../include/fltk3/LightButton.h Shortcut_Button.h
@@ -262,7 +262,7 @@
 Fl_Window_Type.o: ../include/fltk3/ValueInput.h
 Fl_Window_Type.o: ../include/fltk3/LightButton.h Shortcut_Button.h
 Fl_Window_Type.o: CodeEditor.h ../include/fltk3/TextEditor.h
-Fl_Window_Type.o: ../include/fltk3/TextDisplay.h ../src/core/flstring.h
+Fl_Window_Type.o: ../include/fltk3/TextDisplay.h ../src/fltk3/flstring.h
 Fl_Window_Type.o: ../include/fltk3/Export.h ../include/config.h
 Fluid_Image.o: ../include/fltk3/run.h ../include/fltk3/utf8.h
 Fluid_Image.o: ../include/fltk3/Export.h ../include/fltk3/types.h
@@ -286,7 +286,7 @@
 Fluid_Image.o: ../include/fltk3/Menu_.h ../include/fltk3/Choice.h
 Fluid_Image.o: ../include/fltk3/InputChoice.h ../include/fltk3/Input.h
 Fluid_Image.o: ../include/fltk3/Input_.h ../include/fltk3/MenuBar.h
-Fluid_Image.o: ../src/core/flstring.h ../include/fltk3/Export.h
+Fluid_Image.o: ../src/fltk3/flstring.h ../include/fltk3/Export.h
 Fluid_Image.o: ../include/config.h ../include/fltk3/filename.h
 Fluid_Image.o: ../include/fltk3/FileChooser.h ../include/fltk3/Button.h
 Fluid_Image.o: ../include/fltk3/TiledGroup.h ../include/fltk3/FileBrowser.h
@@ -360,7 +360,7 @@
 alignment_panel.o: ../include/fltk3/RepeatButton.h ../include/fltk3/run.h
 alignment_panel.o: ../include/fltk3/ReturnButton.h
 alignment_panel.o: ../include/fltk3/RoundButton.h ../include/fltk3/ask.h
-code.o: ../src/core/flstring.h ../include/fltk3/Export.h ../include/config.h
+code.o: ../src/fltk3/flstring.h ../include/fltk3/Export.h ../include/config.h
 code.o: ../include/fltk3/run.h ../include/fltk3/utf8.h
 code.o: ../include/fltk3/Export.h ../include/fltk3/types.h
 code.o: ../include/fltk3/Xutf8.h ../include/fltk3/enumerations.h Fl_Type.h
@@ -410,7 +410,7 @@
 factory.o: ../include/fltk3/Preferences.h ../include/fltk3/Image.h
 factory.o: ../include/fltk3/Bitmap.h ../include/fltk3/RGBImage.h
 factory.o: ../include/fltk3/TreeItem.h ../include/fltk3/TreeItemArray.h
-factory.o: ../include/fltk3/TreePrefs.h ../src/core/flstring.h
+factory.o: ../include/fltk3/TreePrefs.h ../src/fltk3/flstring.h
 factory.o: ../include/fltk3/Export.h ../include/config.h undo.h
 factory.o: Fl_Widget_Type.h Fl_Type.h ../include/fltk3/DoubleWindow.h
 factory.o: ../include/fltk3/Menu.h ../include/fltk3/MenuItem.h Fluid_Image.h
@@ -441,7 +441,7 @@
 factory.o: ../include/fltk3/Input.h ../include/fltk3/ValueInput.h
 factory.o: ../include/fltk3/ValueOutput.h ../include/fltk3/ValueSlider.h
 factory.o: ../include/fltk3/MultiLabel.h
-file.o: ../src/core/flstring.h ../include/fltk3/Export.h ../include/config.h
+file.o: ../src/fltk3/flstring.h ../include/fltk3/Export.h ../include/config.h
 file.o: alignment_panel.h ../include/fltk3/run.h ../include/fltk3/utf8.h
 file.o: ../include/fltk3/Export.h ../include/fltk3/types.h
 file.o: ../include/fltk3/Xutf8.h ../include/fltk3/enumerations.h
@@ -630,7 +630,7 @@
 fluid.o: ../include/fltk3/Wrapper.h ../include/fltk3/Widget.h
 fluid.o: ../include/fltk3/Box.h ../include/fltk3/Button.h
 fluid.o: ../include/fltk3/FileIcon.h ../include/fltk3/run.h
-fluid.o: ../include/fltk3/HelpDialog.h ../include/fltk3/Group.h
+fluid.o: ../include/fltk3images/HelpDialog.h ../include/fltk3/Group.h
 fluid.o: ../include/fltk3/Input.h ../include/fltk3/Input_.h
 fluid.o: ../include/fltk3/HelpView.h ../include/fltk3/Scrollbar.h
 fluid.o: ../include/fltk3/Slider.h ../include/fltk3/Valuator.h
@@ -651,10 +651,10 @@
 fluid.o: ../include/fltk3/FileIcon.h ../include/fltk3/CheckButton.h
 fluid.o: ../include/fltk3/LightButton.h ../include/fltk3/Button.h
 fluid.o: ../include/fltk3/FileInput.h ../include/fltk3/ReturnButton.h
-fluid.o: ../include/fltk3/PNGImage.h ../include/fltk3/Printer.h
+fluid.o: ../include/fltk3images/PNGImage.h ../include/fltk3/Printer.h
 fluid.o: ../include/fltk3/PagedDevice.h ../include/fltk3/PostScript.h
 fluid.o: ../include/fltk3/message.h ../include/fltk3/ask.h
-fluid.o: ../include/fltk3/filename.h ../src/core/flstring.h
+fluid.o: ../include/fltk3/filename.h ../src/fltk3/flstring.h
 fluid.o: ../include/fltk3/Export.h ../include/config.h alignment_panel.h
 fluid.o: ../include/fltk3/TextBuffer.h ../include/fltk3/TextDisplay.h
 fluid.o: ../include/fltk3/TextBuffer.h ../include/fltk3/Tooltip.h
@@ -715,7 +715,7 @@
 template_panel.o: ../include/fltk3/Box.h ../include/fltk3/Input.h
 template_panel.o: ../include/fltk3/Input_.h ../include/fltk3/Group.h
 template_panel.o: ../include/fltk3/Button.h ../include/fltk3/ReturnButton.h
-template_panel.o: ../include/fltk3/Button.h ../src/core/flstring.h
+template_panel.o: ../include/fltk3/Button.h ../src/fltk3/flstring.h
 template_panel.o: ../include/fltk3/Export.h ../include/config.h
 template_panel.o: ../include/fltk3/filename.h ../include/fltk3/ask.h
 template_panel.o: ../include/fltk3/SharedImage.h
@@ -742,7 +742,7 @@
 undo.o: ../include/fltk3/Choice.h ../include/fltk3/InputChoice.h
 undo.o: ../include/fltk3/Input.h ../include/fltk3/Input_.h
 undo.o: ../include/fltk3/MenuBar.h undo.h ../include/fltk3/filename.h
-undo.o: ../src/core/flstring.h ../include/fltk3/Export.h ../include/config.h
+undo.o: ../src/fltk3/flstring.h ../include/fltk3/Export.h ../include/config.h
 widget_panel.o: widget_panel.h ../include/fltk3/run.h ../include/fltk3/utf8.h
 widget_panel.o: ../include/fltk3/Export.h ../include/fltk3/types.h
 widget_panel.o: ../include/fltk3/Xutf8.h ../include/fltk3/enumerations.h

Modified: branches/branch-3.0/fluid/template_panel.cxx
===================================================================
--- branches/branch-3.0/fluid/template_panel.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/template_panel.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -30,7 +30,7 @@
 #include "template_panel.h"
 #include <stdio.h>
 #include <stdlib.h>
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 #include <errno.h>
 #include <fltk3/filename.h>
 #include <fltk3/ask.h>

Modified: branches/branch-3.0/fluid/undo.cxx
===================================================================
--- branches/branch-3.0/fluid/undo.cxx	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/fluid/undo.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -30,7 +30,7 @@
 #include "undo.h"
 #include <fltk3/Preferences.h>
 #include <fltk3/filename.h>
-#include "../src/core/flstring.h"
+#include "../src/fltk3/flstring.h"
 #if defined(WIN32) && !defined(__CYGWIN__)
 #  include <io.h>
 #  include <windows.h>

Modified: branches/branch-3.0/ide/VisualC2008/fltk3.vcproj
===================================================================
--- branches/branch-3.0/ide/VisualC2008/fltk3.vcproj	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/ide/VisualC2008/fltk3.vcproj	2011-08-25 21:50:59 UTC (rev 9011)
@@ -184,7 +184,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Adjuster.cxx"
+			RelativePath="..\..\src\fltk3\Adjuster.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -207,7 +207,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Bitmap.cxx"
+			RelativePath="..\..\src\fltk3\Bitmap.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -230,7 +230,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Box.cxx"
+			RelativePath="..\..\src\fltk3\Box.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -253,7 +253,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Browser.cxx"
+			RelativePath="..\..\src\fltk3\Browser.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -276,7 +276,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Browser_.cxx"
+			RelativePath="..\..\src\fltk3\Browser_.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -299,7 +299,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Browser_load.cxx"
+			RelativePath="..\..\src\fltk3\Browser_load.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -322,7 +322,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Button.cxx"
+			RelativePath="..\..\src\fltk3\Button.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -345,7 +345,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Chart.cxx"
+			RelativePath="..\..\src\fltk3\Chart.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -368,7 +368,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Check_Browser.cxx"
+			RelativePath="..\..\src\fltk3\CheckBrowser.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -391,7 +391,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Check_Button.cxx"
+			RelativePath="..\..\src\fltk3\CheckButton.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -414,7 +414,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Choice.cxx"
+			RelativePath="..\..\src\fltk3\Choice.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -437,7 +437,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Clock.cxx"
+			RelativePath="..\..\src\fltk3\Clock.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -460,7 +460,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Color_Chooser.cxx"
+			RelativePath="..\..\src\fltk3\ColorChooser.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -483,7 +483,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Counter.cxx"
+			RelativePath="..\..\src\fltk3\Counter.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -506,7 +506,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Device.cxx"
+			RelativePath="..\..\src\fltk3\Device.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -529,7 +529,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Dial.cxx"
+			RelativePath="..\..\src\fltk3\Dial.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -552,7 +552,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Double_Window.cxx"
+			RelativePath="..\..\src\fltk3\DoubleWindow.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -575,7 +575,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_File_Browser.cxx"
+			RelativePath="..\..\src\fltk3\FileBrowser.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -598,7 +598,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_File_Chooser.cxx"
+			RelativePath="..\..\src\fltk3\FileChooser.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -621,7 +621,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_File_Chooser2.cxx"
+			RelativePath="..\..\src\fltk3\FileChooser2.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -644,7 +644,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_File_Icon.cxx"
+			RelativePath="..\..\src\fltk3\FileIcon.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -667,7 +667,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_File_Input.cxx"
+			RelativePath="..\..\src\fltk3\FileInput.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -690,7 +690,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Group.cxx"
+			RelativePath="..\..\src\fltk3\Group.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -713,7 +713,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Help_View.cxx"
+			RelativePath="..\..\src\fltk3\HelpView.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -736,7 +736,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Image.cxx"
+			RelativePath="..\..\src\fltk3\Image.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -759,7 +759,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Input.cxx"
+			RelativePath="..\..\src\fltk3\Input.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -782,7 +782,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Input_.cxx"
+			RelativePath="..\..\src\fltk3\Input_.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -805,7 +805,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Light_Button.cxx"
+			RelativePath="..\..\src\fltk3\LightButton.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -828,7 +828,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Menu.cxx"
+			RelativePath="..\..\src\fltk3\Menu.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -851,7 +851,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Menu_.cxx"
+			RelativePath="..\..\src\fltk3\Menu_.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -874,7 +874,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Menu_Bar.cxx"
+			RelativePath="..\..\src\fltk3\MenuBar.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -897,7 +897,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Menu_Button.cxx"
+			RelativePath="..\..\src\fltk3\MenuButton.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -920,7 +920,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Menu_Window.cxx"
+			RelativePath="..\..\src\fltk3\MenuWindow.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -943,7 +943,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Menu_add.cxx"
+			RelativePath="..\..\src\fltk3\Menu_add.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -966,7 +966,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Menu_global.cxx"
+			RelativePath="..\..\src\fltk3\Menu_global.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -989,7 +989,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Multi_Label.cxx"
+			RelativePath="..\..\src\fltk3\MultiLabel.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1012,7 +1012,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Native_File_Chooser.cxx"
+			RelativePath="..\..\src\fltk3\NativeFileChooser.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1035,7 +1035,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Overlay_Window.cxx"
+			RelativePath="..\..\src\fltk3\OverlayWindow.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1058,7 +1058,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Pack.cxx"
+			RelativePath="..\..\src\fltk3\PackedGroup.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1081,7 +1081,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Paged_Device.cxx"
+			RelativePath="..\..\src\fltk3\PagedDevice.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1104,7 +1104,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Pixmap.cxx"
+			RelativePath="..\..\src\fltk3\Pixmap.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1127,7 +1127,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Positioner.cxx"
+			RelativePath="..\..\src\fltk3\Positioner.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1150,7 +1150,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Printer.cxx"
+			RelativePath="..\..\src\fltk3\Printer.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1173,7 +1173,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Preferences.cxx"
+			RelativePath="..\..\src\fltk3\Preferences.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1196,7 +1196,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Progress.cxx"
+			RelativePath="..\..\src\fltk3\Progress.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1219,7 +1219,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Repeat_Button.cxx"
+			RelativePath="..\..\src\fltk3\RepeatButton.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1242,7 +1242,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Return_Button.cxx"
+			RelativePath="..\..\src\fltk3\ReturnButton.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1265,7 +1265,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Roller.cxx"
+			RelativePath="..\..\src\fltk3\Roller.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1288,7 +1288,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Round_Button.cxx"
+			RelativePath="..\..\src\fltk3\RoundButton.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1311,7 +1311,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Scroll.cxx"
+			RelativePath="..\..\src\fltk3\ScrollGroup.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1334,7 +1334,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Scrollbar.cxx"
+			RelativePath="..\..\src\fltk3\Scrollbar.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1357,7 +1357,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Shared_Image.cxx"
+			RelativePath="..\..\src\fltk3\SharedImage.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1380,7 +1380,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Single_Window.cxx"
+			RelativePath="..\..\src\fltk3\SingleWindow.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1403,7 +1403,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Slider.cxx"
+			RelativePath="..\..\src\fltk3\Slider.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1426,7 +1426,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Style.cxx"
+			RelativePath="..\..\src\fltk3\Style.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1449,7 +1449,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Sys_Menu_Bar.cxx"
+			RelativePath="..\..\src\fltk3\SysMenuBar.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1472,7 +1472,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Table.cxx"
+			RelativePath="..\..\src\fltk3\Table.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1495,7 +1495,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Table_Row.cxx"
+			RelativePath="..\..\src\fltk3\TableRow.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1518,7 +1518,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Tabs.cxx"
+			RelativePath="..\..\src\fltk3\TabGroup.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1541,7 +1541,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Text_Buffer.cxx"
+			RelativePath="..\..\src\fltk3\TextBuffer.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1564,7 +1564,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Text_Display.cxx"
+			RelativePath="..\..\src\fltk3\TextDisplay.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1587,7 +1587,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Text_Editor.cxx"
+			RelativePath="..\..\src\fltk3\TextEditor.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1610,7 +1610,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Tile.cxx"
+			RelativePath="..\..\src\fltk3\TiledGroup.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1633,7 +1633,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Tiled_Image.cxx"
+			RelativePath="..\..\src\fltk3\TiledImage.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1656,7 +1656,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Tooltip.cxx"
+			RelativePath="..\..\src\fltk3\Tooltip.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1679,7 +1679,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Tree.cxx"
+			RelativePath="..\..\src\fltk3\Tree.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1702,7 +1702,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Tree_Item.cxx"
+			RelativePath="..\..\src\fltk3\TreeItem.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1725,7 +1725,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Tree_Item_Array.cxx"
+			RelativePath="..\..\src\fltk3\TreeItemArray.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1748,7 +1748,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Tree_Prefs.cxx"
+			RelativePath="..\..\src\fltk3\TreePrefs.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1771,7 +1771,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Valuator.cxx"
+			RelativePath="..\..\src\fltk3\Valuator.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1794,7 +1794,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Value_Input.cxx"
+			RelativePath="..\..\src\fltk3\ValueInput.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1817,7 +1817,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Value_Output.cxx"
+			RelativePath="..\..\src\fltk3\ValueOutput.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1840,7 +1840,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Value_Slider.cxx"
+			RelativePath="..\..\src\fltk3\ValueSlider.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1863,7 +1863,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Widget.cxx"
+			RelativePath="..\..\src\fltk3\Widget.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1886,7 +1886,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Window.cxx"
+			RelativePath="..\..\src\fltk3\Window.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1909,7 +1909,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Window_fullscreen.cxx"
+			RelativePath="..\..\src\fltk3\Window_fullscreen.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1932,7 +1932,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Window_hotspot.cxx"
+			RelativePath="..\..\src\fltk3\Window_hotspot.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1955,7 +1955,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Window_iconize.cxx"
+			RelativePath="..\..\src\fltk3\Window_iconize.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -1978,7 +1978,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Wizard.cxx"
+			RelativePath="..\..\src\fltk3\Wizard.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2001,7 +2001,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_XBM_Image.cxx"
+			RelativePath="..\..\src\fltk3\XBMImage.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2024,7 +2024,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_XPM_Image.cxx"
+			RelativePath="..\..\src\fltk3\XPMImage.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2047,7 +2047,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_abort.cxx"
+			RelativePath="..\..\src\fltk3\abort.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2070,7 +2070,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_add_idle.cxx"
+			RelativePath="..\..\src\fltk3\add_idle.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2093,7 +2093,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_arg.cxx"
+			RelativePath="..\..\src\fltk3\arg.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2116,7 +2116,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_compose.cxx"
+			RelativePath="..\..\src\fltk3\compose.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2139,7 +2139,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_display.cxx"
+			RelativePath="..\..\src\fltk3\display.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2162,7 +2162,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_get_key.cxx"
+			RelativePath="..\..\src\fltk3\get_key.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2185,7 +2185,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_get_system_colors.cxx"
+			RelativePath="..\..\src\fltk3\get_system_colors.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2208,7 +2208,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_grab.cxx"
+			RelativePath="..\..\src\fltk3\grab.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2231,7 +2231,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_lock.cxx"
+			RelativePath="..\..\src\fltk3\lock.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2254,7 +2254,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_own_colormap.cxx"
+			RelativePath="..\..\src\fltk3\own_colormap.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2277,7 +2277,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_visual.cxx"
+			RelativePath="..\..\src\fltk3\visual.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2300,7 +2300,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_x.cxx"
+			RelativePath="..\..\src\fltk3\x11.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2323,7 +2323,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\filename_absolute.cxx"
+			RelativePath="..\..\src\fltk3\filename_absolute.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2346,7 +2346,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\filename_expand.cxx"
+			RelativePath="..\..\src\fltk3\filename_expand.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2369,7 +2369,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\filename_ext.cxx"
+			RelativePath="..\..\src\fltk3\filename_ext.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2392,7 +2392,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\filename_isdir.cxx"
+			RelativePath="..\..\src\fltk3\filename_isdir.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2415,7 +2415,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\filename_list.cxx"
+			RelativePath="..\..\src\fltk3\filename_list.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2438,7 +2438,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\filename_match.cxx"
+			RelativePath="..\..\src\fltk3\filename_match.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2461,7 +2461,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\filename_setext.cxx"
+			RelativePath="..\..\src\fltk3\filename_setext.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2484,7 +2484,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_arc.cxx"
+			RelativePath="..\..\src\fltk3\arc.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2507,7 +2507,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_arci.cxx"
+			RelativePath="..\..\src\fltk3\arci.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2530,7 +2530,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_ask.cxx"
+			RelativePath="..\..\src\fltk3\ask.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2553,7 +2553,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_boxtype.cxx"
+			RelativePath="..\..\src\fltk3\boxtype.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2576,7 +2576,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_call_main.cxx"
+			RelativePath="..\..\src\fltk3\call_main.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2599,7 +2599,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_color.cxx"
+			RelativePath="..\..\src\fltk3\color.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2622,7 +2622,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_cursor.cxx"
+			RelativePath="..\..\src\fltk3\cursor.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2645,7 +2645,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_curve.cxx"
+			RelativePath="..\..\src\fltk3\curve.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2668,7 +2668,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_diamond_box.cxx"
+			RelativePath="..\..\src\fltk3\diamond_box.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2691,7 +2691,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_dnd.cxx"
+			RelativePath="..\..\src\fltk3\dnd.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2714,7 +2714,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_draw.cxx"
+			RelativePath="..\..\src\fltk3\draw.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2737,7 +2737,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_draw_image.cxx"
+			RelativePath="..\..\src\fltk3\draw_image.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2760,7 +2760,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_draw_pixmap.cxx"
+			RelativePath="..\..\src\fltk3\draw_pixmap.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2783,7 +2783,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_encoding_latin1.cxx"
+			RelativePath="..\..\src\fltk3\encoding_latin1.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2806,7 +2806,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_encoding_mac_roman.cxx"
+			RelativePath="..\..\src\fltk3\encoding_mac_roman.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2829,7 +2829,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_engraved_label.cxx"
+			RelativePath="..\..\src\fltk3\engraved_label.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2852,7 +2852,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_file_dir.cxx"
+			RelativePath="..\..\src\fltk3\file_dir.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2875,7 +2875,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_font.cxx"
+			RelativePath="..\..\src\fltk3\font.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2898,7 +2898,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_gtk.cxx"
+			RelativePath="..\..\src\fltk3\gtk.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2921,7 +2921,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_labeltype.cxx"
+			RelativePath="..\..\src\fltk3\labeltype.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2944,7 +2944,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_line_style.cxx"
+			RelativePath="..\..\src\fltk3\line_style.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2967,7 +2967,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_open_uri.cxx"
+			RelativePath="..\..\src\fltk3\open_uri.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -2990,7 +2990,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_oval_box.cxx"
+			RelativePath="..\..\src\fltk3\oval_box.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3013,7 +3013,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_overlay.cxx"
+			RelativePath="..\..\src\fltk3\overlay.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3036,7 +3036,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_overlay_visual.cxx"
+			RelativePath="..\..\src\fltk3\overlay_visual.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3059,7 +3059,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_plastic.cxx"
+			RelativePath="..\..\src\fltk3\plastic.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3082,7 +3082,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_read_image.cxx"
+			RelativePath="..\..\src\fltk3\read_image.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3105,7 +3105,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_rect.cxx"
+			RelativePath="..\..\src\fltk3\rect.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3128,7 +3128,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_round_box.cxx"
+			RelativePath="..\..\src\fltk3\round_box.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3151,7 +3151,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_rounded_box.cxx"
+			RelativePath="..\..\src\fltk3\rounded_box.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3174,7 +3174,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_scroll_area.cxx"
+			RelativePath="..\..\src\fltk3\scroll_area.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3197,7 +3197,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_set_font.cxx"
+			RelativePath="..\..\src\fltk3\set_font.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3220,7 +3220,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_set_fonts.cxx"
+			RelativePath="..\..\src\fltk3\set_fonts.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3243,7 +3243,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_shadow_box.cxx"
+			RelativePath="..\..\src\fltk3\shadow_box.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3266,7 +3266,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_shortcut.cxx"
+			RelativePath="..\..\src\fltk3\shortcut.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3289,7 +3289,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_show_colormap.cxx"
+			RelativePath="..\..\src\fltk3\show_colormap.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3312,7 +3312,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_symbols.cxx"
+			RelativePath="..\..\src\fltk3\symbols.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3335,7 +3335,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_utf8.cxx"
+			RelativePath="..\..\src\fltk3\utf8.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3358,7 +3358,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_utf.cxx"
+			RelativePath="..\..\src\fltk3\utf.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3381,7 +3381,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_vertex.cxx"
+			RelativePath="..\..\src\fltk3\vertex.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3404,7 +3404,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\numericsort.cxx"
+			RelativePath="..\..\src\fltk3\numericsort.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3427,7 +3427,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\ps_image.cxx"
+			RelativePath="..\..\src\fltk3\ps_image.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3450,7 +3450,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\scandir.cxx"
+			RelativePath="..\..\src\fltk3\scandir.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3473,7 +3473,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\screen_xywh.cxx"
+			RelativePath="..\..\src\fltk3\screen_xywh.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3496,7 +3496,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\flstring.c"
+			RelativePath="..\..\src\fltk3\flstring.c"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3519,7 +3519,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\vsnprintf.c"
+			RelativePath="..\..\src\fltk3\vsnprintf.c"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3542,7 +3542,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\xutf8\case.c"
+			RelativePath="..\..\src\fltk3\xutf8\case.c"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3565,7 +3565,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\xutf8\is_right2left.c"
+			RelativePath="..\..\src\fltk3\xutf8\is_right2left.c"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -3588,7 +3588,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\xutf8\is_spacing.c"
+			RelativePath="..\..\src\fltk3\xutf8\is_spacing.c"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"

Modified: branches/branch-3.0/ide/VisualC2008/fltk3images.vcproj
===================================================================
--- branches/branch-3.0/ide/VisualC2008/fltk3images.vcproj	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/ide/VisualC2008/fltk3images.vcproj	2011-08-25 21:50:59 UTC (rev 9011)
@@ -161,7 +161,7 @@
 	</References>
 	<Files>
 		<File
-			RelativePath="..\..\src\core\Fl_BMP_Image.cxx"
+			RelativePath="..\..\src\fltk3images\BMPImage.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -184,7 +184,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_File_Icon2.cxx"
+			RelativePath="..\..\src\fltk3images\FileIcon2.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -207,7 +207,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_GIF_Image.cxx"
+			RelativePath="..\..\src\fltk3images\GIFImage.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -230,7 +230,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_Help_Dialog.cxx"
+			RelativePath="..\..\src\fltk3images\HelpDialog.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -253,7 +253,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_JPEG_Image.cxx"
+			RelativePath="..\..\src\fltk3images\images_core.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -276,7 +276,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_PNG_Image.cxx"
+			RelativePath="..\..\src\fltk3images\JPEGImage.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -299,7 +299,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\Fl_PNM_Image.cxx"
+			RelativePath="..\..\src\fltk3images\PNGImage.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"
@@ -322,7 +322,7 @@
 			</FileConfiguration>
 		</File>
 		<File
-			RelativePath="..\..\src\core\fl_images_core.cxx"
+			RelativePath="..\..\src\fltk3images\PNMImage.cxx"
 			>
 			<FileConfiguration
 				Name="Debug|Win32"

Modified: branches/branch-3.0/ide/VisualC2010/fltk3.vcxproj
===================================================================
--- branches/branch-3.0/ide/VisualC2010/fltk3.vcxproj	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/ide/VisualC2010/fltk3.vcxproj	2011-08-25 21:50:59 UTC (rev 9011)
@@ -100,1043 +100,1043 @@
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Adjuster.cxx">
+    <ClCompile Include="..\..\src\fltk3\Adjuster.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Bitmap.cxx">
+    <ClCompile Include="..\..\src\fltk3\Bitmap.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Box.cxx">
+    <ClCompile Include="..\..\src\fltk3\Box.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Browser.cxx">
+    <ClCompile Include="..\..\src\fltk3\Browser.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Browser_.cxx">
+    <ClCompile Include="..\..\src\fltk3\Browser_.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Browser_load.cxx">
+    <ClCompile Include="..\..\src\fltk3\Browser_load.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Button.cxx">
+    <ClCompile Include="..\..\src\fltk3\Button.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Chart.cxx">
+    <ClCompile Include="..\..\src\fltk3\Chart.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Check_Browser.cxx">
+    <ClCompile Include="..\..\src\fltk3\CheckBrowser.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Check_Button.cxx">
+    <ClCompile Include="..\..\src\fltk3\CheckButton.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Choice.cxx">
+    <ClCompile Include="..\..\src\fltk3\Choice.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Clock.cxx">
+    <ClCompile Include="..\..\src\fltk3\Clock.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Color_Chooser.cxx">
+    <ClCompile Include="..\..\src\fltk3\ColorChooser.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Counter.cxx">
+    <ClCompile Include="..\..\src\fltk3\Counter.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Device.cxx">
+    <ClCompile Include="..\..\src\fltk3\Device.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Dial.cxx">
+    <ClCompile Include="..\..\src\fltk3\Dial.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Double_Window.cxx">
+    <ClCompile Include="..\..\src\fltk3\DoubleWindow.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_File_Browser.cxx">
+    <ClCompile Include="..\..\src\fltk3\FileBrowser.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_File_Chooser.cxx">
+    <ClCompile Include="..\..\src\fltk3\FileChooser.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_File_Chooser2.cxx">
+    <ClCompile Include="..\..\src\fltk3\FileChooser2.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_File_Icon.cxx">
+    <ClCompile Include="..\..\src\fltk3\FileIcon.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_File_Input.cxx">
+    <ClCompile Include="..\..\src\fltk3\FileInput.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Group.cxx">
+    <ClCompile Include="..\..\src\fltk3\Group.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Help_View.cxx">
+    <ClCompile Include="..\..\src\fltk3\HelpView.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Image.cxx">
+    <ClCompile Include="..\..\src\fltk3\Image.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Input.cxx">
+    <ClCompile Include="..\..\src\fltk3\Input.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Input_.cxx">
+    <ClCompile Include="..\..\src\fltk3\Input_.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Light_Button.cxx">
+    <ClCompile Include="..\..\src\fltk3\LightButton.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Menu.cxx">
+    <ClCompile Include="..\..\src\fltk3\Menu.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Menu_.cxx">
+    <ClCompile Include="..\..\src\fltk3\Menu_.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Menu_Bar.cxx">
+    <ClCompile Include="..\..\src\fltk3\MenuBar.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Menu_Button.cxx">
+    <ClCompile Include="..\..\src\fltk3\MenuButton.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Menu_Window.cxx">
+    <ClCompile Include="..\..\src\fltk3\MenuWindow.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Menu_add.cxx">
+    <ClCompile Include="..\..\src\fltk3\Menu_add.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Menu_global.cxx">
+    <ClCompile Include="..\..\src\fltk3\Menu_global.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Multi_Label.cxx">
+    <ClCompile Include="..\..\src\fltk3\MultiLabel.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Native_File_Chooser.cxx">
+    <ClCompile Include="..\..\src\fltk3\NativeFileChooser.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Overlay_Window.cxx">
+    <ClCompile Include="..\..\src\fltk3\OverlayWindow.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Pack.cxx">
+    <ClCompile Include="..\..\src\fltk3\PackedGroup.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Paged_Device.cxx">
+    <ClCompile Include="..\..\src\fltk3\PagedDevice.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Pixmap.cxx">
+    <ClCompile Include="..\..\src\fltk3\Pixmap.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Positioner.cxx">
+    <ClCompile Include="..\..\src\fltk3\Positioner.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Printer.cxx">
+    <ClCompile Include="..\..\src\fltk3\Printer.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Preferences.cxx">
+    <ClCompile Include="..\..\src\fltk3\Preferences.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Progress.cxx">
+    <ClCompile Include="..\..\src\fltk3\Progress.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Repeat_Button.cxx">
+    <ClCompile Include="..\..\src\fltk3\RepeatButton.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Return_Button.cxx">
+    <ClCompile Include="..\..\src\fltk3\ReturnButton.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Roller.cxx">
+    <ClCompile Include="..\..\src\fltk3\Roller.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Round_Button.cxx">
+    <ClCompile Include="..\..\src\fltk3\RoundButton.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Scroll.cxx">
+    <ClCompile Include="..\..\src\fltk3\ScrollGroup.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Scrollbar.cxx">
+    <ClCompile Include="..\..\src\fltk3\Scrollbar.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Shared_Image.cxx">
+    <ClCompile Include="..\..\src\fltk3\SharedImage.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Single_Window.cxx">
+    <ClCompile Include="..\..\src\fltk3\SingleWindow.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Slider.cxx">
+    <ClCompile Include="..\..\src\fltk3\Slider.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Style.cxx">
+    <ClCompile Include="..\..\src\fltk3\Style.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Sys_Menu_Bar.cxx">
+    <ClCompile Include="..\..\src\fltk3\SysMenuBar.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Table.cxx">
+    <ClCompile Include="..\..\src\fltk3\Table.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Table_Row.cxx">
+    <ClCompile Include="..\..\src\fltk3\TableRow.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Tabs.cxx">
+    <ClCompile Include="..\..\src\fltk3\TabGroup.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Text_Buffer.cxx">
+    <ClCompile Include="..\..\src\fltk3\TextBuffer.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Text_Display.cxx">
+    <ClCompile Include="..\..\src\fltk3\TextDisplay.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Text_Editor.cxx">
+    <ClCompile Include="..\..\src\fltk3\TextEditor.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Tile.cxx">
+    <ClCompile Include="..\..\src\fltk3\TiledGroup.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Tiled_Image.cxx">
+    <ClCompile Include="..\..\src\fltk3\TiledImage.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Tooltip.cxx">
+    <ClCompile Include="..\..\src\fltk3\Tooltip.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Tree.cxx">
+    <ClCompile Include="..\..\src\fltk3\Tree.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Tree_Item.cxx">
+    <ClCompile Include="..\..\src\fltk3\TreeItem.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Tree_Item_Array.cxx">
+    <ClCompile Include="..\..\src\fltk3\TreeItemArray.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Tree_Prefs.cxx">
+    <ClCompile Include="..\..\src\fltk3\TreePrefs.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Valuator.cxx">
+    <ClCompile Include="..\..\src\fltk3\Valuator.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Value_Input.cxx">
+    <ClCompile Include="..\..\src\fltk3\ValueInput.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Value_Output.cxx">
+    <ClCompile Include="..\..\src\fltk3\ValueOutput.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Value_Slider.cxx">
+    <ClCompile Include="..\..\src\fltk3\ValueSlider.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Widget.cxx">
+    <ClCompile Include="..\..\src\fltk3\Widget.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Window.cxx">
+    <ClCompile Include="..\..\src\fltk3\Window.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Window_fullscreen.cxx">
+    <ClCompile Include="..\..\src\fltk3\Window_fullscreen.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Window_hotspot.cxx">
+    <ClCompile Include="..\..\src\fltk3\Window_hotspot.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Window_iconize.cxx">
+    <ClCompile Include="..\..\src\fltk3\Window_iconize.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Wizard.cxx">
+    <ClCompile Include="..\..\src\fltk3\Wizard.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_XBM_Image.cxx">
+    <ClCompile Include="..\..\src\fltk3\XBMImage.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_XPM_Image.cxx">
+    <ClCompile Include="..\..\src\fltk3\XPMImage.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_abort.cxx">
+    <ClCompile Include="..\..\src\fltk3\abort.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_add_idle.cxx">
+    <ClCompile Include="..\..\src\fltk3\add_idle.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_arg.cxx">
+    <ClCompile Include="..\..\src\fltk3\arg.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_compose.cxx">
+    <ClCompile Include="..\..\src\fltk3\compose.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_display.cxx">
+    <ClCompile Include="..\..\src\fltk3\display.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_get_key.cxx">
+    <ClCompile Include="..\..\src\fltk3\get_key.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_get_system_colors.cxx">
+    <ClCompile Include="..\..\src\fltk3\get_system_colors.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_grab.cxx">
+    <ClCompile Include="..\..\src\fltk3\grab.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_lock.cxx">
+    <ClCompile Include="..\..\src\fltk3\lock.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_own_colormap.cxx">
+    <ClCompile Include="..\..\src\fltk3\own_colormap.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_visual.cxx">
+    <ClCompile Include="..\..\src\fltk3\visual.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_x.cxx">
+    <ClCompile Include="..\..\src\fltk3\x11.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\filename_absolute.cxx">
+    <ClCompile Include="..\..\src\fltk3\filename_absolute.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\filename_expand.cxx">
+    <ClCompile Include="..\..\src\fltk3\filename_expand.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\filename_ext.cxx">
+    <ClCompile Include="..\..\src\fltk3\filename_ext.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\filename_isdir.cxx">
+    <ClCompile Include="..\..\src\fltk3\filename_isdir.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\filename_list.cxx">
+    <ClCompile Include="..\..\src\fltk3\filename_list.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\filename_match.cxx">
+    <ClCompile Include="..\..\src\fltk3\filename_match.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\filename_setext.cxx">
+    <ClCompile Include="..\..\src\fltk3\filename_setext.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_arc.cxx">
+    <ClCompile Include="..\..\src\fltk3\arc.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_arci.cxx">
+    <ClCompile Include="..\..\src\fltk3\arci.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_ask.cxx">
+    <ClCompile Include="..\..\src\fltk3\ask.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_boxtype.cxx">
+    <ClCompile Include="..\..\src\fltk3\boxtype.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_call_main.cxx">
+    <ClCompile Include="..\..\src\fltk3\call_main.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_color.cxx">
+    <ClCompile Include="..\..\src\fltk3\color.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_cursor.cxx">
+    <ClCompile Include="..\..\src\fltk3\cursor.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_curve.cxx">
+    <ClCompile Include="..\..\src\fltk3\curve.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_diamond_box.cxx">
+    <ClCompile Include="..\..\src\fltk3\diamond_box.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_dnd.cxx">
+    <ClCompile Include="..\..\src\fltk3\dnd.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_draw.cxx">
+    <ClCompile Include="..\..\src\fltk3\draw.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_draw_image.cxx">
+    <ClCompile Include="..\..\src\fltk3\draw_image.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_draw_pixmap.cxx">
+    <ClCompile Include="..\..\src\fltk3\draw_pixmap.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_encoding_latin1.cxx">
+    <ClCompile Include="..\..\src\fltk3\encoding_latin1.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_encoding_mac_roman.cxx">
+    <ClCompile Include="..\..\src\fltk3\encoding_mac_roman.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_engraved_label.cxx">
+    <ClCompile Include="..\..\src\fltk3\engraved_label.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_file_dir.cxx">
+    <ClCompile Include="..\..\src\fltk3\file_dir.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_font.cxx">
+    <ClCompile Include="..\..\src\fltk3\font.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_gtk.cxx">
+    <ClCompile Include="..\..\src\fltk3\gtk.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_labeltype.cxx">
+    <ClCompile Include="..\..\src\fltk3\labeltype.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_line_style.cxx">
+    <ClCompile Include="..\..\src\fltk3\line_style.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_open_uri.cxx">
+    <ClCompile Include="..\..\src\fltk3\open_uri.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_oval_box.cxx">
+    <ClCompile Include="..\..\src\fltk3\oval_box.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_overlay.cxx">
+    <ClCompile Include="..\..\src\fltk3\overlay.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_overlay_visual.cxx">
+    <ClCompile Include="..\..\src\fltk3\overlay_visual.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_plastic.cxx">
+    <ClCompile Include="..\..\src\fltk3\plastic.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_read_image.cxx">
+    <ClCompile Include="..\..\src\fltk3\read_image.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_rect.cxx">
+    <ClCompile Include="..\..\src\fltk3\rect.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_round_box.cxx">
+    <ClCompile Include="..\..\src\fltk3\round_box.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_rounded_box.cxx">
+    <ClCompile Include="..\..\src\fltk3\rounded_box.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_scroll_area.cxx">
+    <ClCompile Include="..\..\src\fltk3\scroll_area.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_set_font.cxx">
+    <ClCompile Include="..\..\src\fltk3\set_font.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_set_fonts.cxx">
+    <ClCompile Include="..\..\src\fltk3\set_fonts.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_shadow_box.cxx">
+    <ClCompile Include="..\..\src\fltk3\shadow_box.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_shortcut.cxx">
+    <ClCompile Include="..\..\src\fltk3\shortcut.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_show_colormap.cxx">
+    <ClCompile Include="..\..\src\fltk3\show_colormap.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_symbols.cxx">
+    <ClCompile Include="..\..\src\fltk3\symbols.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_utf8.cxx">
+    <ClCompile Include="..\..\src\fltk3\utf8.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_utf.cxx">
+    <ClCompile Include="..\..\src\fltk3\utf.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_vertex.cxx">
+    <ClCompile Include="..\..\src\fltk3\vertex.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\numericsort.cxx">
+    <ClCompile Include="..\..\src\fltk3\numericsort.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\ps_image.cxx">
+    <ClCompile Include="..\..\src\fltk3\ps_image.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\scandir.cxx">
+    <ClCompile Include="..\..\src\fltk3\scandir.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\screen_xywh.cxx">
+    <ClCompile Include="..\..\src\fltk3\screen_xywh.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\flstring.c">
+    <ClCompile Include="..\..\src\fltk3\flstring.c">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\vsnprintf.c">
+    <ClCompile Include="..\..\src\fltk3\vsnprintf.c">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\xutf8\case.c">
+    <ClCompile Include="..\..\src\fltk3\xutf8\case.c">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\xutf8\is_right2left.c">
+    <ClCompile Include="..\..\src\fltk3\xutf8\is_right2left.c">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\xutf8\is_spacing.c">
+    <ClCompile Include="..\..\src\fltk3\xutf8\is_spacing.c">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>

Modified: branches/branch-3.0/ide/VisualC2010/fltk3images.vcxproj
===================================================================
--- branches/branch-3.0/ide/VisualC2010/fltk3images.vcxproj	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/ide/VisualC2010/fltk3images.vcxproj	2011-08-25 21:50:59 UTC (rev 9011)
@@ -93,56 +93,56 @@
     </Lib>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="..\..\src\core\Fl_BMP_Image.cxx">
+    <ClCompile Include="..\..\src\fltk3images\BMPImage.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_File_Icon2.cxx">
+    <ClCompile Include="..\..\src\fltk3images\FileIcon2.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_GIF_Image.cxx">
+    <ClCompile Include="..\..\src\fltk3images\GIFImage.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_Help_Dialog.cxx">
+    <ClCompile Include="..\..\src\fltk3images\HelpDialog.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_JPEG_Image.cxx">
+    <ClCompile Include="..\..\src\fltk3images\images_core.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_PNG_Image.cxx">
+    <ClCompile Include="..\..\src\fltk3images\JPEGImage.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\Fl_PNM_Image.cxx">
+    <ClCompile Include="..\..\src\fltk3images\PNGImage.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\fl_images_core.cxx">
+    <ClCompile Include="..\..\src\fltk3images\PNMImage.cxx">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>

Modified: branches/branch-3.0/ide/VisualC6/fltk3.dsp
===================================================================
--- branches/branch-3.0/ide/VisualC6/fltk3.dsp	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/ide/VisualC6/fltk3.dsp	2011-08-25 21:50:59 UTC (rev 9011)
@@ -87,599 +87,599 @@
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Adjuster.cxx
+SOURCE=..\..\src\fltk3\Adjuster.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Bitmap.cxx
+SOURCE=..\..\src\fltk3\Bitmap.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Box.cxx
+SOURCE=..\..\src\fltk3\Box.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Browser.cxx
+SOURCE=..\..\src\fltk3\Browser.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Browser_.cxx
+SOURCE=..\..\src\fltk3\Browser_.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Browser_load.cxx
+SOURCE=..\..\src\fltk3\Browser_load.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Button.cxx
+SOURCE=..\..\src\fltk3\Button.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Chart.cxx
+SOURCE=..\..\src\fltk3\Chart.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Check_Browser.cxx
+SOURCE=..\..\src\fltk3\CheckBrowser.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Check_Button.cxx
+SOURCE=..\..\src\fltk3\CheckButton.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Choice.cxx
+SOURCE=..\..\src\fltk3\Choice.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Clock.cxx
+SOURCE=..\..\src\fltk3\Clock.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Color_Chooser.cxx
+SOURCE=..\..\src\fltk3\ColorChooser.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Counter.cxx
+SOURCE=..\..\src\fltk3\Counter.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Device.cxx
+SOURCE=..\..\src\fltk3\Device.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Dial.cxx
+SOURCE=..\..\src\fltk3\Dial.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Double_Window.cxx
+SOURCE=..\..\src\fltk3\DoubleWindow.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_File_Browser.cxx
+SOURCE=..\..\src\fltk3\FileBrowser.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_File_Chooser.cxx
+SOURCE=..\..\src\fltk3\FileChooser.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_File_Chooser2.cxx
+SOURCE=..\..\src\fltk3\FileChooser2.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_File_Icon.cxx
+SOURCE=..\..\src\fltk3\FileIcon.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_File_Input.cxx
+SOURCE=..\..\src\fltk3\FileInput.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Group.cxx
+SOURCE=..\..\src\fltk3\Group.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Help_View.cxx
+SOURCE=..\..\src\fltk3\HelpView.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Image.cxx
+SOURCE=..\..\src\fltk3\Image.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Input.cxx
+SOURCE=..\..\src\fltk3\Input.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Input_.cxx
+SOURCE=..\..\src\fltk3\Input_.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Light_Button.cxx
+SOURCE=..\..\src\fltk3\LightButton.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Menu.cxx
+SOURCE=..\..\src\fltk3\Menu.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Menu_.cxx
+SOURCE=..\..\src\fltk3\Menu_.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Menu_Bar.cxx
+SOURCE=..\..\src\fltk3\MenuBar.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Menu_Button.cxx
+SOURCE=..\..\src\fltk3\MenuButton.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Menu_Window.cxx
+SOURCE=..\..\src\fltk3\MenuWindow.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Menu_add.cxx
+SOURCE=..\..\src\fltk3\Menu_add.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Menu_global.cxx
+SOURCE=..\..\src\fltk3\Menu_global.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Multi_Label.cxx
+SOURCE=..\..\src\fltk3\MultiLabel.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Native_File_Chooser.cxx
+SOURCE=..\..\src\fltk3\NativeFileChooser.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Overlay_Window.cxx
+SOURCE=..\..\src\fltk3\OverlayWindow.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Pack.cxx
+SOURCE=..\..\src\fltk3\PackedGroup.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Paged_Device.cxx
+SOURCE=..\..\src\fltk3\PagedDevice.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Pixmap.cxx
+SOURCE=..\..\src\fltk3\Pixmap.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Positioner.cxx
+SOURCE=..\..\src\fltk3\Positioner.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Printer.cxx
+SOURCE=..\..\src\fltk3\Printer.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Preferences.cxx
+SOURCE=..\..\src\fltk3\Preferences.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Progress.cxx
+SOURCE=..\..\src\fltk3\Progress.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Repeat_Button.cxx
+SOURCE=..\..\src\fltk3\RepeatButton.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Return_Button.cxx
+SOURCE=..\..\src\fltk3\ReturnButton.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Roller.cxx
+SOURCE=..\..\src\fltk3\Roller.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Round_Button.cxx
+SOURCE=..\..\src\fltk3\RoundButton.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Scroll.cxx
+SOURCE=..\..\src\fltk3\ScrollGroup.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Scrollbar.cxx
+SOURCE=..\..\src\fltk3\Scrollbar.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Shared_Image.cxx
+SOURCE=..\..\src\fltk3\SharedImage.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Single_Window.cxx
+SOURCE=..\..\src\fltk3\SingleWindow.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Slider.cxx
+SOURCE=..\..\src\fltk3\Slider.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Style.cxx
+SOURCE=..\..\src\fltk3\Style.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Sys_Menu_Bar.cxx
+SOURCE=..\..\src\fltk3\SysMenuBar.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Table.cxx
+SOURCE=..\..\src\fltk3\Table.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Table_Row.cxx
+SOURCE=..\..\src\fltk3\TableRow.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Tabs.cxx
+SOURCE=..\..\src\fltk3\TabGroup.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Text_Buffer.cxx
+SOURCE=..\..\src\fltk3\TextBuffer.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Text_Display.cxx
+SOURCE=..\..\src\fltk3\TextDisplay.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Text_Editor.cxx
+SOURCE=..\..\src\fltk3\TextEditor.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Tile.cxx
+SOURCE=..\..\src\fltk3\TiledGroup.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Tiled_Image.cxx
+SOURCE=..\..\src\fltk3\TiledImage.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Tooltip.cxx
+SOURCE=..\..\src\fltk3\Tooltip.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Tree.cxx
+SOURCE=..\..\src\fltk3\Tree.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Tree_Item.cxx
+SOURCE=..\..\src\fltk3\TreeItem.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Tree_Item_Array.cxx
+SOURCE=..\..\src\fltk3\TreeItemArray.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Tree_Prefs.cxx
+SOURCE=..\..\src\fltk3\TreePrefs.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Valuator.cxx
+SOURCE=..\..\src\fltk3\Valuator.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Value_Input.cxx
+SOURCE=..\..\src\fltk3\ValueInput.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Value_Output.cxx
+SOURCE=..\..\src\fltk3\ValueOutput.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Value_Slider.cxx
+SOURCE=..\..\src\fltk3\ValueSlider.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Widget.cxx
+SOURCE=..\..\src\fltk3\Widget.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Window.cxx
+SOURCE=..\..\src\fltk3\Window.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Window_fullscreen.cxx
+SOURCE=..\..\src\fltk3\Window_fullscreen.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Window_hotspot.cxx
+SOURCE=..\..\src\fltk3\Window_hotspot.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Window_iconize.cxx
+SOURCE=..\..\src\fltk3\Window_iconize.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Wizard.cxx
+SOURCE=..\..\src\fltk3\Wizard.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_XBM_Image.cxx
+SOURCE=..\..\src\fltk3\XBMImage.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_XPM_Image.cxx
+SOURCE=..\..\src\fltk3\XPMImage.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_abort.cxx
+SOURCE=..\..\src\fltk3\abort.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_add_idle.cxx
+SOURCE=..\..\src\fltk3\add_idle.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_arg.cxx
+SOURCE=..\..\src\fltk3\arg.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_compose.cxx
+SOURCE=..\..\src\fltk3\compose.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_display.cxx
+SOURCE=..\..\src\fltk3\display.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_get_key.cxx
+SOURCE=..\..\src\fltk3\get_key.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_get_system_colors.cxx
+SOURCE=..\..\src\fltk3\get_system_colors.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_grab.cxx
+SOURCE=..\..\src\fltk3\grab.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_lock.cxx
+SOURCE=..\..\src\fltk3\lock.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_own_colormap.cxx
+SOURCE=..\..\src\fltk3\own_colormap.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_visual.cxx
+SOURCE=..\..\src\fltk3\visual.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_x.cxx
+SOURCE=..\..\src\fltk3\x11.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\filename_absolute.cxx
+SOURCE=..\..\src\fltk3\filename_absolute.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\filename_expand.cxx
+SOURCE=..\..\src\fltk3\filename_expand.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\filename_ext.cxx
+SOURCE=..\..\src\fltk3\filename_ext.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\filename_isdir.cxx
+SOURCE=..\..\src\fltk3\filename_isdir.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\filename_list.cxx
+SOURCE=..\..\src\fltk3\filename_list.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\filename_match.cxx
+SOURCE=..\..\src\fltk3\filename_match.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\filename_setext.cxx
+SOURCE=..\..\src\fltk3\filename_setext.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_arc.cxx
+SOURCE=..\..\src\fltk3\arc.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_arci.cxx
+SOURCE=..\..\src\fltk3\arci.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_ask.cxx
+SOURCE=..\..\src\fltk3\ask.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_boxtype.cxx
+SOURCE=..\..\src\fltk3\boxtype.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_call_main.cxx
+SOURCE=..\..\src\fltk3\call_main.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_color.cxx
+SOURCE=..\..\src\fltk3\color.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_cursor.cxx
+SOURCE=..\..\src\fltk3\cursor.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_curve.cxx
+SOURCE=..\..\src\fltk3\curve.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_diamond_box.cxx
+SOURCE=..\..\src\fltk3\diamond_box.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_dnd.cxx
+SOURCE=..\..\src\fltk3\dnd.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_draw.cxx
+SOURCE=..\..\src\fltk3\draw.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_draw_image.cxx
+SOURCE=..\..\src\fltk3\draw_image.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_draw_pixmap.cxx
+SOURCE=..\..\src\fltk3\draw_pixmap.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_encoding_latin1.cxx
+SOURCE=..\..\src\fltk3\encoding_latin1.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_encoding_mac_roman.cxx
+SOURCE=..\..\src\fltk3\encoding_mac_roman.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_engraved_label.cxx
+SOURCE=..\..\src\fltk3\engraved_label.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_file_dir.cxx
+SOURCE=..\..\src\fltk3\file_dir.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_font.cxx
+SOURCE=..\..\src\fltk3\font.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_gtk.cxx
+SOURCE=..\..\src\fltk3\gtk.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_labeltype.cxx
+SOURCE=..\..\src\fltk3\labeltype.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_line_style.cxx
+SOURCE=..\..\src\fltk3\line_style.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_open_uri.cxx
+SOURCE=..\..\src\fltk3\open_uri.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_oval_box.cxx
+SOURCE=..\..\src\fltk3\oval_box.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_overlay.cxx
+SOURCE=..\..\src\fltk3\overlay.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_overlay_visual.cxx
+SOURCE=..\..\src\fltk3\overlay_visual.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_plastic.cxx
+SOURCE=..\..\src\fltk3\plastic.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_read_image.cxx
+SOURCE=..\..\src\fltk3\read_image.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_rect.cxx
+SOURCE=..\..\src\fltk3\rect.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_round_box.cxx
+SOURCE=..\..\src\fltk3\round_box.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_rounded_box.cxx
+SOURCE=..\..\src\fltk3\rounded_box.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_scroll_area.cxx
+SOURCE=..\..\src\fltk3\scroll_area.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_set_font.cxx
+SOURCE=..\..\src\fltk3\set_font.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_set_fonts.cxx
+SOURCE=..\..\src\fltk3\set_fonts.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_shadow_box.cxx
+SOURCE=..\..\src\fltk3\shadow_box.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_shortcut.cxx
+SOURCE=..\..\src\fltk3\shortcut.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_show_colormap.cxx
+SOURCE=..\..\src\fltk3\show_colormap.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_symbols.cxx
+SOURCE=..\..\src\fltk3\symbols.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_utf8.cxx
+SOURCE=..\..\src\fltk3\utf8.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_utf.cxx
+SOURCE=..\..\src\fltk3\utf.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_vertex.cxx
+SOURCE=..\..\src\fltk3\vertex.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\numericsort.cxx
+SOURCE=..\..\src\fltk3\numericsort.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\ps_image.cxx
+SOURCE=..\..\src\fltk3\ps_image.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\scandir.cxx
+SOURCE=..\..\src\fltk3\scandir.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\screen_xywh.cxx
+SOURCE=..\..\src\fltk3\screen_xywh.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\flstring.c
+SOURCE=..\..\src\fltk3\flstring.c
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\vsnprintf.c
+SOURCE=..\..\src\fltk3\vsnprintf.c
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\xutf8\case.c
+SOURCE=..\..\src\fltk3\xutf8\case.c
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\xutf8\is_right2left.c
+SOURCE=..\..\src\fltk3\xutf8\is_right2left.c
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\xutf8\is_spacing.c
+SOURCE=..\..\src\fltk3\xutf8\is_spacing.c
 # End Source File
 # End Target
 # End Project

Modified: branches/branch-3.0/ide/VisualC6/fltk3images.dsp
===================================================================
--- branches/branch-3.0/ide/VisualC6/fltk3images.dsp	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/ide/VisualC6/fltk3images.dsp	2011-08-25 21:50:59 UTC (rev 9011)
@@ -83,35 +83,35 @@
 # Name "fltk3images - Win32 Debug"
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_BMP_Image.cxx
+SOURCE=..\..\src\fltk3images\BMPImage.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_File_Icon2.cxx
+SOURCE=..\..\src\fltk3images\FileIcon2.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_GIF_Image.cxx
+SOURCE=..\..\src\fltk3images\GIFImage.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_Help_Dialog.cxx
+SOURCE=..\..\src\fltk3images\HelpDialog.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_JPEG_Image.cxx
+SOURCE=..\..\src\fltk3images\images_core.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_PNG_Image.cxx
+SOURCE=..\..\src\fltk3images\JPEGImage.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\Fl_PNM_Image.cxx
+SOURCE=..\..\src\fltk3images\PNGImage.cxx
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\src\core\fl_images_core.cxx
+SOURCE=..\..\src\fltk3images\PNMImage.cxx
 # End Source File
 # End Target
 # End Project

Modified: branches/branch-3.0/ide/Xcode4/FLTK.xcodeproj/project.pbxproj
===================================================================
--- branches/branch-3.0/ide/Xcode4/FLTK.xcodeproj/project.pbxproj	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/ide/Xcode4/FLTK.xcodeproj/project.pbxproj	2011-08-25 21:50:59 UTC (rev 9011)
@@ -44,103 +44,103 @@
 		F552DCC431AA40CCC6F1988A /* fltk3png.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 06A7B68E2100DB960872987D /* fltk3png.framework */; };
 		CC663664EF1FE8C4CB778028 /* fltk3jpeg.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = C03975F619684D3461888340 /* fltk3jpeg.framework */; };
 		0D2A2AC958D590B51B01BBEF /* fltk3zlib.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = AFDEBB8CE5A31C066586BF8B /* fltk3zlib.framework */; };
-		69C261B5080F70C54F62E633 /* Fl_cocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6BB47B6B9E3180AB7C5F16D /* Fl_cocoa.mm */; };
-		02BBCA82DFFB0AB67443CA28 /* Fl_Native_File_Chooser_MAC.mm in Sources */ = {isa = PBXBuildFile; fileRef = B23CCB736CF9A2433827C3EE /* Fl_Native_File_Chooser_MAC.mm */; };
-		B7920395FCBAAF8E46AA357D /* Fl_Quartz_Printer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 10A048C45D4667189C9F77EA /* Fl_Quartz_Printer.mm */; };
+		69C261B5080F70C54F62E633 /* cocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = F6BB47B6B9E3180AB7C5F16D /* cocoa.mm */; };
+		02BBCA82DFFB0AB67443CA28 /* cocoaNativeFileChooser.mm in Sources */ = {isa = PBXBuildFile; fileRef = B23CCB736CF9A2433827C3EE /* cocoaNativeFileChooser.mm */; };
+		B7920395FCBAAF8E46AA357D /* cocoaQuartzPrinter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 10A048C45D4667189C9F77EA /* cocoaQuartzPrinter.mm */; };
 		008DDC0F32A31B4ADA34594C /* run.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 81045D024AA56D9CD81C23A2 /* run.cxx */; };
-		2271ACEBB4FBB71C4086EF24 /* Fl_Adjuster.cxx in Sources */ = {isa = PBXBuildFile; fileRef = ECEA64F2B2C5C5186949AD76 /* Fl_Adjuster.cxx */; };
-		87F292EDA50F45BFAEA18EC5 /* Fl_Bitmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D68004A5D4D7878F2E22B59B /* Fl_Bitmap.cxx */; };
-		D3D9C65EBA0726B45E8C7725 /* Fl_Box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 81608512CDA5C11B35A2B539 /* Fl_Box.cxx */; };
-		F343A0DF04697626857BF06F /* Fl_Browser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5CE1FF6EF6F9500754C22170 /* Fl_Browser.cxx */; };
-		9036C344E82AED76B425415E /* Fl_Browser_.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2FC85E98AAFBF45C8EBBA1CC /* Fl_Browser_.cxx */; };
-		C96803EEF2B850B58A9507D0 /* Fl_Browser_load.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B89AE0F97A9095F4A064E6FF /* Fl_Browser_load.cxx */; };
-		DE2BB5133CF2CD996D632F84 /* Fl_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 70F960885035F13513E45EFD /* Fl_Button.cxx */; };
-		B0CAF4D1559C6E98DFCA17AA /* Fl_Chart.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 392500313F9EDFBFE2786E57 /* Fl_Chart.cxx */; };
-		37D83B9E1067EB10D83CC630 /* Fl_Check_Browser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F6EC011E63665A01E72E52E7 /* Fl_Check_Browser.cxx */; };
-		B34F20AC44C7BD06F37A17B1 /* Fl_Check_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 490C9DC52EF4532CC9795A6D /* Fl_Check_Button.cxx */; };
-		16189C3260E6F7081DBD4A2E /* Fl_Choice.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6356BFF275FE7996D8F77F5C /* Fl_Choice.cxx */; };
-		4BB964893254F77B4DCAD9BA /* Fl_Clock.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1C4F7DBF0BD658A6D786280A /* Fl_Clock.cxx */; };
-		2D847DBF09E5D4E252345529 /* Fl_Color_Chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4CF353D8CC1FA86010629419 /* Fl_Color_Chooser.cxx */; };
-		B2BB321C79B8EA57F4A99288 /* Fl_Counter.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 96D41530A69F4A84DBF7E11E /* Fl_Counter.cxx */; };
-		B1AB3E6CE018D5319F0CB1D8 /* Fl_Device.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CB4EA8042D07755CEA64E9FB /* Fl_Device.cxx */; };
-		1369E7ADCB6604667B063564 /* Fl_Dial.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FDB4072264224B4391CAB607 /* Fl_Dial.cxx */; };
-		43FA5D816EDA82E015727381 /* Fl_Double_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D65E879CEE1870B6B73853BC /* Fl_Double_Window.cxx */; };
-		ECCA6DC4547C114D5390C8D1 /* Fl_File_Browser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 31B32445C4ECC6487D814264 /* Fl_File_Browser.cxx */; };
-		049EB01300A5C030D1DB2191 /* Fl_File_Chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E74C762F7266F6B35BA2394A /* Fl_File_Chooser.cxx */; };
-		17819EFD092EC34847FF9A97 /* Fl_File_Chooser2.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A7770A7FB7C79371A3BFB46C /* Fl_File_Chooser2.cxx */; };
-		3DCD457D7AD4CA90D9EE4246 /* Fl_File_Icon.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 19FA31AEDEFAC11C8EC5D035 /* Fl_File_Icon.cxx */; };
-		8F4CA13F0135C8D93D647078 /* Fl_File_Input.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D05F5EBC3B022A7C99F2DDC2 /* Fl_File_Input.cxx */; };
-		99FB64087ED252BA31644F95 /* Fl_Group.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A5952FB986701638B15F1B22 /* Fl_Group.cxx */; };
-		5D0D1C842A3CAF02C4878E5E /* Fl_Help_View.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 047B650C9F322D0CB49D48D6 /* Fl_Help_View.cxx */; };
-		DE9BFEBCD61D5BBA51D3A983 /* Fl_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E01E16F15C6443D98C32F5F6 /* Fl_Image.cxx */; };
-		1DC72F81E67D26EFC91CC055 /* Fl_Input.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 184F621088E304BDFD7A0384 /* Fl_Input.cxx */; };
-		22D481051F2975C6708B7A5C /* Fl_Input_.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A892461439BFF8FC2D538E50 /* Fl_Input_.cxx */; };
-		EDFFE30ABACE77AB818EFD3C /* Fl_Light_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 36C72097C9A86A33861ACD51 /* Fl_Light_Button.cxx */; };
-		FB4C03114DD7FD4E21C93B23 /* Fl_Menu.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4672B51C8F8B9C0703D7EAA5 /* Fl_Menu.cxx */; };
-		24D6615263A30D0055EEA9CD /* Fl_Menu_.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DE9E57A22E45C3039D820566 /* Fl_Menu_.cxx */; };
-		BD7AE3AEC270BBF97D63A102 /* Fl_Menu_Bar.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 265C00BF9D9598D2A10BE42A /* Fl_Menu_Bar.cxx */; };
-		1EC305B74A27DF994486CAEA /* Fl_Menu_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 58FD2064B2C854618D2E68DB /* Fl_Menu_Button.cxx */; };
-		63C8599959CBD6D392A98548 /* Fl_Menu_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CBE03F81CF8A43E9735AEFC9 /* Fl_Menu_Window.cxx */; };
-		A5B4D789DF000BBCCFC14069 /* Fl_Menu_add.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C649ABF1BD8B5FB41539FB5F /* Fl_Menu_add.cxx */; };
-		6C148F335D573FA11E171DE8 /* Fl_Menu_global.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 25D17230FC589A55DA9C6F23 /* Fl_Menu_global.cxx */; };
-		46A6752E2DC6F11255C93484 /* Fl_Multi_Label.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 37D57C7D98BB88CE1A3BFC20 /* Fl_Multi_Label.cxx */; };
-		B30D6189F1765784376B6779 /* Fl_Native_File_Chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FC634C34D16F1DE6EF923847 /* Fl_Native_File_Chooser.cxx */; };
-		5857DE8B16828A0F93032DB4 /* Fl_Overlay_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CEF1A66A542A208607C52832 /* Fl_Overlay_Window.cxx */; };
-		5C93DA8482716333763AA2F8 /* Fl_Pack.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0F0129FF3753E991F59B9FB5 /* Fl_Pack.cxx */; };
-		BFD45A930F841AB6663EB28F /* Fl_Paged_Device.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 680EF039247E0C542AD802F6 /* Fl_Paged_Device.cxx */; };
-		EBD658967C0EF993B55D8A75 /* Fl_Pixmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9AEB93657A00F78B2046454D /* Fl_Pixmap.cxx */; };
-		7878131091565BEFA0E1E765 /* Fl_Positioner.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9EB992B1957E27AE06A07426 /* Fl_Positioner.cxx */; };
-		C759F61877A5D20EDBD7488D /* Fl_Printer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 53F2F9DED1C91758A21D0246 /* Fl_Printer.cxx */; };
-		96257899A0D5C1733FAC5200 /* Fl_Preferences.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 596103743F0CE2A89B7B3FA5 /* Fl_Preferences.cxx */; };
-		486D31DD278E2C5144B6284E /* Fl_Progress.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B62169E8816659E5E6E4DD9F /* Fl_Progress.cxx */; };
-		4E4DEB0F11A0E7ABB682FBAF /* Fl_Repeat_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F2E611B0C2D8C53DD06946BC /* Fl_Repeat_Button.cxx */; };
-		5B4F6F77241A0B089DCE19F1 /* Fl_Return_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 69E296C029FB3078A82EE913 /* Fl_Return_Button.cxx */; };
-		01570F259A52D752DA170772 /* Fl_Roller.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A5526E662D03F4C9647C13A4 /* Fl_Roller.cxx */; };
-		F32B3FAD40F0004FFA6158E3 /* Fl_Round_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5DA33AF375B975EBBE824A96 /* Fl_Round_Button.cxx */; };
-		B506EE63710A08EC82B52F62 /* Fl_Scroll.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 135F7AE45CBDAA49D80BB12D /* Fl_Scroll.cxx */; };
-		5622DE2929FDB9DBF1607BC6 /* Fl_Scrollbar.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6F7BEB35272214B6167B1FB8 /* Fl_Scrollbar.cxx */; };
-		7CB9D27B0F1CE28C828F280B /* Fl_Shared_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8580401C9D38395ECAD127AC /* Fl_Shared_Image.cxx */; };
-		550F71EE23A3D8E00A890F88 /* Fl_Single_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 17A03BA54D8D67397D8BDCEE /* Fl_Single_Window.cxx */; };
-		052ACB65AAC112E4DFA7B7C1 /* Fl_Slider.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 085FAF82201B9FD1927A8BAA /* Fl_Slider.cxx */; };
+		2271ACEBB4FBB71C4086EF24 /* Adjuster.cxx in Sources */ = {isa = PBXBuildFile; fileRef = ECEA64F2B2C5C5186949AD76 /* Adjuster.cxx */; };
+		87F292EDA50F45BFAEA18EC5 /* Bitmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D68004A5D4D7878F2E22B59B /* Bitmap.cxx */; };
+		D3D9C65EBA0726B45E8C7725 /* Box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 81608512CDA5C11B35A2B539 /* Box.cxx */; };
+		F343A0DF04697626857BF06F /* Browser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5CE1FF6EF6F9500754C22170 /* Browser.cxx */; };
+		9036C344E82AED76B425415E /* Browser_.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2FC85E98AAFBF45C8EBBA1CC /* Browser_.cxx */; };
+		C96803EEF2B850B58A9507D0 /* Browser_load.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B89AE0F97A9095F4A064E6FF /* Browser_load.cxx */; };
+		DE2BB5133CF2CD996D632F84 /* Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 70F960885035F13513E45EFD /* Button.cxx */; };
+		B0CAF4D1559C6E98DFCA17AA /* Chart.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 392500313F9EDFBFE2786E57 /* Chart.cxx */; };
+		37D83B9E1067EB10D83CC630 /* CheckBrowser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F6EC011E63665A01E72E52E7 /* CheckBrowser.cxx */; };
+		B34F20AC44C7BD06F37A17B1 /* CheckButton.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 490C9DC52EF4532CC9795A6D /* CheckButton.cxx */; };
+		16189C3260E6F7081DBD4A2E /* Choice.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6356BFF275FE7996D8F77F5C /* Choice.cxx */; };
+		4BB964893254F77B4DCAD9BA /* Clock.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1C4F7DBF0BD658A6D786280A /* Clock.cxx */; };
+		2D847DBF09E5D4E252345529 /* ColorChooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4CF353D8CC1FA86010629419 /* ColorChooser.cxx */; };
+		B2BB321C79B8EA57F4A99288 /* Counter.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 96D41530A69F4A84DBF7E11E /* Counter.cxx */; };
+		B1AB3E6CE018D5319F0CB1D8 /* Device.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CB4EA8042D07755CEA64E9FB /* Device.cxx */; };
+		1369E7ADCB6604667B063564 /* Dial.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FDB4072264224B4391CAB607 /* Dial.cxx */; };
+		43FA5D816EDA82E015727381 /* DoubleWindow.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D65E879CEE1870B6B73853BC /* DoubleWindow.cxx */; };
+		ECCA6DC4547C114D5390C8D1 /* FileBrowser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 31B32445C4ECC6487D814264 /* FileBrowser.cxx */; };
+		049EB01300A5C030D1DB2191 /* FileChooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E74C762F7266F6B35BA2394A /* FileChooser.cxx */; };
+		17819EFD092EC34847FF9A97 /* FileChooser2.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A7770A7FB7C79371A3BFB46C /* FileChooser2.cxx */; };
+		3DCD457D7AD4CA90D9EE4246 /* FileIcon.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 19FA31AEDEFAC11C8EC5D035 /* FileIcon.cxx */; };
+		8F4CA13F0135C8D93D647078 /* FileInput.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D05F5EBC3B022A7C99F2DDC2 /* FileInput.cxx */; };
+		99FB64087ED252BA31644F95 /* Group.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A5952FB986701638B15F1B22 /* Group.cxx */; };
+		5D0D1C842A3CAF02C4878E5E /* HelpView.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 047B650C9F322D0CB49D48D6 /* HelpView.cxx */; };
+		DE9BFEBCD61D5BBA51D3A983 /* Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E01E16F15C6443D98C32F5F6 /* Image.cxx */; };
+		1DC72F81E67D26EFC91CC055 /* Input.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 184F621088E304BDFD7A0384 /* Input.cxx */; };
+		22D481051F2975C6708B7A5C /* Input_.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A892461439BFF8FC2D538E50 /* Input_.cxx */; };
+		EDFFE30ABACE77AB818EFD3C /* LightButton.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 36C72097C9A86A33861ACD51 /* LightButton.cxx */; };
+		FB4C03114DD7FD4E21C93B23 /* Menu.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4672B51C8F8B9C0703D7EAA5 /* Menu.cxx */; };
+		24D6615263A30D0055EEA9CD /* Menu_.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DE9E57A22E45C3039D820566 /* Menu_.cxx */; };
+		BD7AE3AEC270BBF97D63A102 /* MenuBar.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 265C00BF9D9598D2A10BE42A /* MenuBar.cxx */; };
+		1EC305B74A27DF994486CAEA /* MenuButton.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 58FD2064B2C854618D2E68DB /* MenuButton.cxx */; };
+		63C8599959CBD6D392A98548 /* MenuWindow.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CBE03F81CF8A43E9735AEFC9 /* MenuWindow.cxx */; };
+		A5B4D789DF000BBCCFC14069 /* Menu_add.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C649ABF1BD8B5FB41539FB5F /* Menu_add.cxx */; };
+		6C148F335D573FA11E171DE8 /* Menu_global.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 25D17230FC589A55DA9C6F23 /* Menu_global.cxx */; };
+		46A6752E2DC6F11255C93484 /* MultiLabel.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 37D57C7D98BB88CE1A3BFC20 /* MultiLabel.cxx */; };
+		B30D6189F1765784376B6779 /* NativeFileChooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FC634C34D16F1DE6EF923847 /* NativeFileChooser.cxx */; };
+		5857DE8B16828A0F93032DB4 /* OverlayWindow.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CEF1A66A542A208607C52832 /* OverlayWindow.cxx */; };
+		5C93DA8482716333763AA2F8 /* PackedGroup.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0F0129FF3753E991F59B9FB5 /* PackedGroup.cxx */; };
+		BFD45A930F841AB6663EB28F /* PagedDevice.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 680EF039247E0C542AD802F6 /* PagedDevice.cxx */; };
+		EBD658967C0EF993B55D8A75 /* Pixmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9AEB93657A00F78B2046454D /* Pixmap.cxx */; };
+		7878131091565BEFA0E1E765 /* Positioner.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9EB992B1957E27AE06A07426 /* Positioner.cxx */; };
+		C759F61877A5D20EDBD7488D /* Printer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 53F2F9DED1C91758A21D0246 /* Printer.cxx */; };
+		96257899A0D5C1733FAC5200 /* Preferences.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 596103743F0CE2A89B7B3FA5 /* Preferences.cxx */; };
+		486D31DD278E2C5144B6284E /* Progress.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B62169E8816659E5E6E4DD9F /* Progress.cxx */; };
+		4E4DEB0F11A0E7ABB682FBAF /* RepeatButton.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F2E611B0C2D8C53DD06946BC /* RepeatButton.cxx */; };
+		5B4F6F77241A0B089DCE19F1 /* ReturnButton.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 69E296C029FB3078A82EE913 /* ReturnButton.cxx */; };
+		01570F259A52D752DA170772 /* Roller.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A5526E662D03F4C9647C13A4 /* Roller.cxx */; };
+		F32B3FAD40F0004FFA6158E3 /* RoundButton.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5DA33AF375B975EBBE824A96 /* RoundButton.cxx */; };
+		B506EE63710A08EC82B52F62 /* ScrollGroup.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 135F7AE45CBDAA49D80BB12D /* ScrollGroup.cxx */; };
+		5622DE2929FDB9DBF1607BC6 /* Scrollbar.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6F7BEB35272214B6167B1FB8 /* Scrollbar.cxx */; };
+		7CB9D27B0F1CE28C828F280B /* SharedImage.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8580401C9D38395ECAD127AC /* SharedImage.cxx */; };
+		550F71EE23A3D8E00A890F88 /* SingleWindow.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 17A03BA54D8D67397D8BDCEE /* SingleWindow.cxx */; };
+		052ACB65AAC112E4DFA7B7C1 /* Slider.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 085FAF82201B9FD1927A8BAA /* Slider.cxx */; };
 		195134865585E031DF857E7B /* Style.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CAA3AD964456E0912791C783 /* Style.cxx */; };
-		B7E4B117D093ED504AD5127B /* Fl_Sys_Menu_Bar.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 43C12A4D372777B2307220CC /* Fl_Sys_Menu_Bar.cxx */; };
-		E0D6CAE34DC85454B5C61EBA /* Fl_Table.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 025842431942A90D06F5BCFA /* Fl_Table.cxx */; };
-		56C8DD01C98608D164F2047B /* Fl_Table_Row.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7097EA09B5B8FCFEEBE28CA8 /* Fl_Table_Row.cxx */; };
-		135F22ECC6C16457F223E1EA /* Fl_Tabs.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7712638143B8C0B51FF6A61B /* Fl_Tabs.cxx */; };
-		1ABCEAD8830736E549D56A9B /* Fl_Text_Buffer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8867A20B30D85F73D157D617 /* Fl_Text_Buffer.cxx */; };
-		9B43466674ACFD80CF1A44C7 /* Fl_Text_Display.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E5E1DA87EC62BC799411CDB9 /* Fl_Text_Display.cxx */; };
-		038A56E9E529AB24D59EF7FA /* Fl_Text_Editor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5995AACC387B26DECEE88139 /* Fl_Text_Editor.cxx */; };
-		45E744C6C36FBC067F9F04EE /* Fl_Tile.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A3F6667DE920CB42ED6E95FC /* Fl_Tile.cxx */; };
-		E9D3E58E4CCE649FB2BC43EA /* Fl_Tiled_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4C92BA7B6F3DA54449388F69 /* Fl_Tiled_Image.cxx */; };
-		90FFE6AA9003A62E1983C991 /* Fl_Tooltip.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 22CA4A41B4BF6D6AF6A6F244 /* Fl_Tooltip.cxx */; };
-		681483153D73620EAA36873D /* Fl_Tree.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 214492E971DD58A3EF8FEAA3 /* Fl_Tree.cxx */; };
-		9A57CF11DB2955C7BAEF98A7 /* Fl_Tree_Item.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D9F29791281BE27706AB7E8E /* Fl_Tree_Item.cxx */; };
-		D2A374205A2262B571A051DE /* Fl_Tree_Item_Array.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D6CBFFFA62847DACFACE5284 /* Fl_Tree_Item_Array.cxx */; };
-		68CC4C366A163EBBBCEE853E /* Fl_Tree_Prefs.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CFFE37EE7360FD052E7B592D /* Fl_Tree_Prefs.cxx */; };
-		4A519B4F241D15A3DA6D3231 /* Fl_Valuator.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 35EB53B1A2D1EF0E37A4970E /* Fl_Valuator.cxx */; };
-		BD78190E42585FD6B71AFEDA /* Fl_Value_Input.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1685625EE3C5677F29D7D314 /* Fl_Value_Input.cxx */; };
-		7E26A26E1E0FE997255F67D7 /* Fl_Value_Output.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7553A0E747824E627DB0DDE5 /* Fl_Value_Output.cxx */; };
-		00BFB74D5BC12A94AFF72C8E /* Fl_Value_Slider.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 07F5E789A6A94E38E46B9744 /* Fl_Value_Slider.cxx */; };
-		C8308863B421AD33C5442423 /* Fl_Widget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C5F5E189BBE256A698ADF418 /* Fl_Widget.cxx */; };
-		EAFF1F86C4BFCA7C8FCCEA28 /* Fl_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8E1A3A4FC6492F080AF48D54 /* Fl_Window.cxx */; };
-		C62F4F9E13B7E78D46033106 /* Fl_Window_fullscreen.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7679F6CC5391C705D9B921DA /* Fl_Window_fullscreen.cxx */; };
-		A76E032AD9B13380163BB493 /* Fl_Window_hotspot.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B5E58AC3929D3ADCBE238301 /* Fl_Window_hotspot.cxx */; };
-		E373B7F46315E6D1F6D255E9 /* Fl_Window_iconize.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C34CF806FAE9E39DDFD23D3B /* Fl_Window_iconize.cxx */; };
-		72DEB4A9569C0F11C103EF90 /* Fl_Wizard.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A84F18440208B2AA809D2871 /* Fl_Wizard.cxx */; };
-		F4974EC29CF042D6AEB0CC0D /* Fl_XBM_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9A21D7EDE35664C4B0EDD969 /* Fl_XBM_Image.cxx */; };
-		A7891F57744007954D70C5D4 /* Fl_XPM_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 302A3FA8AB59DE7E5255E28C /* Fl_XPM_Image.cxx */; };
-		230F7BA09DDFC95489B89DFF /* Fl_abort.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 671B96BA5D85D5C6EE31AB76 /* Fl_abort.cxx */; };
-		EC8E6A4EA73A26BEEC330000 /* Fl_add_idle.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1821AF479F52B67539CB0CF8 /* Fl_add_idle.cxx */; };
-		A87E247AEEF22DCE6B7DFEE1 /* Fl_arg.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8E5EB755BAF13FB15109FC0C /* Fl_arg.cxx */; };
-		867ED2B31C3F415ACBA63053 /* Fl_compose.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AA048ACBE220E831739595BD /* Fl_compose.cxx */; };
-		EF8285FB887728A6F7E61B8A /* Fl_display.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 44287148E62E709880C4EA41 /* Fl_display.cxx */; };
-		11ADE417F14FF9E2EE8083CE /* Fl_get_key.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A8DC358A8390A493A9A8AE55 /* Fl_get_key.cxx */; };
-		05360A3851265C0F5DE74075 /* Fl_get_system_colors.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FEADB63E5C237A827884C5C5 /* Fl_get_system_colors.cxx */; };
-		DF2B279A7C6E4D9B1DAF6A30 /* Fl_grab.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 76AA6E6C769FB157F8125874 /* Fl_grab.cxx */; };
-		F08C8B0E65A2E77417682E0C /* Fl_lock.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7FAC51832563F8B044E55B90 /* Fl_lock.cxx */; };
-		D93BEFC63736CECDC57C91B9 /* Fl_own_colormap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 013DBB50198366613C31E2A9 /* Fl_own_colormap.cxx */; };
-		D57FBCFB72B5E577A7F80562 /* Fl_visual.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1626800F2D2DF61E9E2468DD /* Fl_visual.cxx */; };
-		D90075982F3B0CDB0EF91A73 /* Fl_x.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F285310A7BD8D88F965104C8 /* Fl_x.cxx */; };
+		B7E4B117D093ED504AD5127B /* SysMenuBar.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 43C12A4D372777B2307220CC /* SysMenuBar.cxx */; };
+		E0D6CAE34DC85454B5C61EBA /* Table.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 025842431942A90D06F5BCFA /* Table.cxx */; };
+		56C8DD01C98608D164F2047B /* TableRow.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7097EA09B5B8FCFEEBE28CA8 /* TableRow.cxx */; };
+		135F22ECC6C16457F223E1EA /* TabGroup.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7712638143B8C0B51FF6A61B /* TabGroup.cxx */; };
+		1ABCEAD8830736E549D56A9B /* TextBuffer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8867A20B30D85F73D157D617 /* TextBuffer.cxx */; };
+		9B43466674ACFD80CF1A44C7 /* TextDisplay.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E5E1DA87EC62BC799411CDB9 /* TextDisplay.cxx */; };
+		038A56E9E529AB24D59EF7FA /* TextEditor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5995AACC387B26DECEE88139 /* TextEditor.cxx */; };
+		45E744C6C36FBC067F9F04EE /* TiledGroup.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A3F6667DE920CB42ED6E95FC /* TiledGroup.cxx */; };
+		E9D3E58E4CCE649FB2BC43EA /* TiledImage.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4C92BA7B6F3DA54449388F69 /* TiledImage.cxx */; };
+		90FFE6AA9003A62E1983C991 /* Tooltip.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 22CA4A41B4BF6D6AF6A6F244 /* Tooltip.cxx */; };
+		681483153D73620EAA36873D /* Tree.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 214492E971DD58A3EF8FEAA3 /* Tree.cxx */; };
+		9A57CF11DB2955C7BAEF98A7 /* TreeItem.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D9F29791281BE27706AB7E8E /* TreeItem.cxx */; };
+		D2A374205A2262B571A051DE /* TreeItemArray.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D6CBFFFA62847DACFACE5284 /* TreeItemArray.cxx */; };
+		68CC4C366A163EBBBCEE853E /* TreePrefs.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CFFE37EE7360FD052E7B592D /* TreePrefs.cxx */; };
+		4A519B4F241D15A3DA6D3231 /* Valuator.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 35EB53B1A2D1EF0E37A4970E /* Valuator.cxx */; };
+		BD78190E42585FD6B71AFEDA /* ValueInput.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1685625EE3C5677F29D7D314 /* ValueInput.cxx */; };
+		7E26A26E1E0FE997255F67D7 /* ValueOutput.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7553A0E747824E627DB0DDE5 /* ValueOutput.cxx */; };
+		00BFB74D5BC12A94AFF72C8E /* ValueSlider.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 07F5E789A6A94E38E46B9744 /* ValueSlider.cxx */; };
+		C8308863B421AD33C5442423 /* Widget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C5F5E189BBE256A698ADF418 /* Widget.cxx */; };
+		EAFF1F86C4BFCA7C8FCCEA28 /* Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8E1A3A4FC6492F080AF48D54 /* Window.cxx */; };
+		C62F4F9E13B7E78D46033106 /* Window_fullscreen.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7679F6CC5391C705D9B921DA /* Window_fullscreen.cxx */; };
+		A76E032AD9B13380163BB493 /* Window_hotspot.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B5E58AC3929D3ADCBE238301 /* Window_hotspot.cxx */; };
+		E373B7F46315E6D1F6D255E9 /* Window_iconize.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C34CF806FAE9E39DDFD23D3B /* Window_iconize.cxx */; };
+		72DEB4A9569C0F11C103EF90 /* Wizard.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A84F18440208B2AA809D2871 /* Wizard.cxx */; };
+		F4974EC29CF042D6AEB0CC0D /* XBMImage.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9A21D7EDE35664C4B0EDD969 /* XBMImage.cxx */; };
+		A7891F57744007954D70C5D4 /* XPMImage.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 302A3FA8AB59DE7E5255E28C /* XPMImage.cxx */; };
+		230F7BA09DDFC95489B89DFF /* abort.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 671B96BA5D85D5C6EE31AB76 /* abort.cxx */; };
+		EC8E6A4EA73A26BEEC330000 /* add_idle.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1821AF479F52B67539CB0CF8 /* add_idle.cxx */; };
+		A87E247AEEF22DCE6B7DFEE1 /* arg.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8E5EB755BAF13FB15109FC0C /* arg.cxx */; };
+		867ED2B31C3F415ACBA63053 /* compose.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AA048ACBE220E831739595BD /* compose.cxx */; };
+		EF8285FB887728A6F7E61B8A /* display.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 44287148E62E709880C4EA41 /* display.cxx */; };
+		11ADE417F14FF9E2EE8083CE /* get_key.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A8DC358A8390A493A9A8AE55 /* get_key.cxx */; };
+		05360A3851265C0F5DE74075 /* get_system_colors.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FEADB63E5C237A827884C5C5 /* get_system_colors.cxx */; };
+		DF2B279A7C6E4D9B1DAF6A30 /* grab.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 76AA6E6C769FB157F8125874 /* grab.cxx */; };
+		F08C8B0E65A2E77417682E0C /* lock.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7FAC51832563F8B044E55B90 /* lock.cxx */; };
+		D93BEFC63736CECDC57C91B9 /* own_colormap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 013DBB50198366613C31E2A9 /* own_colormap.cxx */; };
+		D57FBCFB72B5E577A7F80562 /* visual.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1626800F2D2DF61E9E2468DD /* visual.cxx */; };
+		D90075982F3B0CDB0EF91A73 /* x11.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F285310A7BD8D88F965104C8 /* x11.cxx */; };
 		AABCD2111137745B5B24F9F8 /* filename_absolute.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 04A6409B52D5A99617606460 /* filename_absolute.cxx */; };
 		B1C7F80015E458B01ED0339C /* filename_expand.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F9F779F221E630EE4A837595 /* filename_expand.cxx */; };
 		80D7B46EAB946A01968CCDF8 /* filename_ext.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 210616B209B714E918A5CD3B /* filename_ext.cxx */; };
@@ -148,46 +148,46 @@
 		8C352F4250261E6F42F1FA19 /* filename_list.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F08599CCE19B1640395AB3D0 /* filename_list.cxx */; };
 		BF87576CF80F55DD7380B991 /* filename_match.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AB171A4BF938A263E10FD0AD /* filename_match.cxx */; };
 		53ADEE51DE5FEEEB4A79CA21 /* filename_setext.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 003AA96B03F174957585B088 /* filename_setext.cxx */; };
-		CF3BDDBED0526F9FB4C8A1D2 /* fl_arc.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 876B6A633C2E666DFC3119DD /* fl_arc.cxx */; };
-		3C758F19560BBB0931A7A741 /* fl_arci.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E52CB16DD470DA22063934AA /* fl_arci.cxx */; };
-		F10B0DD63132D694D8879B1C /* fl_ask.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 60E7DD739D5DDBD766E2E30F /* fl_ask.cxx */; };
-		7CD1A5049849133DFB39DF46 /* fl_boxtype.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BC14596F24E305FE8CE39DAF /* fl_boxtype.cxx */; };
-		36978A2B5576E54EDA3F8D90 /* fl_call_main.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8B35EF2F662F706A2B46BDD7 /* fl_call_main.cxx */; };
-		E5A3C2482B9E218F550D91DA /* fl_color.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 02716487EA5E04A784DE5A34 /* fl_color.cxx */; };
-		79967B56F476337DA7A830CF /* fl_cursor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C832D220ECF843E28FBAFED8 /* fl_cursor.cxx */; };
-		B234111841F3CC33C32E75A1 /* fl_curve.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 53EC964ED2E6DE4CBF80B206 /* fl_curve.cxx */; };
-		2BF486109B69CFEFB5C7950E /* fl_diamond_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5557266E1C9D440172D5DF09 /* fl_diamond_box.cxx */; };
-		207AE6E5DDC5DE3F30896F39 /* fl_dnd.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D1E006BE295C0F88A8E51304 /* fl_dnd.cxx */; };
-		363F858BE2E0007242350184 /* fl_draw.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3CF0F8B538EFFF602D6549B0 /* fl_draw.cxx */; };
-		F546A37A0957B9108A3E4227 /* fl_draw_image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F608DA64A6A66C65E7494BEA /* fl_draw_image.cxx */; };
-		30E10499346406FB87A5DD43 /* fl_draw_pixmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B6E2BA6C16F8BB32016C0FF0 /* fl_draw_pixmap.cxx */; };
-		DE48D54427106D76FDA1F6E0 /* fl_encoding_latin1.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0BEBF5A734CD2113BB6BDA08 /* fl_encoding_latin1.cxx */; };
-		ABB49E921AA98E86EBD8142A /* fl_encoding_mac_roman.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C2BF9CDFAB8BFEF23768C51B /* fl_encoding_mac_roman.cxx */; };
-		15FDFD86D6D450F2C221FBAC /* fl_engraved_label.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0522E1C24273419B45EF1B4D /* fl_engraved_label.cxx */; };
-		EB81F3881B64050C7D312740 /* fl_file_dir.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1BF9BBF497705FBAD92797FF /* fl_file_dir.cxx */; };
-		C9F44B469D5C83AAB89600F8 /* fl_font.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1CFFB72AB54D6FECF9F0C89C /* fl_font.cxx */; };
-		EFCDA004289805697F6CF4B9 /* fl_gtk.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E3303C9AB8380CF95C000D0C /* fl_gtk.cxx */; };
-		4598BB77D7E3CBFC61C56140 /* fl_labeltype.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 95F43A2D694782E841E90C3A /* fl_labeltype.cxx */; };
-		A59E78B843DA2C7D12D49294 /* fl_line_style.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5FD374C4251D84126390EEE5 /* fl_line_style.cxx */; };
-		BE74DB334A51DD19B62B76EB /* fl_open_uri.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5515C9CC733AC9F36A9B7E06 /* fl_open_uri.cxx */; };
-		61BF99BBD1D18251E0170B8A /* fl_oval_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 554EB8945D959B0EF565327A /* fl_oval_box.cxx */; };
-		C4F171DDF768A7556A684B76 /* fl_overlay.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5536CF5142F45E75898D00BA /* fl_overlay.cxx */; };
-		305944C743B9FD0B34805326 /* fl_overlay_visual.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3132F0163EFDF4289F20DB50 /* fl_overlay_visual.cxx */; };
-		40F29FD83CE6117394258FAB /* fl_plastic.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D9934C34F12FADA862D201D1 /* fl_plastic.cxx */; };
-		C91AB9ACD12BB4B352A00338 /* fl_read_image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1FA85C8068154A53598C9B19 /* fl_read_image.cxx */; };
-		39238B4623BCF68FDA9EE223 /* fl_rect.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 82F1E1FCCD3708EA48A6FD1B /* fl_rect.cxx */; };
-		FE83B31EEE58493BD243B8C2 /* fl_round_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C791DFA1DA864C8105CA92D3 /* fl_round_box.cxx */; };
-		AD0B8E3D9E97E625C55B967F /* fl_rounded_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 557E80414B985272F1C0F5BE /* fl_rounded_box.cxx */; };
-		FCAEAB49DE121D3D2138610D /* fl_scroll_area.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0E08EA1CF945ADA843805A2C /* fl_scroll_area.cxx */; };
-		2952645AF2A836D88ADA48F9 /* fl_set_font.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C7ED2C14E31F1142DDCAC057 /* fl_set_font.cxx */; };
-		83BEAD361BB7BC2CD030A36B /* fl_set_fonts.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 22603052464D0ADEFA96A7E6 /* fl_set_fonts.cxx */; };
-		03E51C6144E06D2161CDE5EB /* fl_shadow_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2C5EEC8910127EC66EEA73B1 /* fl_shadow_box.cxx */; };
-		1915B2B4724B8826C53616C9 /* fl_shortcut.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BFCE21B11BD00816E2D65029 /* fl_shortcut.cxx */; };
-		CA982582F5FA39ED7D7118DA /* fl_show_colormap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 76D6638ABB7D955E0B149360 /* fl_show_colormap.cxx */; };
-		3F497BC168C63621AB680203 /* fl_symbols.cxx in Sources */ = {isa = PBXBuildFile; fileRef = ECAFDF98E362617FA9E2B887 /* fl_symbols.cxx */; };
-		E05DB01E716C969FB0A9984E /* fl_utf8.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C82D09C9EB356BF14388A904 /* fl_utf8.cxx */; };
-		DBA6ED75DC142BE30D95B619 /* fl_utf.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 574878A10D223037009BD0DE /* fl_utf.cxx */; };
-		0DA673401BF6865FFFEF7D18 /* fl_vertex.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6C74D84D95E5167E6D41A606 /* fl_vertex.cxx */; };
+		CF3BDDBED0526F9FB4C8A1D2 /* arc.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 876B6A633C2E666DFC3119DD /* arc.cxx */; };
+		3C758F19560BBB0931A7A741 /* arci.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E52CB16DD470DA22063934AA /* arci.cxx */; };
+		F10B0DD63132D694D8879B1C /* ask.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 60E7DD739D5DDBD766E2E30F /* ask.cxx */; };
+		7CD1A5049849133DFB39DF46 /* boxtype.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BC14596F24E305FE8CE39DAF /* boxtype.cxx */; };
+		36978A2B5576E54EDA3F8D90 /* call_main.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8B35EF2F662F706A2B46BDD7 /* call_main.cxx */; };
+		E5A3C2482B9E218F550D91DA /* color.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 02716487EA5E04A784DE5A34 /* color.cxx */; };
+		79967B56F476337DA7A830CF /* cursor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C832D220ECF843E28FBAFED8 /* cursor.cxx */; };
+		B234111841F3CC33C32E75A1 /* curve.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 53EC964ED2E6DE4CBF80B206 /* curve.cxx */; };
+		2BF486109B69CFEFB5C7950E /* diamond_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5557266E1C9D440172D5DF09 /* diamond_box.cxx */; };
+		207AE6E5DDC5DE3F30896F39 /* dnd.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D1E006BE295C0F88A8E51304 /* dnd.cxx */; };
+		363F858BE2E0007242350184 /* draw.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3CF0F8B538EFFF602D6549B0 /* draw.cxx */; };
+		F546A37A0957B9108A3E4227 /* draw_image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F608DA64A6A66C65E7494BEA /* draw_image.cxx */; };
+		30E10499346406FB87A5DD43 /* draw_pixmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B6E2BA6C16F8BB32016C0FF0 /* draw_pixmap.cxx */; };
+		DE48D54427106D76FDA1F6E0 /* encoding_latin1.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0BEBF5A734CD2113BB6BDA08 /* encoding_latin1.cxx */; };
+		ABB49E921AA98E86EBD8142A /* encoding_mac_roman.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C2BF9CDFAB8BFEF23768C51B /* encoding_mac_roman.cxx */; };
+		15FDFD86D6D450F2C221FBAC /* engraved_label.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0522E1C24273419B45EF1B4D /* engraved_label.cxx */; };
+		EB81F3881B64050C7D312740 /* file_dir.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1BF9BBF497705FBAD92797FF /* file_dir.cxx */; };
+		C9F44B469D5C83AAB89600F8 /* font.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1CFFB72AB54D6FECF9F0C89C /* font.cxx */; };
+		EFCDA004289805697F6CF4B9 /* gtk.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E3303C9AB8380CF95C000D0C /* gtk.cxx */; };
+		4598BB77D7E3CBFC61C56140 /* labeltype.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 95F43A2D694782E841E90C3A /* labeltype.cxx */; };
+		A59E78B843DA2C7D12D49294 /* line_style.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5FD374C4251D84126390EEE5 /* line_style.cxx */; };
+		BE74DB334A51DD19B62B76EB /* open_uri.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5515C9CC733AC9F36A9B7E06 /* open_uri.cxx */; };
+		61BF99BBD1D18251E0170B8A /* oval_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 554EB8945D959B0EF565327A /* oval_box.cxx */; };
+		C4F171DDF768A7556A684B76 /* overlay.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5536CF5142F45E75898D00BA /* overlay.cxx */; };
+		305944C743B9FD0B34805326 /* overlay_visual.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3132F0163EFDF4289F20DB50 /* overlay_visual.cxx */; };
+		40F29FD83CE6117394258FAB /* plastic.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D9934C34F12FADA862D201D1 /* plastic.cxx */; };
+		C91AB9ACD12BB4B352A00338 /* read_image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1FA85C8068154A53598C9B19 /* read_image.cxx */; };
+		39238B4623BCF68FDA9EE223 /* rect.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 82F1E1FCCD3708EA48A6FD1B /* rect.cxx */; };
+		FE83B31EEE58493BD243B8C2 /* round_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C791DFA1DA864C8105CA92D3 /* round_box.cxx */; };
+		AD0B8E3D9E97E625C55B967F /* rounded_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 557E80414B985272F1C0F5BE /* rounded_box.cxx */; };
+		FCAEAB49DE121D3D2138610D /* scroll_area.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0E08EA1CF945ADA843805A2C /* scroll_area.cxx */; };
+		2952645AF2A836D88ADA48F9 /* set_font.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C7ED2C14E31F1142DDCAC057 /* set_font.cxx */; };
+		83BEAD361BB7BC2CD030A36B /* set_fonts.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 22603052464D0ADEFA96A7E6 /* set_fonts.cxx */; };
+		03E51C6144E06D2161CDE5EB /* shadow_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2C5EEC8910127EC66EEA73B1 /* shadow_box.cxx */; };
+		1915B2B4724B8826C53616C9 /* shortcut.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BFCE21B11BD00816E2D65029 /* shortcut.cxx */; };
+		CA982582F5FA39ED7D7118DA /* show_colormap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 76D6638ABB7D955E0B149360 /* show_colormap.cxx */; };
+		3F497BC168C63621AB680203 /* symbols.cxx in Sources */ = {isa = PBXBuildFile; fileRef = ECAFDF98E362617FA9E2B887 /* symbols.cxx */; };
+		E05DB01E716C969FB0A9984E /* utf8.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C82D09C9EB356BF14388A904 /* utf8.cxx */; };
+		DBA6ED75DC142BE30D95B619 /* utf.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 574878A10D223037009BD0DE /* utf.cxx */; };
+		0DA673401BF6865FFFEF7D18 /* vertex.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6C74D84D95E5167E6D41A606 /* vertex.cxx */; };
 		F9A99DC4E0447A57F2242B0F /* numericsort.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2286DB222E1D5D78655B21BB /* numericsort.cxx */; };
 		7B5F222AD68C2A4A4853951A /* ps_image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 472AB3970C82CB496562F422 /* ps_image.cxx */; };
 		611144BED911A91A14E629C2 /* scandir.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1E2B1DAE628CEB38A5F0E604 /* scandir.cxx */; };
@@ -197,10 +197,11 @@
 		C8A527099015E8D8C161BB93 /* case.c in Sources */ = {isa = PBXBuildFile; fileRef = 6A8D02403C9D3B785B0D8F30 /* case.c */; };
 		8DB42169A784FA421AAADA6D /* is_right2left.c in Sources */ = {isa = PBXBuildFile; fileRef = 15064F3F45361B071125C187 /* is_right2left.c */; };
 		2FAB16B417D6C7DE47534445 /* is_spacing.c in Sources */ = {isa = PBXBuildFile; fileRef = 35196210FA39F50016C06ED2 /* is_spacing.c */; };
+		6EC5A8E1F6171E20505CDA66 /* all.h in Headers */ = {isa = PBXBuildFile; fileRef = DDEC0AB0E55CB75CFA5FD9DC /* all.h */; };
+		39576718F4A718E5885D7837 /* fltk3.h in Headers */ = {isa = PBXBuildFile; fileRef = 15B1A08E928290071C92EDD1 /* fltk3.h */; };
 		757ECB76CD9272004B8A4A42 /* Adjuster.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CDC310CF438C4E007EE265B /* Adjuster.h */; };
 		CC311448876EC9C10D5614AF /* ask.h in Headers */ = {isa = PBXBuildFile; fileRef = D31DE8ACD497B8FA62A57910 /* ask.h */; };
 		72A9364B21F8DEDED9A43B9E /* Bitmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 249A3332647089ACC2702523 /* Bitmap.h */; };
-		26C1F556C987C742D37CCAA4 /* BMPImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B9A35BBCCC105E2F86DBDA1 /* BMPImage.h */; };
 		35DE2AD5F6204186A6545D86 /* Box.h in Headers */ = {isa = PBXBuildFile; fileRef = 0800D21F849D8F2CDB90C72D /* Box.h */; };
 		42605FAF974760B9A405E61E /* Browser_.h in Headers */ = {isa = PBXBuildFile; fileRef = 32841D65E2F82C3F24A360D2 /* Browser_.h */; };
 		7713D95988E151E950DE9A22 /* Browser.h in Headers */ = {isa = PBXBuildFile; fileRef = B8F30574865BA1A8081AF0E4 /* Browser.h */; };
@@ -233,9 +234,7 @@
 		20CBFB6F570A48CAA0751DBF /* FormsBitmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 11DF5111A6EE377DAAFDB68B /* FormsBitmap.h */; };
 		742D204F4CECC650D53AC070 /* FormsPixmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E62E615D0C146DBB74B477A /* FormsPixmap.h */; };
 		6A197BCC5117B3666D368B25 /* Free.h in Headers */ = {isa = PBXBuildFile; fileRef = 11F5FE43FEC401E52D4CABB7 /* Free.h */; };
-		8845649A10159ECED0C93211 /* GIFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 605121E099731EF9977E11C8 /* GIFImage.h */; };
 		5E1D236DDF180951F39D88D0 /* Group.h in Headers */ = {isa = PBXBuildFile; fileRef = 91EA037664D5A2D49603F364 /* Group.h */; };
-		F7A66B0ADC3A359551BB84FB /* HelpDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 0925F19306CD3458397661F3 /* HelpDialog.h */; };
 		E5826346717EA4FA214A9B1B /* HelpView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CD096CD5808EADB1B646DB4 /* HelpView.h */; };
 		0CBBFB5E384976AB8AC9A2E0 /* HoldBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF83CFB9E060DA4F81AE816 /* HoldBrowser.h */; };
 		C731F1AF175523B779E819E5 /* HorFillSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C8658CA906CD5A6C35FA96B /* HorFillSlider.h */; };
@@ -247,7 +246,6 @@
 		78D8944F6051F6574682C312 /* Input.h in Headers */ = {isa = PBXBuildFile; fileRef = 28D897DFA27CCC5A3933D952 /* Input.h */; };
 		6291854E45CD36763495507E /* InputChoice.h in Headers */ = {isa = PBXBuildFile; fileRef = 11C999453D2BEBD3A5B32DA4 /* InputChoice.h */; };
 		0F5897939A32668EEBBEA347 /* IntInput.h in Headers */ = {isa = PBXBuildFile; fileRef = B5CA37E08339E6D7820C0973 /* IntInput.h */; };
-		30029E6A64808C5EFEBA9CF8 /* JPEGImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 60A217E0DC847E1DD7B44D49 /* JPEGImage.h */; };
 		8E35401D5E144E48E1E2E147 /* LightButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A390823203566E8B1FB4B81 /* LightButton.h */; };
 		C5C32DAEA102D25D12F86757 /* LineDial.h in Headers */ = {isa = PBXBuildFile; fileRef = D10E3F19DD8CC6A3FAA912AF /* LineDial.h */; };
 		E62C50EAAA4C4B51F3A50640 /* math.h in Headers */ = {isa = PBXBuildFile; fileRef = 6523340D0E47A3A4B3852435 /* math.h */; };
@@ -273,8 +271,6 @@
 		38C7D942581B7C5369F2AC03 /* PagedDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = C539C329532BE09B0422A23A /* PagedDevice.h */; };
 		F5061313596F1BC761AC582B /* Pixmap.h in Headers */ = {isa = PBXBuildFile; fileRef = AEF910125AE91654739457BF /* Pixmap.h */; };
 		6AFC8619DFF2FA3604F112C0 /* Plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = A5DB3592DA82366555A66B4A /* Plugin.h */; };
-		E3127242302580ED01B769A4 /* PNGImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 25BEA28581A1A97EEA1014E2 /* PNGImage.h */; };
-		CBE8880ED23DF42D5298EAAE /* PNMImage.h in Headers */ = {isa = PBXBuildFile; fileRef = EC95850E022AFDFC59E4EBC2 /* PNMImage.h */; };
 		F702DFA64620B02A76332D90 /* Positioner.h in Headers */ = {isa = PBXBuildFile; fileRef = 813FC8746075A74FEDAE447C /* Positioner.h */; };
 		ACFD331F39EEA65591D0492B /* PostScript.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A0B5BF3C5ECFAF041951029 /* PostScript.h */; };
 		987CCADF07B02BD64D159D9F /* Preferences.h in Headers */ = {isa = PBXBuildFile; fileRef = A9B88BB6C6654424E37B8082 /* Preferences.h */; };
@@ -333,9 +329,9 @@
 		92B4EB04CFFC5ECFD3F79630 /* WizardGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD4A9C136E457CC92F9ADFE /* WizardGroup.h */; };
 		65AFEF19DE305C21D5DD6CA6 /* Wrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = DF6994452C6FD170E9507C6D /* Wrapper.h */; };
 		39A61403B387ECD58A0E92D3 /* x.h in Headers */ = {isa = PBXBuildFile; fileRef = 059505668BA88697E40E6C32 /* x.h */; };
+		E0943D9D77DD934578EBF9DF /* Xutf8.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E1B408952EFBB79A46CDE69 /* Xutf8.h */; };
 		CBE1938D51C95931483B5C48 /* XBMImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F6F453D846A6B7E8679FDAA /* XBMImage.h */; };
 		ACA9550AC903E3D31D80B160 /* XPMImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C163988CD45E6AB4710982F /* XPMImage.h */; };
-		E0943D9D77DD934578EBF9DF /* Xutf8.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E1B408952EFBB79A46CDE69 /* Xutf8.h */; };
 		CF5FA17E9AD84BE1BB907031 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14F66311E977D66CE29024C3 /* Cocoa.framework */; };
 		E1C77AA3B54E8E48277C3538 /* GLChoice.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DE5C107D549D9A4AFBEF3B60 /* GLChoice.cxx */; };
 		E8D5789A3FCFB823CBE99BDE /* GLDevicePlugin.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 391E3B0B723D3B5BEC865531 /* GLDevicePlugin.cxx */; };
@@ -361,14 +357,22 @@
 		374185370DF817EF401AD7FB /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39E229DEF1CA3739A0890F43 /* ApplicationServices.framework */; };
 		A63A2DF4B57CC71275DAF8AC /* fltk3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86C380FE76A739F296A44961 /* fltk3.framework */; };
 		3A7B08012DF761A8E2829536 /* fltk3.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 86C380FE76A739F296A44961 /* fltk3.framework */; };
-		E6582F0C45106AC28102A2E1 /* Fl_BMP_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BEBF424874FF4284B7383470 /* Fl_BMP_Image.cxx */; };
-		4527A1842C292A307AB984FD /* Fl_File_Icon2.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7655FB1C9C0EEA276E0C6765 /* Fl_File_Icon2.cxx */; };
-		61475B3565DF64924AD4D896 /* Fl_GIF_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CFAC1FAE7DBA77895E2BC5E9 /* Fl_GIF_Image.cxx */; };
-		D0C372353DA3A182C063120A /* Fl_Help_Dialog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0EDA91FFA01CB06D2CD72D46 /* Fl_Help_Dialog.cxx */; };
-		633E5465D656A9961EB5A771 /* Fl_JPEG_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 771C095FF2AE4FFCACA213AB /* Fl_JPEG_Image.cxx */; };
-		6C9573986A4FFE9EE9ADFFDD /* Fl_PNG_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E1BECD1D14488DF25469A00E /* Fl_PNG_Image.cxx */; };
-		E8B17358A691471C1B2BD4D5 /* Fl_PNM_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 948DEE29F3A36A2E578DD9C0 /* Fl_PNM_Image.cxx */; };
-		C99E8BD8A6A0BDDBE07EE04C /* fl_images_core.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6ADD9C72DA642E9780529588 /* fl_images_core.cxx */; };
+		E6582F0C45106AC28102A2E1 /* BMPImage.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BEBF424874FF4284B7383470 /* BMPImage.cxx */; };
+		4527A1842C292A307AB984FD /* FileIcon2.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7655FB1C9C0EEA276E0C6765 /* FileIcon2.cxx */; };
+		61475B3565DF64924AD4D896 /* GIFImage.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CFAC1FAE7DBA77895E2BC5E9 /* GIFImage.cxx */; };
+		D0C372353DA3A182C063120A /* HelpDialog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0EDA91FFA01CB06D2CD72D46 /* HelpDialog.cxx */; };
+		C99E8BD8A6A0BDDBE07EE04C /* images_core.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6ADD9C72DA642E9780529588 /* images_core.cxx */; };
+		633E5465D656A9961EB5A771 /* JPEGImage.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 771C095FF2AE4FFCACA213AB /* JPEGImage.cxx */; };
+		6C9573986A4FFE9EE9ADFFDD /* PNGImage.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E1BECD1D14488DF25469A00E /* PNGImage.cxx */; };
+		E8B17358A691471C1B2BD4D5 /* PNMImage.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 948DEE29F3A36A2E578DD9C0 /* PNMImage.cxx */; };
+		8EFCC7E97421DED44B2C58AC /* all.h in Headers */ = {isa = PBXBuildFile; fileRef = 1010B13DA886270EE16E3514 /* all.h */; };
+		F0C926FCF8BA5C38AB2B38A6 /* fltk3images.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C2435D9DCE9D126983C81F3 /* fltk3images.h */; };
+		26C1F556C987C742D37CCAA4 /* BMPImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B9A35BBCCC105E2F86DBDA1 /* BMPImage.h */; };
+		8845649A10159ECED0C93211 /* GIFImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 605121E099731EF9977E11C8 /* GIFImage.h */; };
+		F7A66B0ADC3A359551BB84FB /* HelpDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 0925F19306CD3458397661F3 /* HelpDialog.h */; };
+		30029E6A64808C5EFEBA9CF8 /* JPEGImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 60A217E0DC847E1DD7B44D49 /* JPEGImage.h */; };
+		E3127242302580ED01B769A4 /* PNGImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 25BEA28581A1A97EEA1014E2 /* PNGImage.h */; };
+		CBE8880ED23DF42D5298EAAE /* PNMImage.h in Headers */ = {isa = PBXBuildFile; fileRef = EC95850E022AFDFC59E4EBC2 /* PNMImage.h */; };
 		8A255408062F7A3777F2346E /* fltk3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86C380FE76A739F296A44961 /* fltk3.framework */; };
 		5F01A68D9FECE518EF71F730 /* fltk3png.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06A7B68E2100DB960872987D /* fltk3png.framework */; };
 		788FE6BCB3796A6FF4069E08 /* fltk3jpeg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C03975F619684D3461888340 /* fltk3jpeg.framework */; };
@@ -3880,10 +3884,11 @@
 		425C2E3ED45A5CA834A7B379 /* widget_panel.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = widget_panel.cxx; path = ../../fluid/widget_panel.cxx; sourceTree = SOURCE_ROOT; };
 		436422818D83DCB8718FDFEE /* workspace_panel.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = workspace_panel.cxx; path = ../../fluid/workspace_panel.cxx; sourceTree = SOURCE_ROOT; };
 		4616D95804473A73F80B6CC7 /* Fluid.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Fluid.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		DDEC0AB0E55CB75CFA5FD9DC /* all.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = all.h; path = ../../include/fltk3/all.h; sourceTree = SOURCE_ROOT; };
+		15B1A08E928290071C92EDD1 /* fltk3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fltk3.h; path = ../../include/fltk3/fltk3.h; sourceTree = SOURCE_ROOT; };
 		1CDC310CF438C4E007EE265B /* Adjuster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Adjuster.h; path = ../../include/fltk3/Adjuster.h; sourceTree = SOURCE_ROOT; };
 		D31DE8ACD497B8FA62A57910 /* ask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ask.h; path = ../../include/fltk3/ask.h; sourceTree = SOURCE_ROOT; };
 		249A3332647089ACC2702523 /* Bitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bitmap.h; path = ../../include/fltk3/Bitmap.h; sourceTree = SOURCE_ROOT; };
-		5B9A35BBCCC105E2F86DBDA1 /* BMPImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BMPImage.h; path = ../../include/fltk3/BMPImage.h; sourceTree = SOURCE_ROOT; };
 		0800D21F849D8F2CDB90C72D /* Box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Box.h; path = ../../include/fltk3/Box.h; sourceTree = SOURCE_ROOT; };
 		32841D65E2F82C3F24A360D2 /* Browser_.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Browser_.h; path = ../../include/fltk3/Browser_.h; sourceTree = SOURCE_ROOT; };
 		B8F30574865BA1A8081AF0E4 /* Browser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Browser.h; path = ../../include/fltk3/Browser.h; sourceTree = SOURCE_ROOT; };
@@ -3916,9 +3921,7 @@
 		11DF5111A6EE377DAAFDB68B /* FormsBitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FormsBitmap.h; path = ../../include/fltk3/FormsBitmap.h; sourceTree = SOURCE_ROOT; };
 		7E62E615D0C146DBB74B477A /* FormsPixmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FormsPixmap.h; path = ../../include/fltk3/FormsPixmap.h; sourceTree = SOURCE_ROOT; };
 		11F5FE43FEC401E52D4CABB7 /* Free.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Free.h; path = ../../include/fltk3/Free.h; sourceTree = SOURCE_ROOT; };
-		605121E099731EF9977E11C8 /* GIFImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GIFImage.h; path = ../../include/fltk3/GIFImage.h; sourceTree = SOURCE_ROOT; };
 		91EA037664D5A2D49603F364 /* Group.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Group.h; path = ../../include/fltk3/Group.h; sourceTree = SOURCE_ROOT; };
-		0925F19306CD3458397661F3 /* HelpDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HelpDialog.h; path = ../../include/fltk3/HelpDialog.h; sourceTree = SOURCE_ROOT; };
 		0CD096CD5808EADB1B646DB4 /* HelpView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HelpView.h; path = ../../include/fltk3/HelpView.h; sourceTree = SOURCE_ROOT; };
 		CFF83CFB9E060DA4F81AE816 /* HoldBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HoldBrowser.h; path = ../../include/fltk3/HoldBrowser.h; sourceTree = SOURCE_ROOT; };
 		5C8658CA906CD5A6C35FA96B /* HorFillSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HorFillSlider.h; path = ../../include/fltk3/HorFillSlider.h; sourceTree = SOURCE_ROOT; };
@@ -3930,7 +3933,6 @@
 		28D897DFA27CCC5A3933D952 /* Input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Input.h; path = ../../include/fltk3/Input.h; sourceTree = SOURCE_ROOT; };
 		11C999453D2BEBD3A5B32DA4 /* InputChoice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InputChoice.h; path = ../../include/fltk3/InputChoice.h; sourceTree = SOURCE_ROOT; };
 		B5CA37E08339E6D7820C0973 /* IntInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IntInput.h; path = ../../include/fltk3/IntInput.h; sourceTree = SOURCE_ROOT; };
-		60A217E0DC847E1DD7B44D49 /* JPEGImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JPEGImage.h; path = ../../include/fltk3/JPEGImage.h; sourceTree = SOURCE_ROOT; };
 		5A390823203566E8B1FB4B81 /* LightButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LightButton.h; path = ../../include/fltk3/LightButton.h; sourceTree = SOURCE_ROOT; };
 		D10E3F19DD8CC6A3FAA912AF /* LineDial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LineDial.h; path = ../../include/fltk3/LineDial.h; sourceTree = SOURCE_ROOT; };
 		6523340D0E47A3A4B3852435 /* math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = math.h; path = ../../include/fltk3/math.h; sourceTree = SOURCE_ROOT; };
@@ -3956,8 +3958,6 @@
 		C539C329532BE09B0422A23A /* PagedDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PagedDevice.h; path = ../../include/fltk3/PagedDevice.h; sourceTree = SOURCE_ROOT; };
 		AEF910125AE91654739457BF /* Pixmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Pixmap.h; path = ../../include/fltk3/Pixmap.h; sourceTree = SOURCE_ROOT; };
 		A5DB3592DA82366555A66B4A /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Plugin.h; path = ../../include/fltk3/Plugin.h; sourceTree = SOURCE_ROOT; };
-		25BEA28581A1A97EEA1014E2 /* PNGImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PNGImage.h; path = ../../include/fltk3/PNGImage.h; sourceTree = SOURCE_ROOT; };
-		EC95850E022AFDFC59E4EBC2 /* PNMImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PNMImage.h; path = ../../include/fltk3/PNMImage.h; sourceTree = SOURCE_ROOT; };
 		813FC8746075A74FEDAE447C /* Positioner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Positioner.h; path = ../../include/fltk3/Positioner.h; sourceTree = SOURCE_ROOT; };
 		6A0B5BF3C5ECFAF041951029 /* PostScript.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PostScript.h; path = ../../include/fltk3/PostScript.h; sourceTree = SOURCE_ROOT; };
 		A9B88BB6C6654424E37B8082 /* Preferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Preferences.h; path = ../../include/fltk3/Preferences.h; sourceTree = SOURCE_ROOT; };
@@ -4016,162 +4016,162 @@
 		8BD4A9C136E457CC92F9ADFE /* WizardGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WizardGroup.h; path = ../../include/fltk3/WizardGroup.h; sourceTree = SOURCE_ROOT; };
 		DF6994452C6FD170E9507C6D /* Wrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Wrapper.h; path = ../../include/fltk3/Wrapper.h; sourceTree = SOURCE_ROOT; };
 		059505668BA88697E40E6C32 /* x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = x.h; path = ../../include/fltk3/x.h; sourceTree = SOURCE_ROOT; };
+		2E1B408952EFBB79A46CDE69 /* Xutf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Xutf8.h; path = ../../include/fltk3/Xutf8.h; sourceTree = SOURCE_ROOT; };
 		9F6F453D846A6B7E8679FDAA /* XBMImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XBMImage.h; path = ../../include/fltk3/XBMImage.h; sourceTree = SOURCE_ROOT; };
 		0C163988CD45E6AB4710982F /* XPMImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XPMImage.h; path = ../../include/fltk3/XPMImage.h; sourceTree = SOURCE_ROOT; };
-		2E1B408952EFBB79A46CDE69 /* Xutf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Xutf8.h; path = ../../include/fltk3/Xutf8.h; sourceTree = SOURCE_ROOT; };
-		F6BB47B6B9E3180AB7C5F16D /* Fl_cocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Fl_cocoa.mm; path = ../../src/core/Fl_cocoa.mm; sourceTree = SOURCE_ROOT; };
-		B23CCB736CF9A2433827C3EE /* Fl_Native_File_Chooser_MAC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Fl_Native_File_Chooser_MAC.mm; path = ../../src/core/Fl_Native_File_Chooser_MAC.mm; sourceTree = SOURCE_ROOT; };
-		10A048C45D4667189C9F77EA /* Fl_Quartz_Printer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Fl_Quartz_Printer.mm; path = ../../src/core/Fl_Quartz_Printer.mm; sourceTree = SOURCE_ROOT; };
+		F6BB47B6B9E3180AB7C5F16D /* cocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = cocoa.mm; path = ../../src/fltk3/cocoa.mm; sourceTree = SOURCE_ROOT; };
+		B23CCB736CF9A2433827C3EE /* cocoaNativeFileChooser.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = cocoaNativeFileChooser.mm; path = ../../src/fltk3/cocoaNativeFileChooser.mm; sourceTree = SOURCE_ROOT; };
+		10A048C45D4667189C9F77EA /* cocoaQuartzPrinter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = cocoaQuartzPrinter.mm; path = ../../src/fltk3/cocoaQuartzPrinter.mm; sourceTree = SOURCE_ROOT; };
 		81045D024AA56D9CD81C23A2 /* run.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = run.cxx; path = ../../src/fltk3/run.cxx; sourceTree = SOURCE_ROOT; };
-		ECEA64F2B2C5C5186949AD76 /* Fl_Adjuster.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Adjuster.cxx; path = ../../src/core/Fl_Adjuster.cxx; sourceTree = SOURCE_ROOT; };
-		D68004A5D4D7878F2E22B59B /* Fl_Bitmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Bitmap.cxx; path = ../../src/core/Fl_Bitmap.cxx; sourceTree = SOURCE_ROOT; };
-		81608512CDA5C11B35A2B539 /* Fl_Box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Box.cxx; path = ../../src/core/Fl_Box.cxx; sourceTree = SOURCE_ROOT; };
-		5CE1FF6EF6F9500754C22170 /* Fl_Browser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Browser.cxx; path = ../../src/core/Fl_Browser.cxx; sourceTree = SOURCE_ROOT; };
-		2FC85E98AAFBF45C8EBBA1CC /* Fl_Browser_.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Browser_.cxx; path = ../../src/core/Fl_Browser_.cxx; sourceTree = SOURCE_ROOT; };
-		B89AE0F97A9095F4A064E6FF /* Fl_Browser_load.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Browser_load.cxx; path = ../../src/core/Fl_Browser_load.cxx; sourceTree = SOURCE_ROOT; };
-		70F960885035F13513E45EFD /* Fl_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Button.cxx; path = ../../src/core/Fl_Button.cxx; sourceTree = SOURCE_ROOT; };
-		392500313F9EDFBFE2786E57 /* Fl_Chart.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Chart.cxx; path = ../../src/core/Fl_Chart.cxx; sourceTree = SOURCE_ROOT; };
-		F6EC011E63665A01E72E52E7 /* Fl_Check_Browser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Check_Browser.cxx; path = ../../src/core/Fl_Check_Browser.cxx; sourceTree = SOURCE_ROOT; };
-		490C9DC52EF4532CC9795A6D /* Fl_Check_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Check_Button.cxx; path = ../../src/core/Fl_Check_Button.cxx; sourceTree = SOURCE_ROOT; };
-		6356BFF275FE7996D8F77F5C /* Fl_Choice.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Choice.cxx; path = ../../src/core/Fl_Choice.cxx; sourceTree = SOURCE_ROOT; };
-		1C4F7DBF0BD658A6D786280A /* Fl_Clock.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Clock.cxx; path = ../../src/core/Fl_Clock.cxx; sourceTree = SOURCE_ROOT; };
-		4CF353D8CC1FA86010629419 /* Fl_Color_Chooser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Color_Chooser.cxx; path = ../../src/core/Fl_Color_Chooser.cxx; sourceTree = SOURCE_ROOT; };
-		96D41530A69F4A84DBF7E11E /* Fl_Counter.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Counter.cxx; path = ../../src/core/Fl_Counter.cxx; sourceTree = SOURCE_ROOT; };
-		CB4EA8042D07755CEA64E9FB /* Fl_Device.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Device.cxx; path = ../../src/core/Fl_Device.cxx; sourceTree = SOURCE_ROOT; };
-		FDB4072264224B4391CAB607 /* Fl_Dial.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Dial.cxx; path = ../../src/core/Fl_Dial.cxx; sourceTree = SOURCE_ROOT; };
-		D65E879CEE1870B6B73853BC /* Fl_Double_Window.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Double_Window.cxx; path = ../../src/core/Fl_Double_Window.cxx; sourceTree = SOURCE_ROOT; };
-		31B32445C4ECC6487D814264 /* Fl_File_Browser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_File_Browser.cxx; path = ../../src/core/Fl_File_Browser.cxx; sourceTree = SOURCE_ROOT; };
-		E74C762F7266F6B35BA2394A /* Fl_File_Chooser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_File_Chooser.cxx; path = ../../src/core/Fl_File_Chooser.cxx; sourceTree = SOURCE_ROOT; };
-		A7770A7FB7C79371A3BFB46C /* Fl_File_Chooser2.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_File_Chooser2.cxx; path = ../../src/core/Fl_File_Chooser2.cxx; sourceTree = SOURCE_ROOT; };
-		19FA31AEDEFAC11C8EC5D035 /* Fl_File_Icon.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_File_Icon.cxx; path = ../../src/core/Fl_File_Icon.cxx; sourceTree = SOURCE_ROOT; };
-		D05F5EBC3B022A7C99F2DDC2 /* Fl_File_Input.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_File_Input.cxx; path = ../../src/core/Fl_File_Input.cxx; sourceTree = SOURCE_ROOT; };
-		A5952FB986701638B15F1B22 /* Fl_Group.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Group.cxx; path = ../../src/core/Fl_Group.cxx; sourceTree = SOURCE_ROOT; };
-		047B650C9F322D0CB49D48D6 /* Fl_Help_View.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Help_View.cxx; path = ../../src/core/Fl_Help_View.cxx; sourceTree = SOURCE_ROOT; };
-		E01E16F15C6443D98C32F5F6 /* Fl_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Image.cxx; path = ../../src/core/Fl_Image.cxx; sourceTree = SOURCE_ROOT; };
-		184F621088E304BDFD7A0384 /* Fl_Input.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Input.cxx; path = ../../src/core/Fl_Input.cxx; sourceTree = SOURCE_ROOT; };
-		A892461439BFF8FC2D538E50 /* Fl_Input_.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Input_.cxx; path = ../../src/core/Fl_Input_.cxx; sourceTree = SOURCE_ROOT; };
-		36C72097C9A86A33861ACD51 /* Fl_Light_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Light_Button.cxx; path = ../../src/core/Fl_Light_Button.cxx; sourceTree = SOURCE_ROOT; };
-		4672B51C8F8B9C0703D7EAA5 /* Fl_Menu.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu.cxx; path = ../../src/core/Fl_Menu.cxx; sourceTree = SOURCE_ROOT; };
-		DE9E57A22E45C3039D820566 /* Fl_Menu_.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_.cxx; path = ../../src/core/Fl_Menu_.cxx; sourceTree = SOURCE_ROOT; };
-		265C00BF9D9598D2A10BE42A /* Fl_Menu_Bar.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_Bar.cxx; path = ../../src/core/Fl_Menu_Bar.cxx; sourceTree = SOURCE_ROOT; };
-		58FD2064B2C854618D2E68DB /* Fl_Menu_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_Button.cxx; path = ../../src/core/Fl_Menu_Button.cxx; sourceTree = SOURCE_ROOT; };
-		CBE03F81CF8A43E9735AEFC9 /* Fl_Menu_Window.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_Window.cxx; path = ../../src/core/Fl_Menu_Window.cxx; sourceTree = SOURCE_ROOT; };
-		C649ABF1BD8B5FB41539FB5F /* Fl_Menu_add.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_add.cxx; path = ../../src/core/Fl_Menu_add.cxx; sourceTree = SOURCE_ROOT; };
-		25D17230FC589A55DA9C6F23 /* Fl_Menu_global.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_global.cxx; path = ../../src/core/Fl_Menu_global.cxx; sourceTree = SOURCE_ROOT; };
-		37D57C7D98BB88CE1A3BFC20 /* Fl_Multi_Label.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Multi_Label.cxx; path = ../../src/core/Fl_Multi_Label.cxx; sourceTree = SOURCE_ROOT; };
-		FC634C34D16F1DE6EF923847 /* Fl_Native_File_Chooser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Native_File_Chooser.cxx; path = ../../src/core/Fl_Native_File_Chooser.cxx; sourceTree = SOURCE_ROOT; };
-		CEF1A66A542A208607C52832 /* Fl_Overlay_Window.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Overlay_Window.cxx; path = ../../src/core/Fl_Overlay_Window.cxx; sourceTree = SOURCE_ROOT; };
-		0F0129FF3753E991F59B9FB5 /* Fl_Pack.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Pack.cxx; path = ../../src/core/Fl_Pack.cxx; sourceTree = SOURCE_ROOT; };
-		680EF039247E0C542AD802F6 /* Fl_Paged_Device.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Paged_Device.cxx; path = ../../src/core/Fl_Paged_Device.cxx; sourceTree = SOURCE_ROOT; };
-		9AEB93657A00F78B2046454D /* Fl_Pixmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Pixmap.cxx; path = ../../src/core/Fl_Pixmap.cxx; sourceTree = SOURCE_ROOT; };
-		9EB992B1957E27AE06A07426 /* Fl_Positioner.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Positioner.cxx; path = ../../src/core/Fl_Positioner.cxx; sourceTree = SOURCE_ROOT; };
-		53F2F9DED1C91758A21D0246 /* Fl_Printer.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Printer.cxx; path = ../../src/core/Fl_Printer.cxx; sourceTree = SOURCE_ROOT; };
-		596103743F0CE2A89B7B3FA5 /* Fl_Preferences.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Preferences.cxx; path = ../../src/core/Fl_Preferences.cxx; sourceTree = SOURCE_ROOT; };
-		B62169E8816659E5E6E4DD9F /* Fl_Progress.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Progress.cxx; path = ../../src/core/Fl_Progress.cxx; sourceTree = SOURCE_ROOT; };
-		F2E611B0C2D8C53DD06946BC /* Fl_Repeat_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Repeat_Button.cxx; path = ../../src/core/Fl_Repeat_Button.cxx; sourceTree = SOURCE_ROOT; };
-		69E296C029FB3078A82EE913 /* Fl_Return_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Return_Button.cxx; path = ../../src/core/Fl_Return_Button.cxx; sourceTree = SOURCE_ROOT; };
-		A5526E662D03F4C9647C13A4 /* Fl_Roller.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Roller.cxx; path = ../../src/core/Fl_Roller.cxx; sourceTree = SOURCE_ROOT; };
-		5DA33AF375B975EBBE824A96 /* Fl_Round_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Round_Button.cxx; path = ../../src/core/Fl_Round_Button.cxx; sourceTree = SOURCE_ROOT; };
-		135F7AE45CBDAA49D80BB12D /* Fl_Scroll.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Scroll.cxx; path = ../../src/core/Fl_Scroll.cxx; sourceTree = SOURCE_ROOT; };
-		6F7BEB35272214B6167B1FB8 /* Fl_Scrollbar.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Scrollbar.cxx; path = ../../src/core/Fl_Scrollbar.cxx; sourceTree = SOURCE_ROOT; };
-		8580401C9D38395ECAD127AC /* Fl_Shared_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Shared_Image.cxx; path = ../../src/core/Fl_Shared_Image.cxx; sourceTree = SOURCE_ROOT; };
-		17A03BA54D8D67397D8BDCEE /* Fl_Single_Window.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Single_Window.cxx; path = ../../src/core/Fl_Single_Window.cxx; sourceTree = SOURCE_ROOT; };
-		085FAF82201B9FD1927A8BAA /* Fl_Slider.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Slider.cxx; path = ../../src/core/Fl_Slider.cxx; sourceTree = SOURCE_ROOT; };
-		CAA3AD964456E0912791C783 /* Style.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Style.cxx; path = ../../src/core/Style.cxx; sourceTree = SOURCE_ROOT; };
-		43C12A4D372777B2307220CC /* Fl_Sys_Menu_Bar.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Sys_Menu_Bar.cxx; path = ../../src/core/Fl_Sys_Menu_Bar.cxx; sourceTree = SOURCE_ROOT; };
-		025842431942A90D06F5BCFA /* Fl_Table.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Table.cxx; path = ../../src/core/Fl_Table.cxx; sourceTree = SOURCE_ROOT; };
-		7097EA09B5B8FCFEEBE28CA8 /* Fl_Table_Row.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Table_Row.cxx; path = ../../src/core/Fl_Table_Row.cxx; sourceTree = SOURCE_ROOT; };
-		7712638143B8C0B51FF6A61B /* Fl_Tabs.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tabs.cxx; path = ../../src/core/Fl_Tabs.cxx; sourceTree = SOURCE_ROOT; };
-		8867A20B30D85F73D157D617 /* Fl_Text_Buffer.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Text_Buffer.cxx; path = ../../src/core/Fl_Text_Buffer.cxx; sourceTree = SOURCE_ROOT; };
-		E5E1DA87EC62BC799411CDB9 /* Fl_Text_Display.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Text_Display.cxx; path = ../../src/core/Fl_Text_Display.cxx; sourceTree = SOURCE_ROOT; };
-		5995AACC387B26DECEE88139 /* Fl_Text_Editor.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Text_Editor.cxx; path = ../../src/core/Fl_Text_Editor.cxx; sourceTree = SOURCE_ROOT; };
-		A3F6667DE920CB42ED6E95FC /* Fl_Tile.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tile.cxx; path = ../../src/core/Fl_Tile.cxx; sourceTree = SOURCE_ROOT; };
-		4C92BA7B6F3DA54449388F69 /* Fl_Tiled_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tiled_Image.cxx; path = ../../src/core/Fl_Tiled_Image.cxx; sourceTree = SOURCE_ROOT; };
-		22CA4A41B4BF6D6AF6A6F244 /* Fl_Tooltip.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tooltip.cxx; path = ../../src/core/Fl_Tooltip.cxx; sourceTree = SOURCE_ROOT; };
-		214492E971DD58A3EF8FEAA3 /* Fl_Tree.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tree.cxx; path = ../../src/core/Fl_Tree.cxx; sourceTree = SOURCE_ROOT; };
-		D9F29791281BE27706AB7E8E /* Fl_Tree_Item.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tree_Item.cxx; path = ../../src/core/Fl_Tree_Item.cxx; sourceTree = SOURCE_ROOT; };
-		D6CBFFFA62847DACFACE5284 /* Fl_Tree_Item_Array.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tree_Item_Array.cxx; path = ../../src/core/Fl_Tree_Item_Array.cxx; sourceTree = SOURCE_ROOT; };
-		CFFE37EE7360FD052E7B592D /* Fl_Tree_Prefs.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tree_Prefs.cxx; path = ../../src/core/Fl_Tree_Prefs.cxx; sourceTree = SOURCE_ROOT; };
-		35EB53B1A2D1EF0E37A4970E /* Fl_Valuator.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Valuator.cxx; path = ../../src/core/Fl_Valuator.cxx; sourceTree = SOURCE_ROOT; };
-		1685625EE3C5677F29D7D314 /* Fl_Value_Input.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Value_Input.cxx; path = ../../src/core/Fl_Value_Input.cxx; sourceTree = SOURCE_ROOT; };
-		7553A0E747824E627DB0DDE5 /* Fl_Value_Output.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Value_Output.cxx; path = ../../src/core/Fl_Value_Output.cxx; sourceTree = SOURCE_ROOT; };
-		07F5E789A6A94E38E46B9744 /* Fl_Value_Slider.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Value_Slider.cxx; path = ../../src/core/Fl_Value_Slider.cxx; sourceTree = SOURCE_ROOT; };
-		C5F5E189BBE256A698ADF418 /* Fl_Widget.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Widget.cxx; path = ../../src/core/Fl_Widget.cxx; sourceTree = SOURCE_ROOT; };
-		8E1A3A4FC6492F080AF48D54 /* Fl_Window.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Window.cxx; path = ../../src/core/Fl_Window.cxx; sourceTree = SOURCE_ROOT; };
-		7679F6CC5391C705D9B921DA /* Fl_Window_fullscreen.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Window_fullscreen.cxx; path = ../../src/core/Fl_Window_fullscreen.cxx; sourceTree = SOURCE_ROOT; };
-		B5E58AC3929D3ADCBE238301 /* Fl_Window_hotspot.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Window_hotspot.cxx; path = ../../src/core/Fl_Window_hotspot.cxx; sourceTree = SOURCE_ROOT; };
-		C34CF806FAE9E39DDFD23D3B /* Fl_Window_iconize.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Window_iconize.cxx; path = ../../src/core/Fl_Window_iconize.cxx; sourceTree = SOURCE_ROOT; };
-		A84F18440208B2AA809D2871 /* Fl_Wizard.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Wizard.cxx; path = ../../src/core/Fl_Wizard.cxx; sourceTree = SOURCE_ROOT; };
-		9A21D7EDE35664C4B0EDD969 /* Fl_XBM_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_XBM_Image.cxx; path = ../../src/core/Fl_XBM_Image.cxx; sourceTree = SOURCE_ROOT; };
-		302A3FA8AB59DE7E5255E28C /* Fl_XPM_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_XPM_Image.cxx; path = ../../src/core/Fl_XPM_Image.cxx; sourceTree = SOURCE_ROOT; };
-		671B96BA5D85D5C6EE31AB76 /* Fl_abort.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_abort.cxx; path = ../../src/core/Fl_abort.cxx; sourceTree = SOURCE_ROOT; };
-		1821AF479F52B67539CB0CF8 /* Fl_add_idle.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_add_idle.cxx; path = ../../src/core/Fl_add_idle.cxx; sourceTree = SOURCE_ROOT; };
-		8E5EB755BAF13FB15109FC0C /* Fl_arg.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_arg.cxx; path = ../../src/core/Fl_arg.cxx; sourceTree = SOURCE_ROOT; };
-		AA048ACBE220E831739595BD /* Fl_compose.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_compose.cxx; path = ../../src/core/Fl_compose.cxx; sourceTree = SOURCE_ROOT; };
-		44287148E62E709880C4EA41 /* Fl_display.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_display.cxx; path = ../../src/core/Fl_display.cxx; sourceTree = SOURCE_ROOT; };
-		A8DC358A8390A493A9A8AE55 /* Fl_get_key.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_get_key.cxx; path = ../../src/core/Fl_get_key.cxx; sourceTree = SOURCE_ROOT; };
-		FEADB63E5C237A827884C5C5 /* Fl_get_system_colors.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_get_system_colors.cxx; path = ../../src/core/Fl_get_system_colors.cxx; sourceTree = SOURCE_ROOT; };
-		76AA6E6C769FB157F8125874 /* Fl_grab.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_grab.cxx; path = ../../src/core/Fl_grab.cxx; sourceTree = SOURCE_ROOT; };
-		7FAC51832563F8B044E55B90 /* Fl_lock.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_lock.cxx; path = ../../src/core/Fl_lock.cxx; sourceTree = SOURCE_ROOT; };
-		013DBB50198366613C31E2A9 /* Fl_own_colormap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_own_colormap.cxx; path = ../../src/core/Fl_own_colormap.cxx; sourceTree = SOURCE_ROOT; };
-		1626800F2D2DF61E9E2468DD /* Fl_visual.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_visual.cxx; path = ../../src/core/Fl_visual.cxx; sourceTree = SOURCE_ROOT; };
-		F285310A7BD8D88F965104C8 /* Fl_x.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_x.cxx; path = ../../src/core/Fl_x.cxx; sourceTree = SOURCE_ROOT; };
-		04A6409B52D5A99617606460 /* filename_absolute.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_absolute.cxx; path = ../../src/core/filename_absolute.cxx; sourceTree = SOURCE_ROOT; };
-		F9F779F221E630EE4A837595 /* filename_expand.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_expand.cxx; path = ../../src/core/filename_expand.cxx; sourceTree = SOURCE_ROOT; };
-		210616B209B714E918A5CD3B /* filename_ext.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_ext.cxx; path = ../../src/core/filename_ext.cxx; sourceTree = SOURCE_ROOT; };
-		C07EC3AE77BDACC48058E2CA /* filename_isdir.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_isdir.cxx; path = ../../src/core/filename_isdir.cxx; sourceTree = SOURCE_ROOT; };
-		F08599CCE19B1640395AB3D0 /* filename_list.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_list.cxx; path = ../../src/core/filename_list.cxx; sourceTree = SOURCE_ROOT; };
-		AB171A4BF938A263E10FD0AD /* filename_match.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_match.cxx; path = ../../src/core/filename_match.cxx; sourceTree = SOURCE_ROOT; };
-		003AA96B03F174957585B088 /* filename_setext.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_setext.cxx; path = ../../src/core/filename_setext.cxx; sourceTree = SOURCE_ROOT; };
-		876B6A633C2E666DFC3119DD /* fl_arc.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_arc.cxx; path = ../../src/core/fl_arc.cxx; sourceTree = SOURCE_ROOT; };
-		E52CB16DD470DA22063934AA /* fl_arci.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_arci.cxx; path = ../../src/core/fl_arci.cxx; sourceTree = SOURCE_ROOT; };
-		60E7DD739D5DDBD766E2E30F /* fl_ask.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_ask.cxx; path = ../../src/core/fl_ask.cxx; sourceTree = SOURCE_ROOT; };
-		BC14596F24E305FE8CE39DAF /* fl_boxtype.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_boxtype.cxx; path = ../../src/core/fl_boxtype.cxx; sourceTree = SOURCE_ROOT; };
-		8B35EF2F662F706A2B46BDD7 /* fl_call_main.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_call_main.cxx; path = ../../src/core/fl_call_main.cxx; sourceTree = SOURCE_ROOT; };
-		02716487EA5E04A784DE5A34 /* fl_color.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_color.cxx; path = ../../src/core/fl_color.cxx; sourceTree = SOURCE_ROOT; };
-		C832D220ECF843E28FBAFED8 /* fl_cursor.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_cursor.cxx; path = ../../src/core/fl_cursor.cxx; sourceTree = SOURCE_ROOT; };
-		53EC964ED2E6DE4CBF80B206 /* fl_curve.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_curve.cxx; path = ../../src/core/fl_curve.cxx; sourceTree = SOURCE_ROOT; };
-		5557266E1C9D440172D5DF09 /* fl_diamond_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_diamond_box.cxx; path = ../../src/core/fl_diamond_box.cxx; sourceTree = SOURCE_ROOT; };
-		D1E006BE295C0F88A8E51304 /* fl_dnd.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_dnd.cxx; path = ../../src/core/fl_dnd.cxx; sourceTree = SOURCE_ROOT; };
-		3CF0F8B538EFFF602D6549B0 /* fl_draw.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_draw.cxx; path = ../../src/core/fl_draw.cxx; sourceTree = SOURCE_ROOT; };
-		F608DA64A6A66C65E7494BEA /* fl_draw_image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_draw_image.cxx; path = ../../src/core/fl_draw_image.cxx; sourceTree = SOURCE_ROOT; };
-		B6E2BA6C16F8BB32016C0FF0 /* fl_draw_pixmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_draw_pixmap.cxx; path = ../../src/core/fl_draw_pixmap.cxx; sourceTree = SOURCE_ROOT; };
-		0BEBF5A734CD2113BB6BDA08 /* fl_encoding_latin1.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_encoding_latin1.cxx; path = ../../src/core/fl_encoding_latin1.cxx; sourceTree = SOURCE_ROOT; };
-		C2BF9CDFAB8BFEF23768C51B /* fl_encoding_mac_roman.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_encoding_mac_roman.cxx; path = ../../src/core/fl_encoding_mac_roman.cxx; sourceTree = SOURCE_ROOT; };
-		0522E1C24273419B45EF1B4D /* fl_engraved_label.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_engraved_label.cxx; path = ../../src/core/fl_engraved_label.cxx; sourceTree = SOURCE_ROOT; };
-		1BF9BBF497705FBAD92797FF /* fl_file_dir.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_file_dir.cxx; path = ../../src/core/fl_file_dir.cxx; sourceTree = SOURCE_ROOT; };
-		1CFFB72AB54D6FECF9F0C89C /* fl_font.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_font.cxx; path = ../../src/core/fl_font.cxx; sourceTree = SOURCE_ROOT; };
-		E3303C9AB8380CF95C000D0C /* fl_gtk.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_gtk.cxx; path = ../../src/core/fl_gtk.cxx; sourceTree = SOURCE_ROOT; };
-		95F43A2D694782E841E90C3A /* fl_labeltype.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_labeltype.cxx; path = ../../src/core/fl_labeltype.cxx; sourceTree = SOURCE_ROOT; };
-		5FD374C4251D84126390EEE5 /* fl_line_style.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_line_style.cxx; path = ../../src/core/fl_line_style.cxx; sourceTree = SOURCE_ROOT; };
-		5515C9CC733AC9F36A9B7E06 /* fl_open_uri.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_open_uri.cxx; path = ../../src/core/fl_open_uri.cxx; sourceTree = SOURCE_ROOT; };
-		554EB8945D959B0EF565327A /* fl_oval_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_oval_box.cxx; path = ../../src/core/fl_oval_box.cxx; sourceTree = SOURCE_ROOT; };
-		5536CF5142F45E75898D00BA /* fl_overlay.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_overlay.cxx; path = ../../src/core/fl_overlay.cxx; sourceTree = SOURCE_ROOT; };
-		3132F0163EFDF4289F20DB50 /* fl_overlay_visual.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_overlay_visual.cxx; path = ../../src/core/fl_overlay_visual.cxx; sourceTree = SOURCE_ROOT; };
-		D9934C34F12FADA862D201D1 /* fl_plastic.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_plastic.cxx; path = ../../src/core/fl_plastic.cxx; sourceTree = SOURCE_ROOT; };
-		1FA85C8068154A53598C9B19 /* fl_read_image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_read_image.cxx; path = ../../src/core/fl_read_image.cxx; sourceTree = SOURCE_ROOT; };
-		82F1E1FCCD3708EA48A6FD1B /* fl_rect.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_rect.cxx; path = ../../src/core/fl_rect.cxx; sourceTree = SOURCE_ROOT; };
-		C791DFA1DA864C8105CA92D3 /* fl_round_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_round_box.cxx; path = ../../src/core/fl_round_box.cxx; sourceTree = SOURCE_ROOT; };
-		557E80414B985272F1C0F5BE /* fl_rounded_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_rounded_box.cxx; path = ../../src/core/fl_rounded_box.cxx; sourceTree = SOURCE_ROOT; };
-		0E08EA1CF945ADA843805A2C /* fl_scroll_area.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_scroll_area.cxx; path = ../../src/core/fl_scroll_area.cxx; sourceTree = SOURCE_ROOT; };
-		C7ED2C14E31F1142DDCAC057 /* fl_set_font.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_set_font.cxx; path = ../../src/core/fl_set_font.cxx; sourceTree = SOURCE_ROOT; };
-		22603052464D0ADEFA96A7E6 /* fl_set_fonts.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_set_fonts.cxx; path = ../../src/core/fl_set_fonts.cxx; sourceTree = SOURCE_ROOT; };
-		2C5EEC8910127EC66EEA73B1 /* fl_shadow_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_shadow_box.cxx; path = ../../src/core/fl_shadow_box.cxx; sourceTree = SOURCE_ROOT; };
-		BFCE21B11BD00816E2D65029 /* fl_shortcut.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_shortcut.cxx; path = ../../src/core/fl_shortcut.cxx; sourceTree = SOURCE_ROOT; };
-		76D6638ABB7D955E0B149360 /* fl_show_colormap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_show_colormap.cxx; path = ../../src/core/fl_show_colormap.cxx; sourceTree = SOURCE_ROOT; };
-		ECAFDF98E362617FA9E2B887 /* fl_symbols.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_symbols.cxx; path = ../../src/core/fl_symbols.cxx; sourceTree = SOURCE_ROOT; };
-		C82D09C9EB356BF14388A904 /* fl_utf8.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_utf8.cxx; path = ../../src/core/fl_utf8.cxx; sourceTree = SOURCE_ROOT; };
-		574878A10D223037009BD0DE /* fl_utf.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_utf.cxx; path = ../../src/core/fl_utf.cxx; sourceTree = SOURCE_ROOT; };
-		6C74D84D95E5167E6D41A606 /* fl_vertex.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_vertex.cxx; path = ../../src/core/fl_vertex.cxx; sourceTree = SOURCE_ROOT; };
-		2286DB222E1D5D78655B21BB /* numericsort.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = numericsort.cxx; path = ../../src/core/numericsort.cxx; sourceTree = SOURCE_ROOT; };
-		472AB3970C82CB496562F422 /* ps_image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ps_image.cxx; path = ../../src/core/ps_image.cxx; sourceTree = SOURCE_ROOT; };
-		1E2B1DAE628CEB38A5F0E604 /* scandir.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = scandir.cxx; path = ../../src/core/scandir.cxx; sourceTree = SOURCE_ROOT; };
-		4302C79C4558E1F4750879E4 /* screen_xywh.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = screen_xywh.cxx; path = ../../src/core/screen_xywh.cxx; sourceTree = SOURCE_ROOT; };
-		EF672C7C2929488ED55C8145 /* flstring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = flstring.c; path = ../../src/core/flstring.c; sourceTree = SOURCE_ROOT; };
-		4024031C45193E6173805457 /* vsnprintf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vsnprintf.c; path = ../../src/core/vsnprintf.c; sourceTree = SOURCE_ROOT; };
-		6A8D02403C9D3B785B0D8F30 /* case.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = case.c; path = ../../src/core/xutf8/case.c; sourceTree = SOURCE_ROOT; };
-		15064F3F45361B071125C187 /* is_right2left.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = is_right2left.c; path = ../../src/core/xutf8/is_right2left.c; sourceTree = SOURCE_ROOT; };
-		35196210FA39F50016C06ED2 /* is_spacing.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = is_spacing.c; path = ../../src/core/xutf8/is_spacing.c; sourceTree = SOURCE_ROOT; };
+		ECEA64F2B2C5C5186949AD76 /* Adjuster.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Adjuster.cxx; path = ../../src/fltk3/Adjuster.cxx; sourceTree = SOURCE_ROOT; };
+		D68004A5D4D7878F2E22B59B /* Bitmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Bitmap.cxx; path = ../../src/fltk3/Bitmap.cxx; sourceTree = SOURCE_ROOT; };
+		81608512CDA5C11B35A2B539 /* Box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Box.cxx; path = ../../src/fltk3/Box.cxx; sourceTree = SOURCE_ROOT; };
+		5CE1FF6EF6F9500754C22170 /* Browser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Browser.cxx; path = ../../src/fltk3/Browser.cxx; sourceTree = SOURCE_ROOT; };
+		2FC85E98AAFBF45C8EBBA1CC /* Browser_.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Browser_.cxx; path = ../../src/fltk3/Browser_.cxx; sourceTree = SOURCE_ROOT; };
+		B89AE0F97A9095F4A064E6FF /* Browser_load.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Browser_load.cxx; path = ../../src/fltk3/Browser_load.cxx; sourceTree = SOURCE_ROOT; };
+		70F960885035F13513E45EFD /* Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Button.cxx; path = ../../src/fltk3/Button.cxx; sourceTree = SOURCE_ROOT; };
+		392500313F9EDFBFE2786E57 /* Chart.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Chart.cxx; path = ../../src/fltk3/Chart.cxx; sourceTree = SOURCE_ROOT; };
+		F6EC011E63665A01E72E52E7 /* CheckBrowser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CheckBrowser.cxx; path = ../../src/fltk3/CheckBrowser.cxx; sourceTree = SOURCE_ROOT; };
+		490C9DC52EF4532CC9795A6D /* CheckButton.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CheckButton.cxx; path = ../../src/fltk3/CheckButton.cxx; sourceTree = SOURCE_ROOT; };
+		6356BFF275FE7996D8F77F5C /* Choice.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Choice.cxx; path = ../../src/fltk3/Choice.cxx; sourceTree = SOURCE_ROOT; };
+		1C4F7DBF0BD658A6D786280A /* Clock.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Clock.cxx; path = ../../src/fltk3/Clock.cxx; sourceTree = SOURCE_ROOT; };
+		4CF353D8CC1FA86010629419 /* ColorChooser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ColorChooser.cxx; path = ../../src/fltk3/ColorChooser.cxx; sourceTree = SOURCE_ROOT; };
+		96D41530A69F4A84DBF7E11E /* Counter.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Counter.cxx; path = ../../src/fltk3/Counter.cxx; sourceTree = SOURCE_ROOT; };
+		CB4EA8042D07755CEA64E9FB /* Device.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Device.cxx; path = ../../src/fltk3/Device.cxx; sourceTree = SOURCE_ROOT; };
+		FDB4072264224B4391CAB607 /* Dial.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Dial.cxx; path = ../../src/fltk3/Dial.cxx; sourceTree = SOURCE_ROOT; };
+		D65E879CEE1870B6B73853BC /* DoubleWindow.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DoubleWindow.cxx; path = ../../src/fltk3/DoubleWindow.cxx; sourceTree = SOURCE_ROOT; };
+		31B32445C4ECC6487D814264 /* FileBrowser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileBrowser.cxx; path = ../../src/fltk3/FileBrowser.cxx; sourceTree = SOURCE_ROOT; };
+		E74C762F7266F6B35BA2394A /* FileChooser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileChooser.cxx; path = ../../src/fltk3/FileChooser.cxx; sourceTree = SOURCE_ROOT; };
+		A7770A7FB7C79371A3BFB46C /* FileChooser2.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileChooser2.cxx; path = ../../src/fltk3/FileChooser2.cxx; sourceTree = SOURCE_ROOT; };
+		19FA31AEDEFAC11C8EC5D035 /* FileIcon.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileIcon.cxx; path = ../../src/fltk3/FileIcon.cxx; sourceTree = SOURCE_ROOT; };
+		D05F5EBC3B022A7C99F2DDC2 /* FileInput.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileInput.cxx; path = ../../src/fltk3/FileInput.cxx; sourceTree = SOURCE_ROOT; };
+		A5952FB986701638B15F1B22 /* Group.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Group.cxx; path = ../../src/fltk3/Group.cxx; sourceTree = SOURCE_ROOT; };
+		047B650C9F322D0CB49D48D6 /* HelpView.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = HelpView.cxx; path = ../../src/fltk3/HelpView.cxx; sourceTree = SOURCE_ROOT; };
+		E01E16F15C6443D98C32F5F6 /* Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Image.cxx; path = ../../src/fltk3/Image.cxx; sourceTree = SOURCE_ROOT; };
+		184F621088E304BDFD7A0384 /* Input.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Input.cxx; path = ../../src/fltk3/Input.cxx; sourceTree = SOURCE_ROOT; };
+		A892461439BFF8FC2D538E50 /* Input_.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Input_.cxx; path = ../../src/fltk3/Input_.cxx; sourceTree = SOURCE_ROOT; };
+		36C72097C9A86A33861ACD51 /* LightButton.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LightButton.cxx; path = ../../src/fltk3/LightButton.cxx; sourceTree = SOURCE_ROOT; };
+		4672B51C8F8B9C0703D7EAA5 /* Menu.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Menu.cxx; path = ../../src/fltk3/Menu.cxx; sourceTree = SOURCE_ROOT; };
+		DE9E57A22E45C3039D820566 /* Menu_.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Menu_.cxx; path = ../../src/fltk3/Menu_.cxx; sourceTree = SOURCE_ROOT; };
+		265C00BF9D9598D2A10BE42A /* MenuBar.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MenuBar.cxx; path = ../../src/fltk3/MenuBar.cxx; sourceTree = SOURCE_ROOT; };
+		58FD2064B2C854618D2E68DB /* MenuButton.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MenuButton.cxx; path = ../../src/fltk3/MenuButton.cxx; sourceTree = SOURCE_ROOT; };
+		CBE03F81CF8A43E9735AEFC9 /* MenuWindow.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MenuWindow.cxx; path = ../../src/fltk3/MenuWindow.cxx; sourceTree = SOURCE_ROOT; };
+		C649ABF1BD8B5FB41539FB5F /* Menu_add.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Menu_add.cxx; path = ../../src/fltk3/Menu_add.cxx; sourceTree = SOURCE_ROOT; };
+		25D17230FC589A55DA9C6F23 /* Menu_global.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Menu_global.cxx; path = ../../src/fltk3/Menu_global.cxx; sourceTree = SOURCE_ROOT; };
+		37D57C7D98BB88CE1A3BFC20 /* MultiLabel.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MultiLabel.cxx; path = ../../src/fltk3/MultiLabel.cxx; sourceTree = SOURCE_ROOT; };
+		FC634C34D16F1DE6EF923847 /* NativeFileChooser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NativeFileChooser.cxx; path = ../../src/fltk3/NativeFileChooser.cxx; sourceTree = SOURCE_ROOT; };
+		CEF1A66A542A208607C52832 /* OverlayWindow.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OverlayWindow.cxx; path = ../../src/fltk3/OverlayWindow.cxx; sourceTree = SOURCE_ROOT; };
+		0F0129FF3753E991F59B9FB5 /* PackedGroup.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PackedGroup.cxx; path = ../../src/fltk3/PackedGroup.cxx; sourceTree = SOURCE_ROOT; };
+		680EF039247E0C542AD802F6 /* PagedDevice.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PagedDevice.cxx; path = ../../src/fltk3/PagedDevice.cxx; sourceTree = SOURCE_ROOT; };
+		9AEB93657A00F78B2046454D /* Pixmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Pixmap.cxx; path = ../../src/fltk3/Pixmap.cxx; sourceTree = SOURCE_ROOT; };
+		9EB992B1957E27AE06A07426 /* Positioner.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Positioner.cxx; path = ../../src/fltk3/Positioner.cxx; sourceTree = SOURCE_ROOT; };
+		53F2F9DED1C91758A21D0246 /* Printer.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Printer.cxx; path = ../../src/fltk3/Printer.cxx; sourceTree = SOURCE_ROOT; };
+		596103743F0CE2A89B7B3FA5 /* Preferences.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Preferences.cxx; path = ../../src/fltk3/Preferences.cxx; sourceTree = SOURCE_ROOT; };
+		B62169E8816659E5E6E4DD9F /* Progress.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Progress.cxx; path = ../../src/fltk3/Progress.cxx; sourceTree = SOURCE_ROOT; };
+		F2E611B0C2D8C53DD06946BC /* RepeatButton.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RepeatButton.cxx; path = ../../src/fltk3/RepeatButton.cxx; sourceTree = SOURCE_ROOT; };
+		69E296C029FB3078A82EE913 /* ReturnButton.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ReturnButton.cxx; path = ../../src/fltk3/ReturnButton.cxx; sourceTree = SOURCE_ROOT; };
+		A5526E662D03F4C9647C13A4 /* Roller.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Roller.cxx; path = ../../src/fltk3/Roller.cxx; sourceTree = SOURCE_ROOT; };
+		5DA33AF375B975EBBE824A96 /* RoundButton.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RoundButton.cxx; path = ../../src/fltk3/RoundButton.cxx; sourceTree = SOURCE_ROOT; };
+		135F7AE45CBDAA49D80BB12D /* ScrollGroup.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScrollGroup.cxx; path = ../../src/fltk3/ScrollGroup.cxx; sourceTree = SOURCE_ROOT; };
+		6F7BEB35272214B6167B1FB8 /* Scrollbar.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Scrollbar.cxx; path = ../../src/fltk3/Scrollbar.cxx; sourceTree = SOURCE_ROOT; };
+		8580401C9D38395ECAD127AC /* SharedImage.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SharedImage.cxx; path = ../../src/fltk3/SharedImage.cxx; sourceTree = SOURCE_ROOT; };
+		17A03BA54D8D67397D8BDCEE /* SingleWindow.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SingleWindow.cxx; path = ../../src/fltk3/SingleWindow.cxx; sourceTree = SOURCE_ROOT; };
+		085FAF82201B9FD1927A8BAA /* Slider.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Slider.cxx; path = ../../src/fltk3/Slider.cxx; sourceTree = SOURCE_ROOT; };
+		CAA3AD964456E0912791C783 /* Style.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Style.cxx; path = ../../src/fltk3/Style.cxx; sourceTree = SOURCE_ROOT; };
+		43C12A4D372777B2307220CC /* SysMenuBar.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SysMenuBar.cxx; path = ../../src/fltk3/SysMenuBar.cxx; sourceTree = SOURCE_ROOT; };
+		025842431942A90D06F5BCFA /* Table.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Table.cxx; path = ../../src/fltk3/Table.cxx; sourceTree = SOURCE_ROOT; };
+		7097EA09B5B8FCFEEBE28CA8 /* TableRow.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TableRow.cxx; path = ../../src/fltk3/TableRow.cxx; sourceTree = SOURCE_ROOT; };
+		7712638143B8C0B51FF6A61B /* TabGroup.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TabGroup.cxx; path = ../../src/fltk3/TabGroup.cxx; sourceTree = SOURCE_ROOT; };
+		8867A20B30D85F73D157D617 /* TextBuffer.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TextBuffer.cxx; path = ../../src/fltk3/TextBuffer.cxx; sourceTree = SOURCE_ROOT; };
+		E5E1DA87EC62BC799411CDB9 /* TextDisplay.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TextDisplay.cxx; path = ../../src/fltk3/TextDisplay.cxx; sourceTree = SOURCE_ROOT; };
+		5995AACC387B26DECEE88139 /* TextEditor.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TextEditor.cxx; path = ../../src/fltk3/TextEditor.cxx; sourceTree = SOURCE_ROOT; };
+		A3F6667DE920CB42ED6E95FC /* TiledGroup.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TiledGroup.cxx; path = ../../src/fltk3/TiledGroup.cxx; sourceTree = SOURCE_ROOT; };
+		4C92BA7B6F3DA54449388F69 /* TiledImage.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TiledImage.cxx; path = ../../src/fltk3/TiledImage.cxx; sourceTree = SOURCE_ROOT; };
+		22CA4A41B4BF6D6AF6A6F244 /* Tooltip.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Tooltip.cxx; path = ../../src/fltk3/Tooltip.cxx; sourceTree = SOURCE_ROOT; };
+		214492E971DD58A3EF8FEAA3 /* Tree.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Tree.cxx; path = ../../src/fltk3/Tree.cxx; sourceTree = SOURCE_ROOT; };
+		D9F29791281BE27706AB7E8E /* TreeItem.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TreeItem.cxx; path = ../../src/fltk3/TreeItem.cxx; sourceTree = SOURCE_ROOT; };
+		D6CBFFFA62847DACFACE5284 /* TreeItemArray.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TreeItemArray.cxx; path = ../../src/fltk3/TreeItemArray.cxx; sourceTree = SOURCE_ROOT; };
+		CFFE37EE7360FD052E7B592D /* TreePrefs.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TreePrefs.cxx; path = ../../src/fltk3/TreePrefs.cxx; sourceTree = SOURCE_ROOT; };
+		35EB53B1A2D1EF0E37A4970E /* Valuator.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Valuator.cxx; path = ../../src/fltk3/Valuator.cxx; sourceTree = SOURCE_ROOT; };
+		1685625EE3C5677F29D7D314 /* ValueInput.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ValueInput.cxx; path = ../../src/fltk3/ValueInput.cxx; sourceTree = SOURCE_ROOT; };
+		7553A0E747824E627DB0DDE5 /* ValueOutput.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ValueOutput.cxx; path = ../../src/fltk3/ValueOutput.cxx; sourceTree = SOURCE_ROOT; };
+		07F5E789A6A94E38E46B9744 /* ValueSlider.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ValueSlider.cxx; path = ../../src/fltk3/ValueSlider.cxx; sourceTree = SOURCE_ROOT; };
+		C5F5E189BBE256A698ADF418 /* Widget.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Widget.cxx; path = ../../src/fltk3/Widget.cxx; sourceTree = SOURCE_ROOT; };
+		8E1A3A4FC6492F080AF48D54 /* Window.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Window.cxx; path = ../../src/fltk3/Window.cxx; sourceTree = SOURCE_ROOT; };
+		7679F6CC5391C705D9B921DA /* Window_fullscreen.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Window_fullscreen.cxx; path = ../../src/fltk3/Window_fullscreen.cxx; sourceTree = SOURCE_ROOT; };
+		B5E58AC3929D3ADCBE238301 /* Window_hotspot.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Window_hotspot.cxx; path = ../../src/fltk3/Window_hotspot.cxx; sourceTree = SOURCE_ROOT; };
+		C34CF806FAE9E39DDFD23D3B /* Window_iconize.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Window_iconize.cxx; path = ../../src/fltk3/Window_iconize.cxx; sourceTree = SOURCE_ROOT; };
+		A84F18440208B2AA809D2871 /* Wizard.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Wizard.cxx; path = ../../src/fltk3/Wizard.cxx; sourceTree = SOURCE_ROOT; };
+		9A21D7EDE35664C4B0EDD969 /* XBMImage.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = XBMImage.cxx; path = ../../src/fltk3/XBMImage.cxx; sourceTree = SOURCE_ROOT; };
+		302A3FA8AB59DE7E5255E28C /* XPMImage.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = XPMImage.cxx; path = ../../src/fltk3/XPMImage.cxx; sourceTree = SOURCE_ROOT; };
+		671B96BA5D85D5C6EE31AB76 /* abort.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = abort.cxx; path = ../../src/fltk3/abort.cxx; sourceTree = SOURCE_ROOT; };
+		1821AF479F52B67539CB0CF8 /* add_idle.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = add_idle.cxx; path = ../../src/fltk3/add_idle.cxx; sourceTree = SOURCE_ROOT; };
+		8E5EB755BAF13FB15109FC0C /* arg.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = arg.cxx; path = ../../src/fltk3/arg.cxx; sourceTree = SOURCE_ROOT; };
+		AA048ACBE220E831739595BD /* compose.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = compose.cxx; path = ../../src/fltk3/compose.cxx; sourceTree = SOURCE_ROOT; };
+		44287148E62E709880C4EA41 /* display.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = display.cxx; path = ../../src/fltk3/display.cxx; sourceTree = SOURCE_ROOT; };
+		A8DC358A8390A493A9A8AE55 /* get_key.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = get_key.cxx; path = ../../src/fltk3/get_key.cxx; sourceTree = SOURCE_ROOT; };
+		FEADB63E5C237A827884C5C5 /* get_system_colors.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = get_system_colors.cxx; path = ../../src/fltk3/get_system_colors.cxx; sourceTree = SOURCE_ROOT; };
+		76AA6E6C769FB157F8125874 /* grab.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = grab.cxx; path = ../../src/fltk3/grab.cxx; sourceTree = SOURCE_ROOT; };
+		7FAC51832563F8B044E55B90 /* lock.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lock.cxx; path = ../../src/fltk3/lock.cxx; sourceTree = SOURCE_ROOT; };
+		013DBB50198366613C31E2A9 /* own_colormap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = own_colormap.cxx; path = ../../src/fltk3/own_colormap.cxx; sourceTree = SOURCE_ROOT; };
+		1626800F2D2DF61E9E2468DD /* visual.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = visual.cxx; path = ../../src/fltk3/visual.cxx; sourceTree = SOURCE_ROOT; };
+		F285310A7BD8D88F965104C8 /* x11.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = x11.cxx; path = ../../src/fltk3/x11.cxx; sourceTree = SOURCE_ROOT; };
+		04A6409B52D5A99617606460 /* filename_absolute.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_absolute.cxx; path = ../../src/fltk3/filename_absolute.cxx; sourceTree = SOURCE_ROOT; };
+		F9F779F221E630EE4A837595 /* filename_expand.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_expand.cxx; path = ../../src/fltk3/filename_expand.cxx; sourceTree = SOURCE_ROOT; };
+		210616B209B714E918A5CD3B /* filename_ext.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_ext.cxx; path = ../../src/fltk3/filename_ext.cxx; sourceTree = SOURCE_ROOT; };
+		C07EC3AE77BDACC48058E2CA /* filename_isdir.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_isdir.cxx; path = ../../src/fltk3/filename_isdir.cxx; sourceTree = SOURCE_ROOT; };
+		F08599CCE19B1640395AB3D0 /* filename_list.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_list.cxx; path = ../../src/fltk3/filename_list.cxx; sourceTree = SOURCE_ROOT; };
+		AB171A4BF938A263E10FD0AD /* filename_match.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_match.cxx; path = ../../src/fltk3/filename_match.cxx; sourceTree = SOURCE_ROOT; };
+		003AA96B03F174957585B088 /* filename_setext.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_setext.cxx; path = ../../src/fltk3/filename_setext.cxx; sourceTree = SOURCE_ROOT; };
+		876B6A633C2E666DFC3119DD /* arc.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = arc.cxx; path = ../../src/fltk3/arc.cxx; sourceTree = SOURCE_ROOT; };
+		E52CB16DD470DA22063934AA /* arci.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = arci.cxx; path = ../../src/fltk3/arci.cxx; sourceTree = SOURCE_ROOT; };
+		60E7DD739D5DDBD766E2E30F /* ask.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ask.cxx; path = ../../src/fltk3/ask.cxx; sourceTree = SOURCE_ROOT; };
+		BC14596F24E305FE8CE39DAF /* boxtype.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = boxtype.cxx; path = ../../src/fltk3/boxtype.cxx; sourceTree = SOURCE_ROOT; };
+		8B35EF2F662F706A2B46BDD7 /* call_main.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = call_main.cxx; path = ../../src/fltk3/call_main.cxx; sourceTree = SOURCE_ROOT; };
+		02716487EA5E04A784DE5A34 /* color.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = color.cxx; path = ../../src/fltk3/color.cxx; sourceTree = SOURCE_ROOT; };
+		C832D220ECF843E28FBAFED8 /* cursor.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cursor.cxx; path = ../../src/fltk3/cursor.cxx; sourceTree = SOURCE_ROOT; };
+		53EC964ED2E6DE4CBF80B206 /* curve.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = curve.cxx; path = ../../src/fltk3/curve.cxx; sourceTree = SOURCE_ROOT; };
+		5557266E1C9D440172D5DF09 /* diamond_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = diamond_box.cxx; path = ../../src/fltk3/diamond_box.cxx; sourceTree = SOURCE_ROOT; };
+		D1E006BE295C0F88A8E51304 /* dnd.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dnd.cxx; path = ../../src/fltk3/dnd.cxx; sourceTree = SOURCE_ROOT; };
+		3CF0F8B538EFFF602D6549B0 /* draw.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = draw.cxx; path = ../../src/fltk3/draw.cxx; sourceTree = SOURCE_ROOT; };
+		F608DA64A6A66C65E7494BEA /* draw_image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = draw_image.cxx; path = ../../src/fltk3/draw_image.cxx; sourceTree = SOURCE_ROOT; };
+		B6E2BA6C16F8BB32016C0FF0 /* draw_pixmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = draw_pixmap.cxx; path = ../../src/fltk3/draw_pixmap.cxx; sourceTree = SOURCE_ROOT; };
+		0BEBF5A734CD2113BB6BDA08 /* encoding_latin1.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = encoding_latin1.cxx; path = ../../src/fltk3/encoding_latin1.cxx; sourceTree = SOURCE_ROOT; };
+		C2BF9CDFAB8BFEF23768C51B /* encoding_mac_roman.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = encoding_mac_roman.cxx; path = ../../src/fltk3/encoding_mac_roman.cxx; sourceTree = SOURCE_ROOT; };
+		0522E1C24273419B45EF1B4D /* engraved_label.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = engraved_label.cxx; path = ../../src/fltk3/engraved_label.cxx; sourceTree = SOURCE_ROOT; };
+		1BF9BBF497705FBAD92797FF /* file_dir.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = file_dir.cxx; path = ../../src/fltk3/file_dir.cxx; sourceTree = SOURCE_ROOT; };
+		1CFFB72AB54D6FECF9F0C89C /* font.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = font.cxx; path = ../../src/fltk3/font.cxx; sourceTree = SOURCE_ROOT; };
+		E3303C9AB8380CF95C000D0C /* gtk.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gtk.cxx; path = ../../src/fltk3/gtk.cxx; sourceTree = SOURCE_ROOT; };
+		95F43A2D694782E841E90C3A /* labeltype.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = labeltype.cxx; path = ../../src/fltk3/labeltype.cxx; sourceTree = SOURCE_ROOT; };
+		5FD374C4251D84126390EEE5 /* line_style.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = line_style.cxx; path = ../../src/fltk3/line_style.cxx; sourceTree = SOURCE_ROOT; };
+		5515C9CC733AC9F36A9B7E06 /* open_uri.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = open_uri.cxx; path = ../../src/fltk3/open_uri.cxx; sourceTree = SOURCE_ROOT; };
+		554EB8945D959B0EF565327A /* oval_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = oval_box.cxx; path = ../../src/fltk3/oval_box.cxx; sourceTree = SOURCE_ROOT; };
+		5536CF5142F45E75898D00BA /* overlay.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = overlay.cxx; path = ../../src/fltk3/overlay.cxx; sourceTree = SOURCE_ROOT; };
+		3132F0163EFDF4289F20DB50 /* overlay_visual.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = overlay_visual.cxx; path = ../../src/fltk3/overlay_visual.cxx; sourceTree = SOURCE_ROOT; };
+		D9934C34F12FADA862D201D1 /* plastic.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = plastic.cxx; path = ../../src/fltk3/plastic.cxx; sourceTree = SOURCE_ROOT; };
+		1FA85C8068154A53598C9B19 /* read_image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = read_image.cxx; path = ../../src/fltk3/read_image.cxx; sourceTree = SOURCE_ROOT; };
+		82F1E1FCCD3708EA48A6FD1B /* rect.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rect.cxx; path = ../../src/fltk3/rect.cxx; sourceTree = SOURCE_ROOT; };
+		C791DFA1DA864C8105CA92D3 /* round_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = round_box.cxx; path = ../../src/fltk3/round_box.cxx; sourceTree = SOURCE_ROOT; };
+		557E80414B985272F1C0F5BE /* rounded_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rounded_box.cxx; path = ../../src/fltk3/rounded_box.cxx; sourceTree = SOURCE_ROOT; };
+		0E08EA1CF945ADA843805A2C /* scroll_area.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = scroll_area.cxx; path = ../../src/fltk3/scroll_area.cxx; sourceTree = SOURCE_ROOT; };
+		C7ED2C14E31F1142DDCAC057 /* set_font.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = set_font.cxx; path = ../../src/fltk3/set_font.cxx; sourceTree = SOURCE_ROOT; };
+		22603052464D0ADEFA96A7E6 /* set_fonts.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = set_fonts.cxx; path = ../../src/fltk3/set_fonts.cxx; sourceTree = SOURCE_ROOT; };
+		2C5EEC8910127EC66EEA73B1 /* shadow_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = shadow_box.cxx; path = ../../src/fltk3/shadow_box.cxx; sourceTree = SOURCE_ROOT; };
+		BFCE21B11BD00816E2D65029 /* shortcut.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = shortcut.cxx; path = ../../src/fltk3/shortcut.cxx; sourceTree = SOURCE_ROOT; };
+		76D6638ABB7D955E0B149360 /* show_colormap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = show_colormap.cxx; path = ../../src/fltk3/show_colormap.cxx; sourceTree = SOURCE_ROOT; };
+		ECAFDF98E362617FA9E2B887 /* symbols.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = symbols.cxx; path = ../../src/fltk3/symbols.cxx; sourceTree = SOURCE_ROOT; };
+		C82D09C9EB356BF14388A904 /* utf8.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8.cxx; path = ../../src/fltk3/utf8.cxx; sourceTree = SOURCE_ROOT; };
+		574878A10D223037009BD0DE /* utf.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf.cxx; path = ../../src/fltk3/utf.cxx; sourceTree = SOURCE_ROOT; };
+		6C74D84D95E5167E6D41A606 /* vertex.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = vertex.cxx; path = ../../src/fltk3/vertex.cxx; sourceTree = SOURCE_ROOT; };
+		2286DB222E1D5D78655B21BB /* numericsort.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = numericsort.cxx; path = ../../src/fltk3/numericsort.cxx; sourceTree = SOURCE_ROOT; };
+		472AB3970C82CB496562F422 /* ps_image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ps_image.cxx; path = ../../src/fltk3/ps_image.cxx; sourceTree = SOURCE_ROOT; };
+		1E2B1DAE628CEB38A5F0E604 /* scandir.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = scandir.cxx; path = ../../src/fltk3/scandir.cxx; sourceTree = SOURCE_ROOT; };
+		4302C79C4558E1F4750879E4 /* screen_xywh.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = screen_xywh.cxx; path = ../../src/fltk3/screen_xywh.cxx; sourceTree = SOURCE_ROOT; };
+		EF672C7C2929488ED55C8145 /* flstring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = flstring.c; path = ../../src/fltk3/flstring.c; sourceTree = SOURCE_ROOT; };
+		4024031C45193E6173805457 /* vsnprintf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vsnprintf.c; path = ../../src/fltk3/vsnprintf.c; sourceTree = SOURCE_ROOT; };
+		6A8D02403C9D3B785B0D8F30 /* case.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = case.c; path = ../../src/fltk3/xutf8/case.c; sourceTree = SOURCE_ROOT; };
+		15064F3F45361B071125C187 /* is_right2left.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = is_right2left.c; path = ../../src/fltk3/xutf8/is_right2left.c; sourceTree = SOURCE_ROOT; };
+		35196210FA39F50016C06ED2 /* is_spacing.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = is_spacing.c; path = ../../src/fltk3/xutf8/is_spacing.c; sourceTree = SOURCE_ROOT; };
 		14F66311E977D66CE29024C3 /* Cocoa.framework */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; };
 		86C380FE76A739F296A44961 /* fltk3.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = fltk3.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		CED790200D16A60047341619 /* all.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = all.h; path = ../../include/fltk3gl/all.h; sourceTree = SOURCE_ROOT; };
@@ -4197,14 +4197,22 @@
 		74F320856CA55C5B27D76923 /* OpenGL.framework */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = SDKs/MacOSX10.7.sdk/System/Library/Frameworks/OpenGL.framework; sourceTree = DEVELOPER_DIR; };
 		39E229DEF1CA3739A0890F43 /* ApplicationServices.framework */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = SDKs/MacOSX10.7.sdk/System/Library/Frameworks/ApplicationServices.framework; sourceTree = DEVELOPER_DIR; };
 		47405B558C14400ABA410AF3 /* fltk3gl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = fltk3gl.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		BEBF424874FF4284B7383470 /* Fl_BMP_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_BMP_Image.cxx; path = ../../src/core/Fl_BMP_Image.cxx; sourceTree = SOURCE_ROOT; };
-		7655FB1C9C0EEA276E0C6765 /* Fl_File_Icon2.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_File_Icon2.cxx; path = ../../src/core/Fl_File_Icon2.cxx; sourceTree = SOURCE_ROOT; };
-		CFAC1FAE7DBA77895E2BC5E9 /* Fl_GIF_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_GIF_Image.cxx; path = ../../src/core/Fl_GIF_Image.cxx; sourceTree = SOURCE_ROOT; };
-		0EDA91FFA01CB06D2CD72D46 /* Fl_Help_Dialog.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Help_Dialog.cxx; path = ../../src/core/Fl_Help_Dialog.cxx; sourceTree = SOURCE_ROOT; };
-		771C095FF2AE4FFCACA213AB /* Fl_JPEG_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_JPEG_Image.cxx; path = ../../src/core/Fl_JPEG_Image.cxx; sourceTree = SOURCE_ROOT; };
-		E1BECD1D14488DF25469A00E /* Fl_PNG_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_PNG_Image.cxx; path = ../../src/core/Fl_PNG_Image.cxx; sourceTree = SOURCE_ROOT; };
-		948DEE29F3A36A2E578DD9C0 /* Fl_PNM_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_PNM_Image.cxx; path = ../../src/core/Fl_PNM_Image.cxx; sourceTree = SOURCE_ROOT; };
-		6ADD9C72DA642E9780529588 /* fl_images_core.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_images_core.cxx; path = ../../src/core/fl_images_core.cxx; sourceTree = SOURCE_ROOT; };
+		1010B13DA886270EE16E3514 /* all.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = all.h; path = ../../include/fltk3images/all.h; sourceTree = SOURCE_ROOT; };
+		2C2435D9DCE9D126983C81F3 /* fltk3images.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fltk3images.h; path = ../../include/fltk3images/fltk3images.h; sourceTree = SOURCE_ROOT; };
+		5B9A35BBCCC105E2F86DBDA1 /* BMPImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BMPImage.h; path = ../../include/fltk3images/BMPImage.h; sourceTree = SOURCE_ROOT; };
+		605121E099731EF9977E11C8 /* GIFImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GIFImage.h; path = ../../include/fltk3images/GIFImage.h; sourceTree = SOURCE_ROOT; };
+		0925F19306CD3458397661F3 /* HelpDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HelpDialog.h; path = ../../include/fltk3images/HelpDialog.h; sourceTree = SOURCE_ROOT; };
+		60A217E0DC847E1DD7B44D49 /* JPEGImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JPEGImage.h; path = ../../include/fltk3images/JPEGImage.h; sourceTree = SOURCE_ROOT; };
+		25BEA28581A1A97EEA1014E2 /* PNGImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PNGImage.h; path = ../../include/fltk3images/PNGImage.h; sourceTree = SOURCE_ROOT; };
+		EC95850E022AFDFC59E4EBC2 /* PNMImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PNMImage.h; path = ../../include/fltk3images/PNMImage.h; sourceTree = SOURCE_ROOT; };
+		BEBF424874FF4284B7383470 /* BMPImage.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BMPImage.cxx; path = ../../src/fltk3images/BMPImage.cxx; sourceTree = SOURCE_ROOT; };
+		7655FB1C9C0EEA276E0C6765 /* FileIcon2.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileIcon2.cxx; path = ../../src/fltk3images/FileIcon2.cxx; sourceTree = SOURCE_ROOT; };
+		CFAC1FAE7DBA77895E2BC5E9 /* GIFImage.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GIFImage.cxx; path = ../../src/fltk3images/GIFImage.cxx; sourceTree = SOURCE_ROOT; };
+		0EDA91FFA01CB06D2CD72D46 /* HelpDialog.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = HelpDialog.cxx; path = ../../src/fltk3images/HelpDialog.cxx; sourceTree = SOURCE_ROOT; };
+		6ADD9C72DA642E9780529588 /* images_core.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = images_core.cxx; path = ../../src/fltk3images/images_core.cxx; sourceTree = SOURCE_ROOT; };
+		771C095FF2AE4FFCACA213AB /* JPEGImage.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JPEGImage.cxx; path = ../../src/fltk3images/JPEGImage.cxx; sourceTree = SOURCE_ROOT; };
+		E1BECD1D14488DF25469A00E /* PNGImage.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PNGImage.cxx; path = ../../src/fltk3images/PNGImage.cxx; sourceTree = SOURCE_ROOT; };
+		948DEE29F3A36A2E578DD9C0 /* PNMImage.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PNMImage.cxx; path = ../../src/fltk3images/PNMImage.cxx; sourceTree = SOURCE_ROOT; };
 		BF7522F0908E6250B67C2110 /* fltk3images.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = fltk3images.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		6B712BE1A8794707CD95C26F /* png.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = png.c; path = ../../src/fltk3png/png.c; sourceTree = SOURCE_ROOT; };
 		1773D73E34DF0D8632576CC2 /* pngerror.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngerror.c; path = ../../src/fltk3png/pngerror.c; sourceTree = SOURCE_ROOT; };
@@ -5303,10 +5311,11 @@
 		C2F00625A4037FEE3D17629D /* Headers */ = {
 			isa = PBXGroup;
 			children = (
+				DDEC0AB0E55CB75CFA5FD9DC /* all.h */,
+				15B1A08E928290071C92EDD1 /* fltk3.h */,
 				1CDC310CF438C4E007EE265B /* Adjuster.h */,
 				D31DE8ACD497B8FA62A57910 /* ask.h */,
 				249A3332647089ACC2702523 /* Bitmap.h */,
-				5B9A35BBCCC105E2F86DBDA1 /* BMPImage.h */,
 				0800D21F849D8F2CDB90C72D /* Box.h */,
 				32841D65E2F82C3F24A360D2 /* Browser_.h */,
 				B8F30574865BA1A8081AF0E4 /* Browser.h */,
@@ -5339,9 +5348,7 @@
 				11DF5111A6EE377DAAFDB68B /* FormsBitmap.h */,
 				7E62E615D0C146DBB74B477A /* FormsPixmap.h */,
 				11F5FE43FEC401E52D4CABB7 /* Free.h */,
-				605121E099731EF9977E11C8 /* GIFImage.h */,
 				91EA037664D5A2D49603F364 /* Group.h */,
-				0925F19306CD3458397661F3 /* HelpDialog.h */,
 				0CD096CD5808EADB1B646DB4 /* HelpView.h */,
 				CFF83CFB9E060DA4F81AE816 /* HoldBrowser.h */,
 				5C8658CA906CD5A6C35FA96B /* HorFillSlider.h */,
@@ -5353,7 +5360,6 @@
 				28D897DFA27CCC5A3933D952 /* Input.h */,
 				11C999453D2BEBD3A5B32DA4 /* InputChoice.h */,
 				B5CA37E08339E6D7820C0973 /* IntInput.h */,
-				60A217E0DC847E1DD7B44D49 /* JPEGImage.h */,
 				5A390823203566E8B1FB4B81 /* LightButton.h */,
 				D10E3F19DD8CC6A3FAA912AF /* LineDial.h */,
 				6523340D0E47A3A4B3852435 /* math.h */,
@@ -5379,8 +5385,6 @@
 				C539C329532BE09B0422A23A /* PagedDevice.h */,
 				AEF910125AE91654739457BF /* Pixmap.h */,
 				A5DB3592DA82366555A66B4A /* Plugin.h */,
-				25BEA28581A1A97EEA1014E2 /* PNGImage.h */,
-				EC95850E022AFDFC59E4EBC2 /* PNMImage.h */,
 				813FC8746075A74FEDAE447C /* Positioner.h */,
 				6A0B5BF3C5ECFAF041951029 /* PostScript.h */,
 				A9B88BB6C6654424E37B8082 /* Preferences.h */,
@@ -5439,9 +5443,9 @@
 				8BD4A9C136E457CC92F9ADFE /* WizardGroup.h */,
 				DF6994452C6FD170E9507C6D /* Wrapper.h */,
 				059505668BA88697E40E6C32 /* x.h */,
+				2E1B408952EFBB79A46CDE69 /* Xutf8.h */,
 				9F6F453D846A6B7E8679FDAA /* XBMImage.h */,
 				0C163988CD45E6AB4710982F /* XPMImage.h */,
-				2E1B408952EFBB79A46CDE69 /* Xutf8.h */,
 			);
 			name = Headers;
 			sourceTree = "<group>";
@@ -5449,103 +5453,103 @@
 		91990322480BD14240EE5AB1 /* Sources */ = {
 			isa = PBXGroup;
 			children = (
-				F6BB47B6B9E3180AB7C5F16D /* Fl_cocoa.mm */,
-				B23CCB736CF9A2433827C3EE /* Fl_Native_File_Chooser_MAC.mm */,
-				10A048C45D4667189C9F77EA /* Fl_Quartz_Printer.mm */,
+				F6BB47B6B9E3180AB7C5F16D /* cocoa.mm */,
+				B23CCB736CF9A2433827C3EE /* cocoaNativeFileChooser.mm */,
+				10A048C45D4667189C9F77EA /* cocoaQuartzPrinter.mm */,
 				81045D024AA56D9CD81C23A2 /* run.cxx */,
-				ECEA64F2B2C5C5186949AD76 /* Fl_Adjuster.cxx */,
-				D68004A5D4D7878F2E22B59B /* Fl_Bitmap.cxx */,
-				81608512CDA5C11B35A2B539 /* Fl_Box.cxx */,
-				5CE1FF6EF6F9500754C22170 /* Fl_Browser.cxx */,
-				2FC85E98AAFBF45C8EBBA1CC /* Fl_Browser_.cxx */,
-				B89AE0F97A9095F4A064E6FF /* Fl_Browser_load.cxx */,
-				70F960885035F13513E45EFD /* Fl_Button.cxx */,
-				392500313F9EDFBFE2786E57 /* Fl_Chart.cxx */,
-				F6EC011E63665A01E72E52E7 /* Fl_Check_Browser.cxx */,
-				490C9DC52EF4532CC9795A6D /* Fl_Check_Button.cxx */,
-				6356BFF275FE7996D8F77F5C /* Fl_Choice.cxx */,
-				1C4F7DBF0BD658A6D786280A /* Fl_Clock.cxx */,
-				4CF353D8CC1FA86010629419 /* Fl_Color_Chooser.cxx */,
-				96D41530A69F4A84DBF7E11E /* Fl_Counter.cxx */,
-				CB4EA8042D07755CEA64E9FB /* Fl_Device.cxx */,
-				FDB4072264224B4391CAB607 /* Fl_Dial.cxx */,
-				D65E879CEE1870B6B73853BC /* Fl_Double_Window.cxx */,
-				31B32445C4ECC6487D814264 /* Fl_File_Browser.cxx */,
-				E74C762F7266F6B35BA2394A /* Fl_File_Chooser.cxx */,
-				A7770A7FB7C79371A3BFB46C /* Fl_File_Chooser2.cxx */,
-				19FA31AEDEFAC11C8EC5D035 /* Fl_File_Icon.cxx */,
-				D05F5EBC3B022A7C99F2DDC2 /* Fl_File_Input.cxx */,
-				A5952FB986701638B15F1B22 /* Fl_Group.cxx */,
-				047B650C9F322D0CB49D48D6 /* Fl_Help_View.cxx */,
-				E01E16F15C6443D98C32F5F6 /* Fl_Image.cxx */,
-				184F621088E304BDFD7A0384 /* Fl_Input.cxx */,
-				A892461439BFF8FC2D538E50 /* Fl_Input_.cxx */,
-				36C72097C9A86A33861ACD51 /* Fl_Light_Button.cxx */,
-				4672B51C8F8B9C0703D7EAA5 /* Fl_Menu.cxx */,
-				DE9E57A22E45C3039D820566 /* Fl_Menu_.cxx */,
-				265C00BF9D9598D2A10BE42A /* Fl_Menu_Bar.cxx */,
-				58FD2064B2C854618D2E68DB /* Fl_Menu_Button.cxx */,
-				CBE03F81CF8A43E9735AEFC9 /* Fl_Menu_Window.cxx */,
-				C649ABF1BD8B5FB41539FB5F /* Fl_Menu_add.cxx */,
-				25D17230FC589A55DA9C6F23 /* Fl_Menu_global.cxx */,
-				37D57C7D98BB88CE1A3BFC20 /* Fl_Multi_Label.cxx */,
-				FC634C34D16F1DE6EF923847 /* Fl_Native_File_Chooser.cxx */,
-				CEF1A66A542A208607C52832 /* Fl_Overlay_Window.cxx */,
-				0F0129FF3753E991F59B9FB5 /* Fl_Pack.cxx */,
-				680EF039247E0C542AD802F6 /* Fl_Paged_Device.cxx */,
-				9AEB93657A00F78B2046454D /* Fl_Pixmap.cxx */,
-				9EB992B1957E27AE06A07426 /* Fl_Positioner.cxx */,
-				53F2F9DED1C91758A21D0246 /* Fl_Printer.cxx */,
-				596103743F0CE2A89B7B3FA5 /* Fl_Preferences.cxx */,
-				B62169E8816659E5E6E4DD9F /* Fl_Progress.cxx */,
-				F2E611B0C2D8C53DD06946BC /* Fl_Repeat_Button.cxx */,
-				69E296C029FB3078A82EE913 /* Fl_Return_Button.cxx */,
-				A5526E662D03F4C9647C13A4 /* Fl_Roller.cxx */,
-				5DA33AF375B975EBBE824A96 /* Fl_Round_Button.cxx */,
-				135F7AE45CBDAA49D80BB12D /* Fl_Scroll.cxx */,
-				6F7BEB35272214B6167B1FB8 /* Fl_Scrollbar.cxx */,
-				8580401C9D38395ECAD127AC /* Fl_Shared_Image.cxx */,
-				17A03BA54D8D67397D8BDCEE /* Fl_Single_Window.cxx */,
-				085FAF82201B9FD1927A8BAA /* Fl_Slider.cxx */,
+				ECEA64F2B2C5C5186949AD76 /* Adjuster.cxx */,
+				D68004A5D4D7878F2E22B59B /* Bitmap.cxx */,
+				81608512CDA5C11B35A2B539 /* Box.cxx */,
+				5CE1FF6EF6F9500754C22170 /* Browser.cxx */,
+				2FC85E98AAFBF45C8EBBA1CC /* Browser_.cxx */,
+				B89AE0F97A9095F4A064E6FF /* Browser_load.cxx */,
+				70F960885035F13513E45EFD /* Button.cxx */,
+				392500313F9EDFBFE2786E57 /* Chart.cxx */,
+				F6EC011E63665A01E72E52E7 /* CheckBrowser.cxx */,
+				490C9DC52EF4532CC9795A6D /* CheckButton.cxx */,
+				6356BFF275FE7996D8F77F5C /* Choice.cxx */,
+				1C4F7DBF0BD658A6D786280A /* Clock.cxx */,
+				4CF353D8CC1FA86010629419 /* ColorChooser.cxx */,
+				96D41530A69F4A84DBF7E11E /* Counter.cxx */,
+				CB4EA8042D07755CEA64E9FB /* Device.cxx */,
+				FDB4072264224B4391CAB607 /* Dial.cxx */,
+				D65E879CEE1870B6B73853BC /* DoubleWindow.cxx */,
+				31B32445C4ECC6487D814264 /* FileBrowser.cxx */,
+				E74C762F7266F6B35BA2394A /* FileChooser.cxx */,
+				A7770A7FB7C79371A3BFB46C /* FileChooser2.cxx */,
+				19FA31AEDEFAC11C8EC5D035 /* FileIcon.cxx */,
+				D05F5EBC3B022A7C99F2DDC2 /* FileInput.cxx */,
+				A5952FB986701638B15F1B22 /* Group.cxx */,
+				047B650C9F322D0CB49D48D6 /* HelpView.cxx */,
+				E01E16F15C6443D98C32F5F6 /* Image.cxx */,
+				184F621088E304BDFD7A0384 /* Input.cxx */,
+				A892461439BFF8FC2D538E50 /* Input_.cxx */,
+				36C72097C9A86A33861ACD51 /* LightButton.cxx */,
+				4672B51C8F8B9C0703D7EAA5 /* Menu.cxx */,
+				DE9E57A22E45C3039D820566 /* Menu_.cxx */,
+				265C00BF9D9598D2A10BE42A /* MenuBar.cxx */,
+				58FD2064B2C854618D2E68DB /* MenuButton.cxx */,
+				CBE03F81CF8A43E9735AEFC9 /* MenuWindow.cxx */,
+				C649ABF1BD8B5FB41539FB5F /* Menu_add.cxx */,
+				25D17230FC589A55DA9C6F23 /* Menu_global.cxx */,
+				37D57C7D98BB88CE1A3BFC20 /* MultiLabel.cxx */,
+				FC634C34D16F1DE6EF923847 /* NativeFileChooser.cxx */,
+				CEF1A66A542A208607C52832 /* OverlayWindow.cxx */,
+				0F0129FF3753E991F59B9FB5 /* PackedGroup.cxx */,
+				680EF039247E0C542AD802F6 /* PagedDevice.cxx */,
+				9AEB93657A00F78B2046454D /* Pixmap.cxx */,
+				9EB992B1957E27AE06A07426 /* Positioner.cxx */,
+				53F2F9DED1C91758A21D0246 /* Printer.cxx */,
+				596103743F0CE2A89B7B3FA5 /* Preferences.cxx */,
+				B62169E8816659E5E6E4DD9F /* Progress.cxx */,
+				F2E611B0C2D8C53DD06946BC /* RepeatButton.cxx */,
+				69E296C029FB3078A82EE913 /* ReturnButton.cxx */,
+				A5526E662D03F4C9647C13A4 /* Roller.cxx */,
+				5DA33AF375B975EBBE824A96 /* RoundButton.cxx */,
+				135F7AE45CBDAA49D80BB12D /* ScrollGroup.cxx */,
+				6F7BEB35272214B6167B1FB8 /* Scrollbar.cxx */,
+				8580401C9D38395ECAD127AC /* SharedImage.cxx */,
+				17A03BA54D8D67397D8BDCEE /* SingleWindow.cxx */,
+				085FAF82201B9FD1927A8BAA /* Slider.cxx */,
 				CAA3AD964456E0912791C783 /* Style.cxx */,
-				43C12A4D372777B2307220CC /* Fl_Sys_Menu_Bar.cxx */,
-				025842431942A90D06F5BCFA /* Fl_Table.cxx */,
-				7097EA09B5B8FCFEEBE28CA8 /* Fl_Table_Row.cxx */,
-				7712638143B8C0B51FF6A61B /* Fl_Tabs.cxx */,
-				8867A20B30D85F73D157D617 /* Fl_Text_Buffer.cxx */,
-				E5E1DA87EC62BC799411CDB9 /* Fl_Text_Display.cxx */,
-				5995AACC387B26DECEE88139 /* Fl_Text_Editor.cxx */,
-				A3F6667DE920CB42ED6E95FC /* Fl_Tile.cxx */,
-				4C92BA7B6F3DA54449388F69 /* Fl_Tiled_Image.cxx */,
-				22CA4A41B4BF6D6AF6A6F244 /* Fl_Tooltip.cxx */,
-				214492E971DD58A3EF8FEAA3 /* Fl_Tree.cxx */,
-				D9F29791281BE27706AB7E8E /* Fl_Tree_Item.cxx */,
-				D6CBFFFA62847DACFACE5284 /* Fl_Tree_Item_Array.cxx */,
-				CFFE37EE7360FD052E7B592D /* Fl_Tree_Prefs.cxx */,
-				35EB53B1A2D1EF0E37A4970E /* Fl_Valuator.cxx */,
-				1685625EE3C5677F29D7D314 /* Fl_Value_Input.cxx */,
-				7553A0E747824E627DB0DDE5 /* Fl_Value_Output.cxx */,
-				07F5E789A6A94E38E46B9744 /* Fl_Value_Slider.cxx */,
-				C5F5E189BBE256A698ADF418 /* Fl_Widget.cxx */,
-				8E1A3A4FC6492F080AF48D54 /* Fl_Window.cxx */,
-				7679F6CC5391C705D9B921DA /* Fl_Window_fullscreen.cxx */,
-				B5E58AC3929D3ADCBE238301 /* Fl_Window_hotspot.cxx */,
-				C34CF806FAE9E39DDFD23D3B /* Fl_Window_iconize.cxx */,
-				A84F18440208B2AA809D2871 /* Fl_Wizard.cxx */,
-				9A21D7EDE35664C4B0EDD969 /* Fl_XBM_Image.cxx */,
-				302A3FA8AB59DE7E5255E28C /* Fl_XPM_Image.cxx */,
-				671B96BA5D85D5C6EE31AB76 /* Fl_abort.cxx */,
-				1821AF479F52B67539CB0CF8 /* Fl_add_idle.cxx */,
-				8E5EB755BAF13FB15109FC0C /* Fl_arg.cxx */,
-				AA048ACBE220E831739595BD /* Fl_compose.cxx */,
-				44287148E62E709880C4EA41 /* Fl_display.cxx */,
-				A8DC358A8390A493A9A8AE55 /* Fl_get_key.cxx */,
-				FEADB63E5C237A827884C5C5 /* Fl_get_system_colors.cxx */,
-				76AA6E6C769FB157F8125874 /* Fl_grab.cxx */,
-				7FAC51832563F8B044E55B90 /* Fl_lock.cxx */,
-				013DBB50198366613C31E2A9 /* Fl_own_colormap.cxx */,
-				1626800F2D2DF61E9E2468DD /* Fl_visual.cxx */,
-				F285310A7BD8D88F965104C8 /* Fl_x.cxx */,
+				43C12A4D372777B2307220CC /* SysMenuBar.cxx */,
+				025842431942A90D06F5BCFA /* Table.cxx */,
+				7097EA09B5B8FCFEEBE28CA8 /* TableRow.cxx */,
+				7712638143B8C0B51FF6A61B /* TabGroup.cxx */,
+				8867A20B30D85F73D157D617 /* TextBuffer.cxx */,
+				E5E1DA87EC62BC799411CDB9 /* TextDisplay.cxx */,
+				5995AACC387B26DECEE88139 /* TextEditor.cxx */,
+				A3F6667DE920CB42ED6E95FC /* TiledGroup.cxx */,
+				4C92BA7B6F3DA54449388F69 /* TiledImage.cxx */,
+				22CA4A41B4BF6D6AF6A6F244 /* Tooltip.cxx */,
+				214492E971DD58A3EF8FEAA3 /* Tree.cxx */,
+				D9F29791281BE27706AB7E8E /* TreeItem.cxx */,
+				D6CBFFFA62847DACFACE5284 /* TreeItemArray.cxx */,
+				CFFE37EE7360FD052E7B592D /* TreePrefs.cxx */,
+				35EB53B1A2D1EF0E37A4970E /* Valuator.cxx */,
+				1685625EE3C5677F29D7D314 /* ValueInput.cxx */,
+				7553A0E747824E627DB0DDE5 /* ValueOutput.cxx */,
+				07F5E789A6A94E38E46B9744 /* ValueSlider.cxx */,
+				C5F5E189BBE256A698ADF418 /* Widget.cxx */,
+				8E1A3A4FC6492F080AF48D54 /* Window.cxx */,
+				7679F6CC5391C705D9B921DA /* Window_fullscreen.cxx */,
+				B5E58AC3929D3ADCBE238301 /* Window_hotspot.cxx */,
+				C34CF806FAE9E39DDFD23D3B /* Window_iconize.cxx */,
+				A84F18440208B2AA809D2871 /* Wizard.cxx */,
+				9A21D7EDE35664C4B0EDD969 /* XBMImage.cxx */,
+				302A3FA8AB59DE7E5255E28C /* XPMImage.cxx */,
+				671B96BA5D85D5C6EE31AB76 /* abort.cxx */,
+				1821AF479F52B67539CB0CF8 /* add_idle.cxx */,
+				8E5EB755BAF13FB15109FC0C /* arg.cxx */,
+				AA048ACBE220E831739595BD /* compose.cxx */,
+				44287148E62E709880C4EA41 /* display.cxx */,
+				A8DC358A8390A493A9A8AE55 /* get_key.cxx */,
+				FEADB63E5C237A827884C5C5 /* get_system_colors.cxx */,
+				76AA6E6C769FB157F8125874 /* grab.cxx */,
+				7FAC51832563F8B044E55B90 /* lock.cxx */,
+				013DBB50198366613C31E2A9 /* own_colormap.cxx */,
+				1626800F2D2DF61E9E2468DD /* visual.cxx */,
+				F285310A7BD8D88F965104C8 /* x11.cxx */,
 				04A6409B52D5A99617606460 /* filename_absolute.cxx */,
 				F9F779F221E630EE4A837595 /* filename_expand.cxx */,
 				210616B209B714E918A5CD3B /* filename_ext.cxx */,
@@ -5553,46 +5557,46 @@
 				F08599CCE19B1640395AB3D0 /* filename_list.cxx */,
 				AB171A4BF938A263E10FD0AD /* filename_match.cxx */,
 				003AA96B03F174957585B088 /* filename_setext.cxx */,
-				876B6A633C2E666DFC3119DD /* fl_arc.cxx */,
-				E52CB16DD470DA22063934AA /* fl_arci.cxx */,
-				60E7DD739D5DDBD766E2E30F /* fl_ask.cxx */,
-				BC14596F24E305FE8CE39DAF /* fl_boxtype.cxx */,
-				8B35EF2F662F706A2B46BDD7 /* fl_call_main.cxx */,
-				02716487EA5E04A784DE5A34 /* fl_color.cxx */,
-				C832D220ECF843E28FBAFED8 /* fl_cursor.cxx */,
-				53EC964ED2E6DE4CBF80B206 /* fl_curve.cxx */,
-				5557266E1C9D440172D5DF09 /* fl_diamond_box.cxx */,
-				D1E006BE295C0F88A8E51304 /* fl_dnd.cxx */,
-				3CF0F8B538EFFF602D6549B0 /* fl_draw.cxx */,
-				F608DA64A6A66C65E7494BEA /* fl_draw_image.cxx */,
-				B6E2BA6C16F8BB32016C0FF0 /* fl_draw_pixmap.cxx */,
-				0BEBF5A734CD2113BB6BDA08 /* fl_encoding_latin1.cxx */,
-				C2BF9CDFAB8BFEF23768C51B /* fl_encoding_mac_roman.cxx */,
-				0522E1C24273419B45EF1B4D /* fl_engraved_label.cxx */,
-				1BF9BBF497705FBAD92797FF /* fl_file_dir.cxx */,
-				1CFFB72AB54D6FECF9F0C89C /* fl_font.cxx */,
-				E3303C9AB8380CF95C000D0C /* fl_gtk.cxx */,
-				95F43A2D694782E841E90C3A /* fl_labeltype.cxx */,
-				5FD374C4251D84126390EEE5 /* fl_line_style.cxx */,
-				5515C9CC733AC9F36A9B7E06 /* fl_open_uri.cxx */,
-				554EB8945D959B0EF565327A /* fl_oval_box.cxx */,
-				5536CF5142F45E75898D00BA /* fl_overlay.cxx */,
-				3132F0163EFDF4289F20DB50 /* fl_overlay_visual.cxx */,
-				D9934C34F12FADA862D201D1 /* fl_plastic.cxx */,
-				1FA85C8068154A53598C9B19 /* fl_read_image.cxx */,
-				82F1E1FCCD3708EA48A6FD1B /* fl_rect.cxx */,
-				C791DFA1DA864C8105CA92D3 /* fl_round_box.cxx */,
-				557E80414B985272F1C0F5BE /* fl_rounded_box.cxx */,
-				0E08EA1CF945ADA843805A2C /* fl_scroll_area.cxx */,
-				C7ED2C14E31F1142DDCAC057 /* fl_set_font.cxx */,
-				22603052464D0ADEFA96A7E6 /* fl_set_fonts.cxx */,
-				2C5EEC8910127EC66EEA73B1 /* fl_shadow_box.cxx */,
-				BFCE21B11BD00816E2D65029 /* fl_shortcut.cxx */,
-				76D6638ABB7D955E0B149360 /* fl_show_colormap.cxx */,
-				ECAFDF98E362617FA9E2B887 /* fl_symbols.cxx */,
-				C82D09C9EB356BF14388A904 /* fl_utf8.cxx */,
-				574878A10D223037009BD0DE /* fl_utf.cxx */,
-				6C74D84D95E5167E6D41A606 /* fl_vertex.cxx */,
+				876B6A633C2E666DFC3119DD /* arc.cxx */,
+				E52CB16DD470DA22063934AA /* arci.cxx */,
+				60E7DD739D5DDBD766E2E30F /* ask.cxx */,
+				BC14596F24E305FE8CE39DAF /* boxtype.cxx */,
+				8B35EF2F662F706A2B46BDD7 /* call_main.cxx */,
+				02716487EA5E04A784DE5A34 /* color.cxx */,
+				C832D220ECF843E28FBAFED8 /* cursor.cxx */,
+				53EC964ED2E6DE4CBF80B206 /* curve.cxx */,
+				5557266E1C9D440172D5DF09 /* diamond_box.cxx */,
+				D1E006BE295C0F88A8E51304 /* dnd.cxx */,
+				3CF0F8B538EFFF602D6549B0 /* draw.cxx */,
+				F608DA64A6A66C65E7494BEA /* draw_image.cxx */,
+				B6E2BA6C16F8BB32016C0FF0 /* draw_pixmap.cxx */,
+				0BEBF5A734CD2113BB6BDA08 /* encoding_latin1.cxx */,
+				C2BF9CDFAB8BFEF23768C51B /* encoding_mac_roman.cxx */,
+				0522E1C24273419B45EF1B4D /* engraved_label.cxx */,
+				1BF9BBF497705FBAD92797FF /* file_dir.cxx */,
+				1CFFB72AB54D6FECF9F0C89C /* font.cxx */,
+				E3303C9AB8380CF95C000D0C /* gtk.cxx */,
+				95F43A2D694782E841E90C3A /* labeltype.cxx */,
+				5FD374C4251D84126390EEE5 /* line_style.cxx */,
+				5515C9CC733AC9F36A9B7E06 /* open_uri.cxx */,
+				554EB8945D959B0EF565327A /* oval_box.cxx */,
+				5536CF5142F45E75898D00BA /* overlay.cxx */,
+				3132F0163EFDF4289F20DB50 /* overlay_visual.cxx */,
+				D9934C34F12FADA862D201D1 /* plastic.cxx */,
+				1FA85C8068154A53598C9B19 /* read_image.cxx */,
+				82F1E1FCCD3708EA48A6FD1B /* rect.cxx */,
+				C791DFA1DA864C8105CA92D3 /* round_box.cxx */,
+				557E80414B985272F1C0F5BE /* rounded_box.cxx */,
+				0E08EA1CF945ADA843805A2C /* scroll_area.cxx */,
+				C7ED2C14E31F1142DDCAC057 /* set_font.cxx */,
+				22603052464D0ADEFA96A7E6 /* set_fonts.cxx */,
+				2C5EEC8910127EC66EEA73B1 /* shadow_box.cxx */,
+				BFCE21B11BD00816E2D65029 /* shortcut.cxx */,
+				76D6638ABB7D955E0B149360 /* show_colormap.cxx */,
+				ECAFDF98E362617FA9E2B887 /* symbols.cxx */,
+				C82D09C9EB356BF14388A904 /* utf8.cxx */,
+				574878A10D223037009BD0DE /* utf.cxx */,
+				6C74D84D95E5167E6D41A606 /* vertex.cxx */,
 				2286DB222E1D5D78655B21BB /* numericsort.cxx */,
 				472AB3970C82CB496562F422 /* ps_image.cxx */,
 				1E2B1DAE628CEB38A5F0E604 /* scandir.cxx */,
@@ -5685,17 +5689,32 @@
 			name = fltk3gl;
 			sourceTree = "<group>";
 		};
+		572634D5D48118DDB8ADA06D /* Headers */ = {
+			isa = PBXGroup;
+			children = (
+				1010B13DA886270EE16E3514 /* all.h */,
+				2C2435D9DCE9D126983C81F3 /* fltk3images.h */,
+				5B9A35BBCCC105E2F86DBDA1 /* BMPImage.h */,
+				605121E099731EF9977E11C8 /* GIFImage.h */,
+				0925F19306CD3458397661F3 /* HelpDialog.h */,
+				60A217E0DC847E1DD7B44D49 /* JPEGImage.h */,
+				25BEA28581A1A97EEA1014E2 /* PNGImage.h */,
+				EC95850E022AFDFC59E4EBC2 /* PNMImage.h */,
+			);
+			name = Headers;
+			sourceTree = "<group>";
+		};
 		E2718243D9E2D793A35C2EB3 /* Sources */ = {
 			isa = PBXGroup;
 			children = (
-				BEBF424874FF4284B7383470 /* Fl_BMP_Image.cxx */,
-				7655FB1C9C0EEA276E0C6765 /* Fl_File_Icon2.cxx */,
-				CFAC1FAE7DBA77895E2BC5E9 /* Fl_GIF_Image.cxx */,
-				0EDA91FFA01CB06D2CD72D46 /* Fl_Help_Dialog.cxx */,
-				771C095FF2AE4FFCACA213AB /* Fl_JPEG_Image.cxx */,
-				E1BECD1D14488DF25469A00E /* Fl_PNG_Image.cxx */,
-				948DEE29F3A36A2E578DD9C0 /* Fl_PNM_Image.cxx */,
-				6ADD9C72DA642E9780529588 /* fl_images_core.cxx */,
+				BEBF424874FF4284B7383470 /* BMPImage.cxx */,
+				7655FB1C9C0EEA276E0C6765 /* FileIcon2.cxx */,
+				CFAC1FAE7DBA77895E2BC5E9 /* GIFImage.cxx */,
+				0EDA91FFA01CB06D2CD72D46 /* HelpDialog.cxx */,
+				6ADD9C72DA642E9780529588 /* images_core.cxx */,
+				771C095FF2AE4FFCACA213AB /* JPEGImage.cxx */,
+				E1BECD1D14488DF25469A00E /* PNGImage.cxx */,
+				948DEE29F3A36A2E578DD9C0 /* PNMImage.cxx */,
 			);
 			name = Sources;
 			sourceTree = "<group>";
@@ -5710,6 +5729,7 @@
 		92E5313C3A089F59528CDB9C /* fltk3images */ = {
 			isa = PBXGroup;
 			children = (
+				572634D5D48118DDB8ADA06D /* Headers */,
 				E2718243D9E2D793A35C2EB3 /* Sources */,
 				5C23197920BB9D2FB9D02387 /* Dependencies */,
 			);
@@ -6563,10 +6583,11 @@
 			isa = PBXHeadersBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				6EC5A8E1F6171E20505CDA66 /* all.h in Headers */,
+				39576718F4A718E5885D7837 /* fltk3.h in Headers */,
 				757ECB76CD9272004B8A4A42 /* Adjuster.h in Headers */,
 				CC311448876EC9C10D5614AF /* ask.h in Headers */,
 				72A9364B21F8DEDED9A43B9E /* Bitmap.h in Headers */,
-				26C1F556C987C742D37CCAA4 /* BMPImage.h in Headers */,
 				35DE2AD5F6204186A6545D86 /* Box.h in Headers */,
 				42605FAF974760B9A405E61E /* Browser_.h in Headers */,
 				7713D95988E151E950DE9A22 /* Browser.h in Headers */,
@@ -6599,9 +6620,7 @@
 				20CBFB6F570A48CAA0751DBF /* FormsBitmap.h in Headers */,
 				742D204F4CECC650D53AC070 /* FormsPixmap.h in Headers */,
 				6A197BCC5117B3666D368B25 /* Free.h in Headers */,
-				8845649A10159ECED0C93211 /* GIFImage.h in Headers */,
 				5E1D236DDF180951F39D88D0 /* Group.h in Headers */,
-				F7A66B0ADC3A359551BB84FB /* HelpDialog.h in Headers */,
 				E5826346717EA4FA214A9B1B /* HelpView.h in Headers */,
 				0CBBFB5E384976AB8AC9A2E0 /* HoldBrowser.h in Headers */,
 				C731F1AF175523B779E819E5 /* HorFillSlider.h in Headers */,
@@ -6613,7 +6632,6 @@
 				78D8944F6051F6574682C312 /* Input.h in Headers */,
 				6291854E45CD36763495507E /* InputChoice.h in Headers */,
 				0F5897939A32668EEBBEA347 /* IntInput.h in Headers */,
-				30029E6A64808C5EFEBA9CF8 /* JPEGImage.h in Headers */,
 				8E35401D5E144E48E1E2E147 /* LightButton.h in Headers */,
 				C5C32DAEA102D25D12F86757 /* LineDial.h in Headers */,
 				E62C50EAAA4C4B51F3A50640 /* math.h in Headers */,
@@ -6639,8 +6657,6 @@
 				38C7D942581B7C5369F2AC03 /* PagedDevice.h in Headers */,
 				F5061313596F1BC761AC582B /* Pixmap.h in Headers */,
 				6AFC8619DFF2FA3604F112C0 /* Plugin.h in Headers */,
-				E3127242302580ED01B769A4 /* PNGImage.h in Headers */,
-				CBE8880ED23DF42D5298EAAE /* PNMImage.h in Headers */,
 				F702DFA64620B02A76332D90 /* Positioner.h in Headers */,
 				ACFD331F39EEA65591D0492B /* PostScript.h in Headers */,
 				987CCADF07B02BD64D159D9F /* Preferences.h in Headers */,
@@ -6699,9 +6715,9 @@
 				92B4EB04CFFC5ECFD3F79630 /* WizardGroup.h in Headers */,
 				65AFEF19DE305C21D5DD6CA6 /* Wrapper.h in Headers */,
 				39A61403B387ECD58A0E92D3 /* x.h in Headers */,
+				E0943D9D77DD934578EBF9DF /* Xutf8.h in Headers */,
 				CBE1938D51C95931483B5C48 /* XBMImage.h in Headers */,
 				ACA9550AC903E3D31D80B160 /* XPMImage.h in Headers */,
-				E0943D9D77DD934578EBF9DF /* Xutf8.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -6723,6 +6739,14 @@
 			isa = PBXHeadersBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				8EFCC7E97421DED44B2C58AC /* all.h in Headers */,
+				F0C926FCF8BA5C38AB2B38A6 /* fltk3images.h in Headers */,
+				26C1F556C987C742D37CCAA4 /* BMPImage.h in Headers */,
+				8845649A10159ECED0C93211 /* GIFImage.h in Headers */,
+				F7A66B0ADC3A359551BB84FB /* HelpDialog.h in Headers */,
+				30029E6A64808C5EFEBA9CF8 /* JPEGImage.h in Headers */,
+				E3127242302580ED01B769A4 /* PNGImage.h in Headers */,
+				CBE8880ED23DF42D5298EAAE /* PNMImage.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -9066,103 +9090,103 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				69C261B5080F70C54F62E633 /* Fl_cocoa.mm in Sources */,
-				02BBCA82DFFB0AB67443CA28 /* Fl_Native_File_Chooser_MAC.mm in Sources */,
-				B7920395FCBAAF8E46AA357D /* Fl_Quartz_Printer.mm in Sources */,
+				69C261B5080F70C54F62E633 /* cocoa.mm in Sources */,
+				02BBCA82DFFB0AB67443CA28 /* cocoaNativeFileChooser.mm in Sources */,
+				B7920395FCBAAF8E46AA357D /* cocoaQuartzPrinter.mm in Sources */,
 				008DDC0F32A31B4ADA34594C /* run.cxx in Sources */,
-				2271ACEBB4FBB71C4086EF24 /* Fl_Adjuster.cxx in Sources */,
-				87F292EDA50F45BFAEA18EC5 /* Fl_Bitmap.cxx in Sources */,
-				D3D9C65EBA0726B45E8C7725 /* Fl_Box.cxx in Sources */,
-				F343A0DF04697626857BF06F /* Fl_Browser.cxx in Sources */,
-				9036C344E82AED76B425415E /* Fl_Browser_.cxx in Sources */,
-				C96803EEF2B850B58A9507D0 /* Fl_Browser_load.cxx in Sources */,
-				DE2BB5133CF2CD996D632F84 /* Fl_Button.cxx in Sources */,
-				B0CAF4D1559C6E98DFCA17AA /* Fl_Chart.cxx in Sources */,
-				37D83B9E1067EB10D83CC630 /* Fl_Check_Browser.cxx in Sources */,
-				B34F20AC44C7BD06F37A17B1 /* Fl_Check_Button.cxx in Sources */,
-				16189C3260E6F7081DBD4A2E /* Fl_Choice.cxx in Sources */,
-				4BB964893254F77B4DCAD9BA /* Fl_Clock.cxx in Sources */,
-				2D847DBF09E5D4E252345529 /* Fl_Color_Chooser.cxx in Sources */,
-				B2BB321C79B8EA57F4A99288 /* Fl_Counter.cxx in Sources */,
-				B1AB3E6CE018D5319F0CB1D8 /* Fl_Device.cxx in Sources */,
-				1369E7ADCB6604667B063564 /* Fl_Dial.cxx in Sources */,
-				43FA5D816EDA82E015727381 /* Fl_Double_Window.cxx in Sources */,
-				ECCA6DC4547C114D5390C8D1 /* Fl_File_Browser.cxx in Sources */,
-				049EB01300A5C030D1DB2191 /* Fl_File_Chooser.cxx in Sources */,
-				17819EFD092EC34847FF9A97 /* Fl_File_Chooser2.cxx in Sources */,
-				3DCD457D7AD4CA90D9EE4246 /* Fl_File_Icon.cxx in Sources */,
-				8F4CA13F0135C8D93D647078 /* Fl_File_Input.cxx in Sources */,
-				99FB64087ED252BA31644F95 /* Fl_Group.cxx in Sources */,
-				5D0D1C842A3CAF02C4878E5E /* Fl_Help_View.cxx in Sources */,
-				DE9BFEBCD61D5BBA51D3A983 /* Fl_Image.cxx in Sources */,
-				1DC72F81E67D26EFC91CC055 /* Fl_Input.cxx in Sources */,
-				22D481051F2975C6708B7A5C /* Fl_Input_.cxx in Sources */,
-				EDFFE30ABACE77AB818EFD3C /* Fl_Light_Button.cxx in Sources */,
-				FB4C03114DD7FD4E21C93B23 /* Fl_Menu.cxx in Sources */,
-				24D6615263A30D0055EEA9CD /* Fl_Menu_.cxx in Sources */,
-				BD7AE3AEC270BBF97D63A102 /* Fl_Menu_Bar.cxx in Sources */,
-				1EC305B74A27DF994486CAEA /* Fl_Menu_Button.cxx in Sources */,
-				63C8599959CBD6D392A98548 /* Fl_Menu_Window.cxx in Sources */,
-				A5B4D789DF000BBCCFC14069 /* Fl_Menu_add.cxx in Sources */,
-				6C148F335D573FA11E171DE8 /* Fl_Menu_global.cxx in Sources */,
-				46A6752E2DC6F11255C93484 /* Fl_Multi_Label.cxx in Sources */,
-				B30D6189F1765784376B6779 /* Fl_Native_File_Chooser.cxx in Sources */,
-				5857DE8B16828A0F93032DB4 /* Fl_Overlay_Window.cxx in Sources */,
-				5C93DA8482716333763AA2F8 /* Fl_Pack.cxx in Sources */,
-				BFD45A930F841AB6663EB28F /* Fl_Paged_Device.cxx in Sources */,
-				EBD658967C0EF993B55D8A75 /* Fl_Pixmap.cxx in Sources */,
-				7878131091565BEFA0E1E765 /* Fl_Positioner.cxx in Sources */,
-				C759F61877A5D20EDBD7488D /* Fl_Printer.cxx in Sources */,
-				96257899A0D5C1733FAC5200 /* Fl_Preferences.cxx in Sources */,
-				486D31DD278E2C5144B6284E /* Fl_Progress.cxx in Sources */,
-				4E4DEB0F11A0E7ABB682FBAF /* Fl_Repeat_Button.cxx in Sources */,
-				5B4F6F77241A0B089DCE19F1 /* Fl_Return_Button.cxx in Sources */,
-				01570F259A52D752DA170772 /* Fl_Roller.cxx in Sources */,
-				F32B3FAD40F0004FFA6158E3 /* Fl_Round_Button.cxx in Sources */,
-				B506EE63710A08EC82B52F62 /* Fl_Scroll.cxx in Sources */,
-				5622DE2929FDB9DBF1607BC6 /* Fl_Scrollbar.cxx in Sources */,
-				7CB9D27B0F1CE28C828F280B /* Fl_Shared_Image.cxx in Sources */,
-				550F71EE23A3D8E00A890F88 /* Fl_Single_Window.cxx in Sources */,
-				052ACB65AAC112E4DFA7B7C1 /* Fl_Slider.cxx in Sources */,
+				2271ACEBB4FBB71C4086EF24 /* Adjuster.cxx in Sources */,
+				87F292EDA50F45BFAEA18EC5 /* Bitmap.cxx in Sources */,
+				D3D9C65EBA0726B45E8C7725 /* Box.cxx in Sources */,
+				F343A0DF04697626857BF06F /* Browser.cxx in Sources */,
+				9036C344E82AED76B425415E /* Browser_.cxx in Sources */,
+				C96803EEF2B850B58A9507D0 /* Browser_load.cxx in Sources */,
+				DE2BB5133CF2CD996D632F84 /* Button.cxx in Sources */,
+				B0CAF4D1559C6E98DFCA17AA /* Chart.cxx in Sources */,
+				37D83B9E1067EB10D83CC630 /* CheckBrowser.cxx in Sources */,
+				B34F20AC44C7BD06F37A17B1 /* CheckButton.cxx in Sources */,
+				16189C3260E6F7081DBD4A2E /* Choice.cxx in Sources */,
+				4BB964893254F77B4DCAD9BA /* Clock.cxx in Sources */,
+				2D847DBF09E5D4E252345529 /* ColorChooser.cxx in Sources */,
+				B2BB321C79B8EA57F4A99288 /* Counter.cxx in Sources */,
+				B1AB3E6CE018D5319F0CB1D8 /* Device.cxx in Sources */,
+				1369E7ADCB6604667B063564 /* Dial.cxx in Sources */,
+				43FA5D816EDA82E015727381 /* DoubleWindow.cxx in Sources */,
+				ECCA6DC4547C114D5390C8D1 /* FileBrowser.cxx in Sources */,
+				049EB01300A5C030D1DB2191 /* FileChooser.cxx in Sources */,
+				17819EFD092EC34847FF9A97 /* FileChooser2.cxx in Sources */,
+				3DCD457D7AD4CA90D9EE4246 /* FileIcon.cxx in Sources */,
+				8F4CA13F0135C8D93D647078 /* FileInput.cxx in Sources */,
+				99FB64087ED252BA31644F95 /* Group.cxx in Sources */,
+				5D0D1C842A3CAF02C4878E5E /* HelpView.cxx in Sources */,
+				DE9BFEBCD61D5BBA51D3A983 /* Image.cxx in Sources */,
+				1DC72F81E67D26EFC91CC055 /* Input.cxx in Sources */,
+				22D481051F2975C6708B7A5C /* Input_.cxx in Sources */,
+				EDFFE30ABACE77AB818EFD3C /* LightButton.cxx in Sources */,
+				FB4C03114DD7FD4E21C93B23 /* Menu.cxx in Sources */,
+				24D6615263A30D0055EEA9CD /* Menu_.cxx in Sources */,
+				BD7AE3AEC270BBF97D63A102 /* MenuBar.cxx in Sources */,
+				1EC305B74A27DF994486CAEA /* MenuButton.cxx in Sources */,
+				63C8599959CBD6D392A98548 /* MenuWindow.cxx in Sources */,
+				A5B4D789DF000BBCCFC14069 /* Menu_add.cxx in Sources */,
+				6C148F335D573FA11E171DE8 /* Menu_global.cxx in Sources */,
+				46A6752E2DC6F11255C93484 /* MultiLabel.cxx in Sources */,
+				B30D6189F1765784376B6779 /* NativeFileChooser.cxx in Sources */,
+				5857DE8B16828A0F93032DB4 /* OverlayWindow.cxx in Sources */,
+				5C93DA8482716333763AA2F8 /* PackedGroup.cxx in Sources */,
+				BFD45A930F841AB6663EB28F /* PagedDevice.cxx in Sources */,
+				EBD658967C0EF993B55D8A75 /* Pixmap.cxx in Sources */,
+				7878131091565BEFA0E1E765 /* Positioner.cxx in Sources */,
+				C759F61877A5D20EDBD7488D /* Printer.cxx in Sources */,
+				96257899A0D5C1733FAC5200 /* Preferences.cxx in Sources */,
+				486D31DD278E2C5144B6284E /* Progress.cxx in Sources */,
+				4E4DEB0F11A0E7ABB682FBAF /* RepeatButton.cxx in Sources */,
+				5B4F6F77241A0B089DCE19F1 /* ReturnButton.cxx in Sources */,
+				01570F259A52D752DA170772 /* Roller.cxx in Sources */,
+				F32B3FAD40F0004FFA6158E3 /* RoundButton.cxx in Sources */,
+				B506EE63710A08EC82B52F62 /* ScrollGroup.cxx in Sources */,
+				5622DE2929FDB9DBF1607BC6 /* Scrollbar.cxx in Sources */,
+				7CB9D27B0F1CE28C828F280B /* SharedImage.cxx in Sources */,
+				550F71EE23A3D8E00A890F88 /* SingleWindow.cxx in Sources */,
+				052ACB65AAC112E4DFA7B7C1 /* Slider.cxx in Sources */,
 				195134865585E031DF857E7B /* Style.cxx in Sources */,
-				B7E4B117D093ED504AD5127B /* Fl_Sys_Menu_Bar.cxx in Sources */,
-				E0D6CAE34DC85454B5C61EBA /* Fl_Table.cxx in Sources */,
-				56C8DD01C98608D164F2047B /* Fl_Table_Row.cxx in Sources */,
-				135F22ECC6C16457F223E1EA /* Fl_Tabs.cxx in Sources */,
-				1ABCEAD8830736E549D56A9B /* Fl_Text_Buffer.cxx in Sources */,
-				9B43466674ACFD80CF1A44C7 /* Fl_Text_Display.cxx in Sources */,
-				038A56E9E529AB24D59EF7FA /* Fl_Text_Editor.cxx in Sources */,
-				45E744C6C36FBC067F9F04EE /* Fl_Tile.cxx in Sources */,
-				E9D3E58E4CCE649FB2BC43EA /* Fl_Tiled_Image.cxx in Sources */,
-				90FFE6AA9003A62E1983C991 /* Fl_Tooltip.cxx in Sources */,
-				681483153D73620EAA36873D /* Fl_Tree.cxx in Sources */,
-				9A57CF11DB2955C7BAEF98A7 /* Fl_Tree_Item.cxx in Sources */,
-				D2A374205A2262B571A051DE /* Fl_Tree_Item_Array.cxx in Sources */,
-				68CC4C366A163EBBBCEE853E /* Fl_Tree_Prefs.cxx in Sources */,
-				4A519B4F241D15A3DA6D3231 /* Fl_Valuator.cxx in Sources */,
-				BD78190E42585FD6B71AFEDA /* Fl_Value_Input.cxx in Sources */,
-				7E26A26E1E0FE997255F67D7 /* Fl_Value_Output.cxx in Sources */,
-				00BFB74D5BC12A94AFF72C8E /* Fl_Value_Slider.cxx in Sources */,
-				C8308863B421AD33C5442423 /* Fl_Widget.cxx in Sources */,
-				EAFF1F86C4BFCA7C8FCCEA28 /* Fl_Window.cxx in Sources */,
-				C62F4F9E13B7E78D46033106 /* Fl_Window_fullscreen.cxx in Sources */,
-				A76E032AD9B13380163BB493 /* Fl_Window_hotspot.cxx in Sources */,
-				E373B7F46315E6D1F6D255E9 /* Fl_Window_iconize.cxx in Sources */,
-				72DEB4A9569C0F11C103EF90 /* Fl_Wizard.cxx in Sources */,
-				F4974EC29CF042D6AEB0CC0D /* Fl_XBM_Image.cxx in Sources */,
-				A7891F57744007954D70C5D4 /* Fl_XPM_Image.cxx in Sources */,
-				230F7BA09DDFC95489B89DFF /* Fl_abort.cxx in Sources */,
-				EC8E6A4EA73A26BEEC330000 /* Fl_add_idle.cxx in Sources */,
-				A87E247AEEF22DCE6B7DFEE1 /* Fl_arg.cxx in Sources */,
-				867ED2B31C3F415ACBA63053 /* Fl_compose.cxx in Sources */,
-				EF8285FB887728A6F7E61B8A /* Fl_display.cxx in Sources */,
-				11ADE417F14FF9E2EE8083CE /* Fl_get_key.cxx in Sources */,
-				05360A3851265C0F5DE74075 /* Fl_get_system_colors.cxx in Sources */,
-				DF2B279A7C6E4D9B1DAF6A30 /* Fl_grab.cxx in Sources */,
-				F08C8B0E65A2E77417682E0C /* Fl_lock.cxx in Sources */,
-				D93BEFC63736CECDC57C91B9 /* Fl_own_colormap.cxx in Sources */,
-				D57FBCFB72B5E577A7F80562 /* Fl_visual.cxx in Sources */,
-				D90075982F3B0CDB0EF91A73 /* Fl_x.cxx in Sources */,
+				B7E4B117D093ED504AD5127B /* SysMenuBar.cxx in Sources */,
+				E0D6CAE34DC85454B5C61EBA /* Table.cxx in Sources */,
+				56C8DD01C98608D164F2047B /* TableRow.cxx in Sources */,
+				135F22ECC6C16457F223E1EA /* TabGroup.cxx in Sources */,
+				1ABCEAD8830736E549D56A9B /* TextBuffer.cxx in Sources */,
+				9B43466674ACFD80CF1A44C7 /* TextDisplay.cxx in Sources */,
+				038A56E9E529AB24D59EF7FA /* TextEditor.cxx in Sources */,
+				45E744C6C36FBC067F9F04EE /* TiledGroup.cxx in Sources */,
+				E9D3E58E4CCE649FB2BC43EA /* TiledImage.cxx in Sources */,
+				90FFE6AA9003A62E1983C991 /* Tooltip.cxx in Sources */,
+				681483153D73620EAA36873D /* Tree.cxx in Sources */,
+				9A57CF11DB2955C7BAEF98A7 /* TreeItem.cxx in Sources */,
+				D2A374205A2262B571A051DE /* TreeItemArray.cxx in Sources */,
+				68CC4C366A163EBBBCEE853E /* TreePrefs.cxx in Sources */,
+				4A519B4F241D15A3DA6D3231 /* Valuator.cxx in Sources */,
+				BD78190E42585FD6B71AFEDA /* ValueInput.cxx in Sources */,
+				7E26A26E1E0FE997255F67D7 /* ValueOutput.cxx in Sources */,
+				00BFB74D5BC12A94AFF72C8E /* ValueSlider.cxx in Sources */,
+				C8308863B421AD33C5442423 /* Widget.cxx in Sources */,
+				EAFF1F86C4BFCA7C8FCCEA28 /* Window.cxx in Sources */,
+				C62F4F9E13B7E78D46033106 /* Window_fullscreen.cxx in Sources */,
+				A76E032AD9B13380163BB493 /* Window_hotspot.cxx in Sources */,
+				E373B7F46315E6D1F6D255E9 /* Window_iconize.cxx in Sources */,
+				72DEB4A9569C0F11C103EF90 /* Wizard.cxx in Sources */,
+				F4974EC29CF042D6AEB0CC0D /* XBMImage.cxx in Sources */,
+				A7891F57744007954D70C5D4 /* XPMImage.cxx in Sources */,
+				230F7BA09DDFC95489B89DFF /* abort.cxx in Sources */,
+				EC8E6A4EA73A26BEEC330000 /* add_idle.cxx in Sources */,
+				A87E247AEEF22DCE6B7DFEE1 /* arg.cxx in Sources */,
+				867ED2B31C3F415ACBA63053 /* compose.cxx in Sources */,
+				EF8285FB887728A6F7E61B8A /* display.cxx in Sources */,
+				11ADE417F14FF9E2EE8083CE /* get_key.cxx in Sources */,
+				05360A3851265C0F5DE74075 /* get_system_colors.cxx in Sources */,
+				DF2B279A7C6E4D9B1DAF6A30 /* grab.cxx in Sources */,
+				F08C8B0E65A2E77417682E0C /* lock.cxx in Sources */,
+				D93BEFC63736CECDC57C91B9 /* own_colormap.cxx in Sources */,
+				D57FBCFB72B5E577A7F80562 /* visual.cxx in Sources */,
+				D90075982F3B0CDB0EF91A73 /* x11.cxx in Sources */,
 				AABCD2111137745B5B24F9F8 /* filename_absolute.cxx in Sources */,
 				B1C7F80015E458B01ED0339C /* filename_expand.cxx in Sources */,
 				80D7B46EAB946A01968CCDF8 /* filename_ext.cxx in Sources */,
@@ -9170,46 +9194,46 @@
 				8C352F4250261E6F42F1FA19 /* filename_list.cxx in Sources */,
 				BF87576CF80F55DD7380B991 /* filename_match.cxx in Sources */,
 				53ADEE51DE5FEEEB4A79CA21 /* filename_setext.cxx in Sources */,
-				CF3BDDBED0526F9FB4C8A1D2 /* fl_arc.cxx in Sources */,
-				3C758F19560BBB0931A7A741 /* fl_arci.cxx in Sources */,
-				F10B0DD63132D694D8879B1C /* fl_ask.cxx in Sources */,
-				7CD1A5049849133DFB39DF46 /* fl_boxtype.cxx in Sources */,
-				36978A2B5576E54EDA3F8D90 /* fl_call_main.cxx in Sources */,
-				E5A3C2482B9E218F550D91DA /* fl_color.cxx in Sources */,
-				79967B56F476337DA7A830CF /* fl_cursor.cxx in Sources */,
-				B234111841F3CC33C32E75A1 /* fl_curve.cxx in Sources */,
-				2BF486109B69CFEFB5C7950E /* fl_diamond_box.cxx in Sources */,
-				207AE6E5DDC5DE3F30896F39 /* fl_dnd.cxx in Sources */,
-				363F858BE2E0007242350184 /* fl_draw.cxx in Sources */,
-				F546A37A0957B9108A3E4227 /* fl_draw_image.cxx in Sources */,
-				30E10499346406FB87A5DD43 /* fl_draw_pixmap.cxx in Sources */,
-				DE48D54427106D76FDA1F6E0 /* fl_encoding_latin1.cxx in Sources */,
-				ABB49E921AA98E86EBD8142A /* fl_encoding_mac_roman.cxx in Sources */,
-				15FDFD86D6D450F2C221FBAC /* fl_engraved_label.cxx in Sources */,
-				EB81F3881B64050C7D312740 /* fl_file_dir.cxx in Sources */,
-				C9F44B469D5C83AAB89600F8 /* fl_font.cxx in Sources */,
-				EFCDA004289805697F6CF4B9 /* fl_gtk.cxx in Sources */,
-				4598BB77D7E3CBFC61C56140 /* fl_labeltype.cxx in Sources */,
-				A59E78B843DA2C7D12D49294 /* fl_line_style.cxx in Sources */,
-				BE74DB334A51DD19B62B76EB /* fl_open_uri.cxx in Sources */,
-				61BF99BBD1D18251E0170B8A /* fl_oval_box.cxx in Sources */,
-				C4F171DDF768A7556A684B76 /* fl_overlay.cxx in Sources */,
-				305944C743B9FD0B34805326 /* fl_overlay_visual.cxx in Sources */,
-				40F29FD83CE6117394258FAB /* fl_plastic.cxx in Sources */,
-				C91AB9ACD12BB4B352A00338 /* fl_read_image.cxx in Sources */,
-				39238B4623BCF68FDA9EE223 /* fl_rect.cxx in Sources */,
-				FE83B31EEE58493BD243B8C2 /* fl_round_box.cxx in Sources */,
-				AD0B8E3D9E97E625C55B967F /* fl_rounded_box.cxx in Sources */,
-				FCAEAB49DE121D3D2138610D /* fl_scroll_area.cxx in Sources */,
-				2952645AF2A836D88ADA48F9 /* fl_set_font.cxx in Sources */,
-				83BEAD361BB7BC2CD030A36B /* fl_set_fonts.cxx in Sources */,
-				03E51C6144E06D2161CDE5EB /* fl_shadow_box.cxx in Sources */,
-				1915B2B4724B8826C53616C9 /* fl_shortcut.cxx in Sources */,
-				CA982582F5FA39ED7D7118DA /* fl_show_colormap.cxx in Sources */,
-				3F497BC168C63621AB680203 /* fl_symbols.cxx in Sources */,
-				E05DB01E716C969FB0A9984E /* fl_utf8.cxx in Sources */,
-				DBA6ED75DC142BE30D95B619 /* fl_utf.cxx in Sources */,
-				0DA673401BF6865FFFEF7D18 /* fl_vertex.cxx in Sources */,
+				CF3BDDBED0526F9FB4C8A1D2 /* arc.cxx in Sources */,
+				3C758F19560BBB0931A7A741 /* arci.cxx in Sources */,
+				F10B0DD63132D694D8879B1C /* ask.cxx in Sources */,
+				7CD1A5049849133DFB39DF46 /* boxtype.cxx in Sources */,
+				36978A2B5576E54EDA3F8D90 /* call_main.cxx in Sources */,
+				E5A3C2482B9E218F550D91DA /* color.cxx in Sources */,
+				79967B56F476337DA7A830CF /* cursor.cxx in Sources */,
+				B234111841F3CC33C32E75A1 /* curve.cxx in Sources */,
+				2BF486109B69CFEFB5C7950E /* diamond_box.cxx in Sources */,
+				207AE6E5DDC5DE3F30896F39 /* dnd.cxx in Sources */,
+				363F858BE2E0007242350184 /* draw.cxx in Sources */,
+				F546A37A0957B9108A3E4227 /* draw_image.cxx in Sources */,
+				30E10499346406FB87A5DD43 /* draw_pixmap.cxx in Sources */,
+				DE48D54427106D76FDA1F6E0 /* encoding_latin1.cxx in Sources */,
+				ABB49E921AA98E86EBD8142A /* encoding_mac_roman.cxx in Sources */,
+				15FDFD86D6D450F2C221FBAC /* engraved_label.cxx in Sources */,
+				EB81F3881B64050C7D312740 /* file_dir.cxx in Sources */,
+				C9F44B469D5C83AAB89600F8 /* font.cxx in Sources */,
+				EFCDA004289805697F6CF4B9 /* gtk.cxx in Sources */,
+				4598BB77D7E3CBFC61C56140 /* labeltype.cxx in Sources */,
+				A59E78B843DA2C7D12D49294 /* line_style.cxx in Sources */,
+				BE74DB334A51DD19B62B76EB /* open_uri.cxx in Sources */,
+				61BF99BBD1D18251E0170B8A /* oval_box.cxx in Sources */,
+				C4F171DDF768A7556A684B76 /* overlay.cxx in Sources */,
+				305944C743B9FD0B34805326 /* overlay_visual.cxx in Sources */,
+				40F29FD83CE6117394258FAB /* plastic.cxx in Sources */,
+				C91AB9ACD12BB4B352A00338 /* read_image.cxx in Sources */,
+				39238B4623BCF68FDA9EE223 /* rect.cxx in Sources */,
+				FE83B31EEE58493BD243B8C2 /* round_box.cxx in Sources */,
+				AD0B8E3D9E97E625C55B967F /* rounded_box.cxx in Sources */,
+				FCAEAB49DE121D3D2138610D /* scroll_area.cxx in Sources */,
+				2952645AF2A836D88ADA48F9 /* set_font.cxx in Sources */,
+				83BEAD361BB7BC2CD030A36B /* set_fonts.cxx in Sources */,
+				03E51C6144E06D2161CDE5EB /* shadow_box.cxx in Sources */,
+				1915B2B4724B8826C53616C9 /* shortcut.cxx in Sources */,
+				CA982582F5FA39ED7D7118DA /* show_colormap.cxx in Sources */,
+				3F497BC168C63621AB680203 /* symbols.cxx in Sources */,
+				E05DB01E716C969FB0A9984E /* utf8.cxx in Sources */,
+				DBA6ED75DC142BE30D95B619 /* utf.cxx in Sources */,
+				0DA673401BF6865FFFEF7D18 /* vertex.cxx in Sources */,
 				F9A99DC4E0447A57F2242B0F /* numericsort.cxx in Sources */,
 				7B5F222AD68C2A4A4853951A /* ps_image.cxx in Sources */,
 				611144BED911A91A14E629C2 /* scandir.cxx in Sources */,
@@ -9245,14 +9269,14 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				E6582F0C45106AC28102A2E1 /* Fl_BMP_Image.cxx in Sources */,
-				4527A1842C292A307AB984FD /* Fl_File_Icon2.cxx in Sources */,
-				61475B3565DF64924AD4D896 /* Fl_GIF_Image.cxx in Sources */,
-				D0C372353DA3A182C063120A /* Fl_Help_Dialog.cxx in Sources */,
-				633E5465D656A9961EB5A771 /* Fl_JPEG_Image.cxx in Sources */,
-				6C9573986A4FFE9EE9ADFFDD /* Fl_PNG_Image.cxx in Sources */,
-				E8B17358A691471C1B2BD4D5 /* Fl_PNM_Image.cxx in Sources */,
-				C99E8BD8A6A0BDDBE07EE04C /* fl_images_core.cxx in Sources */,
+				E6582F0C45106AC28102A2E1 /* BMPImage.cxx in Sources */,
+				4527A1842C292A307AB984FD /* FileIcon2.cxx in Sources */,
+				61475B3565DF64924AD4D896 /* GIFImage.cxx in Sources */,
+				D0C372353DA3A182C063120A /* HelpDialog.cxx in Sources */,
+				C99E8BD8A6A0BDDBE07EE04C /* images_core.cxx in Sources */,
+				633E5465D656A9961EB5A771 /* JPEGImage.cxx in Sources */,
+				6C9573986A4FFE9EE9ADFFDD /* PNGImage.cxx in Sources */,
+				E8B17358A691471C1B2BD4D5 /* PNMImage.cxx in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

Deleted: branches/branch-3.0/include/fltk3/BMPImage.h

Deleted: branches/branch-3.0/include/fltk3/GIFImage.h

Deleted: branches/branch-3.0/include/fltk3/HelpDialog.h

Deleted: branches/branch-3.0/include/fltk3/JPEGImage.h

Deleted: branches/branch-3.0/include/fltk3/PNGImage.h

Deleted: branches/branch-3.0/include/fltk3/PNMImage.h

Copied: branches/branch-3.0/include/fltk3/all.h (from rev 9010, branches/branch-3.0/include/fltk3gl/all.h)
===================================================================
--- branches/branch-3.0/include/fltk3/all.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3/all.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,177 @@
+//
+// "$Id: all.h 8623 2011-04-24 17:09:41Z AlbrechtS $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 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 FLTK3_ALL_H
+#define FLTK3_ALL_H
+
+#include "Adjuster.h"
+#include "BMPImage.h"
+#include "Bitmap.h"
+#include "Box.h"
+#include "Browser.h"
+#include "Browser_.h"
+#include "Button.h"
+#include "Cairo.h"
+#include "CairoWindow.h"
+#include "Chart.h"
+#include "CheckBrowser.h"
+#include "CheckButton.h"
+#include "Choice.h"
+#include "Clock.h"
+#include "ColorChooser.h"
+#include "Counter.h"
+#include "Device.h"
+#include "Dial.h"
+#include "DoubleWindow.h"
+#include "Export.h"
+#include "FileBrowser.h"
+#include "FileChooser.h"
+#include "FileIcon.h"
+#include "FileInput.h"
+#include "FillDial.h"
+#include "FillSlider.h"
+#include "FloatInput.h"
+#include "FormsBitmap.h"
+#include "FormsPixmap.h"
+#include "Free.h"
+#include "GIFImage.h"
+#include "Group.h"
+#include "HelpDialog.h"
+#include "HelpView.h"
+#include "HoldBrowser.h"
+#include "HorFillSlider.h"
+#include "HorNiceSlider.h"
+#include "HorSlider.h"
+#include "HorValueSlider.h"
+#include "Image.h"
+#include "Input.h"
+#include "InputChoice.h"
+#include "Input_.h"
+#include "IntInput.h"
+#include "JPEGImage.h"
+#include "LightButton.h"
+#include "LineDial.h"
+#include "Makefile"
+#include "Makefile.in"
+#include "Menu.h"
+#include "MenuBar.h"
+#include "MenuButton.h"
+#include "MenuItem.h"
+#include "MenuWindow.h"
+#include "Menu_.h"
+#include "MultiBrowser.h"
+#include "MultiLabel.h"
+#include "MultilineInput.h"
+#include "MultilineOutput.h"
+#include "NativeFileChooser.h"
+#include "NiceSlider.h"
+#include "Object.h"
+#include "Output.h"
+#include "OverlayWindow.h"
+#include "PNGImage.h"
+#include "PNMImage.h"
+#include "PackedGroup.h"
+#include "PagedDevice.h"
+#include "Pixmap.h"
+#include "Plugin.h"
+#include "Positioner.h"
+#include "PostScript.h"
+#include "Preferences.h"
+#include "Printer.h"
+#include "Progress.h"
+#include "README.Xcode"
+#include "RGBImage.h"
+#include "RadioButton.h"
+#include "RadioLightButton.h"
+#include "RadioRoundButton.h"
+#include "Rectangle.h"
+#include "RepeatButton.h"
+#include "ReturnButton.h"
+#include "Roller.h"
+#include "RoundButton.h"
+#include "RoundClock.h"
+#include "ScrollGroup.h"
+#include "Scrollbar.h"
+#include "SecretInput.h"
+#include "SelectBrowser.h"
+#include "SharedImage.h"
+#include "SimpleCounter.h"
+#include "SingleWindow.h"
+#include "Slider.h"
+#include "Spinner.h"
+#include "Style.h"
+#include "SysMenuBar.h"
+#include "TabGroup.h"
+#include "Table.h"
+#include "TableRow.h"
+#include "TextBuffer.h"
+#include "TextDisplay.h"
+#include "TextEditor.h"
+#include "TiledGroup.h"
+#include "TiledImage.h"
+#include "Timer.h"
+#include "ToggleButton.h"
+#include "ToggleLightButton.h"
+#include "ToggleRoundButton.h"
+#include "Tooltip.h"
+#include "Tree.h"
+#include "TreeItem.h"
+#include "TreeItemArray.h"
+#include "TreePrefs.h"
+#include "Valuator.h"
+#include "ValueInput.h"
+#include "ValueOutput.h"
+#include "ValueSlider.h"
+#include "Widget.h"
+#include "Window.h"
+#include "WizardGroup.h"
+#include "Wrapper.h"
+#include "XBMImage.h"
+#include "XPMImage.h"
+#include "Xutf8.h"
+#include "ask.h"
+#include "dirent.h"
+#include "draw.h"
+#include "enumerations.h"
+#include "filename.h"
+#include "math.h"
+#include "message.h"
+#include "names.h"
+#include "osx.h"
+#include "run.h"
+#include "showInput.h"
+#include "show_colormap.h"
+#include "types.h"
+#include "utf8.h"
+#include "win32.h"
+#include "x.h"
+
+#endif // !FLTK3_ALL_H
+
+//
+// End of "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $".
+//

Copied: branches/branch-3.0/include/fltk3/fltk3.h (from rev 9008, branches/branch-3.0/include/fltk3gl/fltk3gl.h)
===================================================================
--- branches/branch-3.0/include/fltk3/fltk3.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3/fltk3.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,37 @@
+//
+// "$Id: all.h 8623 2011-04-24 17:09:41Z AlbrechtS $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 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 FLTK3_FLTK3_H
+#define FLTK3_FLTK3_H
+
+#include "all.h"
+
+#endif // !FLTK3_FLTK3_H
+
+//
+// End of "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $".
+//

Deleted: branches/branch-3.0/include/fltk3/forms.h

Modified: branches/branch-3.0/include/fltk3gl/all.h
===================================================================
--- branches/branch-3.0/include/fltk3gl/all.h	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/include/fltk3gl/all.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -34,7 +34,7 @@
 #include "GLWindow.h"
 #include "glDraw.h"
 
-#endif // !FLTK3GLALL_H
+#endif // !FLTK3GL_ALL_H
 
 //
 // End of "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $".

Modified: branches/branch-3.0/include/fltk3gl/fltk3gl.h
===================================================================
--- branches/branch-3.0/include/fltk3gl/fltk3gl.h	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/include/fltk3gl/fltk3gl.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -26,7 +26,7 @@
 //
 
 #ifndef FLTK3GL_FLTK3GL_H
-#define FLTK3GL_FLTK3ALL_H
+#define FLTK3GL_FLTK3GL_H
 
 #include "all.h"
 

Copied: branches/branch-3.0/include/fltk3images/BMPImage.h (from rev 9002, branches/branch-3.0/include/fltk3/BMPImage.h)
===================================================================
--- branches/branch-3.0/include/fltk3images/BMPImage.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3images/BMPImage.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,55 @@
+//
+// "$Id: BMPImage.h 7903 2010-11-28 21:06:39Z matt $"
+//
+// BMP image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+/* \file
+ fltk3::BMPImage widget . */
+
+#ifndef Fltk3_BMP_Image_H
+#define Fltk3_BMP_Image_H
+
+#include <fltk3/Image.h>
+
+namespace fltk3 {
+  
+  /**
+   The fltk3::BMPImage class supports loading, caching,
+   and drawing of Windows Bitmap (BMP) image files.
+   */
+  class FLTK3_EXPORT BMPImage : public fltk3::RGBImage {
+    
+  public:
+    
+    BMPImage(const char* filename);
+  };
+  
+}
+
+#endif
+
+//
+// End of "$Id: BMPImage.h 7903 2010-11-28 21:06:39Z matt $".
+//

Copied: branches/branch-3.0/include/fltk3images/GIFImage.h (from rev 9002, branches/branch-3.0/include/fltk3/GIFImage.h)
===================================================================
--- branches/branch-3.0/include/fltk3images/GIFImage.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3images/GIFImage.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,55 @@
+//
+// "$Id: GIFImage.h 7903 2010-11-28 21:06:39Z matt $"
+//
+// GIF image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+/* \file
+ fltk3::GIFImage widget . */
+
+#ifndef Fltk3_GIF_Image_H
+#define Fltk3_GIF_Image_H
+#include <fltk3/Pixmap.h>
+
+namespace fltk3 {
+  
+  /**
+   The fltk3::GIFImage class supports loading, caching,
+   and drawing of Compuserve GIF<SUP>SM</SUP> images. The class
+   loads the first image and supports transparency.
+   */
+  class FLTK3_EXPORT GIFImage : public fltk3::Pixmap {
+    
+  public:
+    
+    GIFImage(const char* filename);
+  };
+  
+}
+
+#endif
+
+//
+// End of "$Id: GIFImage.h 7903 2010-11-28 21:06:39Z matt $".
+//

Copied: branches/branch-3.0/include/fltk3images/HelpDialog.h (from rev 9002, branches/branch-3.0/include/fltk3/HelpDialog.h)
===================================================================
--- branches/branch-3.0/include/fltk3images/HelpDialog.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3images/HelpDialog.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,100 @@
+//
+// "$Id: HelpDialog.h 8063 2010-12-19 21:20:10Z matt $"
+//
+// fltk3::HelpDialog dialog for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+/* \file
+ fltk3::HelpDialog widget . */
+
+// generated by Fast Light User Interface Designer (fluid) version 1.0108
+
+#ifndef Fltk3_Help_Dialog_H
+#define Fltk3_Help_Dialog_H
+#include <fltk3/run.h>
+#include <fltk3/DoubleWindow.h>
+#include <fltk3/Group.h>
+#include <fltk3/Button.h>
+#include <fltk3/Input.h>
+#include <fltk3/Box.h>
+#include <fltk3/HelpView.h>
+
+namespace fltk3 {
+  
+  class FLTK3_EXPORT HelpDialog {
+    int index_; 
+    int max_; 
+    int line_[100];                 // FIXME: we must remove those static numbers
+    char file_[100][FLTK3_PATH_MAX];   // FIXME: we must remove those static numbers
+    int find_pos_; 
+  public:
+    HelpDialog();
+  private:
+    fltk3::DoubleWindow *window_;
+    fltk3::Button *back_;
+    void cb_back__i(fltk3::Button*, void*);
+    static void cb_back_(fltk3::Button*, void*);
+    fltk3::Button *forward_;
+    void cb_forward__i(fltk3::Button*, void*);
+    static void cb_forward_(fltk3::Button*, void*);
+    fltk3::Button *smaller_;
+    void cb_smaller__i(fltk3::Button*, void*);
+    static void cb_smaller_(fltk3::Button*, void*);
+    fltk3::Button *larger_;
+    void cb_larger__i(fltk3::Button*, void*);
+    static void cb_larger_(fltk3::Button*, void*);
+    fltk3::Input *find_;
+    void cb_find__i(fltk3::Input*, void*);
+    static void cb_find_(fltk3::Input*, void*);
+    fltk3::HelpView *view_;
+    void cb_view__i(fltk3::HelpView*, void*);
+    static void cb_view_(fltk3::HelpView*, 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(fltk3::Fontsize s);
+    fltk3::Fontsize 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();
+  };
+  
+}
+
+#endif
+
+//
+// End of "$Id: HelpDialog.h 8063 2010-12-19 21:20:10Z matt $".
+//

Copied: branches/branch-3.0/include/fltk3images/JPEGImage.h (from rev 9002, branches/branch-3.0/include/fltk3/JPEGImage.h)
===================================================================
--- branches/branch-3.0/include/fltk3images/JPEGImage.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3images/JPEGImage.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,58 @@
+//
+// "$Id: JPEGImage.h 7903 2010-11-28 21:06:39Z matt $"
+//
+// JPEG image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+/* \file
+ fltk3::JPEGImage class . */
+
+#ifndef Fltk3_JPEG_Image_H
+#define Fltk3_JPEG_Image_H
+#  include <fltk3/Image.h>
+
+
+namespace fltk3 {
+  
+  /**
+   The fltk3::JPEGImage class supports loading, caching,
+   and drawing of Joint Photographic Experts Group (JPEG) File
+   Interchange Format (JFIF) images. The class supports grayscale
+   and color (RGB) JPEG image files.
+   */
+  class FLTK3_EXPORT JPEGImage : public fltk3::RGBImage {
+    
+  public:
+    
+    JPEGImage(const char *filename);
+    JPEGImage(const char *name, const unsigned char *data);
+  };
+  
+}
+
+#endif
+
+//
+// End of "$Id: JPEGImage.h 7903 2010-11-28 21:06:39Z matt $".
+//

Copied: branches/branch-3.0/include/fltk3images/PNGImage.h (from rev 9002, branches/branch-3.0/include/fltk3/PNGImage.h)
===================================================================
--- branches/branch-3.0/include/fltk3images/PNGImage.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3images/PNGImage.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,59 @@
+//
+// "$Id: PNGImage.h 8287 2011-01-17 20:51:12Z manolo $"
+//
+// PNG image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+/* \file
+ fltk3::PNGImage class . */
+
+#ifndef Fltk3_PNG_Image_H
+#define Fltk3_PNG_Image_H
+#  include <fltk3/Image.h>
+
+namespace fltk3 {
+  
+  /**
+   The fltk3::PNGImage class supports loading, caching,
+   and drawing of Portable Network Graphics (PNG) image files. The
+   class loads colormapped and full-color images and handles color-
+   and alpha-based transparency.
+   */
+  class FLTK3_EXPORT PNGImage : public fltk3::RGBImage {
+    
+  public:
+    
+    PNGImage(const char* filename);
+    PNGImage (const char *name_png, const unsigned char *buffer, int datasize);
+  private:
+    void load_png_(const char *name_png, const unsigned char *buffer_png, int datasize);
+  };
+  
+}
+
+#endif
+
+//
+// End of "$Id: PNGImage.h 8287 2011-01-17 20:51:12Z manolo $".
+//

Copied: branches/branch-3.0/include/fltk3images/PNMImage.h (from rev 9002, branches/branch-3.0/include/fltk3/PNMImage.h)
===================================================================
--- branches/branch-3.0/include/fltk3images/PNMImage.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3images/PNMImage.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,56 @@
+//
+// "$Id: PNMImage.h 7903 2010-11-28 21:06:39Z matt $"
+//
+// PNM image header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+/* \file
+ fltk3::PNMImage class . */
+
+#ifndef Fltk3_PNM_Image_H
+#define Fltk3_PNM_Image_H
+#  include <fltk3/Image.h>
+
+namespace fltk3 {
+  
+  /**
+   The fltk3::PNMImage class supports loading, caching,
+   and drawing of Portable Anymap (PNM, PBM, PGM, PPM) image files. The class
+   loads bitmap, grayscale, and full-color images in both ASCII and
+   binary formats.
+   */
+  class FLTK3_EXPORT PNMImage : public fltk3::RGBImage {
+    
+  public:
+    
+    PNMImage(const char* filename);
+  };
+  
+}
+
+#endif
+
+//
+// End of "$Id: PNMImage.h 7903 2010-11-28 21:06:39Z matt $".
+//

Copied: branches/branch-3.0/include/fltk3images/all.h (from rev 9010, branches/branch-3.0/include/fltk3gl/all.h)
===================================================================
--- branches/branch-3.0/include/fltk3images/all.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3images/all.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,42 @@
+//
+// "$Id: all.h 8623 2011-04-24 17:09:41Z AlbrechtS $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 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 FLTK3IMAGES_ALL_H
+#define FLTK3IMAGES_ALL_H
+
+#include "BMPImage.h"
+#include "GIFImage.h"
+#include "HelpDialog.h"
+#include "JPEGImage.h"
+#include "PNGImage.h"
+#include "PNMImage.h"
+
+#endif // !FLTK3IMAGES_ALL_H
+
+//
+// End of "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $".
+//

Copied: branches/branch-3.0/include/fltk3images/fltk3images.h (from rev 9008, branches/branch-3.0/include/fltk3gl/fltk3gl.h)
===================================================================
--- branches/branch-3.0/include/fltk3images/fltk3images.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3images/fltk3images.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,37 @@
+//
+// "$Id: all.h 8623 2011-04-24 17:09:41Z AlbrechtS $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 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 FLTK3IMAGES_FLTK3IMAGES_H
+#define FLTK3IMAGES_FLTK3IMAGES_H
+
+#include "all.h"
+
+#endif // !FLTK3IMAGES_FLTK3IMAGES_H
+
+//
+// End of "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $".
+//

Copied: branches/branch-3.0/include/fltk3jpeg/all.h (from rev 9010, branches/branch-3.0/include/fltk3gl/all.h)
===================================================================
--- branches/branch-3.0/include/fltk3jpeg/all.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3jpeg/all.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,45 @@
+//
+// "$Id: all.h 8623 2011-04-24 17:09:41Z AlbrechtS $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 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 FLTK3JPEG_ALL_H
+#define FLTK3JPEG_ALL_H
+
+#include "jconfig.h"
+#include "jdct.h"
+#include "jerror.h"
+#include "jinclude.h"
+#include "jmemsys.h"
+#include "jmorecfg.h"
+#include "jpegint.h"
+#include "jpeglib.h"
+#include "jversion.h"
+
+#endif // !FLTK3JPEG_ALL_H
+
+//
+// End of "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $".
+//

Copied: branches/branch-3.0/include/fltk3jpeg/fltk3jpeg.h (from rev 9008, branches/branch-3.0/include/fltk3gl/fltk3gl.h)
===================================================================
--- branches/branch-3.0/include/fltk3jpeg/fltk3jpeg.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3jpeg/fltk3jpeg.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,37 @@
+//
+// "$Id: all.h 8623 2011-04-24 17:09:41Z AlbrechtS $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 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 FLTK3JPEG_FLTK3JPEG_H
+#define FLTK3JPEG_FLTK3JPEG_H
+
+#include "all.h"
+
+#endif // !FLTK3JPEG_FLTK3JPEG_H
+
+//
+// End of "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $".
+//

Copied: branches/branch-3.0/include/fltk3png/all.h (from rev 9010, branches/branch-3.0/include/fltk3gl/all.h)
===================================================================
--- branches/branch-3.0/include/fltk3png/all.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3png/all.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,43 @@
+//
+// "$Id: all.h 8623 2011-04-24 17:09:41Z AlbrechtS $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 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 FLTK3PNG_ALL_H
+#define FLTK3PNG_ALL_H
+
+#include "png.h"
+#include "pngconf.h"
+#include "pngdebug.h"
+#include "pnginfo.h"
+#include "pnglibconf.h"
+#include "pngpriv.h"
+#include "pngstruct.h"
+
+#endif // !FLTK3PNG_ALL_H
+
+//
+// End of "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $".
+//

Copied: branches/branch-3.0/include/fltk3png/fltk3png.h (from rev 9008, branches/branch-3.0/include/fltk3gl/fltk3gl.h)
===================================================================
--- branches/branch-3.0/include/fltk3png/fltk3png.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3png/fltk3png.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,37 @@
+//
+// "$Id: all.h 8623 2011-04-24 17:09:41Z AlbrechtS $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 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 FLTK3PNG_FLTK3PNG_H
+#define FLTK3PNG_FLTK3PNG_H
+
+#include "all.h"
+
+#endif // !FLTK3PNG_FLTK3PNG_H
+
+//
+// End of "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $".
+//

Copied: branches/branch-3.0/include/fltk3zlib/all.h (from rev 9010, branches/branch-3.0/include/fltk3gl/all.h)
===================================================================
--- branches/branch-3.0/include/fltk3zlib/all.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3zlib/all.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,48 @@
+//
+// "$Id: all.h 8623 2011-04-24 17:09:41Z AlbrechtS $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 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 FLTK3ZLIB_ALL_H
+#define FLTK3ZLIB_ALL_H
+
+#include "crc32.h"
+#include "deflate.h"
+#include "gzguts.h"
+#include "inffast.h"
+#include "inffixed.h"
+#include "inflate.h"
+#include "inftrees.h"
+#include "trees.h"
+#include "xx.h"
+#include "zconf.h"
+#include "zlib.h"
+#include "zutil.h"
+
+#endif // !FLTK3ZLIB_ALL_H
+
+//
+// End of "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $".
+//

Copied: branches/branch-3.0/include/fltk3zlib/fltk3zlib.h (from rev 9008, branches/branch-3.0/include/fltk3gl/fltk3gl.h)
===================================================================
--- branches/branch-3.0/include/fltk3zlib/fltk3zlib.h	                        (rev 0)
+++ branches/branch-3.0/include/fltk3zlib/fltk3zlib.h	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,37 @@
+//
+// "$Id: all.h 8623 2011-04-24 17:09:41Z AlbrechtS $"
+//
+// OpenGL header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 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 FLTK3ZLIB_FLTK3ZLIB_H
+#define FLTK3ZLIB_FLTK3ZLIB_H
+
+#include "all.h"
+
+#endif // !FLTK3ZLIB_FLTK3ZLIB_H
+
+//
+// End of "$Id: gl.h 8623 2011-04-24 17:09:41Z AlbrechtS $".
+//

Modified: branches/branch-3.0/src/Makefile
===================================================================
--- branches/branch-3.0/src/Makefile	2011-08-25 11:40:26 UTC (rev 9010)
+++ branches/branch-3.0/src/Makefile	2011-08-25 21:50:59 UTC (rev 9011)
@@ -27,150 +27,150 @@
 
 FLTK3_CPPFILES = \
 	fltk3/run.cxx \
-	core/Fl_Adjuster.cxx \
-	core/Fl_Bitmap.cxx \
-	core/Fl_Box.cxx \
-	core/Fl_Browser.cxx \
-	core/Fl_Browser_.cxx \
-	core/Fl_Browser_load.cxx \
-	core/Fl_Button.cxx \
-	core/Fl_Chart.cxx \
-	core/Fl_Check_Browser.cxx \
-	core/Fl_Check_Button.cxx \
-	core/Fl_Choice.cxx \
-	core/Fl_Clock.cxx \
-	core/Fl_Color_Chooser.cxx \
-	core/Fl_Counter.cxx \
-	core/Fl_Device.cxx \
-	core/Fl_Dial.cxx \
-	core/Fl_Double_Window.cxx \
-	core/Fl_File_Browser.cxx \
-	core/Fl_File_Chooser.cxx \
-	core/Fl_File_Chooser2.cxx \
-	core/Fl_File_Icon.cxx \
-	core/Fl_File_Input.cxx \
-	core/Fl_Group.cxx \
-	core/Fl_Help_View.cxx \
-	core/Fl_Image.cxx \
-	core/Fl_Input.cxx \
-	core/Fl_Input_.cxx \
-	core/Fl_Light_Button.cxx \
-	core/Fl_Menu.cxx \
-	core/Fl_Menu_.cxx \
-	core/Fl_Menu_Bar.cxx \
-	core/Fl_Menu_Button.cxx \
-	core/Fl_Menu_Window.cxx \
-	core/Fl_Menu_add.cxx \
-	core/Fl_Menu_global.cxx \
-	core/Fl_Multi_Label.cxx \
-	core/Fl_Native_File_Chooser.cxx \
-	core/Fl_Overlay_Window.cxx \
-	core/Fl_Pack.cxx \
-	core/Fl_Paged_Device.cxx \
-	core/Fl_Pixmap.cxx \
-	core/Fl_Positioner.cxx \
-	core/Fl_Printer.cxx \
-	core/Fl_Preferences.cxx \
-	core/Fl_Progress.cxx \
-	core/Fl_Repeat_Button.cxx \
-	core/Fl_Return_Button.cxx \
-	core/Fl_Roller.cxx \
-	core/Fl_Round_Button.cxx \
-	core/Fl_Scroll.cxx \
-	core/Fl_Scrollbar.cxx \
-	core/Fl_Shared_Image.cxx \
-	core/Fl_Single_Window.cxx \
-	core/Fl_Slider.cxx \
-	core/Style.cxx \
-	core/Fl_Sys_Menu_Bar.cxx \
-	core/Fl_Table.cxx \
-	core/Fl_Table_Row.cxx \
-	core/Fl_Tabs.cxx \
-	core/Fl_Text_Buffer.cxx \
-	core/Fl_Text_Display.cxx \
-	core/Fl_Text_Editor.cxx \
-	core/Fl_Tile.cxx \
-	core/Fl_Tiled_Image.cxx \
-	core/Fl_Tooltip.cxx \
-	core/Fl_Tree.cxx \
-	core/Fl_Tree_Item.cxx \
-	core/Fl_Tree_Item_Array.cxx \
-	core/Fl_Tree_Prefs.cxx \
-	core/Fl_Valuator.cxx \
-	core/Fl_Value_Input.cxx \
-	core/Fl_Value_Output.cxx \
-	core/Fl_Value_Slider.cxx \
-	core/Fl_Widget.cxx \
-	core/Fl_Window.cxx \
-	core/Fl_Window_fullscreen.cxx \
-	core/Fl_Window_hotspot.cxx \
-	core/Fl_Window_iconize.cxx \
-	core/Fl_Wizard.cxx \
-	core/Fl_XBM_Image.cxx \
-	core/Fl_XPM_Image.cxx \
-	core/Fl_abort.cxx \
-	core/Fl_add_idle.cxx \
-	core/Fl_arg.cxx \
-	core/Fl_compose.cxx \
-	core/Fl_display.cxx \
-	core/Fl_get_key.cxx \
-	core/Fl_get_system_colors.cxx \
-	core/Fl_grab.cxx \
-	core/Fl_lock.cxx \
-	core/Fl_own_colormap.cxx \
-	core/Fl_visual.cxx \
-	core/Fl_x.cxx \
-	core/filename_absolute.cxx \
-	core/filename_expand.cxx \
-	core/filename_ext.cxx \
-	core/filename_isdir.cxx \
-	core/filename_list.cxx \
-	core/filename_match.cxx \
-	core/filename_setext.cxx \
-	core/fl_arc.cxx \
-	core/fl_arci.cxx \
-	core/fl_ask.cxx \
-	core/fl_boxtype.cxx \
-	core/fl_call_main.cxx \
-	core/fl_color.cxx \
-	core/fl_cursor.cxx \
-	core/fl_curve.cxx \
-	core/fl_diamond_box.cxx \
-	core/fl_dnd.cxx \
-	core/fl_draw.cxx \
-	core/fl_draw_image.cxx \
-	core/fl_draw_pixmap.cxx \
-	core/fl_encoding_latin1.cxx \
-	core/fl_encoding_mac_roman.cxx \
-	core/fl_engraved_label.cxx \
-	core/fl_file_dir.cxx \
-	core/fl_font.cxx \
-	core/fl_gtk.cxx \
-	core/fl_labeltype.cxx \
-	core/fl_line_style.cxx \
-	core/fl_open_uri.cxx \
-	core/fl_oval_box.cxx \
-	core/fl_overlay.cxx \
-	core/fl_overlay_visual.cxx \
-	core/fl_plastic.cxx \
-	core/fl_read_image.cxx \
-	core/fl_rect.cxx \
-	core/fl_round_box.cxx \
-	core/fl_rounded_box.cxx \
-	core/fl_scroll_area.cxx \
-	core/fl_set_font.cxx \
-	core/fl_set_fonts.cxx \
-	core/fl_shadow_box.cxx \
-	core/fl_shortcut.cxx \
-	core/fl_show_colormap.cxx \
-	core/fl_symbols.cxx \
-	core/fl_utf8.cxx \
-	core/fl_utf.cxx \
-	core/fl_vertex.cxx \
-	core/numericsort.cxx \
-	core/ps_image.cxx \
-	core/scandir.cxx \
-	core/screen_xywh.cxx
+	fltk3/Adjuster.cxx \
+	fltk3/Bitmap.cxx \
+	fltk3/Box.cxx \
+	fltk3/Browser.cxx \
+	fltk3/Browser_.cxx \
+	fltk3/Browser_load.cxx \
+	fltk3/Button.cxx \
+	fltk3/Chart.cxx \
+	fltk3/CheckBrowser.cxx \
+	fltk3/CheckButton.cxx \
+	fltk3/Choice.cxx \
+	fltk3/Clock.cxx \
+	fltk3/ColorChooser.cxx \
+	fltk3/Counter.cxx \
+	fltk3/Device.cxx \
+	fltk3/Dial.cxx \
+	fltk3/DoubleWindow.cxx \
+	fltk3/FileBrowser.cxx \
+	fltk3/FileChooser.cxx \
+	fltk3/FileChooser2.cxx \
+	fltk3/FileIcon.cxx \
+	fltk3/FileInput.cxx \
+	fltk3/Group.cxx \
+	fltk3/HelpView.cxx \
+	fltk3/Image.cxx \
+	fltk3/Input.cxx \
+	fltk3/Input_.cxx \
+	fltk3/LightButton.cxx \
+	fltk3/Menu.cxx \
+	fltk3/Menu_.cxx \
+	fltk3/MenuBar.cxx \
+	fltk3/MenuButton.cxx \
+	fltk3/MenuWindow.cxx \
+	fltk3/Menu_add.cxx \
+	fltk3/Menu_global.cxx \
+	fltk3/MultiLabel.cxx \
+	fltk3/NativeFileChooser.cxx \
+	fltk3/OverlayWindow.cxx \
+	fltk3/PackedGroup.cxx \
+	fltk3/PagedDevice.cxx \
+	fltk3/Pixmap.cxx \
+	fltk3/Positioner.cxx \
+	fltk3/Printer.cxx \
+	fltk3/Preferences.cxx \
+	fltk3/Progress.cxx \
+	fltk3/RepeatButton.cxx \
+	fltk3/ReturnButton.cxx \
+	fltk3/Roller.cxx \
+	fltk3/RoundButton.cxx \
+	fltk3/ScrollGroup.cxx \
+	fltk3/Scrollbar.cxx \
+	fltk3/SharedImage.cxx \
+	fltk3/SingleWindow.cxx \
+	fltk3/Slider.cxx \
+	fltk3/Style.cxx \
+	fltk3/SysMenuBar.cxx \
+	fltk3/Table.cxx \
+	fltk3/TableRow.cxx \
+	fltk3/TabGroup.cxx \
+	fltk3/TextBuffer.cxx \
+	fltk3/TextDisplay.cxx \
+	fltk3/TextEditor.cxx \
+	fltk3/TiledGroup.cxx \
+	fltk3/TiledImage.cxx \
+	fltk3/Tooltip.cxx \
+	fltk3/Tree.cxx \
+	fltk3/TreeItem.cxx \
+	fltk3/TreeItemArray.cxx \
+	fltk3/TreePrefs.cxx \
+	fltk3/Valuator.cxx \
+	fltk3/ValueInput.cxx \
+	fltk3/ValueOutput.cxx \
+	fltk3/ValueSlider.cxx \
+	fltk3/Widget.cxx \
+	fltk3/Window.cxx \
+	fltk3/Window_fullscreen.cxx \
+	fltk3/Window_hotspot.cxx \
+	fltk3/Window_iconize.cxx \
+	fltk3/Wizard.cxx \
+	fltk3/XBMImage.cxx \
+	fltk3/XPMImage.cxx \
+	fltk3/abort.cxx \
+	fltk3/add_idle.cxx \
+	fltk3/arg.cxx \
+	fltk3/compose.cxx \
+	fltk3/display.cxx \
+	fltk3/get_key.cxx \
+	fltk3/get_system_colors.cxx \
+	fltk3/grab.cxx \
+	fltk3/lock.cxx \
+	fltk3/own_colormap.cxx \
+	fltk3/visual.cxx \
+	fltk3/x11.cxx \
+	fltk3/filename_absolute.cxx \
+	fltk3/filename_expand.cxx \
+	fltk3/filename_ext.cxx \
+	fltk3/filename_isdir.cxx \
+	fltk3/filename_list.cxx \
+	fltk3/filename_match.cxx \
+	fltk3/filename_setext.cxx \
+	fltk3/arc.cxx \
+	fltk3/arci.cxx \
+	fltk3/ask.cxx \
+	fltk3/boxtype.cxx \
+	fltk3/call_main.cxx \
+	fltk3/color.cxx \
+	fltk3/cursor.cxx \
+	fltk3/curve.cxx \
+	fltk3/diamond_box.cxx \
+	fltk3/dnd.cxx \
+	fltk3/draw.cxx \
+	fltk3/draw_image.cxx \
+	fltk3/draw_pixmap.cxx \
+	fltk3/encoding_latin1.cxx \
+	fltk3/encoding_mac_roman.cxx \
+	fltk3/engraved_label.cxx \
+	fltk3/file_dir.cxx \
+	fltk3/font.cxx \
+	fltk3/gtk.cxx \
+	fltk3/labeltype.cxx \
+	fltk3/line_style.cxx \
+	fltk3/open_uri.cxx \
+	fltk3/oval_box.cxx \
+	fltk3/overlay.cxx \
+	fltk3/overlay_visual.cxx \
+	fltk3/plastic.cxx \
+	fltk3/read_image.cxx \
+	fltk3/rect.cxx \
+	fltk3/round_box.cxx \
+	fltk3/rounded_box.cxx \
+	fltk3/scroll_area.cxx \
+	fltk3/set_font.cxx \
+	fltk3/set_fonts.cxx \
+	fltk3/shadow_box.cxx \
+	fltk3/shortcut.cxx \
+	fltk3/show_colormap.cxx \
+	fltk3/symbols.cxx \
+	fltk3/utf8.cxx \
+	fltk3/utf.cxx \
+	fltk3/vertex.cxx \
+	fltk3/numericsort.cxx \
+	fltk3/ps_image.cxx \
+	fltk3/scandir.cxx \
+	fltk3/screen_xywh.cxx
 
 FLTK3GL_CPPFILES = \
 	fltk3gl/GLChoice.cxx \
@@ -187,30 +187,30 @@
 	fltk3gl/glut_font.cxx
 
 FLTK3IMAGES_CPPFILES = \
-	core/Fl_BMP_Image.cxx \
-	core/Fl_File_Icon2.cxx \
-	core/Fl_GIF_Image.cxx \
-	core/Fl_Help_Dialog.cxx \
-	core/Fl_JPEG_Image.cxx \
-	core/Fl_PNG_Image.cxx \
-	core/Fl_PNM_Image.cxx \
-	core/fl_images_core.cxx
+	fltk3images/BMPImage.cxx \
+	fltk3images/FileIcon2.cxx \
+	fltk3images/GIFImage.cxx \
+	fltk3images/HelpDialog.cxx \
+	fltk3images/images_core.cxx \
+	fltk3images/JPEGImage.cxx \
+	fltk3images/PNGImage.cxx \
+	fltk3images/PNMImage.cxx
 
 FLTK3_OBJCPPFILES = \
-	core/Fl_cocoa.mm \
-	core/Fl_Native_File_Chooser_MAC.mm \
-	core/Fl_Quartz_Printer.mm
+	fltk3/cocoa.mm \
+	fltk3/cocoaNativeFileChooser.mm \
+	fltk3/cocoaQuartzPrinter.mm
 
 FLTK3_CFILES = \
-	core/flstring.c \
-	core/vsnprintf.c \
-	core/xutf8/case.c \
-	core/xutf8/is_right2left.c \
-	core/xutf8/is_spacing.c \
-	core/xutf8/keysym2Ucs.c \
-	core/xutf8/utf8Input.c \
-	core/xutf8/utf8Utils.c \
-	core/xutf8/utf8Wrap.c
+	fltk3/flstring.c \
+	fltk3/vsnprintf.c \
+	fltk3/xutf8/case.c \
+	fltk3/xutf8/is_right2left.c \
+	fltk3/xutf8/is_spacing.c \
+	fltk3/xutf8/keysym2Ucs.c \
+	fltk3/xutf8/utf8Input.c \
+	fltk3/xutf8/utf8Utils.c \
+	fltk3/xutf8/utf8Wrap.c
 
 FLTK3PNG_CFILES = \
 	fltk3png/png.c \

Copied: branches/branch-3.0/src/fltk3/Adjuster.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Adjuster.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Adjuster.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Adjuster.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,183 @@
+//
+// "$Id$"
+//
+// Adjuster widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/Adjuster.h>
+#include <fltk3/Bitmap.h>
+#include <fltk3/draw.h>
+#include <fltk3/Wrapper.h>
+
+#include "fastarrow.h"
+static fltk3::Bitmap fastarrow(fastarrow_bits, fastarrow_width, fastarrow_height);
+#include "mediumarrow.h"
+static fltk3::Bitmap mediumarrow(mediumarrow_bits, mediumarrow_width, mediumarrow_height);
+#include "slowarrow.h"
+static fltk3::Bitmap slowarrow(slowarrow_bits, slowarrow_width, slowarrow_height);
+
+// changing the value does not change the appearance:
+void fltk3::Adjuster::value_damage() {}
+
+void fltk3::Adjuster::draw() {
+  int dx, dy, W, H;
+  if (w()>=h()) {
+    dx = W = w()/3;
+    dy = 0; H = h();
+  } else {
+    dx = 0; W = w();
+    dy = H = h()/3;
+  }
+  draw_box(drag==1?fltk3::DOWN_BOX:box(), x(),  y()+2*dy, W, H, color());
+  draw_box(drag==2?fltk3::DOWN_BOX:box(), x()+dx, y()+dy, W, H, color());
+  draw_box(drag==3?fltk3::DOWN_BOX:box(), x()+2*dx,  y(), W, H, color());
+  if (active_r())
+    fltk3::color(selection_color());
+  else
+    fltk3::color(fltk3::inactive(selection_color()));
+  fastarrow.draw(x()+(W-fastarrow_width)/2,
+		 y()+2*dy+(H-fastarrow_height)/2, W, H);
+  mediumarrow.draw(x()+dx+(W-mediumarrow_width)/2,
+		   y()+dy+(H-mediumarrow_height)/2, W, H);
+  slowarrow.draw(x()+2*dx+(W-slowarrow_width)/2,
+		 y()+(H-slowarrow_width)/2, W, H);
+  if (fltk3::focus() == this) draw_focus();
+}
+
+int fltk3::Adjuster::handle(int event) {
+  double v;
+  int delta;
+  int mx = fltk3::event_x();
+  // fltk3::WidgetTracker wp(this);
+  switch (event) {
+    case fltk3::PUSH:
+      if (fltk3::visible_focus()) fltk3::focus(this);
+      ix = mx;
+      if (w()>=h())
+	drag = 3*(mx-x())/w() + 1;
+      else
+	drag = 3-3*(fltk3::event_y()-y()-1)/h();
+      { fltk3::WidgetTracker wp(this);
+	handle_push();
+	if (wp.deleted()) return 1;
+      }
+      redraw();
+      return 1;
+    case fltk3::DRAG:
+      if (w() >= h()) {
+	delta = x()+(drag-1)*w()/3;	// left edge of button
+	if (mx < delta)
+	  delta = mx-delta;
+	else if (mx > (delta+w()/3)) // right edge of button
+	  delta = mx-delta-w()/3;
+	else
+	  delta = 0;
+      } else {
+	if (mx < x())
+	  delta = mx-x();
+	else if (mx > (x()+w()))
+	  delta = mx-x()-w();
+	else
+	  delta = 0;
+      }
+      switch (drag) {
+	case 3: v = increment(previous_value(), delta); break;
+	case 2: v = increment(previous_value(), delta*10); break;
+	default:v = increment(previous_value(), delta*100); break;
+      }
+      handle_drag(soft() ? softclamp(v) : clamp(v));
+      return 1;
+    case fltk3::RELEASE:
+      if (fltk3::event_is_click()) { // detect click but no drag
+	if (fltk3::event_state()&0xF0000) delta = -10;
+	else delta = 10;
+	switch (drag) {
+	  case 3: v = increment(previous_value(), delta); break;
+	  case 2: v = increment(previous_value(), delta*10); break;
+	  default:v = increment(previous_value(), delta*100); break;
+	}
+	fltk3::WidgetTracker wp(this);
+	handle_drag(soft() ? softclamp(v) : clamp(v));
+	if (wp.deleted()) return 1;
+      }
+      drag = 0;
+      redraw();
+      handle_release();
+      return 1;
+    case fltk3::KEYBOARD :
+      switch (fltk3::event_key()) {
+	case fltk3::UpKey:
+          if (w() > h()) return 0;
+	  handle_drag(clamp(increment(value(),-1)));
+	  return 1;
+	case fltk3::DownKey:
+          if (w() > h()) return 0;
+	  handle_drag(clamp(increment(value(),1)));
+	  return 1;
+	case fltk3::LeftKey:
+          if (w() < h()) return 0;
+	  handle_drag(clamp(increment(value(),-1)));
+	  return 1;
+	case fltk3::RightKey:
+          if (w() < h()) return 0;
+	  handle_drag(clamp(increment(value(),1)));
+	  return 1;
+	default:
+          return 0;
+      }
+      // break not required because of switch...
+
+    case fltk3::FOCUS:
+    case fltk3::UNFOCUS:
+      if (fltk3::visible_focus()) {
+        redraw();
+        return 1;
+      } else return 0;
+
+    case fltk3::ENTER :
+    case fltk3::LEAVE :
+      return 1;
+  }
+  return 0;
+}
+
+/**
+  Creates a new fltk3::Adjuster widget using the given position,
+  size, and label string. It looks best if one of the dimensions is 3
+  times the other.
+  <P> Inherited destructor destroys the Valuator.
+*/
+fltk3::Adjuster::Adjuster(int X, int Y, int W, int H, const char* l)
+  : fltk3::Valuator(X, Y, W, H, l) {
+  box(fltk3::UP_BOX);
+  step(1, 10000);
+  selection_color(fltk3::SELECTION_COLOR);
+  drag = 0;
+  soft_ = 1;
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Bitmap.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Bitmap.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Bitmap.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Bitmap.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,482 @@
+//
+// "$Id$"
+//
+// Bitmap drawing routines for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+/** \fn fltk3::Bitmap::fltk3::Bitmap(const char *array, int W, int H)
+  The constructors create a new bitmap from the specified bitmap data.*/
+
+/** \fn fltk3::Bitmap::fltk3::Bitmap(const unsigned char *array, int W, int H)
+  The constructors create a new bitmap from the specified bitmap data.*/
+
+#include <fltk3/run.h>
+#include <fltk3/x.h>
+#include <fltk3/draw.h>
+#include <fltk3/Widget.h>
+#include <fltk3/MenuItem.h>
+#include <fltk3/Bitmap.h>
+#include <fltk3/Printer.h>
+#include "flstring.h"
+
+#if defined(__APPLE_QUARTZ__)
+
+
+fltk3::Bitmask fl_create_bitmask(int w, int h, const uchar *array) {
+  static uchar reverse[16] =    /* Bit reversal lookup table */
+    { 0x00, 0x88, 0x44, 0xcc, 0x22, 0xaa, 0x66, 0xee, 
+      0x11, 0x99, 0x55, 0xdd, 0x33, 0xbb, 0x77, 0xff };
+  int rowBytes = (w+7)>>3 ;
+  uchar *bmask = (uchar*)malloc(rowBytes*h), *dst = bmask;
+  const uchar *src = array;
+  for ( int i=rowBytes*h; i>0; i--,src++ ) {
+    *dst++ = ((reverse[*src & 0x0f] & 0xf0) | (reverse[(*src >> 4) & 0x0f] & 0x0f))^0xff;
+  }
+  CGDataProviderRef srcp = CGDataProviderCreateWithData( 0L, bmask, rowBytes*h, 0L);
+  CGImageRef id_ = CGImageMaskCreate( w, h, 1, 1, rowBytes, srcp, 0L, false);
+  CGDataProviderRelease(srcp);
+  return (fltk3::Bitmask)id_;
+}
+void fl_delete_bitmask(fltk3::Bitmask bm) {
+  if (bm) CGImageRelease((CGImageRef)bm);
+}
+
+
+#elif defined(WIN32) // Windows bitmask functions...
+
+
+// 'fl_create_bitmap()' - Create a 1-bit bitmap for drawing...
+static fltk3::Bitmask fl_create_bitmap(int w, int h, const uchar *data) {
+  // we need to pad the lines out to words & swap the bits
+  // in each byte.
+  int w1 = (w+7)/8;
+  int w2 = ((w+15)/16)*2;
+  uchar* newarray = new uchar[w2*h];
+  const uchar* src = data;
+  uchar* dest = newarray;
+  fltk3::Bitmask bm;
+  static uchar reverse[16] =	/* Bit reversal lookup table */
+  	      { 0x00, 0x88, 0x44, 0xcc, 0x22, 0xaa, 0x66, 0xee,
+		0x11, 0x99, 0x55, 0xdd, 0x33, 0xbb, 0x77, 0xff };
+
+  for (int y=0; y < h; y++) {
+    for (int n = 0; n < w1; n++, src++)
+      *dest++ = (uchar)((reverse[*src & 0x0f] & 0xf0) |
+	                (reverse[(*src >> 4) & 0x0f] & 0x0f));
+    dest += w2-w1;
+  }
+
+  bm = CreateBitmap(w, h, 1, 1, newarray);
+
+  delete[] newarray;
+
+  return bm;
+}
+
+// 'fl_create_bitmask()' - Create an N-bit bitmap for masking...
+fltk3::Bitmask fl_create_bitmask(int w, int h, const uchar *data) {
+  // this won't work when the user changes display mode during run or
+  // has two screens with differnet depths
+  fltk3::Bitmask bm;
+  static uchar hiNibble[16] =
+  { 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
+    0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0 };
+  static uchar loNibble[16] =
+  { 0x00, 0x08, 0x04, 0x0c, 0x02, 0x0a, 0x06, 0x0e,
+    0x01, 0x09, 0x05, 0x0d, 0x03, 0x0b, 0x07, 0x0f };
+  int np  = GetDeviceCaps(fl_gc, PLANES);	//: was always one on sample machines
+  int bpp = GetDeviceCaps(fl_gc, BITSPIXEL);//: 1,4,8,16,24,32 and more odd stuff?
+  int Bpr = (bpp*w+7)/8;			//: bytes per row
+  int pad = Bpr&1, w1 = (w+7)/8, shr = ((w-1)&7)+1;
+  if (bpp==4) shr = (shr+1)/2;
+  uchar *newarray = new uchar[(Bpr+pad)*h];
+  uchar *dst = newarray;
+  const uchar *src = data;
+
+  for (int i=0; i<h; i++) {
+    // This is slooow, but we do it only once per pixmap
+    for (int j=w1; j>0; j--) {
+      uchar b = *src++;
+      if (bpp==1) {
+        *dst++ = (uchar)( hiNibble[b&15] ) | ( loNibble[(b>>4)&15] );
+      } else if (bpp==4) {
+        for (int k=(j==1)?shr:4; k>0; k--) {
+          *dst++ = (uchar)("\377\360\017\000"[b&3]);
+          b = b >> 2;
+        }
+      } else {
+        for (int k=(j==1)?shr:8; k>0; k--) {
+          if (b&1) {
+            *dst++=0;
+	    if (bpp>8) *dst++=0;
+            if (bpp>16) *dst++=0;
+	    if (bpp>24) *dst++=0;
+	  } else {
+	    *dst++=0xff;
+	    if (bpp>8) *dst++=0xff;
+	    if (bpp>16) *dst++=0xff;
+	    if (bpp>24) *dst++=0xff;
+	  }
+
+	  b = b >> 1;
+        }
+      }
+    }
+
+    dst += pad;
+  }
+
+  bm = CreateBitmap(w, h, np, bpp, newarray);
+  delete[] newarray;
+
+  return bm;
+}
+
+
+void fl_delete_bitmask(fltk3::Bitmask bm) {
+  DeleteObject((HGDIOBJ)bm);
+}
+
+
+#else // X11 bitmask functions
+
+
+fltk3::Bitmask fl_create_bitmask(int w, int h, const uchar *data) {
+  return XCreateBitmapFromData(fl_display, fl_window, (const char *)data,
+                               (w+7)&-8, h);
+}
+
+void fl_delete_bitmask(fltk3::Bitmask bm) {
+  fl_delete_offscreen((fltk3::Offscreen)bm);
+}
+
+
+#endif // __APPLE__
+
+
+// Create a 1-bit mask used for alpha blending
+fltk3::Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *array) {
+  fltk3::Bitmask bm;
+  int bmw = (w + 7) / 8;
+  uchar *bitmap = new uchar[bmw * h];
+  uchar *bitptr, bit;
+  const uchar *dataptr;
+  int x, y;
+  static uchar dither[16][16] = { // Simple 16x16 Floyd dither
+    { 0,   128, 32,  160, 8,   136, 40,  168,
+      2,   130, 34,  162, 10,  138, 42,  170 },
+    { 192, 64,  224, 96,  200, 72,  232, 104,
+      194, 66,  226, 98,  202, 74,  234, 106 },
+    { 48,  176, 16,  144, 56,  184, 24,  152,
+      50,  178, 18,  146, 58,  186, 26,  154 },
+    { 240, 112, 208, 80,  248, 120, 216, 88,
+      242, 114, 210, 82,  250, 122, 218, 90 },
+    { 12,  140, 44,  172, 4,   132, 36,  164,
+      14,  142, 46,  174, 6,   134, 38,  166 },
+    { 204, 76,  236, 108, 196, 68,  228, 100,
+      206, 78,  238, 110, 198, 70,  230, 102 },
+    { 60,  188, 28,  156, 52,  180, 20,  148,
+      62,  190, 30,  158, 54,  182, 22,  150 },
+    { 252, 124, 220, 92,  244, 116, 212, 84,
+      254, 126, 222, 94,  246, 118, 214, 86 },
+    { 3,   131, 35,  163, 11,  139, 43,  171,
+      1,   129, 33,  161, 9,   137, 41,  169 },
+    { 195, 67,  227, 99,  203, 75,  235, 107,
+      193, 65,  225, 97,  201, 73,  233, 105 },
+    { 51,  179, 19,  147, 59,  187, 27,  155,
+      49,  177, 17,  145, 57,  185, 25,  153 },
+    { 243, 115, 211, 83,  251, 123, 219, 91,
+      241, 113, 209, 81,  249, 121, 217, 89 },
+    { 15,  143, 47,  175, 7,   135, 39,  167,
+      13,  141, 45,  173, 5,   133, 37,  165 },
+    { 207, 79,  239, 111, 199, 71,  231, 103,
+      205, 77,  237, 109, 197, 69,  229, 101 },
+    { 63,  191, 31,  159, 55,  183, 23,  151,
+      61,  189, 29,  157, 53,  181, 21,  149 },
+    { 254, 127, 223, 95,  247, 119, 215, 87,
+      253, 125, 221, 93,  245, 117, 213, 85 }
+  };
+
+  // Generate a 1-bit "screen door" alpha mask; not always pretty, but
+  // definitely fast...  In the future we may be able to support things
+  // like the RENDER extension in XFree86, when available, to provide
+  // true RGBA-blended rendering.  See:
+  //
+  //     http://www.xfree86.org/~keithp/render/protocol.html
+  //
+  // for more info on XRender...
+  //
+  // MacOS already provides alpha blending support and has its own
+  // fl_create_alphamask() function...
+  memset(bitmap, 0, bmw * h);
+
+  for (dataptr = array + d - 1, y = 0; y < h; y ++, dataptr += ld)
+    for (bitptr = bitmap + y * bmw, bit = 1, x = 0; x < w; x ++, dataptr += d) {
+      if (*dataptr > dither[x & 15][y & 15])
+	*bitptr |= bit;
+      if (bit < 128) bit <<= 1;
+      else {
+	bit = 1;
+	bitptr ++;
+      }
+    }
+
+  bm = fl_create_bitmask(w, h, bitmap);
+  delete[] bitmap;
+
+  return (bm);
+}
+
+void fltk3::Bitmap::draw(int XP, int YP, int WP, int HP, int cx, int cy) {
+  fltk3::graphics_driver->draw(this, XP, YP, WP, HP, cx, cy);
+}
+
+static int start(fltk3::Bitmap *bm, int XP, int YP, int WP, int HP, int w, int h, int &cx, int &cy, 
+		 int &X, int &Y, int &W, int &H)
+{
+  // account for current clip region (faster on Irix):
+  fltk3::clip_box(XP,YP,WP,HP,X,Y,W,H);
+  cx += X-XP; cy += Y-YP;
+  // clip the box down to the size of image, quit if empty:
+  if (cx < 0) {W += cx; X -= cx; cx = 0;}
+  if (cx+W > w) W = w-cx;
+  if (W <= 0) return 1;
+  if (cy < 0) {H += cy; Y -= cy; cy = 0;}
+  if (cy+H > h) H = h-cy;
+  if (H <= 0) return 1;
+  return 0;
+}
+
+#ifdef __APPLE__
+void fltk3::QuartzGraphicsDriver::draw(fltk3::Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
+  int X, Y, W, H;
+  if (!bm->array) {
+    bm->draw_empty(XP, YP);
+    return;
+  }
+  if (start(bm, XP, YP, WP, HP, bm->w(), bm->h(), cx, cy, X, Y, W, H)) {
+    return;
+  }
+  if (!bm->id_) bm->id_ = fl_create_bitmask(bm->w(), bm->h(), bm->array);
+  if (bm->id_ && fl_gc) {
+    CGRect rect = { { X, Y }, { W, H } };
+    Fl_X::q_begin_image(rect, cx, cy, bm->w(), bm->h());
+    CGContextDrawImage(fl_gc, rect, (CGImageRef)bm->id_);
+    Fl_X::q_end_image();
+  }
+}
+
+#elif defined(WIN32)
+void fltk3::GDIGraphicsDriver::draw(fltk3::Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
+  int X, Y, W, H;
+  if (!bm->array) {
+    bm->draw_empty(XP, YP);
+    return;
+  }
+  if (start(bm, XP, YP, WP, HP, bm->w(), bm->h(), cx, cy, X, Y, W, H)) {
+    return;
+  }
+  if (!bm->id_) bm->id_ = fl_create_bitmap(bm->w(), bm->h(), bm->array);
+  
+  typedef BOOL (WINAPI* fl_transp_func)  (HDC,int,int,int,int,HDC,int,int,int,int,UINT);
+  static fl_transp_func fl_TransparentBlt;
+  HDC tempdc;
+  int save;
+  BOOL use_print_algo = false;
+  if (fltk3::SurfaceDevice::surface()->class_name() == fltk3::Printer::class_id) {
+    static HMODULE hMod = NULL;
+    if (!hMod) {
+      hMod = LoadLibrary("MSIMG32.DLL");
+      if (hMod) fl_TransparentBlt = (fl_transp_func)GetProcAddress(hMod, "TransparentBlt");
+    }
+    if (fl_TransparentBlt) use_print_algo = true;
+  }
+  if (use_print_algo) { // algorithm for bitmap output to Fl_GDI_Printer
+    fltk3::Offscreen tmp_id = fl_create_offscreen(W, H);
+    fl_begin_offscreen(tmp_id);
+    fltk3::Color save_c = fltk3::color(); // save bitmap's desired color
+    uchar r, g, b;
+    fltk3::get_color(save_c, r, g, b);
+    r = 255-r;
+    g = 255-g;
+    b = 255-b;
+    fltk3::Color background = fltk3::rgb_color(r, g, b); // a color very different from the bitmap's
+    fltk3::color(background);
+    fltk3::rectf(0,0,W,H); // use this color as offscreen background
+    fltk3::color(save_c); // back to bitmap's color
+    tempdc = CreateCompatibleDC(fl_gc);
+    save = SaveDC(tempdc);
+    SelectObject(tempdc, (HGDIOBJ)bm->id_);
+    SelectObject(fl_gc, fl_brush()); // use bitmap's desired color
+    BitBlt(fl_gc, 0, 0, W, H, tempdc, 0, 0, 0xE20746L); // draw bitmap to offscreen
+    fl_end_offscreen(); // offscreen data is in tmp_id
+    SelectObject(tempdc, (HGDIOBJ)tmp_id); // use offscreen data
+    // draw it to printer context with background color as transparent
+    fl_TransparentBlt(fl_gc, X,Y,W,H, tempdc, cx, cy, bm->w(), bm->h(), RGB(r, g, b) ); 
+    fl_delete_offscreen(tmp_id);
+  }
+  else { // algorithm for bitmap output to display
+    tempdc = CreateCompatibleDC(fl_gc);
+    save = SaveDC(tempdc);
+    SelectObject(tempdc, (HGDIOBJ)bm->id_);
+    SelectObject(fl_gc, fl_brush());
+    // secret bitblt code found in old MSWindows reference manual:
+    BitBlt(fl_gc, X, Y, W, H, tempdc, cx, cy, 0xE20746L);
+  }
+  RestoreDC(tempdc, save);
+  DeleteDC(tempdc);
+}  
+
+#else // Xlib
+void fltk3::XlibGraphicsDriver::draw(fltk3::Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
+  int X, Y, W, H;
+  if (!bm->array) {
+    bm->draw_empty(XP, YP);
+    return;
+  }
+  if (start(bm, XP, YP, WP, HP, bm->w(), bm->h(), cx, cy, X, Y, W, H)) {
+    return;
+  }
+  if (!bm->id_) bm->id_ = fl_create_bitmask(bm->w(), bm->h(), bm->array);
+  
+  XSetStipple(fl_display, fl_gc, bm->id_);
+  int ox = X-cx; if (ox < 0) ox += bm->w();
+  int oy = Y-cy; if (oy < 0) oy += bm->h();
+  XSetTSOrigin(fl_display, fl_gc, ox, oy);
+  XSetFillStyle(fl_display, fl_gc, FillStippled);
+  XFillRectangle(fl_display, fl_window, fl_gc, X, Y, W, H);
+  XSetFillStyle(fl_display, fl_gc, FillSolid);
+}
+#endif
+
+/**
+  The destructor free all memory and server resources that are used by
+  the bitmap.
+*/
+fltk3::Bitmap::~Bitmap() {
+  uncache();
+  if (alloc_array) delete[] (uchar *)array;
+}
+
+void fltk3::Bitmap::uncache() {
+  if (id_) {
+#ifdef __APPLE_QUARTZ__
+    fl_delete_bitmask((fltk3::Bitmask)id_);
+#else
+    fl_delete_bitmask((fltk3::Offscreen)id_);
+#endif
+    id_ = 0;
+  }
+}
+
+void fltk3::Bitmap::label(fltk3::Widget* widget) {
+  widget->image(this);
+}
+
+void fltk3::Bitmap::label(fltk3::MenuItem* m) {
+  fltk3::set_labeltype(fltk3::IMAGE_LABEL, labeltype, measure);
+  m->label(fltk3::IMAGE_LABEL, (const char*)this);
+}
+
+fltk3::Image *fltk3::Bitmap::copy(int W, int H) {
+  fltk3::Bitmap	*new_image;	// New RGB image
+  uchar		*new_array;	// New array for image data
+
+  // Optimize the simple copy where the width and height are the same...
+  if (W == w() && H == h()) {
+    new_array = new uchar [H * ((W + 7) / 8)];
+    memcpy(new_array, array, H * ((W + 7) / 8));
+
+    new_image = new fltk3::Bitmap(new_array, W, H);
+    new_image->alloc_array = 1;
+
+    return new_image;
+  }
+  if (W <= 0 || H <= 0) return 0;
+
+  // OK, need to resize the image data; allocate memory and 
+  uchar		*new_ptr,	// Pointer into new array
+		new_bit,	// Bit for new array
+		old_bit;	// Bit for old array
+  const uchar	*old_ptr;	// Pointer into old array
+  int		sx, sy,		// Source coordinates
+		dx, dy,		// Destination coordinates
+		xerr, yerr,	// X & Y errors
+		xmod, ymod,	// X & Y moduli
+		xstep, ystep;	// X & Y step increments
+
+
+  // Figure out Bresenheim step/modulus values...
+  xmod   = w() % W;
+  xstep  = w() / W;
+  ymod   = h() % H;
+  ystep  = h() / H;
+
+  // Allocate memory for the new image...
+  new_array = new uchar [H * ((W + 7) / 8)];
+  new_image = new fltk3::Bitmap(new_array, W, H);
+  new_image->alloc_array = 1;
+
+  memset(new_array, 0, H * ((W + 7) / 8));
+
+  // Scale the image using a nearest-neighbor algorithm...
+  for (dy = H, sy = 0, yerr = H, new_ptr = new_array; dy > 0; dy --) {
+    for (dx = W, xerr = W, old_ptr = array + sy * ((w() + 7) / 8), sx = 0, new_bit = 1;
+	 dx > 0;
+	 dx --) {
+      old_bit = (uchar)(1 << (sx & 7));
+      if (old_ptr[sx / 8] & old_bit) *new_ptr |= new_bit;
+
+      if (new_bit < 128) new_bit <<= 1;
+      else {
+        new_bit = 1;
+	new_ptr ++;
+      }
+
+      sx   += xstep;
+      xerr -= xmod;
+
+      if (xerr <= 0) {
+	xerr += W;
+	sx ++;
+      }
+    }
+
+    if (new_bit > 1) new_ptr ++;
+
+    sy   += ystep;
+    yerr -= ymod;
+    if (yerr <= 0) {
+      yerr += H;
+      sy ++;
+    }
+  }
+
+  return new_image;
+}
+
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Box.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Box.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Box.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Box.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,47 @@
+//
+// "$Id$"
+//
+// Box widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/Widget.h>
+#include <fltk3/Box.h>
+#include <fltk3/Wrapper.h>
+
+
+void fltk3::Box::draw() {
+  draw_box();
+  draw_label();
+}
+
+
+int fltk3::Box::handle(int event) {
+  if (event == fltk3::ENTER || event == fltk3::LEAVE) return 1;
+  else return 0;
+}
+
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Browser.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Browser.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Browser.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Browser.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,982 @@
+//
+// "$Id$"
+//
+// Browser widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/Browser.h>
+#include <fltk3/draw.h>
+#include "flstring.h"
+#include <stdlib.h>
+#include <math.h>
+
+#if defined(FL_DLL)	// really needed for c'tors for MS VC++ only
+#include <fltk3/HoldBrowser.h>
+#include <fltk3/MultiBrowser.h>
+#include <fltk3/SelectBrowser.h>
+#endif
+
+// I modified this from the original Forms data to use a linked list
+// so that the number of items in the browser and size of those items
+// is unlimited. The only problem is that the old browser used an
+// index number to identify a line, and it is slow to convert from/to
+// a pointer. I use a cache of the last match to try to speed this up.
+
+// Also added the ability to "hide" a line. This sets its height to
+// zero, so the fltk3::Browser_ cannot pick it.
+
+#define SELECTED 1
+#define NOTDISPLAYED 2
+
+namespace fltk3 {
+  
+  // WARNING:
+  //       fltk3::FileChooser.cxx also has a definition of this structure (fltk3::BrowserLine_).
+  //       Changes to fltk3::BrowserLine_ *must* be reflected in fltk3::FileChooser.cxx as well.
+  //       This hack in fltk3::FileChooser should be solved.
+  //
+  struct BrowserLine_ {	// data is in a linked list of these
+    fltk3::BrowserLine_* prev;
+    fltk3::BrowserLine_* next;
+    void* data;
+    fltk3::Image* icon;
+    short length;		// sizeof(txt)-1, may be longer than string
+    char flags;		// selected, displayed
+    char txt[1];		// start of allocated array
+  };
+  
+}
+
+
+void fltk3::Browser::item_swap(void *a, void *b) { 
+  FLTK3_OBJECT_VCALLS_WRAPPER(item_swap(a, b), BrowserItemSwap) 
+  swap((fltk3::BrowserLine_*)a, (fltk3::BrowserLine_*)b); 
+}
+
+void *fltk3::Browser::item_at(int line) const { 
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(void*, item_at(line), BrowserItemAt) 
+  return (void*)find_line(line);
+}
+
+/**
+  Returns the very first item in the list.
+  Example of use:
+  \code
+  // Walk the browser from beginning to end
+  for ( void *i=item_first(); i; i=item_next(i) ) {
+      printf("item label='%s'\n", item_text(i));
+  }
+  \endcode
+  \returns The first item, or NULL if list is empty.
+  \see item_first(), item_last(), item_next(), item_prev()
+*/
+void* fltk3::Browser::item_first() const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(void*, item_first(), BrowserItemFirst) 
+  return first;
+}
+
+/**
+  Returns the next item after \p item.
+  \param[in] item The 'current' item
+  \returns The next item after \p item, or NULL if there are none after this one.
+  \see item_first(), item_last(), item_next(), item_prev()
+*/
+void* fltk3::Browser::item_next(void* item) const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(void*, item_next(item), BrowserItemNext) 
+  return ((fltk3::BrowserLine_*)item)->next;
+}
+
+/**
+  Returns the previous item before \p item.
+  \param[in] item The 'current' item
+  \returns The previous item before \p item, or NULL if there none before this one.
+  \see item_first(), item_last(), item_next(), item_prev()
+*/
+void* fltk3::Browser::item_prev(void* item) const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(void*, item_prev(item), BrowserItemPrev) 
+  return ((fltk3::BrowserLine_*)item)->prev;
+}
+
+/**
+  Returns the very last item in the list.
+  Example of use:
+  \code
+  // Walk the browser in reverse, from end to start
+  for ( void *i=item_last(); i; i=item_prev(i) ) {
+      printf("item label='%s'\n", item_text(i));
+  }
+  \endcode
+  \returns The last item, or NULL if list is empty.
+  \see item_first(), item_last(), item_next(), item_prev()
+*/
+void* fltk3::Browser::item_last() const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(void*, item_last(), BrowserItemLast) 
+  return last;
+}
+
+/**
+  See if \p item is selected.
+  \param[in] item The item whose selection state is to be checked.
+  \returns 1 if selected, 0 if not.
+  \see select(), selected(), value(), item_select(), item_selected()
+*/
+int fltk3::Browser::item_selected(void* item) const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, item_selected(item), BrowserItemSelected)
+  return ((fltk3::BrowserLine_*)item)->flags&SELECTED;
+}
+/**
+  Change the selection state of \p item to the value \p val.
+  \param[in] item The item to be changed.
+  \param[in] val The new selection state: 1 selects, 0 de-selects.
+  \see select(), selected(), value(), item_select(), item_selected()
+*/
+void fltk3::Browser::item_select(void *item, int val) {
+  FLTK3_OBJECT_VCALLS_WRAPPER(item_select(item, val), BrowserItemSelect)
+  if (val) ((fltk3::BrowserLine_*)item)->flags |= SELECTED;
+  else     ((fltk3::BrowserLine_*)item)->flags &= ~SELECTED;
+}
+
+/**
+  Returns the label text for \p item.
+  \param[in] item The item whose label text is returned.
+  \returns The item's text string. (Can be NULL)
+*/
+const char *fltk3::Browser::item_text(void *item) const { 
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(const char *, item_text(item), BrowserItemText)
+  return ((fltk3::BrowserLine_*)item)->txt;
+}
+
+/**
+  Returns the item for specified \p line.
+
+  Note: This call is slow. It's fine for e.g. responding to user
+  clicks, but slow if called often, such as in a tight sorting loop.
+  Finding an item 'by line' involves a linear lookup on the internal
+  linked list. The performance hit can be significant if the browser's
+  contents is large, and the method is called often (e.g. during a sort).
+  If you're writing a subclass, use the protected methods item_first(),
+  item_next(), etc. to access the internal linked list more efficiently.
+
+  \param[in] line The line number of the item to return. (1 based)
+  \retval item that was found.
+  \retval NULL if line is out of range.
+  \see item_at(), find_line(), lineno()
+*/
+fltk3::BrowserLine_* fltk3::Browser::find_line(int line) const {
+  int n; fltk3::BrowserLine_* l;
+  if (line == cacheline) return cache;
+  if (cacheline && line > (cacheline/2) && line < ((cacheline+lines)/2)) {
+    n = cacheline; l = cache;
+  } else if (line <= (lines/2)) {
+    n = 1; l = first;
+  } else {
+    n = lines; l = last;
+  }
+  for (; n < line && l; n++) l = l->next;
+  for (; n > line && l; n--) l = l->prev;
+  ((fltk3::Browser*)this)->cacheline = line;
+  ((fltk3::Browser*)this)->cache = l;
+  return l;
+}
+
+/**
+  Returns line number corresponding to \p item, or zero if not found.
+  Caveat: See efficiency note in find_line().
+  \param[in] item The item to be found
+  \returns The line number of the item, or 0 if not found.
+  \see item_at(), find_line(), lineno()
+*/
+int fltk3::Browser::lineno(void *item) const {
+  fltk3::BrowserLine_* l = (fltk3::BrowserLine_*)item;
+  if (!l) return 0;
+  if (l == cache) return cacheline;
+  if (l == first) return 1;
+  if (l == last) return lines;
+  if (!cache) {
+    ((fltk3::Browser*)this)->cache = first;
+    ((fltk3::Browser*)this)->cacheline = 1;
+  }
+  // assume it is near cache, search both directions:
+  fltk3::BrowserLine_* b = cache->prev;
+  int bnum = cacheline-1;
+  fltk3::BrowserLine_* f = cache->next;
+  int fnum = cacheline+1;
+  int n = 0;
+  for (;;) {
+    if (b == l) {n = bnum; break;}
+    if (f == l) {n = fnum; break;}
+    if (b) {b = b->prev; bnum--;}
+    if (f) {f = f->next; fnum++;}
+  }
+  ((fltk3::Browser*)this)->cache = l;
+  ((fltk3::Browser*)this)->cacheline = n;
+  return n;
+}
+
+/**
+  Removes the item at the specified \p line.
+  Caveat: See efficiency note in find_line().
+  You must call redraw() to make any changes visible.
+  \param[in] line The line number to be removed. (1 based) Must be in range!
+  \returns Pointer to browser item that was removed (and is no longer valid).
+  \see add(), insert(), remove(), swap(int,int), clear()
+*/
+fltk3::BrowserLine_* fltk3::Browser::_remove(int line) {
+  fltk3::BrowserLine_* ttt = find_line(line);
+  deleting(ttt);
+
+  cacheline = line-1;
+  cache = ttt->prev;
+  lines--;
+  full_height_ -= item_height(ttt);
+  if (ttt->prev) ttt->prev->next = ttt->next;
+  else first = ttt->next;
+  if (ttt->next) ttt->next->prev = ttt->prev;
+  else last = ttt->prev;
+
+  return(ttt);
+}
+
+/**
+  Remove entry for given \p line number, making the browser one line shorter.
+  You must call redraw() to make any changes visible.
+  \param[in] line Line to be removed. (1 based) \n
+                  If \p line is out of range, no action is taken.
+  \see add(), insert(), remove(), swap(int,int), clear()
+*/
+void fltk3::Browser::remove(int line) {
+  if (line < 1 || line > lines) return;
+  free(_remove(line));
+}
+
+/**
+  Insert specified \p item above \p line.
+  If \p line > size() then the line is added to the end.
+
+  Caveat: See efficiency note in find_line().
+
+  \param[in] line  The new line will be inserted above this line (1 based).
+  \param[in] item  The item to be added.
+*/
+void fltk3::Browser::insert(int line, fltk3::BrowserLine_* item) {
+  if (!first) {
+    item->prev = item->next = 0;
+    first = last = item;
+  } else if (line <= 1) {
+    inserting(first, item);
+    item->prev = 0;
+    item->next = first;
+    item->next->prev = item;
+    first = item;
+  } else if (line > lines) {
+    item->prev = last;
+    item->prev->next = item;
+    item->next = 0;
+    last = item;
+  } else {
+    fltk3::BrowserLine_* n = find_line(line);
+    inserting(n, item);
+    item->next = n;
+    item->prev = n->prev;
+    item->prev->next = item;
+    n->prev = item;
+  }
+  cacheline = line;
+  cache = item;
+  lines++;
+  full_height_ += item_height(item);
+  redraw_line(item);
+}
+
+/**
+  Insert a new entry whose label is \p newtext \e above given \p line, optional data \p d.
+
+  Text may contain format characters; see format_char() for details.
+  \p newtext is copied using the strdup() function, and can be NULL to make a blank line.
+
+  The optional void * argument \p d will be the data() of the new item.
+
+  \param[in] line Line position for insert. (1 based) \n
+             If \p line > size(), the entry will be added at the end.
+  \param[in] newtext The label text for the new line.
+  \param[in] d Optional pointer to user data to be associated with the new line.
+*/
+void fltk3::Browser::insert(int line, const char* newtext, void* d) {
+  int l = strlen(newtext);
+  fltk3::BrowserLine_* t = (fltk3::BrowserLine_*)malloc(sizeof(fltk3::BrowserLine_)+l);
+  t->length = (short)l;
+  t->flags = 0;
+  strcpy(t->txt, newtext);
+  t->data = d;
+  t->icon = 0;
+  insert(line, t);
+}
+
+/**
+  Line \p from is removed and reinserted at \p to.
+  Note: \p to is calculated \e after line \p from gets removed.
+  \param[in] to Destination line number (calculated \e after line \p from is removed)
+  \param[in] from Line number of item to be moved
+*/
+void fltk3::Browser::move(int to, int from) {
+  if (from < 1 || from > lines) return;
+  insert(to, _remove(from));
+}
+
+/**
+  Sets the text for the specified \p line to \p newtext.
+
+  Text may contain format characters; see format_char() for details.
+  \p newtext is copied using the strdup() function, and can be NULL to make a blank line.
+
+  Does nothing if \p line is out of range.
+
+  \param[in] line The line of the item whose text will be changed. (1 based)
+  \param[in] newtext The new string to be assigned to the item.
+*/
+void fltk3::Browser::text(int line, const char* newtext) {
+  if (line < 1 || line > lines) return;
+  fltk3::BrowserLine_* t = find_line(line);
+  int l = strlen(newtext);
+  if (l > t->length) {
+    fltk3::BrowserLine_* n = (fltk3::BrowserLine_*)malloc(sizeof(fltk3::BrowserLine_)+l);
+    replacing(t, n);
+    cache = n;
+    n->data = t->data;
+    n->icon = t->icon;
+    n->length = (short)l;
+    n->flags = t->flags;
+    n->prev = t->prev;
+    if (n->prev) n->prev->next = n; else first = n;
+    n->next = t->next;
+    if (n->next) n->next->prev = n; else last = n;
+    free(t);
+    t = n;
+  }
+  strcpy(t->txt, newtext);
+  redraw_line(t);
+}
+
+/**
+  Sets the user data for specified \p line to \p d.
+  Does nothing if \p line is out of range.
+  \param[in] line The line of the item whose data() is to be changed. (1 based)
+  \param[in] d The new data to be assigned to the item. (can be NULL)
+*/
+void fltk3::Browser::data(int line, void* d) {
+  if (line < 1 || line > lines) return;
+  find_line(line)->data = d;
+}
+
+/**
+  Returns height of \p item in pixels.
+  This takes into account embedded \@ codes within the text() label.
+  \param[in] item The item whose height is returned.
+  \returns The height of the item in pixels.
+  \see item_height(), item_width(),\n
+       incr_height(), full_height()
+*/
+int fltk3::Browser::item_height(void *item) const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, item_height(item), BrowserItemHeight) 
+  fltk3::BrowserLine_* l = (fltk3::BrowserLine_*)item;
+  if (l->flags & NOTDISPLAYED) return 0;
+
+  int hmax = 2; // use 2 to insure we don't return a zero!
+
+  if (!l->txt[0]) {
+    // For blank lines set the height to exactly 1 line!
+    fltk3::font(textfont(), textsize());
+    int hh = fltk3::height();
+    if (hh > hmax) hmax = hh;
+  } else {
+    const int* i = column_widths();
+    long int dummy;
+    // do each column separately as they may all set different fonts:
+    for (char* str = l->txt; str && *str; str++) {
+      fltk3::Font font = textfont(); // default font
+      int tsize = textsize(); // default size
+      while (*str==format_char()) {
+	str++;
+	switch (*str++) {
+	case 'l': case 'L': tsize = 24; break;
+	case 'm': case 'M': tsize = 18; break;
+	case 's': tsize = 11; break;
+	case 'b': font = (fltk3::Font)(font|fltk3::BOLD); break;
+	case 'i': font = (fltk3::Font)(font|fltk3::ITALIC); break;
+	case 'f': case 't': font = fltk3::COURIER; break;
+	case 'B':
+	case 'C': dummy = strtol(str, &str, 10); break;// skip a color number
+	case 'F': font = (fltk3::Font)strtol(str,&str,10); break;
+	case 'S': tsize = strtol(str,&str,10); break;
+	case 0: case '@': str--;
+	case '.': goto END_FORMAT;
+	}
+      }
+      END_FORMAT:
+      char* ptr = str;
+      if (ptr && *i++) str = strchr(str, column_char());
+      else str = NULL;
+      if((!str && *ptr) || (str && ptr < str)) {
+	fltk3::font(font, tsize); int hh = fltk3::height();
+	if (hh > hmax) hmax = hh;
+      }
+      if (!str || !*str) break;
+    }
+  }
+
+  if (l->icon && (l->icon->h()+2)>hmax) {
+    hmax = l->icon->h() + 2;	// leave 2px above/below
+  }
+  return hmax; // previous version returned hmax+2!
+}
+
+/**
+  Returns width of \p item in pixels.
+  This takes into account embedded \@ codes within the text() label.
+  \param[in] item The item whose width is returned.
+  \returns The width of the item in pixels.
+  \see item_height(), item_width(),\n
+       incr_height(), full_height()
+*/
+int fltk3::Browser::item_width(void *item) const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, item_width(item), BrowserItemWidth)
+  fltk3::BrowserLine_* l=(fltk3::BrowserLine_*)item;
+  char* str = l->txt;
+  const int* i = column_widths();
+  int ww = 0;
+
+  while (*i) { // add up all tab-separated fields
+    char* e;
+    e = strchr(str, column_char());
+    if (!e) break; // last one occupied by text
+    str = e+1;
+    ww += *i++;
+  }
+
+  // OK, we gotta parse the string and find the string width...
+  int tsize = textsize();
+  fltk3::Font font = textfont();
+  int done = 0;
+
+  while (*str == format_char_ && str[1] && str[1] != format_char_) {
+    long int dummy;
+    str ++;
+    switch (*str++) {
+    case 'l': case 'L': tsize = 24; break;
+    case 'm': case 'M': tsize = 18; break;
+    case 's': tsize = 11; break;
+    case 'b': font = (fltk3::Font)(font|fltk3::BOLD); break;
+    case 'i': font = (fltk3::Font)(font|fltk3::ITALIC); break;
+    case 'f': case 't': font = fltk3::COURIER; break;
+    case 'B':
+    case 'C': dummy = strtol(str, &str, 10); break;// skip a color number
+    case 'F': font = (fltk3::Font)strtol(str, &str, 10); break;
+    case 'S': tsize = strtol(str, &str, 10); break;
+    case '.':
+      done = 1;
+      break;
+    case '@':
+      str--;
+      done = 1;
+    }
+
+    if (done)
+      break;
+  }
+
+  if (*str == format_char_ && str[1])
+    str ++;
+
+  if (ww==0 && l->icon) ww = l->icon->w();
+
+  fltk3::font(font, tsize);
+  return ww + int(fltk3::width(str)) + 6;
+}
+
+/**
+  The height of the entire list of all visible() items in pixels.
+  This returns the accumulated height of *all* the items in the browser
+  that are not hidden with hide(), including items scrolled off screen.
+  \returns The accumulated size of all the visible items in pixels.
+  \see item_height(), item_width(),\n
+       incr_height(), full_height()
+*/
+int fltk3::Browser::full_height() const {
+  return full_height_;
+}
+
+/**
+  The default 'average' item height (including inter-item spacing) in pixels.
+  This currently returns textsize() + 2.
+  \returns The value in pixels.
+  \see item_height(), item_width(),\n
+       incr_height(), full_height()
+*/
+int fltk3::Browser::incr_height() const {
+  return textsize()+2;
+}
+
+/**
+  Draws \p item at the position specified by \p X \p Y \p W \p H.
+  The \p W and \p H values are used for clipping.
+  Should only be called within the context of an FLTK draw().
+  \param[in] item The item to be drawn
+  \param[in] X,Y,W,H position and size.
+*/
+void fltk3::Browser::item_draw(void* item, int X, int Y, int W, int H) const {
+  FLTK3_OBJECT_VCALLS_WRAPPER(item_draw(item, X, Y, W, H), BrowserItemDraw)
+  fltk3::BrowserLine_* l = (fltk3::BrowserLine_*)item;
+  char* str = l->txt;
+  const int* i = column_widths();
+
+  bool first = true;	// for icon
+  while (W > 6) {	// do each tab-separated field
+    int w1 = W;	// width for this field
+    char* e = 0; // pointer to end of field or null if none
+    if (*i) { // find end of field and temporarily replace with 0
+      e = strchr(str, column_char());
+      if (e) {*e = 0; w1 = *i++;}
+    }
+    // Icon drawing code
+    if (first) {
+      first = false;
+      if (l->icon) {
+	l->icon->draw(X+2,Y+1);	// leave 2px left, 1px above
+	int iconw = l->icon->w()+2;
+	X += iconw; W -= iconw; w1 -= iconw;
+      }
+    }
+    int tsize = textsize();
+    fltk3::Font font = textfont();
+    fltk3::Color lcol = textcolor();
+    fltk3::Align talign = fltk3::ALIGN_LEFT;
+    // check for all the @-lines recognized by XForms:
+    //#if defined(__GNUC__)
+    //#warning FIXME This maybe needs to be more UTF8 aware now...?
+    //#endif /*__GNUC__*/
+    while (*str == format_char() && *++str && *str != format_char()) {
+      long int dummy;
+      switch (*str++) {
+      case 'l': case 'L': tsize = 24; break;
+      case 'm': case 'M': tsize = 18; break;
+      case 's': tsize = 11; break;
+      case 'b': font = (fltk3::Font)(font|fltk3::BOLD); break;
+      case 'i': font = (fltk3::Font)(font|fltk3::ITALIC); break;
+      case 'f': case 't': font = fltk3::COURIER; break;
+      case 'c': talign = fltk3::ALIGN_CENTER; break;
+      case 'r': talign = fltk3::ALIGN_RIGHT; break;
+      case 'B': 
+	if (!(l->flags & SELECTED)) {
+	  fltk3::color((fltk3::Color)strtol(str, &str, 10));
+	  fltk3::rectf(X, Y, w1, H);
+	} else dummy = strtol(str, &str, 10);
+        break;
+      case 'C':
+	lcol = (fltk3::Color)strtol(str, &str, 10);
+	break;
+      case 'F':
+	font = (fltk3::Font)strtol(str, &str, 10);
+	break;
+      case 'N':
+	lcol = fltk3::INACTIVE_COLOR;
+	break;
+      case 'S':
+	tsize = strtol(str, &str, 10);
+	break;
+      case '-':
+	fltk3::color(fltk3::DARK3);
+	fltk3::line(X+3, Y+H/2, X+w1-3, Y+H/2);
+	fltk3::color(fltk3::LIGHT3);
+	fltk3::line(X+3, Y+H/2+1, X+w1-3, Y+H/2+1);
+	break;
+      case 'u':
+      case '_':
+	fltk3::color(lcol);
+	fltk3::line(X+3, Y+H-1, X+w1-3, Y+H-1);
+	break;
+      case '.':
+	goto BREAK;
+      case '@':
+	str--; goto BREAK;
+      }
+    }
+  BREAK:
+    fltk3::font(font, tsize);
+    if (l->flags & SELECTED)
+      lcol = fltk3::contrast(lcol, selection_color());
+    if (!active_r()) lcol = fltk3::inactive(lcol);
+    fltk3::color(lcol);
+    fltk3::draw(str, X+3, Y, w1-6, H, e ? fltk3::Align(talign|fltk3::ALIGN_CLIP) : talign, 0, 0);
+    if (!e) break; // no more fields...
+    *e = column_char(); // put the separator back
+    X += w1;
+    W -= w1;
+    str = e+1;
+  }
+}
+
+static const int no_columns[1] = {0};
+
+/**
+  The constructor makes an empty browser.
+  \param[in] X,Y,W,H position and size.
+  \param[in] L label string, may be NULL.
+*/
+fltk3::Browser::Browser(int X, int Y, int W, int H, const char *L)
+: fltk3::Browser_(X, Y, W, H, L) {
+  column_widths_ = no_columns;
+  lines = 0;
+  full_height_ = 0;
+  cacheline = 0;
+  format_char_ = '@';
+  column_char_ = '\t';
+  first = last = cache = 0;
+}
+
+/**
+  Updates the browser so that \p line is shown at position \p pos.
+  \param[in] line line number. (1 based)
+  \param[in] pos position.
+  \see topline(), middleline(), bottomline()
+*/
+void fltk3::Browser::lineposition(int line, LinePosition pos) {
+  if (line<1) line = 1;
+  if (line>lines) line = lines;
+  int p = 0;
+
+  fltk3::BrowserLine_* l;
+  for (l=first; l && line>1; l = l->next) {
+    line--; p += item_height(l);
+  }
+  if (l && (pos == BOTTOM)) p += item_height (l);
+
+  int final = p, X, Y, W, H;
+  bbox(X, Y, W, H);
+
+  switch(pos) {
+    case TOP: break;
+    case BOTTOM: final -= H; break;
+    case MIDDLE: final -= H/2; break;
+  }
+  
+  if (final > (full_height() - H)) final = full_height() -H;
+  position(final);
+}
+
+/**
+  Returns the line that is currently visible at the top of the browser.
+  If there is no vertical scrollbar then this will always return 1.
+  \returns The lineno() of the top() of the browser.
+*/
+int fltk3::Browser::topline() const {
+  return lineno(top());
+}
+
+/**
+  Removes all the lines in the browser.
+  \see add(), insert(), remove(), swap(int,int), clear()
+*/
+void fltk3::Browser::clear() {
+  for (fltk3::BrowserLine_* l = first; l;) {
+    fltk3::BrowserLine_* n = l->next;
+    free(l);
+    l = n;
+  }
+  full_height_ = 0;
+  first = 0;
+  last = 0;
+  lines = 0;
+  new_list();
+}
+
+/**
+  Adds a new line to the end of the browser.
+
+  The text string \p newtext may contain format characters; see format_char() for details.
+  \p newtext is copied using the strdup() function, and can be NULL to make a blank line.
+
+  The optional void* argument \p d will be the data() for the new item.
+
+  \param[in] newtext The label text used for the added item
+  \param[in] d Optional user data() for the item (0 if unspecified)
+  \see add(), insert(), remove(), swap(int,int), clear()
+*/
+void fltk3::Browser::add(const char* newtext, void* d) {
+  insert(lines+1, newtext, d);
+  //fltk3::Browser_::display(last);
+}
+
+/**
+  Returns the label text for the specified \p line.
+  Return value can be NULL if \p line is out of range or unset.
+  The parameter \p line is 1 based.
+  \param[in] line The line number of the item whose text is returned. (1 based)
+  \returns The text string (can be NULL)
+*/
+const char* fltk3::Browser::text(int line) const {
+  if (line < 1 || line > lines) return 0;
+  return find_line(line)->txt;
+}
+
+/**
+  Returns the user data() for specified \p line.
+  Return value can be NULL if \p line is out of range or no user data() was defined.
+  The parameter \p line is 1 based (1 will be the first item in the list).
+  \param[in] line The line number of the item whose data() is returned. (1 based)
+  \returns The user data pointer (can be NULL)
+
+*/
+void* fltk3::Browser::data(int line) const {
+  if (line < 1 || line > lines) return 0;
+  return find_line(line)->data;
+}
+
+/**
+  Sets the selection state of the item at \p line to the value \p val.
+  If \p val is not specified, the default is 1 (selects the item).
+  \param[in] line The line number of the item to be changed. (1 based)
+  \param[in] val The new selection state (1=select, 0=de-select).
+  \returns 1 if the state changed, 0 if not.
+  \see select(), selected(), value(), item_select(), item_selected()
+*/
+int fltk3::Browser::select(int line, int val) {
+  if (line < 1 || line > lines) return 0;
+  return Browser_::select(find_line(line), val);
+}
+
+/**
+  Returns 1 if specified \p line is selected, 0 if not.
+  \param[in] line The line being checked (1 based)
+  \returns 1 if item selected, 0 if not.
+  \see select(), selected(), value(), item_select(), item_selected()
+  */
+int fltk3::Browser::selected(int line) const {
+  if (line < 1 || line > lines) return 0;
+  return find_line(line)->flags & SELECTED;
+}
+
+/**
+  Makes \p line visible, and available for selection by user.
+  Opposite of hide(int).
+  This changes the full_height() if the state was changed.
+  redraw() is called automatically if a change occurred.
+  \param[in] line The line to be shown. (1 based)
+  \see show(int), hide(int), display(), visible(), make_visible()
+*/
+void fltk3::Browser::show(int line) {
+  fltk3::BrowserLine_* t = find_line(line);
+  if (t->flags & NOTDISPLAYED) {
+    t->flags &= ~NOTDISPLAYED;
+    full_height_ += item_height(t);
+    if (Browser_::displayed(t)) redraw();
+  }
+}
+
+/**
+  Makes \p line invisible, preventing selection by the user.
+  The line can still be selected under program control.
+  This changes the full_height() if the state was changed.
+  When a line is made invisible, lines below it are moved up in the display.
+  redraw() is called automatically if a change occurred.
+  \param[in] line The line to be hidden. (1 based)
+  \see show(int), hide(int), display(), visible(), make_visible()
+*/
+void fltk3::Browser::hide(int line) {
+  fltk3::BrowserLine_* t = find_line(line);
+  if (!(t->flags & NOTDISPLAYED)) {
+    full_height_ -= item_height(t);
+    t->flags |= NOTDISPLAYED;
+    if (Browser_::displayed(t)) redraw();
+  }
+}
+
+/**
+  For back compatibility.
+  This calls show(line) if \p val is true, and hide(line) otherwise.
+  If \p val is not specified, the default is 1 (makes the line visible).
+  \see show(int), hide(int), display(), visible(), make_visible()
+*/
+void fltk3::Browser::display(int line, int val) {
+  if (line < 1 || line > lines) return;
+  if (val) show(line); else hide(line);
+}
+
+/**
+  Returns non-zero if the specified \p line is visible, 0 if hidden.
+  Use show(int), hide(int), or make_visible(int) to change an item's visible state.
+  \param[in] line The line in the browser to be tested. (1 based)
+  \see show(int), hide(int), display(), visible(), make_visible()
+*/
+int fltk3::Browser::visible(int line) const {
+  if (line < 1 || line > lines) return 0;
+  return !(find_line(line)->flags&NOTDISPLAYED);
+}
+
+/**
+  Returns the line number of the currently selected line, or 0 if none.
+  \returns The line number of current selection, or 0 if none selected.
+  \see select(), selected(), value(), item_select(), item_selected()
+*/
+int fltk3::Browser::value() const {
+  return lineno(selection());
+}
+
+/**
+  Swap the two items \p a and \p b.
+  Uses swapping() to ensure list updates correctly.
+  \param[in] a,b The two items to be swapped.
+  \see swap(int,int), item_swap()
+*/
+void fltk3::Browser::swap(fltk3::BrowserLine_ *a, fltk3::BrowserLine_ *b) {
+
+  if ( a == b || !a || !b) return;          // nothing to do
+  swapping(a, b);
+  fltk3::BrowserLine_ *aprev  = a->prev;
+  fltk3::BrowserLine_ *anext  = a->next;
+  fltk3::BrowserLine_ *bprev  = b->prev;
+  fltk3::BrowserLine_ *bnext  = b->next;
+  if ( b->prev == a ) { 		// A ADJACENT TO B
+     if ( aprev ) aprev->next = b; else first = b;
+     b->next = a;
+     a->next = bnext;
+     b->prev = aprev;
+     a->prev = b;
+     if ( bnext ) bnext->prev = a; else last = a;
+  } else if ( a->prev == b ) {		// B ADJACENT TO A
+     if ( bprev ) bprev->next = a; else first = a;
+     a->next = b;
+     b->next = anext;
+     a->prev = bprev;
+     b->prev = a;
+     if ( anext ) anext->prev = b; else last = b;
+  } else {				// A AND B NOT ADJACENT
+     // handle prev's
+     b->prev = aprev;
+     if ( anext ) anext->prev = b; else last = b;
+     a->prev = bprev;
+     if ( bnext ) bnext->prev = a; else last = a;
+     // handle next's
+     if ( aprev ) aprev->next = b; else first = b;
+     b->next = anext;
+     if ( bprev ) bprev->next = a; else first = a;
+     a->next = bnext;
+  }
+  // Disable cache -- we played around with positions
+  cacheline = 0;
+  cache = 0;
+}
+
+/**
+  Swaps two browser lines \p a and \p b.
+  You must call redraw() to make any changes visible.
+  \param[in] a,b The two lines to be swapped. (both 1 based)
+  \see swap(int,int), item_swap()
+*/
+void fltk3::Browser::swap(int a, int b) {
+  if (a < 1 || a > lines || b < 1 || b > lines) return;
+  fltk3::BrowserLine_* ai = find_line(a);
+  fltk3::BrowserLine_* bi = find_line(b);
+  swap(ai,bi);
+}
+
+/**
+  Set the image icon for \p line to the value \p icon.
+  Caller is responsible for keeping the icon allocated.
+  The \p line is automatically redrawn.
+  \param[in] line The line to be modified. If out of range, nothing is done.
+  \param[in] icon The image icon to be assigned to the \p line.
+                  If NULL, any previous icon is removed.
+*/
+void fltk3::Browser::icon(int line, fltk3::Image* icon) {
+
+  if (line<1 || line > lines) return;
+
+  fltk3::BrowserLine_* bl = find_line(line);
+
+  int old_h = bl->icon ? bl->icon->h()+2 : 0;	// init with *old* icon height
+  bl->icon = 0;					// remove icon, if any
+  int th = item_height(bl);			// height of text only
+  int new_h = icon ? icon->h()+2 : 0;		// init with *new* icon height
+  if (th > old_h) old_h = th;
+  if (th > new_h) new_h = th;
+  int dh = new_h - old_h;
+  full_height_ += dh;				// do this *always*
+
+  bl->icon = icon;				// set new icon
+  if (dh>0) {
+    redraw();					// icon larger than item? must redraw widget
+  } else {
+    redraw_line(bl);				// icon same or smaller? can redraw just this line
+  }
+  replacing(bl,bl);				// recalc fltk3::Browser_::max_width et al
+}
+
+/**
+  Returns the icon currently defined for \p line.
+  If no icon is defined, NULL is returned.
+  \param[in] line The line whose icon is returned.
+  \returns The icon defined, or NULL if none.
+*/
+fltk3::Image* fltk3::Browser::icon(int line) const {
+  fltk3::BrowserLine_* l = find_line(line);
+  return(l ? l->icon : NULL);
+}
+
+/**
+  Removes the icon for \p line.
+  It's ok to remove an icon if none has been defined.
+  \param[in] line The line whose icon is to be removed.
+*/
+void fltk3::Browser::remove_icon(int line) { 
+  icon(line,0);
+}
+
+/*
+ The following constructors must not be in the header file(s) if we
+ build a shared object (DLL). Instead they are defined here to force
+ the constructor (and default destructor as well) to be defined in
+ the DLL and exported (STR #2632, #2645).
+ 
+ Note: if you change any of them, do the same changes in the specific
+ header file as well.  This redundant definition was chosen to enable
+ inline constructors in the header files (for static linking) as well
+ as those here for dynamic linking (Windows DLL).
+ */
+#if defined(FL_DLL)
+
+fltk3::HoldBrowser::HoldBrowser(int X,int Y,int W,int H,const char *L)
+: fltk3::Browser(X,Y,W,H,L) {type(fltk3::HOLD_BROWSER);}
+
+fltk3::MultiBrowser::MultiBrowser(int X,int Y,int W,int H,const char *L)
+: fltk3::Browser(X,Y,W,H,L) {type(fltk3::MULTI_BROWSER);}
+
+fltk3::SelectBrowser::SelectBrowser(int X,int Y,int W,int H,const char *L)
+: fltk3::Browser(X,Y,W,H,L) {type(fltk3::SELECT_BROWSER);}
+
+#endif // FL_DLL
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Browser_.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Browser_.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Browser_.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Browser_.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,1167 @@
+//
+// "$Id$"
+//
+// Base Browser widget class for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#define DISPLAY_SEARCH_BOTH_WAYS_AT_ONCE
+
+#include <stdio.h>
+#include <fltk3/run.h>
+#include <fltk3/Widget.h>
+#include <fltk3/Browser_.h>
+#include <fltk3/draw.h>
+#include <fltk3/Wrapper.h>
+
+
+// This is the base class for browsers.  To be useful it must be
+// subclassed and several virtual functions defined.  The
+// Forms-compatible browser and the file chooser's browser are
+// subclassed off of this.
+
+// Yes, I know this should be a template...
+
+// This has been designed so that the subclass has complete control
+// over the storage of the data, although because next() and prev()
+// functions are used to index, it works best as a linked list or as a
+// large block of characters in which the line breaks must be searched
+// for.
+
+// A great deal of work has been done so that the "height" of a data
+// object does not need to be determined until it is drawn.  This was
+// done for the file chooser, because the height requires doing stat()
+// to see if the file is a directory, which can be annoyingly slow
+// over the network.
+
+/* redraw bits:
+ 1 = redraw children (the scrollbar)
+ 2 = redraw one or two items
+ 4 = redraw all items
+ */
+
+static void scrollbar_callback(fltk3::Widget* s, void*) {
+  ((fltk3::Browser_*)(s->parent()))->position(int(((fltk3::Scrollbar*)s)->value()));
+}
+
+static void hscrollbar_callback(fltk3::Widget* s, void*) {
+  ((fltk3::Browser_*)(s->parent()))->hposition(int(((fltk3::Scrollbar*)s)->value()));
+}
+
+// return where to draw the actual box:
+/**
+ Returns the bounding box for the interior of the list's display window, inside
+ the scrollbars.
+ \param[out] X,Y,W,H The returned bounding box.\n
+ (The original contents of these parameters are overwritten)
+ */
+void fltk3::Browser_::bbox(int& X, int& Y, int& W, int& H) const {
+  int scrollsize = scrollbar_size_ ? scrollbar_size_ : fltk3::scrollbar_size();
+  fltk3::Boxtype b = box() ? box() : fltk3::DOWN_BOX;
+  X = x()+fltk3::box_dx(b);
+  Y = y()+fltk3::box_dy(b);
+  W = w()-fltk3::box_dw(b);
+  H = h()-fltk3::box_dh(b);
+  if (scrollbar.visible()) {
+    W -= scrollsize;
+    if (scrollbar.align() & fltk3::ALIGN_LEFT) X += scrollsize;
+  }
+  if (W < 0) W = 0;
+  if (hscrollbar.visible()) {
+    H -= scrollsize;
+    if (scrollbar.align() & fltk3::ALIGN_TOP) Y += scrollsize;
+  }
+  if (H < 0) H = 0;
+}
+
+/**
+ This method returns the X position of the left edge of the list area
+ after adjusting for the scrollbar and border, if any.
+ \returns The X position of the left edge of the list, in pixels.
+ \see fltk3::Browser_::bbox()
+ */
+int fltk3::Browser_::leftedge() const {
+  int X, Y, W, H; bbox(X, Y, W, H);
+  return X;
+}
+
+// The scrollbars may be moved again by draw(), since each one's size
+// depends on whether the other is visible or not.  This skips over
+// fltk3::Group::resize since it moves the scrollbars uselessly.
+/**
+ Repositions and/or resizes the browser.
+ \param[in] X,Y,W,H The new position and size for the browser, in pixels.
+ */
+void fltk3::Browser_::resize(int X, int Y, int W, int H) {
+  int scrollsize = scrollbar_size_ ? scrollbar_size_ : fltk3::scrollbar_size();
+  Widget::resize(X, Y, W, H);
+  // move the scrollbars so they can respond to events:
+  bbox(X,Y,W,H);
+  scrollbar.resize(
+                   scrollbar.align()&fltk3::ALIGN_LEFT ? X-scrollsize : X+W,
+                   Y, scrollsize, H);
+  hscrollbar.resize(
+                    X, scrollbar.align()&fltk3::ALIGN_TOP ? Y-scrollsize : Y+H,
+                    W, scrollsize);
+}
+
+// Cause minimal update to redraw the given item:
+/**
+ This method should be called when the contents of \p item has changed,
+ but not its height.
+ \param[in] item The item that needs to be redrawn.
+ \see redraw_lines(), redraw_line()
+ */
+void fltk3::Browser_::redraw_line(void* item) {
+  if (!redraw1 || redraw1 == item) {redraw1 = item; damage(fltk3::DAMAGE_EXPOSE);}
+  else if (!redraw2 || redraw2 == item) {redraw2 = item; damage(fltk3::DAMAGE_EXPOSE);}
+  else damage(fltk3::DAMAGE_SCROLL);
+}
+
+// Figure out top() based on position():
+void fltk3::Browser_::update_top() {
+  if (!top_) top_ = item_first();
+  if (position_ != real_position_) {
+    void* l;
+    int ly;
+    int yy = position_;
+    // start from either head or current position, whichever is closer:
+    if (!top_ || yy <= (real_position_/2)) {
+      l = item_first();
+      ly = 0;
+    } else {
+      l = top_;
+      ly = real_position_-offset_;
+    }
+    if (!l) {
+      top_ = 0;
+      offset_ = 0;
+      real_position_ = 0;
+    } else {
+      int hh = item_quick_height(l);
+      // step through list until we find line containing this point:
+      while (ly > yy) {
+	void* l1 = item_prev(l);
+	if (!l1) {ly = 0; break;} // hit the top
+	l  = l1;
+	hh = item_quick_height(l);
+	ly -= hh;
+      }
+      while ((ly+hh) <= yy) {
+	void* l1 = item_next(l);
+	if (!l1) {yy = ly+hh-1; break;}
+	l = l1;
+	ly += hh;
+	hh = item_quick_height(l);
+      }
+      // top item must *really* be visible, use slow height:
+      for (;;) {
+	hh = item_height(l);
+	if ((ly+hh) > yy) break; // it is big enough to see
+                                 // go up to top of previous item:
+	void* l1 = item_prev(l);
+	if (!l1) {ly = yy = 0; break;} // hit the top
+	l = l1; yy = position_ = ly = ly-item_quick_height(l);
+      }
+      // use it:
+      top_ = l;
+      offset_ = yy-ly;
+      real_position_ = yy;
+    }
+    damage(fltk3::DAMAGE_SCROLL);
+  }
+}
+
+// Change position(), top() will update when update_top() is called
+// (probably by draw() or handle()):
+/**
+ Sets the vertical scroll position of the list to pixel position \p pos.
+ The position is how many pixels of the list are scrolled off the top edge
+ of the screen. Example: A position of '3' scrolls the top three pixels of
+ the list off the top edge of the screen.
+ \param[in] pos The vertical position (in pixels) to scroll the browser to.
+ \see position(), hposition()
+ */
+void fltk3::Browser_::position(int pos) {
+  if (pos < 0) pos = 0;
+  if (pos == position_) return;
+  position_ = pos;
+  if (pos != real_position_) redraw_lines();
+}
+
+/**
+ Sets the horizontal scroll position of the list to pixel position \p pos.
+ The position is how many pixels of the list are scrolled off the left edge
+ of the screen. Example: A position of '18' scrolls the left 18 pixels of the list
+ off the left edge of the screen.
+ \param[in] pos The horizontal position (in pixels) to scroll the browser to.
+ \see position(), hposition()
+ */
+void fltk3::Browser_::hposition(int pos) {
+  if (pos < 0) pos = 0;
+  if (pos == hposition_) return;
+  hposition_ = pos;
+  if (pos != real_hposition_) redraw_lines();
+}
+
+// Tell whether item is currently displayed:
+/**
+ Returns non-zero if \p item has been scrolled to a position where it is being displayed.
+ Checks to see if the item's vertical position is within the top and bottom
+ edges of the display window. This does NOT take into account the hide()/show()
+ status of the widget or item.
+ \param[in] item The item to check
+ \returns 1 if visible, 0 if not visible.
+ \see display(), displayed()
+ */
+int fltk3::Browser_::displayed(void* item) const {
+  int X, Y, W, H; bbox(X, Y, W, H);
+  int yy = H+offset_;
+  for (void* l = top_; l && yy > 0; l = item_next(l)) {
+    if (l == item) return 1;
+    yy -= item_height(l);
+  }
+  return 0;
+}
+
+// Ensure this item is displayed:
+// Messy because we have no idea if it is before top or after bottom:
+/**
+ Displays the \p item, scrolling the list as necessary.
+ \param[in] item The item to be displayed.
+ \see display(), displayed()
+ */
+void fltk3::Browser_::display(void* item) {
+  
+  // First special case - want to display first item in the list?
+  update_top();
+  if (item == item_first()) {position(0); return;}
+  
+  int X, Y, W, H, Yp; bbox(X, Y, W, H);
+  void* l = top_;
+  Y = Yp = -offset_;
+  int h1;
+  
+  // 2nd special case - want to display item already displayed at top of browser?
+  if (l == item) {position(real_position_+Y); return;} // scroll up a bit
+  
+  // 3rd special case - want to display item just above top of browser?
+  void* lp = item_prev(l);
+  if (lp == item) {position(real_position_+Y-item_quick_height(lp)); return;}
+  
+#ifdef DISPLAY_SEARCH_BOTH_WAYS_AT_ONCE
+  // search for item.  We search both up and down the list at the same time,
+  // this evens up the execution time for the two cases - the old way was
+  // much slower for going up than for going down.
+  while (l || lp) {
+    if (l) {
+      h1 = item_quick_height(l);
+      if (l == item) {
+	if (Y <= H) { // it is visible or right at bottom
+	  Y = Y+h1-H; // find where bottom edge is
+	  if (Y > 0) position(real_position_+Y); // scroll down a bit
+	} else {
+	  position(real_position_+Y-(H-h1)/2); // center it
+	}
+	return;
+      }
+      Y += h1;
+      l = item_next(l);
+    }
+    if (lp) {
+      h1 = item_quick_height(lp);
+      Yp -= h1;
+      if (lp == item) {
+	if ((Yp + h1) >= 0) position(real_position_+Yp);
+	else position(real_position_+Yp-(H-h1)/2);
+	return;
+      }
+      lp = item_prev(lp);
+    }
+  }
+#else
+  // Old version went forwards and then backwards:
+  // search forward for it:
+  l = top_;
+  for (; l; l = item_next(l)) {
+    h1 = item_quick_height(l);
+    if (l == item) {
+      if (Y <= H) { // it is visible or right at bottom
+	Y = Y+h1-H; // find where bottom edge is
+	if (Y > 0) position(real_position_+Y); // scroll down a bit
+      } else {
+	position(real_position_+Y-(H-h1)/2); // center it
+      }
+      return;
+    }
+    Y += h1;
+  }
+  // search backward for it, if found center it:
+  l = lp;
+  Y = -offset_;
+  for (; l; l = item_prev(l)) {
+    h1 = item_quick_height(l);
+    Y -= h1;
+    if (l == item) {
+      if ((Y + h1) >= 0) position(real_position_+Y);
+      else position(real_position_+Y-(H-h1)/2);
+      return;
+    }
+  }
+#endif
+}
+
+// redraw, has side effect of updating top and setting scrollbar:
+/**
+ Draws the list within the normal widget bounding box.
+ */
+void fltk3::Browser_::draw() {
+  FLTK3_OBJECT_VCALLS_WRAPPER(draw(), Draw)
+  int drawsquare = 0;
+  update_top();
+  int full_width_ = full_width();
+  int full_height_ = full_height();
+  int X, Y, W, H; bbox(X, Y, W, H);
+  int dont_repeat = 0;
+J1:
+  if (damage() & fltk3::DAMAGE_ALL) { // redraw the box if full redraw
+    fltk3::Boxtype b = box() ? box() : fltk3::DOWN_BOX;
+    draw_box(b, x(), y(), w(), h(), color());
+    drawsquare = 1;
+  }
+  // see if scrollbar needs to be switched on/off:
+  if ((has_scrollbar_ & VERTICAL) && (
+                                      (has_scrollbar_ & ALWAYS_ON) || position_ || full_height_ > H)) {
+    if (!scrollbar.visible()) {
+      scrollbar.set_visible();
+      drawsquare = 1;
+      bbox(X, Y, W, H);
+    }
+  } else {
+    top_ = item_first(); real_position_ = offset_ = 0;
+    if (scrollbar.visible()) {
+      scrollbar.clear_visible();
+      clear_damage((uchar)(damage()|fltk3::DAMAGE_SCROLL));
+    }
+  }
+  
+  if ((has_scrollbar_ & HORIZONTAL) && (
+                                        (has_scrollbar_ & ALWAYS_ON) || hposition_ || full_width_ > W)) {
+    if (!hscrollbar.visible()) {
+      hscrollbar.set_visible();
+      drawsquare = 1;
+      bbox(X, Y, W, H);
+    }
+  } else {
+    real_hposition_ = 0;
+    if (hscrollbar.visible()) {
+      hscrollbar.clear_visible();
+      clear_damage((uchar)(damage()|fltk3::DAMAGE_SCROLL));
+    }
+  }
+  
+  // Check the vertical scrollbar again, just in case it needs to be drawn
+  // because the horizontal one is drawn.  There should be a cleaner way
+  // to do this besides copying the same code...
+  if ((has_scrollbar_ & VERTICAL) && (
+                                      (has_scrollbar_ & ALWAYS_ON) || position_ || full_height_ > H)) {
+    if (!scrollbar.visible()) {
+      scrollbar.set_visible();
+      drawsquare = 1;
+      bbox(X, Y, W, H);
+    }
+  } else {
+    top_ = item_first(); real_position_ = offset_ = 0;
+    if (scrollbar.visible()) {
+      scrollbar.clear_visible();
+      clear_damage((uchar)(damage()|fltk3::DAMAGE_SCROLL));
+    }
+  }
+  
+  bbox(X, Y, W, H);
+  
+  fltk3::push_clip(X, Y, W, H);
+  // for each line, draw it if full redraw or scrolled.  Erase background
+  // if not a full redraw or if it is selected:
+  void* l = top();
+  int yy = -offset_;
+  for (; l && yy < H; l = item_next(l)) {
+    int hh = item_height(l);
+    if (hh <= 0) continue;
+    if ((damage()&(fltk3::DAMAGE_SCROLL|fltk3::DAMAGE_ALL)) || l == redraw1 || l == redraw2) {
+      if (item_selected(l)) {
+	fltk3::color(active_r() ? selection_color() : fltk3::inactive(selection_color()));
+	fltk3::rectf(X, yy+Y, W, hh);
+      } else if (!(damage()&fltk3::DAMAGE_ALL)) {
+	fltk3::push_clip(X, yy+Y, W, hh);
+	draw_box(box() ? box() : fltk3::DOWN_BOX, x(), y(), w(), h(), color());
+	fltk3::pop_clip();
+      }
+      item_draw(l, X-hposition_, yy+Y, W+hposition_, hh);
+      if (l == selection_ && fltk3::focus() == this) {
+	draw_box(fltk3::BORDER_FRAME, X, yy+Y, W, hh, color());
+	draw_focus(fltk3::NO_BOX, X, yy+Y, W+1, hh+1);
+      }
+      int ww = item_width(l);
+      if (ww > max_width) {max_width = ww; max_width_item = l;}
+    }
+    yy += hh;
+  }
+  // erase the area below last line:
+  if (!(damage()&fltk3::DAMAGE_ALL) && yy < H) {
+    fltk3::push_clip(X, yy+Y, W, H-yy);
+    draw_box(box() ? box() : fltk3::DOWN_BOX, x(), y(), w(), h(), color());
+    fltk3::pop_clip();
+  }
+  fltk3::pop_clip();
+  redraw1 = redraw2 = 0;
+  
+  if (!dont_repeat) {
+    dont_repeat = 1;
+    // see if changes to full_height caused by calls to slow_height
+    // caused scrollbar state to change, in which case we have to redraw:
+    full_height_ = full_height();
+    full_width_ = full_width();
+    if ((has_scrollbar_ & VERTICAL) &&
+	((has_scrollbar_ & ALWAYS_ON) || position_ || full_height_>H)) {
+      if (!scrollbar.visible()) { damage(fltk3::DAMAGE_ALL); goto J1; }
+    } else {
+      if (scrollbar.visible()) { damage(fltk3::DAMAGE_ALL); goto J1; }
+    }
+    if ((has_scrollbar_ & HORIZONTAL) &&
+	((has_scrollbar_ & ALWAYS_ON) || hposition_ || full_width_>W)) {
+      if (!hscrollbar.visible()) { damage(fltk3::DAMAGE_ALL); goto J1; }
+    } else {
+      if (hscrollbar.visible()) { damage(fltk3::DAMAGE_ALL); goto J1; }
+    }
+  }
+  
+  // update the scrollbars and redraw them:
+  int scrollsize = scrollbar_size_ ? scrollbar_size_ : fltk3::scrollbar_size();
+  int dy = top_ ? item_quick_height(top_) : 0; if (dy < 10) dy = 10;
+  if (scrollbar.visible()) {
+    scrollbar.damage_resize(
+                            scrollbar.align()&fltk3::ALIGN_LEFT ? X-scrollsize : X+W,
+                            Y, scrollsize, H);
+    scrollbar.value(position_, H, 0, full_height_);
+    scrollbar.linesize(dy);
+    if (drawsquare) draw_child(scrollbar);
+    else update_child(scrollbar);
+  }
+  if (hscrollbar.visible()) {
+    hscrollbar.damage_resize(
+                             X, scrollbar.align()&fltk3::ALIGN_TOP ? Y-scrollsize : Y+H,
+                             W, scrollsize);
+    hscrollbar.value(hposition_, W, 0, full_width_);
+    hscrollbar.linesize(dy);
+    if (drawsquare) draw_child(hscrollbar);
+    else update_child(hscrollbar);
+  }
+  
+  // draw that little square between the scrollbars:
+  if (drawsquare && scrollbar.visible() && hscrollbar.visible()) {
+    fltk3::color(parent()->color());
+    fltk3::rectf(scrollbar.x(), hscrollbar.y(), scrollsize, scrollsize);
+  }
+  
+  real_hposition_ = hposition_;
+}
+
+// Quick way to delete and reset everything:
+/**
+ This method should be called when the list data is completely replaced
+ or cleared. It informs the fltk3::Browser_ widget that any cached
+ information it has concerning the items is invalid.
+ This method does not clear the list, it just handles the follow up
+ bookkeeping after the list has been cleared.
+ */
+void fltk3::Browser_::new_list() {
+  top_ = 0;
+  position_ = real_position_ = 0;
+  hposition_ = real_hposition_ = 0;
+  selection_ = 0;
+  offset_ = 0;
+  max_width = 0;
+  max_width_item = 0;
+  redraw_lines();
+}
+
+// Tell it that this item is going away, and that this must remove
+// all pointers to it:
+/**
+ This method should be used when \p item is being deleted from the list.
+ It allows the fltk3::Browser_ to discard any cached data it has on the item.
+ This method does not actually delete the item, but handles the follow up
+ bookkeeping after the item has just been deleted.
+ \param[in] item The item being deleted.
+ */
+void fltk3::Browser_::deleting(void* item) {
+  if (displayed(item)) {
+    redraw_lines();
+    if (item == top_) {
+      real_position_ -= offset_;
+      offset_ = 0;
+      top_ = item_next(item);
+      if (!top_) top_ = item_prev(item);
+    }
+  } else {
+    // we don't know where this item is, recalculate top...
+    real_position_ = 0;
+    offset_ = 0;
+    top_ = 0;
+  }
+  if (item == selection_) selection_ = 0;
+  if (item == max_width_item) {max_width_item = 0; max_width = 0;}
+}
+
+/**
+ This method should be used when item \p a is being replaced by item \p b.
+ It allows the fltk3::Browser_ to update its cache data as needed,
+ schedules a redraw for the item being changed, and tries to maintain the selection.
+ This method does not actually replace the item, but handles the follow up
+ bookkeeping after the item has just been replaced.
+ \param[in] a Item being replaced
+ \param[in] b Item to replace 'a'
+ */
+void fltk3::Browser_::replacing(void* a, void* b) {
+  redraw_line(a);
+  if (a == selection_) selection_ = b;
+  if (a == top_) top_ = b;
+  if (a == max_width_item) {max_width_item = 0; max_width = 0;}
+}
+
+/**
+ This method should be used when two items \p a and \p b are being swapped.
+ It allows the fltk3::Browser_ to update its cache data as needed,
+ schedules a redraw for the two items, and tries to maintain the current selection.
+ This method does not actually swap items, but handles the follow up
+ bookkeeping after items have been swapped.
+ \param[in] a,b Items being swapped.
+ */
+void fltk3::Browser_::swapping(void* a, void* b) {
+  redraw_line(a);
+  redraw_line(b);
+  if (a == selection_) selection_ = b;
+  else if (b == selection_) selection_ = a;
+  if (a == top_) top_ = b;
+  else if (b == top_) top_ = a;
+}
+
+/**
+ This method should be used when an item is in the process of
+ being inserted into the list.
+ It allows the fltk3::Browser_ to update its cache data as needed,
+ scheduling a redraw for the affected lines.
+ This method does not actually insert items, but handles the 
+ follow up bookkeeping after items have been inserted.
+ \param[in] a The starting item position
+ \param[in] b The new item being inserted
+ */
+void fltk3::Browser_::inserting(void* a, void* b) {
+  if (displayed(a)) redraw_lines();
+  if (a == top_) top_ = b;
+}
+
+/**
+ This method returns the item under mouse y position \p ypos.
+ NULL is returned if no item is displayed at that position.
+ \param[in] ypos The y position (eg. fltk3::event_y()) to find an item under.
+ \returns The item, or NULL if not found
+ */
+void* fltk3::Browser_::find_item(int ypos) {
+  update_top();
+  int X, Y, W, H; bbox(X, Y, W, H);
+  int yy = Y-offset_;
+  for (void *l = top_; l; l = item_next(l)) {
+    int hh = item_height(l); if (hh <= 0) continue;
+    yy += hh;
+    if (ypos <= yy || yy>=(Y+H)) return l;
+  }
+  return 0;
+}
+
+/**
+ Sets the selection state of \p item to \p val,
+ and returns 1 if the state changed or 0 if it did not.
+ 
+ If \p docallbacks is non-zero, select tries to call
+ the callback function for the widget.
+ 
+ \param[in] item The item whose selection state is to be changed
+ \param[in] val The new selection state (1=select, 0=de-select)
+ \param[in] docallbacks If 1, invokes widget callback if item changed.\n
+ If 0, doesn't do callback (default).
+ \returns 1 if state was changed, 0 if not.
+ */
+int fltk3::Browser_::select(void* item, int val, int docallbacks) {
+  if (type() == fltk3::MULTI_BROWSER) {
+    if (selection_ != item) {
+      if (selection_) redraw_line(selection_);
+      selection_ = item;
+      redraw_line(item);
+    }
+    if ((!val)==(!item_selected(item))) return 0;
+    item_select(item, val);
+    redraw_line(item);
+  } else {
+    if (val && selection_ == item) return 0;
+    if (!val && selection_ != item) return 0;
+    if (selection_) {
+      item_select(selection_, 0);
+      redraw_line(selection_);
+      selection_ = 0;
+    }
+    if (val) {
+      item_select(item, 1);
+      selection_ = item;
+      redraw_line(item);
+      display(item);
+    }
+  }	    
+  if (docallbacks) {
+    set_changed();
+    do_callback();
+  }
+  return 1;
+}
+
+/**
+ Deselects all items in the list and returns 1 if the state changed
+ or 0 if it did not.
+ 
+ If the optional \p docallbacks parameter is non-zero, deselect tries
+ to call the callback function for the widget.
+ 
+ \param[in] docallbacks If 1, invokes widget callback if item changed.\n
+ If 0, doesn't do callback (default).
+ */
+int fltk3::Browser_::deselect(int docallbacks) {
+  if (type() == fltk3::MULTI_BROWSER) {
+    int change = 0;
+    for (void* p = item_first(); p; p = item_next(p))
+      change |= select(p, 0, docallbacks);
+    return change;
+  } else {
+    if (!selection_) return 0;
+    item_select(selection_, 0);
+    redraw_line(selection_);
+    selection_ = 0;
+    return 1;
+  }
+}
+
+/**
+ Selects \p item and returns 1 if the state changed or 0 if it did not.
+ Any other items in the list are deselected.
+ \param[in] item The \p item to select.
+ \param[in] docallbacks If 1, invokes widget callback if item changed.\n
+ If 0, doesn't do callback (default).
+ */
+int fltk3::Browser_::select_only(void* item, int docallbacks) {
+  if (!item) return deselect(docallbacks);
+  int change = 0;
+  fltk3::WidgetTracker wp(this);
+  if (type() == fltk3::MULTI_BROWSER) {
+    for (void* p = item_first(); p; p = item_next(p)) {
+      if (p != item) change |= select(p, 0, docallbacks);
+      if (wp.deleted()) return change;
+    }
+  }
+  change |= select(item, 1, docallbacks);
+  if (wp.deleted()) return change;
+  display(item);
+  return change;
+}
+
+/**
+ Handles the \p event within the normal widget bounding box.
+ \param[in] event The event to process.
+ \returns 1 if event was processed, 0 if not.
+ */
+int fltk3::Browser_::handle(int event) {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, handle(event), Handle)
+  
+  // NOTE:
+  // We use fltk3::WidgetTracker to test if the user has deleted
+  // this widget in a callback. Callbacks can be called by:
+  //  - do_callback()
+  //  - select()
+  //  - select_only()
+  //  - deselect()
+  // Thus we must test wp.deleted() after each of these calls,
+  // unless we return directly after one of these.
+  // If wp.deleted() is true, we return 1 because we used the event.
+  
+  fltk3::WidgetTracker wp(this);
+  
+  // must do shortcuts first or the scrollbar will get them...
+  if (event == fltk3::ENTER || event == fltk3::LEAVE) return 1;
+  if (event == fltk3::KEYBOARD && type() >= fltk3::HOLD_BROWSER) {
+    void* l1 = selection_;
+    void* l = l1; if (!l) l = top_; if (!l) l = item_first();
+    if (l) {
+      if (type()==fltk3::HOLD_BROWSER) {
+        switch (fltk3::event_key()) {
+          case fltk3::DownKey:
+            while ((l = item_next(l)))
+              if (item_height(l)>0) {select_only(l, when()); break;}
+            return 1;
+          case fltk3::UpKey:
+            while ((l = item_prev(l))) {
+              if (item_height(l)>0) {
+                select_only(l, when());
+                break; // no need to test wp (return 1)
+              }
+            }
+            return 1;
+        } 
+      } else  {
+        switch (fltk3::event_key()) {
+          case fltk3::EnterKey:
+          case fltk3::KPEnterKey:
+            select_only(l, when() & ~fltk3::WHEN_ENTER_KEY);
+            if (wp.deleted()) return 1;
+            if (when() & fltk3::WHEN_ENTER_KEY) {
+              set_changed();
+              do_callback();
+            }
+            return 1;
+          case ' ':
+            selection_ = l;
+            select(l, !item_selected(l), when() & ~fltk3::WHEN_ENTER_KEY);
+            return 1;
+          case fltk3::DownKey:
+            while ((l = item_next(l))) {
+              if (fltk3::event_state(fltk3::SHIFT|fltk3::CTRL))
+                select(l, l1 ? item_selected(l1) : 1, when());
+              if (wp.deleted()) return 1;
+              if (item_height(l)>0) goto J1;
+            }
+            return 1;
+          case fltk3::UpKey:
+            while ((l = item_prev(l))) {
+              if (fltk3::event_state(fltk3::SHIFT|fltk3::CTRL))
+                select(l, l1 ? item_selected(l1) : 1, when());
+              if (wp.deleted()) return 1;
+              if (item_height(l)>0) goto J1;
+            }
+            return 1;
+          J1:
+            if (selection_) redraw_line(selection_);
+            selection_ = l; redraw_line(l);
+            display(l);
+            return 1;
+        }
+      }
+    }
+  }
+  
+  if (Group::handle(event)) return 1;
+  if (wp.deleted()) return 1;
+  
+  int X, Y, W, H; bbox(X, Y, W, H);
+  int my;
+  // NOTE:
+  // instead of:
+  //     change = select_only(find_item(my), when() & fltk3::WHEN_CHANGED)
+  // we use the construct:
+  //     change = select_only(find_item(my), 0);
+  //     if (change && (when() & fltk3::WHEN_CHANGED)) {
+  //	 set_changed();
+  //       do_callback();
+  //     }
+  // See str #834
+  // The first form calls the callback *before* setting change.
+  // The callback may execute an fltk3::wait(), resulting in another
+  // call of fltk3::Browser_::handle() for the same widget. The sequence
+  // of events can be an fltk3::PUSH followed by an fltk3::RELEASE.
+  // This second call of fltk3::Browser_::handle() may result in a -
+  // somewhat unexpected - second concurrent invocation of the callback.
+  
+  static char change;
+  static char whichway;
+  static int py;
+  switch (event) {
+    case fltk3::PUSH:
+      if (!fltk3::event_inside(X, Y, W, H)) return 0;
+      if (fltk3::visible_focus()) {
+        fltk3::focus(this);
+        redraw();
+      }
+      my = py = fltk3::event_y();
+      change = 0;
+      if (type() == fltk3::NORMAL_BROWSER || !top_)
+        ;
+      else if (type() != fltk3::MULTI_BROWSER) {
+        change = select_only(find_item(my), 0);
+        if (wp.deleted()) return 1;
+        if (change && (when() & fltk3::WHEN_CHANGED)) {
+          set_changed();
+          do_callback();
+          if (wp.deleted()) return 1;
+        }
+      } else {
+        void* l = find_item(my);
+        whichway = 1;
+        if (fltk3::event_state(fltk3::CTRL)) { // toggle selection:
+        TOGGLE:
+          if (l) {
+            whichway = !item_selected(l);
+            change = select(l, whichway, 0);
+            if (wp.deleted()) return 1;
+            if (change && (when() & fltk3::WHEN_CHANGED)) {
+              set_changed();
+              do_callback();
+              if (wp.deleted()) return 1;
+            }
+          }
+        } else if (fltk3::event_state(fltk3::SHIFT)) { // extend selection:
+          if (l == selection_) goto TOGGLE;
+          // state of previous selection determines new value:
+          whichway = l ? !item_selected(l) : 1;
+          // see which of the new item or previous selection is earlier,
+          // by searching from the previous forward for this one:
+          int down;
+          if (!l) down = 1;
+          else {for (void* m = selection_; ; m = item_next(m)) {
+            if (m == l) {down = 1; break;}
+            if (!m) {down = 0; break;}
+          }}
+          if (down) {
+            for (void* m = selection_; m != l; m = item_next(m)) {
+              select(m, whichway, when() & fltk3::WHEN_CHANGED);
+              if (wp.deleted()) return 1;
+            }
+          } else {
+            void* e = selection_;
+            for (void* m = item_next(l); m; m = item_next(m)) {
+              select(m, whichway, when() & fltk3::WHEN_CHANGED);
+              if (wp.deleted()) return 1;
+              if (m == e) break;
+            }
+          }
+          // do the clicked item last so the select box is around it:
+          change = 1;
+          if (l) select(l, whichway, when() & fltk3::WHEN_CHANGED);
+          if (wp.deleted()) return 1;
+        } else { // select only this item
+          change = select_only(l, 0);
+          if (wp.deleted()) return 1;
+          if (change && (when() & fltk3::WHEN_CHANGED)) {
+            set_changed();
+            do_callback();
+            if (wp.deleted()) return 1;
+          }
+        }
+      }
+      return 1;
+    case fltk3::DRAG:
+      // do the scrolling first:
+      my = fltk3::event_y();
+      if (my < Y && my < py) {
+        int p = real_position_+my-Y;
+        if (p<0) p = 0;
+        position(p);
+      } else if (my > (Y+H) && my > py) {
+        int p = real_position_+my-(Y+H);
+        int hh = full_height()-H; if (p > hh) p = hh;
+        if (p<0) p = 0;
+        position(p);
+      }
+      if (type() == fltk3::NORMAL_BROWSER || !top_)
+        ;
+      else if (type() == fltk3::MULTI_BROWSER) {
+        void* l = find_item(my);
+        void* t; void* b; // this will be the range to change
+        if (my > py) { // go down
+          t = selection_ ? item_next(selection_) : 0;
+          b = l ? item_next(l) : 0;
+        } else {	// go up
+          t = l;
+          b = selection_;
+        }
+        for (; t && t != b; t = item_next(t)) {
+          char change_t;
+          change_t = select(t, whichway, 0);
+          if (wp.deleted()) return 1;
+          change |= change_t;
+          if (change_t && (when() & fltk3::WHEN_CHANGED)) {
+            set_changed();
+            do_callback();
+            if (wp.deleted()) return 1;
+          }
+        }
+        if (l) selection_ = l;
+      } else {
+        void* l1 = selection_;
+        void* l =
+	(fltk3::event_x()<x() || fltk3::event_x()>x()+w()) ? selection_ :
+	find_item(my);
+        change = (l != l1);
+        select_only(l, when() & fltk3::WHEN_CHANGED);
+        if (wp.deleted()) return 1;
+      }
+      py = my;
+      return 1;
+    case fltk3::RELEASE:
+      if (type() == fltk3::SELECT_BROWSER) {
+        void* t = selection_;
+        deselect();
+        if (wp.deleted()) return 1;
+        selection_ = t;
+      }
+      if (change) {
+        set_changed();
+        if (when() & fltk3::WHEN_RELEASE) do_callback();
+      } else {
+        if (when() & fltk3::WHEN_NOT_CHANGED) do_callback();
+      }
+      if (wp.deleted()) return 1;
+      
+      // double click calls the callback: (like Enter Key)
+      if (fltk3::event_clicks() && (when() & fltk3::WHEN_ENTER_KEY)) {
+        set_changed();
+        do_callback();
+      }
+      return 1;
+    case fltk3::FOCUS:
+    case fltk3::UNFOCUS:
+      if (type() >= fltk3::HOLD_BROWSER && fltk3::visible_focus()) {
+        redraw();
+        return 1;
+      } else return 0;
+  }
+  
+  return 0;
+}
+
+/**
+ The constructor makes an empty browser.
+ \param[in] X,Y,W,H position and size.
+ \param[in] L The label string, may be NULL.
+ */
+fltk3::Browser_::Browser_(int X, int Y, int W, int H, const char* L)
+: fltk3::Group(X, Y, W, H, L),
+scrollbar(0, 0, 0, 0, 0), // they will be resized by draw()
+hscrollbar(0, 0, 0, 0, 0)
+{
+  box(fltk3::NO_BOX);
+  align(fltk3::ALIGN_BOTTOM);
+  position_ = real_position_ = 0;
+  hposition_ = real_hposition_ = 0;
+  offset_ = 0;
+  top_ = 0;
+  when(fltk3::WHEN_RELEASE_ALWAYS);
+  selection_ = 0;
+  color(fltk3::BACKGROUND2_COLOR, fltk3::SELECTION_COLOR);
+  scrollbar.callback(scrollbar_callback);
+  //scrollbar.align(fltk3::ALIGN_LEFT|fltk3::ALIGN_BOTTOM); // back compatibility?
+  hscrollbar.callback(hscrollbar_callback);
+  hscrollbar.type(fltk3::HORIZONTAL);
+  textfont(fltk3::HELVETICA);
+  textsize(fltk3::NORMAL_SIZE);
+  textcolor(fltk3::FOREGROUND_COLOR);
+  has_scrollbar_ = BOTH;
+  max_width = 0;
+  max_width_item = 0;
+  scrollbar_size_ = 0;
+  redraw1 = redraw2 = 0;
+  end();
+}
+
+/**
+ Sort the items in the browser based on \p flags.
+ item_swap(void*, void*) and item_text(void*) must be implemented for this call.
+ \param[in] flags fltk3::SORT_ASCENDING -- sort in ascending order\n
+ fltk3::SORT_DESCENDING -- sort in descending order\n
+ Values other than the above will cause undefined behavior\n
+ Other flags may appear in the future.
+ \todo Add a flag to ignore case
+ */
+void fltk3::Browser_::sort(int flags) {
+  //
+  // Simple bubble sort - pure lazyness on my side.
+  //
+  int i, j, n = -1, desc = ((flags&fltk3::SORT_DESCENDING)==fltk3::SORT_DESCENDING);
+  void *a =item_first(), *b, *c;
+  if (!a) return;
+  while (a) {
+    a = item_next(a);
+    n++;
+  }
+  for (i=n; i>0; i--) {
+    char swapped = 0;
+    a = item_first();
+    b = item_next(a);
+    for (j=0; j<i; j++) {
+      const char *ta = item_text(a);
+      const char *tb = item_text(b);
+      c = item_next(b);
+      if (desc) {
+        if (strcmp(ta, tb)<0) {
+          item_swap(a, b);
+          swapped = 1;
+        }
+      } else {
+        if (strcmp(ta, tb)>0) {
+          item_swap(a, b);
+          swapped = 1;
+        }
+      }
+      if (!c) break;
+      b = c; a = item_prev(b);
+    }
+    if (!swapped)
+      break;
+  }
+}
+
+// Default versions of some of the virtual functions:
+
+/**
+ This method may be provided by the subclass to return the height of the
+ \p item, in pixels.  
+ Allow for two additional pixels for the list selection box.
+ This method differs from item_height in that it is only called for 
+ selection and scrolling operations. 
+ The default implementation calls item_height.
+ \param[in] item The item whose height to return.
+ \returns The height, in pixels.
+ */
+int fltk3::Browser_::item_quick_height(void* item) const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, item_quick_height(item), BrowserItemQuickHeight)
+  return item_height(item);
+}
+
+/**
+ This method may be provided to return the average height of all items
+ to be used for scrolling. 
+ The default implementation uses the height of the first item.
+ \returns The average height of items, in pixels.
+ */
+int fltk3::Browser_::incr_height() const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, incr_height(), BrowserIncrHeight)
+  return item_quick_height(item_first());
+}
+
+/**
+ This method may be provided by the subclass to indicate the full height
+ of the item list, in pixels. 
+ The default implementation computes the full height from the item heights. 
+ Includes the items that are scrolled off screen.
+ \returns The height of the entire list, in pixels.
+ */
+int fltk3::Browser_::full_height() const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, full_height(), BrowserFullHeight)
+  int t = 0;
+  for (void* p = item_first(); p; p = item_next(p))
+    t += item_quick_height(p);
+  return t;
+}
+
+/**
+ This method may be provided by the subclass to indicate the full width
+ of the item list, in pixels. 
+ The default implementation computes the full width from the item widths.
+ \returns The maximum width of all the items, in pixels.
+ */
+int fltk3::Browser_::full_width() const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, full_width(), BrowserFullWidth)
+  return max_width;
+}
+
+/**
+ This method must be implemented by the subclass if it supports 
+ multiple selections; sets the selection state to \p val for the \p item.
+ Sets the selection state for \p item, where optional \p val is 1 (select, the default)
+ or 0 (de-select).
+ \param[in] item The item to be selected
+ \param[in] val The optional selection state; 1=select, 0=de-select.\n
+ The default is to select the item (1).
+ */
+void fltk3::Browser_::item_select(void *item, int val) {
+  FLTK3_OBJECT_VCALLS_WRAPPER(item_select(item, val), BrowserItemSelect)
+}
+
+/**
+ This method must be implemented by the subclass if it supports
+ multiple selections; returns the selection state for \p item.
+ The method should return 1 if \p item is selected, or 0 otherwise.
+ \param[in] item The item to test.
+ */
+int fltk3::Browser_::item_selected(void* item) const { 
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, item_selected(item), BrowserItemSelected)
+  return item==selection_ ? 1 : 0; 
+}
+
+void *fltk3::Browser_::item_first() const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(void*, item_first(), BrowserItemFirst)
+  return 0;
+}
+
+void *fltk3::Browser_::item_next(void *item) const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(void*, item_next(item), BrowserItemNext)
+  return 0;
+}
+
+void *fltk3::Browser_::item_prev(void *item) const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(void*, item_prev(item), BrowserItemPrev)
+  return 0;
+}
+
+void *fltk3::Browser_::item_last() const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(void*, item_last(), BrowserItemLast)
+  return 0;
+}
+
+int fltk3::Browser_::item_height(void *item) const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, item_height(item), BrowserItemHeight)
+  return 0;
+}
+
+int fltk3::Browser_::item_width(void *item) const { 
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, item_width(item), BrowserItemWidth)
+  return 0;
+}
+
+void fltk3::Browser_::item_draw(void *item,int X,int Y,int W,int H) const {
+  FLTK3_OBJECT_VCALLS_WRAPPER(item_draw(item, X, Y, W, H), BrowserItemDraw)
+}
+
+const char *fltk3::Browser_::item_text(void *item) const {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(const char *, item_text(item), BrowserItemText)
+  return 0L;
+}
+
+void fltk3::Browser_::item_swap(void *a,void *b) { 
+  FLTK3_OBJECT_VCALLS_WRAPPER(item_swap(a, b), BrowserItemSwap)
+}
+
+void *fltk3::Browser_::item_at(int index) const { 
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(void *, item_at(index), BrowserItemAt)
+  return 0L; 
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Browser_load.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Browser_load.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Browser_load.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Browser_load.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,70 @@
+//
+// "$Id$"
+//
+// File loading routines for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/Browser.h>
+#include <stdio.h>
+#include <fltk3/utf8.h>
+
+/**
+  Clears the browser and reads the file, adding each line from the file
+  to the browser.  If the filename is NULL or a zero-length
+  string then this just clears the browser.  This returns zero if there
+  was any error in opening or reading the file, in which case errno
+  is set to the system error.  The data() of each line is set
+  to NULL.
+  \param[in] filename The filename to load
+  \returns 1 if OK, 0 on error (errno has reason)
+  \see add()
+*/
+int fltk3::Browser::load(const char *filename) {
+#define MAXFL_BLINE 1024
+    char newtext[MAXFL_BLINE];
+    int c;
+    int i;
+    clear();
+    if (!filename || !(filename[0])) return 1;
+    FILE *fl = fltk3::fopen(filename,"r");
+    if (!fl) return 0;
+    i = 0;
+    do {
+	c = getc(fl);
+	if (c == '\n' || c <= 0 || i>=(MAXFL_BLINE-1)) {
+	    newtext[i] = 0;
+	    add(newtext);
+	    i = 0;
+	} else {
+	    newtext[i++] = c;
+	}
+    } while (c >= 0);
+    fclose(fl);
+    return 1;
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Button.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Button.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Button.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Button.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,228 @@
+//
+// "$Id$"
+//
+// Button widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/Button.h>
+#include <fltk3/Group.h>
+#include <fltk3/Window.h>
+
+
+fltk3::WidgetTracker *fltk3::Button::key_release_tracker = 0;
+
+
+// There are a lot of subclasses, named Fl_*_Button.  Some of
+// them are implemented by setting the type() value and testing it
+// here.  This includes fltk3::RadioButton and fltk3::ToggleButton
+
+/**
+  Sets the current value of the button.
+  A non-zero value sets the button to 1 (ON), and zero sets it to 0 (OFF).
+  \param[in] v button value.
+  \see set(), clear()
+ */
+int fltk3::Button::value(int v) {
+  v = v ? 1 : 0;
+  oldval = v;
+  clear_changed();
+  if (value_ != v) {
+    value_ = v;
+    if (box()) redraw();
+    else redraw_label();
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
+/**
+  Turns on this button and turns off all other radio buttons in the group
+  (calling \c value(1) or \c set() does not do this).
+ */
+void fltk3::Button::setonly() { // set this radio button on, turn others off
+  value(1);
+  fltk3::Group* g = parent();
+  fltk3::Widget*const* a = g->array();
+  for (int i = g->children(); i--;) {
+    fltk3::Widget* o = *a++;
+    if (o != this && o->type()==fltk3::RADIO_BUTTON) ((fltk3::Button*)o)->value(0);
+  }
+}
+
+void fltk3::Button::draw() {
+  FLTK3_OBJECT_VCALLS_WRAPPER(draw(), Draw)
+  if (type() == fltk3::HIDDEN_BUTTON) return;
+  fltk3::Color col;
+  if (value()) {
+    if (selection_color()==fltk3::GRAY) 
+      col = fltk3::color_average(fltk3::BLACK, color(), 0.2f);
+    else
+      col = selection_color();
+  } else {
+    col = color();
+  }
+  draw_box(value() ? (down_box()?down_box():fltk3::down(box())) : box(), col);
+  draw_backdrop();
+  if (labeltype() == fltk3::NORMAL_LABEL && value()) {
+    fltk3::Color c = labelcolor();
+    labelcolor(fltk3::contrast(c, col));
+    draw_label();
+    labelcolor(c);
+  } else draw_label();
+  if (fltk3::focus() == this) draw_focus();
+}
+
+int fltk3::Button::handle(int event) {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, handle(event), Handle)
+  int newval;
+  switch (event) {
+  case fltk3::ENTER: /* FALLTHROUGH */
+  case fltk3::LEAVE:
+//  if ((value_?selection_color():color())==fltk3::GRAY) redraw();
+    return 1;
+  case fltk3::PUSH:
+    if (fltk3::visible_focus() && handle(fltk3::FOCUS)) fltk3::focus(this);
+  case fltk3::DRAG:
+    if (fltk3::event_inside(this)) {
+      if (type() == fltk3::RADIO_BUTTON) newval = 1;
+      else newval = !oldval;
+    } else
+    {
+      clear_changed();
+      newval = oldval;
+    }
+    if (newval != value_) {
+      value_ = newval;
+      set_changed();
+      redraw();
+      if (when() & fltk3::WHEN_CHANGED) do_callback();
+    }
+    return 1;
+  case fltk3::RELEASE:
+    if (value_ == oldval) {
+      if (when() & fltk3::WHEN_NOT_CHANGED) do_callback();
+      return 1;
+    }
+    set_changed();
+    if (type() == fltk3::RADIO_BUTTON) setonly();
+    else if (type() == fltk3::TOGGLE_BUTTON) oldval = value_;
+    else {
+      value(oldval);
+      set_changed();
+      if (when() & fltk3::WHEN_CHANGED) {
+	fltk3::WidgetTracker wp(this);
+        do_callback();
+        if (wp.deleted()) return 1;
+      }
+    }
+    if (when() & fltk3::WHEN_RELEASE) do_callback();
+    return 1;
+  case fltk3::SHORTCUT:
+    if (!(shortcut() ?
+	  fltk3::test_shortcut(shortcut()) : test_shortcut())) return 0;    
+    if (fltk3::visible_focus() && handle(fltk3::FOCUS)) fltk3::focus(this);
+    goto triggered_by_keyboard;
+  case fltk3::FOCUS : /* FALLTHROUGH */
+  case fltk3::UNFOCUS :
+    if (fltk3::visible_focus()) {
+      if (box() == fltk3::NO_BOX) {
+	// Widgets with the fltk3::NO_BOX boxtype need a parent to
+	// redraw, since it is responsible for redrawing the
+	// background...
+	int X = x() > 0 ? x() - 1 : 0;
+	int Y = y() > 0 ? y() - 1 : 0;
+	if (window()) window()->damage(fltk3::DAMAGE_ALL, X, Y, w() + 2, h() + 2);
+      } else redraw();
+      return 1;
+    } else return 0;
+  case fltk3::KEYBOARD :
+    if (fltk3::focus() == this && fltk3::event_key() == ' ' &&
+        !(fltk3::event_state() & (fltk3::SHIFT | fltk3::CTRL | fltk3::ALT | fltk3::META))) {
+      set_changed();
+    triggered_by_keyboard:
+      fltk3::WidgetTracker wp(this);
+      if (type() == fltk3::RADIO_BUTTON && !value_) {
+	setonly();
+	if (when() & fltk3::WHEN_CHANGED) do_callback();
+      } else if (type() == fltk3::TOGGLE_BUTTON) {
+	value(!value());
+	if (when() & fltk3::WHEN_CHANGED) do_callback();
+      } else {
+        simulate_key_action();
+      }
+      if (wp.deleted()) return 1;
+      if (when() & fltk3::WHEN_RELEASE) do_callback();
+      return 1;
+    }
+  default:
+    return 0;
+  }
+}
+
+void fltk3::Button::simulate_key_action()
+{
+  if (key_release_tracker) {
+    fltk3::remove_timeout(key_release_timeout, key_release_tracker);
+    key_release_timeout(key_release_tracker);
+  }
+  value(1); 
+  redraw();
+  key_release_tracker = new fltk3::WidgetTracker(this);
+  fltk3::add_timeout(0.15, key_release_timeout, key_release_tracker);
+}
+
+void fltk3::Button::key_release_timeout(void *d)
+{
+  fltk3::WidgetTracker *wt = (fltk3::WidgetTracker*)d;
+  if (!wt)
+    return;
+  if (wt==key_release_tracker) 
+    key_release_tracker = 0L;
+  fltk3::Button *btn = (fltk3::Button*)wt->widget();
+  if (btn) {
+    btn->value(0);
+    btn->redraw();
+  }
+  delete wt;
+}
+
+/**
+  The constructor creates the button using the given position, size and label.
+  \param[in] X, Y, W, H position and size of the widget
+  \param[in] L widget label, default is no label
+ */
+fltk3::Button::Button(int X, int Y, int W, int H, const char *L)
+: fltk3::Widget(X,Y,W,H,L) {
+  box(fltk3::UP_BOX);
+  down_box(fltk3::NO_BOX);
+  value_ = oldval = 0;
+  shortcut_ = 0;
+  set_flag(SHORTCUT_LABEL);
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Chart.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Chart.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Chart.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Chart.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,436 @@
+//
+// "$Id$"
+//
+// Forms-compatible chart widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/math.h>
+#include <fltk3/run.h>
+#include <fltk3/Chart.h>
+#include <fltk3/draw.h>
+#include "flstring.h"
+#include <stdlib.h>
+
+#define ARCINC	(2.0*M_PI/360.0)
+
+// this function is in fl_boxtype.cxx:
+void fl_rectbound(int x,int y,int w,int h, fltk3::Color color, fltk3::Boxtype);
+
+/* Widget specific information */
+
+static void draw_barchart(int x,int y,int w,int h,
+			  int numb, fltk3::CHART_ENTRY entries[],
+			  double min, double max, int autosize, int maxnumb,
+			  fltk3::Color textcolor)
+/* Draws a bar chart. x,y,w,h is the bounding box, entries the array of
+   numb entries and min and max the boundaries. */
+{
+  double incr;
+  int zeroh;
+  double lh = fltk3::height();
+  if (max == min) incr = h;
+  else incr = h/(max-min);
+  if ( (-min*incr) < lh) {
+      incr = (h - lh + min*incr)/(max-min);
+      zeroh = int(y+h-lh);
+  } else {
+      zeroh = (int)rint(y+h+min * incr);
+  }
+  int bwidth = (int)rint(w/double(autosize?numb:maxnumb));
+  /* Draw base line */
+  fltk3::color(textcolor);
+  fltk3::line(x, zeroh, x+w, zeroh);
+  if (min == 0.0 && max == 0.0) return; /* Nothing else to draw */
+  int i;
+  /* Draw the bars */
+  for (i=0; i<numb; i++) {
+      int hh = (int)rint(entries[i].val*incr);
+      if (hh < 0)
+	fl_rectbound(x+i*bwidth,zeroh,bwidth+1,-hh+1, (fltk3::Color)entries[i].col, (fltk3::Boxtype)0);
+      else if (hh > 0)
+	fl_rectbound(x+i*bwidth,zeroh-hh,bwidth+1,hh+1,(fltk3::Color)entries[i].col, (fltk3::Boxtype)0);
+  }
+  /* Draw the labels */
+  fltk3::color(textcolor);
+  for (i=0; i<numb; i++)
+      fltk3::draw(entries[i].str,
+	      x+i*bwidth+bwidth/2,zeroh,0,0,
+	      fltk3::ALIGN_TOP);
+}
+
+static void draw_horbarchart(int x,int y,int w,int h,
+			     int numb, fltk3::CHART_ENTRY entries[],
+			     double min, double max, int autosize, int maxnumb,
+			     fltk3::Color textcolor)
+/* Draws a horizontal bar chart. x,y,w,h is the bounding box, entries the
+   array of numb entries and min and max the boundaries. */
+{
+  int i;
+  double lw = 0.0;		/* Maximal label width */
+  /* Compute maximal label width */
+  for (i=0; i<numb; i++) {
+      double w1 = fltk3::width(entries[i].str);
+      if (w1 > lw) lw = w1;
+  }
+  if (lw > 0.0) lw += 4.0;
+  double incr;
+  int zeroh;
+  if (max == min) incr = w;
+  else incr = w/(max-min);
+  if ( (-min*incr) < lw) {
+      incr = (w - lw + min*incr)/(max-min);
+      zeroh = x+(int)rint(lw);
+  } else {
+      zeroh = (int)rint(x-min * incr);
+  }
+  int bwidth = (int)rint(h/double(autosize?numb:maxnumb));
+  /* Draw base line */
+  fltk3::color(textcolor);
+  fltk3::line(zeroh, y, zeroh, y+h);
+  if (min == 0.0 && max == 0.0) return; /* Nothing else to draw */
+  /* Draw the bars */
+  for (i=0; i<numb; i++) {
+      int ww = (int)rint(entries[i].val*incr);
+      if (ww > 0)
+	fl_rectbound(zeroh,y+i*bwidth,ww+1,bwidth+1, (fltk3::Color)entries[i].col, (fltk3::Boxtype)0);
+      else if (ww < 0)
+	fl_rectbound(zeroh+ww,y+i*bwidth,-ww+1,bwidth+1,(fltk3::Color)entries[i].col, (fltk3::Boxtype)0);
+  }
+  /* Draw the labels */
+  fltk3::color(textcolor);
+  for (i=0; i<numb; i++)
+      fltk3::draw(entries[i].str,
+	      zeroh-2,y+i*bwidth+bwidth/2,0,0,
+	      fltk3::ALIGN_RIGHT);
+}
+
+static void draw_linechart(int type, int x,int y,int w,int h,
+			   int numb, fltk3::CHART_ENTRY entries[],
+			   double min, double max, int autosize, int maxnumb,
+			   fltk3::Color textcolor)
+/* Draws a line chart. x,y,w,h is the bounding box, entries the array of
+   numb entries and min and max the boundaries. */
+{
+  int i;
+  double lh = fltk3::height();
+  double incr;
+  if (max == min) incr = h-2.0*lh;
+  else incr = (h-2.0*lh)/ (max-min);
+  int zeroh = (int)rint(y+h-lh+min * incr);
+  double bwidth = w/double(autosize?numb:maxnumb);
+  /* Draw the values */
+  for (i=0; i<numb; i++) {
+      int x0 = x + (int)rint((i-.5)*bwidth);
+      int x1 = x + (int)rint((i+.5)*bwidth);
+      int yy0 = i ? zeroh - (int)rint(entries[i-1].val*incr) : 0;
+      int yy1 = zeroh - (int)rint(entries[i].val*incr);
+      if (type == fltk3::SPIKE_CHART) {
+	  fltk3::color((fltk3::Color)entries[i].col);
+	  fltk3::line(x1, zeroh, x1, yy1);
+      } else if (type == fltk3::LINE_CHART && i != 0) {
+	  fltk3::color((fltk3::Color)entries[i-1].col);
+	  fltk3::line(x0,yy0,x1,yy1);
+      } else if (type == fltk3::FILLED_CHART && i != 0) {
+	  fltk3::color((fltk3::Color)entries[i-1].col);
+	  if ((entries[i-1].val>0.0)!=(entries[i].val>0.0)) {
+	      double ttt = entries[i-1].val/(entries[i-1].val-entries[i].val);
+	      int xt = x + (int)rint((i-.5+ttt)*bwidth);
+	      fltk3::polygon(x0,zeroh, x0,yy0, xt,zeroh);
+	      fltk3::polygon(xt,zeroh, x1,yy1, x1,zeroh);
+	  } else {
+	      fltk3::polygon(x0,zeroh, x0,yy0, x1,yy1, x1,zeroh);
+	  }
+	  fltk3::color(textcolor);
+	  fltk3::line(x0,yy0,x1,yy1);
+      }
+  }
+  /* Draw base line */
+  fltk3::color(textcolor);
+  fltk3::line(x,zeroh,x+w,zeroh);
+  /* Draw the labels */
+  for (i=0; i<numb; i++)
+      fltk3::draw(entries[i].str,
+	      x+(int)rint((i+.5)*bwidth), zeroh - (int)rint(entries[i].val*incr),0,0,
+	      entries[i].val>=0 ? fltk3::ALIGN_BOTTOM : fltk3::ALIGN_TOP);
+}
+
+static void draw_piechart(int x,int y,int w,int h,
+			  int numb, fltk3::CHART_ENTRY entries[], int special,
+			  fltk3::Color textcolor)
+/* Draws a pie chart. x,y,w,h is the bounding box, entries the array of
+   numb entries */
+{
+  int i;
+  double xc,yc,rad;	/* center and radius */
+  double tot;		/* sum of values */
+  double incr;		/* increment in angle */
+  double curang;		/* current angle we are drawing */
+  double txc,tyc;	/* temporary center */
+  double lh = fltk3::height();
+  /* compute center and radius */
+  double h_denom = (special ? 2.3 : 2.0);
+  rad = (h - 2*lh)/h_denom/1.1;
+  xc = x+w/2.0; yc = y+h-1.1*rad-lh;
+  /* compute sum of values */
+  tot = 0.0;
+  for (i=0; i<numb; i++)
+    if (entries[i].val > 0.0) tot += entries[i].val;
+  if (tot == 0.0) return;
+  incr = 360.0/tot;
+  /* Draw the pie */
+  curang = 0.0;
+  for (i=0; i<numb; i++)
+    if (entries[i].val > 0.0)
+    {
+      txc = xc; tyc = yc;
+      /* Correct for special pies */
+      if (special && i==0)
+      {
+        txc += 0.3*rad*cos(ARCINC*(curang+0.5*incr*entries[i].val));
+        tyc -= 0.3*rad*sin(ARCINC*(curang+0.5*incr*entries[i].val));
+      }
+      fltk3::color((fltk3::Color)entries[i].col);
+      fltk3::begin_polygon(); fltk3::vertex(txc,tyc);
+      fltk3::arc(txc,tyc,rad,curang, curang+incr*entries[i].val);
+      fltk3::end_polygon();
+      fltk3::color(textcolor);
+      fltk3::begin_loop(); fltk3::vertex(txc,tyc);
+      fltk3::arc(txc,tyc,rad,curang, curang+incr*entries[i].val);
+      fltk3::end_loop();
+      curang += 0.5 * incr * entries[i].val;
+      /* draw the label */
+      double xl = txc + 1.1*rad*cos(ARCINC*curang);
+      fltk3::draw(entries[i].str,
+	      (int)rint(xl),
+	      (int)rint(tyc - 1.1*rad*sin(ARCINC*curang)),
+	      0, 0,
+	      xl<txc ? fltk3::ALIGN_RIGHT : fltk3::ALIGN_LEFT);
+      curang += 0.5 * incr * entries[i].val;
+    }
+}
+
+void fltk3::Chart::draw() {
+  FLTK3_OBJECT_VCALLS_WRAPPER(draw(), Draw)
+    draw_box();
+    fltk3::Boxtype b = box();
+    int xx = x()+fltk3::box_dx(b); // was 9 instead of dx...
+    int yy = y()+fltk3::box_dy(b);
+    int ww = w()-fltk3::box_dw(b);
+    int hh = h()-fltk3::box_dh(b);
+    fltk3::push_clip(xx, yy, ww, hh);
+
+    ww--; hh--; // adjust for line thickness
+
+    if (min >= max) {
+	min = max = 0.0;
+	for (int i=0; i<numb; i++) {
+	    if (entries[i].val < min) min = entries[i].val;
+	    if (entries[i].val > max) max = entries[i].val;
+	}
+    }
+
+    fltk3::font(textfont(),textsize());
+
+    switch (type()) {
+    case fltk3::BAR_CHART:
+	ww++; // makes the bars fill box correctly
+	draw_barchart(xx,yy,ww,hh, numb, entries, min, max,
+			autosize(), maxnumb, textcolor());
+	break;
+    case fltk3::HORBAR_CHART:
+	hh++; // makes the bars fill box correctly
+	draw_horbarchart(xx,yy,ww,hh, numb, entries, min, max,
+			autosize(), maxnumb, textcolor());
+	break;
+    case fltk3::PIE_CHART:
+	draw_piechart(xx,yy,ww,hh,numb,entries,0, textcolor());
+	break;
+    case fltk3::SPECIALPIE_CHART:
+	draw_piechart(xx,yy,ww,hh,numb,entries,1,textcolor());
+	break;
+    default:
+	draw_linechart(type(),xx,yy,ww,hh, numb, entries, min, max,
+			autosize(), maxnumb, textcolor());
+	break;
+    }
+    draw_label();
+    fltk3::pop_clip();
+}
+
+/*------------------------------*/
+
+#define FL_CHART_BOXTYPE	fltk3::BORDER_BOX
+#define FL_CHART_COL1		FL_COL1
+#define FL_CHART_LCOL		FL_LCOL
+#define FL_CHART_ALIGN		fltk3::ALIGN_BOTTOM
+
+/**
+  Create a new fltk3::Chart widget using the given position, size and label string.
+  The default boxstyle is \c fltk3::NO_BOX.
+  \param[in] X, Y, W, H position and size of the widget
+  \param[in] L widget label, default is no label
+ */
+fltk3::Chart::Chart(int X, int Y, int W, int H,const char *L) :
+fltk3::Widget(X,Y,W,H,L) {
+  box(fltk3::BORDER_BOX);
+  align(fltk3::ALIGN_BOTTOM);
+  numb       = 0;
+  maxnumb    = 0;
+  sizenumb   = fltk3::CHART_MAX;
+  autosize_  = 1;
+  min = max  = 0;
+  textfont(fltk3::HELVETICA);
+  textsize(10);
+  textcolor(fltk3::FOREGROUND_COLOR);
+  entries    = (fltk3::CHART_ENTRY *)calloc(sizeof(fltk3::CHART_ENTRY), fltk3::CHART_MAX + 1);
+}
+
+/**
+  Destroys the fltk3::Chart widget and all of its data.
+ */
+fltk3::Chart::~Chart() {
+  free(entries);
+}
+
+/**
+  Removes all values from the chart.
+ */
+void fltk3::Chart::clear() {
+  numb = 0;
+  min = max = 0;
+  redraw();
+}
+
+/**
+  Add the data value \p val with optional label \p str and color \p col
+  to the chart.
+  \param[in] val data value
+  \param[in] str optional data label
+  \param[in] col optional data color
+ */
+void fltk3::Chart::add(double val, const char *str, unsigned col) {
+  /* Allocate more entries if required */
+  if (numb >= sizenumb) {
+    sizenumb += fltk3::CHART_MAX;
+    entries = (fltk3::CHART_ENTRY *)realloc(entries, sizeof(fltk3::CHART_ENTRY) * (sizenumb + 1));
+  }
+  // Shift entries as needed
+  if (numb >= maxnumb && maxnumb > 0) {
+    memmove(entries, entries + 1, sizeof(fltk3::CHART_ENTRY) * (numb - 1));
+    numb --;
+  }
+  entries[numb].val = float(val);
+  entries[numb].col = col;
+    if (str) {
+	strlcpy(entries[numb].str,str,fltk3::CHART_LABEL_MAX + 1);
+    } else {
+	entries[numb].str[0] = 0;
+    }
+  numb++;
+  redraw();
+}
+
+/**
+  Inserts a data value \p val at the given position \p ind.
+  Position 1 is the first data value.
+  \param[in] ind insertion position
+  \param[in] val data value
+  \param[in] str optional data label
+  \param[in] col optional data color
+ */
+void fltk3::Chart::insert(int ind, double val, const char *str, unsigned col) {
+  int i;
+  if (ind < 1 || ind > numb+1) return;
+  /* Allocate more entries if required */
+  if (numb >= sizenumb) {
+    sizenumb += fltk3::CHART_MAX;
+    entries = (fltk3::CHART_ENTRY *)realloc(entries, sizeof(fltk3::CHART_ENTRY) * (sizenumb + 1));
+  }
+  // Shift entries as needed
+  for (i=numb; i >= ind; i--) entries[i] = entries[i-1];
+  if (numb < maxnumb || maxnumb == 0) numb++;
+  /* Fill in the new entry */
+  entries[ind-1].val = float(val);
+  entries[ind-1].col = col;
+  if (str) {
+      strlcpy(entries[ind-1].str,str,fltk3::CHART_LABEL_MAX+1);
+  } else {
+      entries[ind-1].str[0] = 0;
+  }
+  redraw();
+}
+
+/**
+  Replace a data value \p val at the given position \p ind.
+  Position 1 is the first data value.
+  \param[in] ind insertion position
+  \param[in] val data value
+  \param[in] str optional data label
+  \param[in] col optional data color
+ */
+void fltk3::Chart::replace(int ind,double val, const char *str, unsigned col) {
+  if (ind < 1 || ind > numb) return;
+  entries[ind-1].val = float(val);
+  entries[ind-1].col = col;
+  if (str) {
+      strlcpy(entries[ind-1].str,str,fltk3::CHART_LABEL_MAX+1);
+  } else {
+      entries[ind-1].str[0] = 0;
+  }
+  redraw();
+}
+
+/**
+  Sets the lower and upper bounds of the chart values.
+  \param[in] a, b are used to set lower, upper
+ */
+void fltk3::Chart::bounds(double a, double b) {
+  this->min = a;
+  this->max = b;
+  redraw();
+}
+
+/**
+  Set the maximum number of data values for a chart.
+  If you do not call this method then the chart will be allowed to grow
+  to any size depending on available memory.
+  \param[in] m maximum number of data values allowed.
+ */
+void fltk3::Chart::maxsize(int m) {
+  int i;
+  /* Fill in the new number */
+  if (m < 0) return;
+  maxnumb = m;
+  /* Shift entries if required */
+  if (numb > maxnumb) {
+      for (i = 0; i<maxnumb; i++)
+	  entries[i] = entries[i+numb-maxnumb];
+      numb = maxnumb;
+      redraw();
+  }
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/CheckBrowser.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Check_Browser.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/CheckBrowser.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/CheckBrowser.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,330 @@
+//
+// "$Id$"
+//
+// fltk3::CheckBrowser header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "flstring.h"
+#include <fltk3/draw.h>
+#include <fltk3/CheckBrowser.h>
+
+/* This uses a cache for faster access when you're scanning the list
+either forwards or backwards. */
+
+fltk3::CheckBrowser::cb_item *fltk3::CheckBrowser::find_item(int n) const {
+	int i = n;
+	cb_item *p = first;
+
+	if (n <= 0 || n > nitems_ || p == 0) {
+		return 0;
+	}
+
+	if (n == cached_item) {
+		p = cache;
+		n = 1;
+	} else if (n == cached_item + 1) {
+		p = cache->next;
+		n = 1;
+	} else if (n == cached_item - 1) {
+		p = cache->prev;
+		n = 1;
+	}
+
+	while (--n) {
+		p = p->next;
+	}
+
+	/* Cast to not const and cache it. */
+
+	((fltk3::CheckBrowser *)this)->cache = p;
+	((fltk3::CheckBrowser *)this)->cached_item = i;
+
+	return p;
+}
+
+int fltk3::CheckBrowser::lineno(cb_item *p0) const {
+	cb_item *p = first;
+
+	if (p == 0) {
+		return 0;
+	}
+
+	int i = 1;
+	while (p) {
+		if (p == p0) {
+			return i;
+		}
+		i++;
+		p = p->next;
+	}
+
+	return 0;
+}
+
+fltk3::CheckBrowser::CheckBrowser(int X, int Y, int W, int H, const char *l)
+/**  The constructor makes an empty browser.*/
+: fltk3::Browser_(X, Y, W, H, l) {
+	type(fltk3::SELECT_BROWSER);
+	when(fltk3::WHEN_NEVER);
+	first = last = 0;
+	nitems_ = nchecked_ = 0;
+	cached_item = -1;
+}
+
+void *fltk3::CheckBrowser::item_first() const {
+	return first;
+}
+
+void *fltk3::CheckBrowser::item_next(void *l) const {
+	return ((cb_item *)l)->next;
+}
+
+void *fltk3::CheckBrowser::item_prev(void *l) const {
+	return ((cb_item *)l)->prev;
+}
+
+int fltk3::CheckBrowser::item_height(void *) const {
+	return textsize() + 2;
+}
+
+#define CHECK_SIZE (textsize()-2)
+
+int fltk3::CheckBrowser::item_width(void *v) const {
+	fltk3::font(textfont(), textsize());
+	return int(fltk3::width(((cb_item *)v)->text)) + CHECK_SIZE + 8;
+}
+
+void fltk3::CheckBrowser::item_draw(void *v, int X, int Y, int, int) const {
+	cb_item *i = (cb_item *)v;
+	char *s = i->text;
+	int tsize = textsize();
+	fltk3::Color col = active_r() ? textcolor() : fltk3::inactive(textcolor());
+	int cy = Y + (tsize + 1 - CHECK_SIZE) / 2;
+	X += 2;
+
+	fltk3::color(active_r() ? fltk3::FOREGROUND_COLOR : fltk3::inactive(fltk3::FOREGROUND_COLOR));
+	fltk3::loop(X, cy, X, cy + CHECK_SIZE,
+	        X + CHECK_SIZE, cy + CHECK_SIZE, X + CHECK_SIZE, cy);
+	if (i->checked) {
+	  int tx = X + 3;
+	  int tw = CHECK_SIZE - 4;
+	  int d1 = tw/3;
+	  int d2 = tw-d1;
+	  int ty = cy + (CHECK_SIZE+d2)/2-d1-2;
+	  for (int n = 0; n < 3; n++, ty++) {
+	    fltk3::line(tx, ty, tx+d1, ty+d1);
+	    fltk3::line(tx+d1, ty+d1, tx+tw-1, ty+d1-d2+1);
+	  }
+	}
+	fltk3::font(textfont(), tsize);
+	if (i->selected) {
+		col = fltk3::contrast(col, selection_color());
+	}
+	fltk3::color(col);
+	fltk3::draw(s, X + CHECK_SIZE + 8, Y + tsize - 1);
+}
+
+void fltk3::CheckBrowser::item_select(void *v, int state) {
+	cb_item *i = (cb_item *)v;
+
+	if (state) {
+		if (i->checked) {
+			i->checked = 0;
+			nchecked_--;
+		} else {
+			i->checked = 1;
+			nchecked_++;
+		}
+	}
+}
+
+int fltk3::CheckBrowser::item_selected(void *v) const {
+	cb_item *i = (cb_item *)v;
+	return i->selected;
+}
+/**
+ Add a new unchecked line to the end of the browser.  
+ \see add(char *s, int b)
+*/
+int fltk3::CheckBrowser::add(char *s) {
+	return (add(s, 0));
+}
+
+/** 
+ Add a new line to the end of the browser.  The text is copied
+ using the strdup() function.  It may also be NULL to make
+ a blank line.  It can set the item checked if \p b is not 0.
+ */
+int fltk3::CheckBrowser::add(char *s, int b) {
+	cb_item *p = (cb_item *)malloc(sizeof(cb_item));
+	p->next = 0;
+	p->prev = 0;
+	p->checked = b;
+	p->selected = 0;
+	p->text = strdup(s);
+
+	if (b) {
+		nchecked_++;
+	}
+
+	if (last == 0) {
+		first = last = p;
+	} else {
+		last->next = p;
+		p->prev = last;
+		last = p;
+	}
+	nitems_++;
+
+	return (nitems_);
+}
+
+/**
+  Remove line n and make the browser one line shorter. Returns the 
+  number of lines left in the browser.
+*/
+int fltk3::CheckBrowser::remove(int item) {
+  cb_item *p = find_item(item);
+  
+  // line at item exists
+  if(p) {
+    // tell the Browser_ what we will do
+    deleting(p);
+
+    // fix checked count
+    if(p->checked)
+      --nchecked_;
+    
+    // remove the node
+    if (p->prev) 
+      p->prev->next = p->next;
+    else 
+      first = p->next;
+    if (p->next) 
+      p->next->prev = p->prev;
+    else 
+      last = p->prev;
+    
+    free(p->text);
+    free(p);
+    
+    --nitems_;
+    cached_item = -1;
+  }
+  
+  return (nitems_);
+}
+
+/**  Remove every item from the browser.*/
+void fltk3::CheckBrowser::clear() {
+	cb_item *p = first;
+	cb_item *next;
+
+	if (p == 0) {
+		return;
+	}
+
+	new_list();
+	do {
+		next = p->next;
+		free(p->text);
+		free(p);
+		p = next;
+	} while (p);
+
+	first = last = 0;
+	nitems_ = nchecked_ = 0;
+	cached_item = -1;
+}
+
+/** Gets the current status of item item. */
+int fltk3::CheckBrowser::checked(int i) const {
+	cb_item *p = find_item(i);
+
+	if (p) return p->checked;
+	return 0;
+}
+
+/** Sets the check status of item item to b. */
+void fltk3::CheckBrowser::checked(int i, int b) {
+	cb_item *p = find_item(i);
+
+	if (p && (p->checked ^ b)) {
+		p->checked = b;
+		if (b) {
+			nchecked_++;
+		} else {
+			nchecked_--;
+		}
+		redraw();
+	}
+}
+
+/**  Returns the index of the currently selected item.*/
+int fltk3::CheckBrowser::value() const {
+	return lineno((cb_item *)selection());
+}
+
+/**  Return a pointer to an internal buffer holding item item's text.*/
+char *fltk3::CheckBrowser::text(int i) const {
+	cb_item *p = find_item(i);
+
+	if (p) return p->text;
+	return 0;
+}
+
+/**  Sets all the items checked.*/
+void fltk3::CheckBrowser::check_all() {
+	cb_item *p;
+
+	nchecked_ = nitems_;
+	for (p = first; p; p = p->next) {
+		p->checked = 1;
+	}
+	redraw();
+}
+
+/**  Sets all the items unchecked.*/
+void fltk3::CheckBrowser::check_none() {
+	cb_item *p;
+
+	nchecked_ = 0;
+	for (p = first; p; p = p->next) {
+		p->checked = 0;
+	}
+	redraw();
+}
+
+int fltk3::CheckBrowser::handle(int event) {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, handle(event), Handle)
+  if (event==fltk3::PUSH)
+    deselect();
+  return Browser_::handle(event);
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/CheckButton.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Check_Button.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/CheckButton.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/CheckButton.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,47 @@
+//
+// "$Id$"
+//
+// Check button widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/CheckButton.h>
+
+// TODO Correct incorrect fltk3::CheckButton comments.
+// A subclass of fltk3::Button that always draws as a diamond box.  This
+// diamond is smaller than the widget size and can be surchecked by
+// another box type, for compatibility with Forms.
+
+/**
+  Creates a new fltk3::CheckButton widget using the given position, size and
+  label string.
+  \param[in] X, Y, W, H position and size of the widget
+  \param[in] L widget label, default is no label
+ */
+fltk3::CheckButton::CheckButton(int X, int Y, int W, int H, const char *L)
+: fltk3::LightButton(X, Y, W, H, L) {
+  box(fltk3::NO_BOX);
+  down_box(fltk3::DOWN_BOX);
+  selection_color(fltk3::FOREGROUND_COLOR);
+}

Copied: branches/branch-3.0/src/fltk3/Choice.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Choice.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Choice.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Choice.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,216 @@
+//
+// "$Id$"
+//
+// Choice widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/Choice.h>
+#include <fltk3/draw.h>
+#include <fltk3/Wrapper.h>
+#include "flstring.h"
+
+// Emulates the Forms choice widget.  This is almost exactly the same
+// as an fltk3::MenuButton.  The only difference is the appearance of the
+// button: it draws the text of the current pick and a down-arrow.
+
+void fltk3::Choice::draw() {
+  FLTK3_OBJECT_VCALLS_WRAPPER(draw(), Draw)
+  int dx = fltk3::box_dx(fltk3::DOWN_BOX);
+  int dy = fltk3::box_dy(fltk3::DOWN_BOX);
+  int H = h() - 2 * dy;
+  int W = (H > 20) ? 20 : H;
+  int X = x() + w() - W - dx;
+  int Y = y() + dy;
+  int w1 = (W - 4) / 3; if (w1 < 1) w1 = 1;
+  int x1 = X + (W - 2 * w1 - 1) / 2;
+  int y1 = Y + (H - w1 - 1) / 2;
+
+  if (fltk3::scheme()) {
+    draw_box(fltk3::UP_BOX, color());
+
+    fltk3::color(active_r() ? labelcolor() : fltk3::inactive(labelcolor()));
+    if (!strcmp(fltk3::scheme(), "plastic")) {
+      // Show larger up/down arrows...
+      fltk3::polygon(x1, y1 + 3, x1 + w1, y1 + w1 + 3, x1 + 2 * w1, y1 + 3);
+      fltk3::polygon(x1, y1 + 1, x1 + w1, y1 - w1 + 1, x1 + 2 * w1, y1 + 1);
+    } else {
+      // Show smaller up/down arrows with a divider...
+      x1 = x() + w() - 13 - dx;
+      y1 = y() + h() / 2;
+      fltk3::polygon(x1, y1 - 2, x1 + 3, y1 - 5, x1 + 6, y1 - 2);
+      fltk3::polygon(x1, y1 + 2, x1 + 3, y1 + 5, x1 + 6, y1 + 2);
+
+      fltk3::color(fltk3::darker(color()));
+      fltk3::yxline(x1 - 7, y1 - 8, y1 + 8);
+
+      fltk3::color(fltk3::lighter(color()));
+      fltk3::yxline(x1 - 6, y1 - 8, y1 + 8);
+    }
+  } else {
+    if (fltk3::contrast(textcolor(), fltk3::BACKGROUND2_COLOR) == textcolor()) {
+      draw_box(fltk3::DOWN_BOX, fltk3::BACKGROUND2_COLOR);
+    } else {
+      draw_box(fltk3::DOWN_BOX, fltk3::lighter(color()));
+    }
+    draw_box(fltk3::UP_BOX,X,Y,W,H,color());
+
+    fltk3::color(active_r() ? labelcolor() : fltk3::inactive(labelcolor()));
+    fltk3::polygon(x1, y1, x1 + w1, y1 + w1, x1 + 2 * w1, y1);
+  }
+
+  W += 2 * dx;
+
+  if (mvalue()) {
+    fltk3::MenuItem m = *mvalue();
+    if (active_r()) m.activate(); else m.deactivate();
+
+    // ERCO
+    int xx = x() + dx, yy = y() + dy + 1, ww = w() - W, hh = H - 2;
+
+    fltk3::push_clip(xx, yy, ww, hh);
+
+    if ( fltk3::scheme()) {
+      fltk3::Label l;
+      l.value = m.text;
+      l.image = 0;
+      l.deimage = 0;
+      l.type = m.labeltype_;
+      l.font = m.labelsize_ || m.labelfont_ ? m.labelfont_ : textfont();
+      l.size = m.labelsize_ ? m.labelsize_ : textsize();
+      l.color= m.labelcolor_ ? m.labelcolor_ : textcolor();
+      if (!m.active()) l.color = fltk3::inactive((fltk3::Color)l.color);
+      fltk3::draw_shortcut = 2; // hack value to make '&' disappear
+      l.draw(xx+3, yy, ww>6 ? ww-6 : 0, hh, fltk3::ALIGN_LEFT);
+      fltk3::draw_shortcut = 0;
+      if ( fltk3::focus() == this ) draw_focus(box(), xx, yy, ww, hh);
+    }
+    else {
+      fltk3::draw_shortcut = 2; // hack value to make '&' disappear
+      m.draw(xx, yy, ww, hh, this, fltk3::focus() == this);
+      fltk3::draw_shortcut = 0;
+    }
+
+    fltk3::pop_clip();
+  }
+
+  draw_label();
+}
+
+/**
+  Create a new fltk3::Choice widget using the given position, size and label string.
+  The default boxtype is \c fltk3::UP_BOX.
+
+  The constructor sets menu() to NULL.
+  See fltk3::Menu_ for the methods to set or change the menu.
+
+  \param[in] X, Y, W, H position and size of the widget
+  \param[in] L widget label, default is no label
+ */
+fltk3::Choice::Choice(int X, int Y, int W, int H, const char *L)
+: fltk3::Menu_(X,Y,W,H,L) {
+  align(fltk3::ALIGN_LEFT);
+  when(fltk3::WHEN_RELEASE);
+  textfont(fltk3::HELVETICA);
+  box(fltk3::FLAT_BOX);
+  down_box(fltk3::BORDER_BOX);
+}
+
+/**
+  Sets the currently selected value using a pointer to menu item.
+  Changing the selected value causes a redraw().
+  \param[in] v pointer to menu item in the menu item array.
+  \returns non-zero if the new value is different to the old one.
+ */
+int fltk3::Choice::value(const fltk3::MenuItem *v) {
+  if (!Menu_::value(v)) return 0;
+  redraw();
+  return 1;
+}
+
+/**
+  Sets the currently selected value using the index into the menu item array.
+  Changing the selected value causes a redraw().
+  \param[in] v index of value in the menu item array.
+  \returns non-zero if the new value is different to the old one.
+ */
+int fltk3::Choice::value(int v) {
+  if (v == -1) return value((const fltk3::MenuItem *)0);
+  if (v < 0 || v >= (size() - 1)) return 0;
+  if (!Menu_::value(v)) return 0;
+  redraw();
+  return 1;
+}
+
+int fltk3::Choice::handle(int e) {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, handle(e), Handle)
+  if (!menu() || !menu()->text) return 0;
+  const fltk3::MenuItem* v;
+  switch (e) {
+  case fltk3::ENTER:
+  case fltk3::LEAVE:
+    return 1;
+
+  case fltk3::KEYBOARD:
+    if (fltk3::event_key() != ' ' ||
+        (fltk3::event_state() & (fltk3::SHIFT | fltk3::CTRL | fltk3::ALT | fltk3::META))) return 0;
+  case fltk3::PUSH:
+    if (fltk3::visible_focus()) fltk3::focus(this);
+  J1:
+    if (fltk3::scheme()
+	|| fltk3::contrast(textcolor(), fltk3::BACKGROUND2_COLOR) != textcolor()) {
+      v = menu()->pulldown(x(), y(), w(), h(), mvalue(), this);
+    } else {
+      // In order to preserve the old look-n-feel of "white" menus,
+      // temporarily override the color() of this widget...
+      fltk3::Color c = color();
+      color(fltk3::BACKGROUND2_COLOR);
+      v = menu()->pulldown(x(), y(), w(), h(), mvalue(), this);
+      color(c);
+    }
+    if (!v || v->submenu()) return 1;
+    if (v != mvalue()) redraw();
+    picked(v);
+    return 1;
+  case fltk3::SHORTCUT:
+    if (Widget::test_shortcut()) goto J1;
+    v = menu()->test_shortcut();
+    if (!v) return 0;
+    if (v != mvalue()) redraw();
+    picked(v);
+    return 1;
+  case fltk3::FOCUS:
+  case fltk3::UNFOCUS:
+    if (fltk3::visible_focus()) {
+      redraw();
+      return 1;
+    } else return 0;
+  default:
+    return 0;
+  }
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Clock.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Clock.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Clock.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Clock.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,220 @@
+//
+// "$Id$"
+//
+// Clock widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/Clock.h>
+#include <fltk3/draw.h>
+#include <math.h>
+#include <time.h>
+#ifndef WIN32
+#  include <sys/time.h>
+#endif /* !WIN32 */
+
+// Original clock display written by Paul Haeberli at SGI.
+// Modifications by Mark Overmars for Forms
+// Further changes by Bill Spitzak for fltk
+
+const float hourhand[4][2] = {{-0.5f, 0}, {0, 1.5f}, {0.5f, 0}, {0, -7.0f}};
+const float  minhand[4][2] = {{-0.5f, 0}, {0, 1.5f}, {0.5f, 0}, {0, -11.5f}};
+const float  sechand[4][2] = {{-0.1f, 0}, {0, 2.0f}, {0.1f, 0}, {0, -11.5f}};
+
+static void drawhand(double ang,const float v[][2],fltk3::Color fill,fltk3::Color line)
+{
+  fltk3::push_matrix();
+  fltk3::rotate(ang);
+  fltk3::color(fill); fltk3::begin_polygon();
+  int i; for (i=0; i<4; i++) fltk3::vertex(v[i][0],v[i][1]); fltk3::end_polygon();
+  fltk3::color(line); fltk3::begin_loop();
+  for (i=0; i<4; i++) fltk3::vertex(v[i][0],v[i][1]); fltk3::end_loop();
+  fltk3::pop_matrix();
+}
+
+void fltk3::ClockOutput::drawhands(fltk3::Color fill, fltk3::Color line) {
+  if (!active_r()) {
+    fill = fltk3::inactive(fill);
+    line = fltk3::inactive(line);
+  }
+  drawhand(-360*(hour()+minute()/60.0)/12, hourhand, fill, line);
+  drawhand(-360*(minute()+second()/60.0)/60, minhand, fill, line);
+  drawhand(-360*(second()/60.0), sechand, fill, line);
+}
+
+static void rect(double x, double y, double w, double h) {
+  double r = x+w;
+  double t = y+h;
+  fltk3::begin_polygon();
+  fltk3::vertex(x, y);
+  fltk3::vertex(r, y);
+  fltk3::vertex(r, t);
+  fltk3::vertex(x, t);
+  fltk3::end_polygon();
+}
+
+/**
+  Draw clock with the given position and size.
+  \param[in] X, Y, W, H position and size
+*/
+void fltk3::ClockOutput::draw(int X, int Y, int W, int H) {
+  fltk3::Color box_color = type()==fltk3::ROUND_CLOCK ? fltk3::GRAY : color();
+  fltk3::Color shadow_color = fltk3::color_average(box_color, fltk3::BLACK, 0.5);
+  draw_box(box(), X, Y, W, H, box_color);
+  fltk3::push_matrix();
+  fltk3::translate(X+W/2.0-.5, Y+H/2.0-.5);
+  fltk3::scale((W-1)/28.0, (H-1)/28.0);
+  if (type() == fltk3::ROUND_CLOCK) {
+    fltk3::color(active_r() ? color() : fltk3::inactive(color()));
+    fltk3::begin_polygon(); fltk3::circle(0,0,14); fltk3::end_polygon();
+    fltk3::color(active_r() ? fltk3::FOREGROUND_COLOR : fltk3::inactive(fltk3::FOREGROUND_COLOR));
+    fltk3::begin_loop(); fltk3::circle(0,0,14); fltk3::end_loop();
+  }
+  // draw the shadows:
+  fltk3::push_matrix();
+  fltk3::translate(0.60, 0.60);
+  drawhands(shadow_color, shadow_color);
+  fltk3::pop_matrix();
+  // draw the tick marks:
+  fltk3::push_matrix();
+  fltk3::color(active_r() ? fltk3::FOREGROUND_COLOR : fltk3::inactive(fltk3::FOREGROUND_COLOR));
+  for (int i=0; i<12; i++) {
+    if (i==6) ::rect(-0.5, 9, 1, 2);
+    else if (i==3 || i==0 || i== 9) ::rect(-0.5, 9.5, 1, 1);
+    else ::rect(-0.25, 9.5, .5, 1);
+    fltk3::rotate(-30);
+  }
+  fltk3::pop_matrix();
+  // draw the hands:
+  drawhands(selection_color(), fltk3::FOREGROUND_COLOR); // color was 54
+  fltk3::pop_matrix();
+}
+
+/**
+  Draw clock with current position and size.
+*/
+void fltk3::ClockOutput::draw() {
+  FLTK3_OBJECT_VCALLS_WRAPPER(draw(), Draw)
+  draw(x(), y(), w(), h());
+  draw_label();
+}
+
+/**
+  Set the displayed time.
+  Set the time in hours, minutes, and seconds.
+  \param[in] H, m, s displayed time
+  \see hour(), minute(), second()
+ */
+void fltk3::ClockOutput::value(int H, int m, int s) {
+  if (H!=hour_ || m!=minute_ || s!=second_) {
+    hour_ = H; minute_ = m; second_ = s;
+    value_ = (H * 60 + m) * 60 + s;
+    damage(fltk3::DAMAGE_CHILD);
+  }
+}
+
+/**
+  Set the displayed time.
+  Set the time in seconds since the UNIX epoch (January 1, 1970).
+  \param[in] v seconds since epoch
+  \see value()
+ */
+void fltk3::ClockOutput::value(ulong v) {
+  value_ = v;
+  struct tm *timeofday;
+  // Some platforms, notably Windows, now use a 64-bit time_t value...
+  time_t vv = (time_t)v;
+  timeofday = localtime(&vv);
+  value(timeofday->tm_hour, timeofday->tm_min, timeofday->tm_sec);
+}
+
+/**
+  Create a new fltk3::ClockOutput widget with the given position, size and label.
+  The default boxtype is \c fltk3::NO_BOX.
+  \param[in] X, Y, W, H position and size of the widget
+  \param[in] L widget label, default is no label
+ */
+fltk3::ClockOutput::ClockOutput(int X, int Y, int W, int H, const char *L)
+: fltk3::Widget(X, Y, W, H, L) {
+  box(fltk3::UP_BOX);
+  selection_color(fltk3::gray_ramp(5));
+  align(fltk3::ALIGN_BOTTOM);
+  hour_ = 0;
+  minute_ = 0;
+  second_ = 0;
+  value_ = 0;
+}
+
+////////////////////////////////////////////////////////////////
+
+/**
+  Create an fltk3::Clock widget using the given position, size, and label string.
+  The default boxtype is \c fltk3::NO_BOX.
+  \param[in] X, Y, W, H position and size of the widget
+  \param[in] L widget label, default is no label
+ */
+fltk3::Clock::Clock(int X, int Y, int W, int H, const char *L)
+  : fltk3::ClockOutput(X, Y, W, H, L) {}
+
+/**
+  Create an fltk3::Clock widget using the given boxtype, position, size, and
+  label string.
+  \param[in] t boxtype
+  \param[in] X, Y, W, H position and size of the widget
+  \param[in] L widget label, default is no label
+ */
+fltk3::Clock::Clock(uchar t, int X, int Y, int W, int H, const char *L)
+  : fltk3::ClockOutput(X, Y, W, H, L) {
+  type(t);
+  box(t==fltk3::ROUND_CLOCK ? fltk3::NO_BOX : fltk3::UP_BOX);
+}
+
+static void tick(void *v) {
+  ((fltk3::Clock*)v)->value(time(0));
+  fltk3::add_timeout(1.0, tick, v);
+}
+
+int fltk3::Clock::handle(int event) {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, handle(event), Handle)
+  switch (event) {
+  case fltk3::SHOW:
+    tick(this);
+    break;
+  case fltk3::HIDE:
+    fltk3::remove_timeout(tick, this);
+    break;
+  }
+  return ClockOutput::handle(event);
+}
+  
+/**
+  The destructor removes the clock.
+ */
+fltk3::Clock::~Clock() {
+  fltk3::remove_timeout(tick, this);
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/ColorChooser.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Color_Chooser.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/ColorChooser.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/ColorChooser.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,634 @@
+//
+// "$Id$"
+//
+// Color chooser for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/ColorChooser.h>
+#include <fltk3/draw.h>
+#include <fltk3/math.h>
+#include <stdio.h>
+
+// Besides being a useful object on it's own, the fltk3::ColorChooser was
+// an attempt to make a complex composite object that could be easily
+// imbedded into a user interface.  If you wish to make complex objects
+// of your own, be sure to read this code.
+
+// The function fltk3::color_chooser() creates a window containing a color
+// chooser and a few buttons and current-color indicators.  It is an
+// easier interface for simple programs that just need a color.
+
+// The "hue box" can be a circle or rectilinear.
+// You get a circle by defining this:
+#define CIRCLE 1
+// And the "hue box" can auto-update when the value changes
+// you get this by defining this:
+#define UPDATE_HUE_BOX 1
+
+/**
+  This \e static method converts HSV colors to RGB colorspace.
+  \param[in] H, S, V color components
+  \param[out] R, G, B color components
+ */
+void fltk3::ColorChooser::hsv2rgb(
+	double H, double S, double V, double& R, double& G, double& B) {
+  if (S < 5.0e-6) {
+    R = G = B = V;
+  } else {
+    int i = (int)H;  
+    double f = H - (float)i;
+    double p1 = V*(1.0-S);
+    double p2 = V*(1.0-S*f);
+    double p3 = V*(1.0-S*(1.0-f));
+    switch (i) {
+    case 0: R = V;   G = p3;  B = p1;  break;
+    case 1: R = p2;  G = V;   B = p1;  break;
+    case 2: R = p1;  G = V;   B = p3;  break;
+    case 3: R = p1;  G = p2;  B = V;   break;
+    case 4: R = p3;  G = p1;  B = V;   break;
+    case 5: R = V;   G = p1;  B = p2;  break;
+    }
+  }
+}
+
+/**
+  This \e static method converts RGB colors to HSV colorspace.
+  \param[in] R, G, B color components
+  \param[out] H, S, V color components
+ */
+void fltk3::ColorChooser::rgb2hsv(
+	double R, double G, double B, double& H, double& S, double& V) {
+  double maxv = R > G ? R : G; if (B > maxv) maxv = B;
+  V = maxv;
+  if (maxv>0) {
+    double minv = R < G ? R : G; if (B < minv) minv = B;
+    S = 1.0 - double(minv)/maxv;
+    if (maxv > minv) {
+      if (maxv == R) {H = (G-B)/double(maxv-minv); if (H<0) H += 6.0;}
+      else if (maxv == G) H = 2.0+(B-R)/double(maxv-minv);
+      else H = 4.0+(R-G)/double(maxv-minv);
+    }
+  }
+}
+
+/** fltk3::ColorChooser modes */
+enum {
+  M_RGB,	/**< mode() of fltk3::ColorChooser showing RGB values */
+  M_BYTE,	/**< mode() of fltk3::ColorChooser showing byte values */
+  M_HEX,	/**< mode() of fltk3::ColorChooser showing hex values */
+  M_HSV		/**< mode() of fltk3::ColorChooser showing HSV values */
+};
+static fltk3::MenuItem mode_menu[] = {
+  {"rgb"},
+  {"byte"},
+  {"hex"},
+  {"hsv"},
+  {0}
+};
+
+#ifndef FLTK3_DOXYGEN
+int fltk3::cc_Value_Input::format(char* buf) {
+  fltk3::ColorChooser* c = (fltk3::ColorChooser*)parent();
+  if (c->mode() == M_HEX) return sprintf(buf,"0x%02X", int(value()));
+  else return Valuator::format(buf);
+}
+#endif // !FLTK3_DOXYGEN
+
+void fltk3::ColorChooser::set_valuators() {
+  switch (mode()) {
+  case M_RGB:
+    rvalue.range(0,1); rvalue.step(1,1000); rvalue.value(r_);
+    gvalue.range(0,1); gvalue.step(1,1000); gvalue.value(g_);
+    bvalue.range(0,1); bvalue.step(1,1000); bvalue.value(b_);
+    break;
+  case M_BYTE: /* FALLTHROUGH */
+  case M_HEX:
+    rvalue.range(0,255); rvalue.step(1); rvalue.value(int(255*r_+.5));
+    gvalue.range(0,255); gvalue.step(1); gvalue.value(int(255*g_+.5));
+    bvalue.range(0,255); bvalue.step(1); bvalue.value(int(255*b_+.5));
+    break;
+  case M_HSV:
+    rvalue.range(0,6); rvalue.step(1,1000); rvalue.value(hue_);
+    gvalue.range(0,1); gvalue.step(1,1000); gvalue.value(saturation_);
+    bvalue.range(0,1); bvalue.step(1,1000); bvalue.value(value_);
+    break;
+  }
+}
+
+/**
+  Sets the current rgb color values.
+  Does not do the callback. Does not clamp (but out of range values will
+  produce psychedelic effects in the hue selector).
+  \param[in] R, G, B color components.
+  \return 1 if a new rgb value was set, 0 if the rgb value was the previous one.
+ */
+int fltk3::ColorChooser::rgb(double R, double G, double B) {
+  if (R == r_ && G == g_ && B == b_) return 0;
+  r_ = R; g_ = G; b_ = B;
+  double ph = hue_;
+  double ps = saturation_;
+  double pv = value_;
+  rgb2hsv(R,G,B,hue_,saturation_,value_);
+  set_valuators();
+  set_changed();
+  if (value_ != pv) {
+#ifdef UPDATE_HUE_BOX
+    huebox.damage(fltk3::DAMAGE_SCROLL);
+#endif
+    valuebox.damage(fltk3::DAMAGE_EXPOSE);}
+  if (hue_ != ph || saturation_ != ps) {
+    huebox.damage(fltk3::DAMAGE_EXPOSE); 
+    valuebox.damage(fltk3::DAMAGE_SCROLL);
+  }
+  return 1;
+}
+
+/**
+  Set the hsv values.
+  The passed values are clamped (or for hue, modulus 6 is used) to get
+  legal values. Does not do the callback.
+  \param[in] H, S, V color components.
+  \return 1 if a new hsv value was set, 0 if the hsv value was the previous one.
+*/
+int fltk3::ColorChooser::hsv(double H, double S, double V) {
+  H = fmod(H,6.0); if (H < 0.0) H += 6.0;
+  if (S < 0.0) S = 0.0; else if (S > 1.0) S = 1.0;
+  if (V < 0.0) V = 0.0; else if (V > 1.0) V = 1.0;
+  if (H == hue_ && S == saturation_ && V == value_) return 0;
+  double ph = hue_;
+  double ps = saturation_;
+  double pv = value_;
+  hue_ = H; saturation_ = S; value_ = V;
+  if (value_ != pv) {
+#ifdef UPDATE_HUE_BOX
+    huebox.damage(fltk3::DAMAGE_SCROLL);
+#endif
+    valuebox.damage(fltk3::DAMAGE_EXPOSE);}
+  if (hue_ != ph || saturation_ != ps) {
+    huebox.damage(fltk3::DAMAGE_EXPOSE); 
+    valuebox.damage(fltk3::DAMAGE_SCROLL);
+  }
+  hsv2rgb(H,S,V,r_,g_,b_);
+  set_valuators();
+  set_changed();
+  return 1;
+}
+
+////////////////////////////////////////////////////////////////
+
+static void tohs(double x, double y, double& h, double& s) {
+#ifdef CIRCLE
+  x = 2*x-1;
+  y = 1-2*y;
+  s = sqrt(x*x+y*y); if (s > 1.0) s = 1.0;
+  h = (3.0/M_PI)*atan2(y,x);
+  if (h<0) h += 6.0;
+#else
+  h = fmod(6.0*x,6.0); if (h < 0.0) h += 6.0;
+  s = 1.0-y; if (s < 0.0) s = 0.0; else if (s > 1.0) s = 1.0;
+#endif
+}
+
+#ifndef FLTK3_DOXYGEN
+int fltk3::cc_HueBox::handle(int e) {
+  static double ih, is;
+  fltk3::ColorChooser* c = (fltk3::ColorChooser*)parent();
+  switch (e) {
+  case fltk3::PUSH:
+    if (fltk3::visible_focus()) {
+      fltk3::focus(this);
+      redraw();
+    }
+    ih = c->hue();
+    is = c->saturation();
+  case fltk3::DRAG: {
+    double Xf, Yf, H, S;
+    Xf = (fltk3::event_x()-x()-fltk3::box_dx(box()))/double(w()-fltk3::box_dw(box()));
+    Yf = (fltk3::event_y()-y()-fltk3::box_dy(box()))/double(h()-fltk3::box_dh(box()));
+    tohs(Xf, Yf, H, S);
+    if (fabs(H-ih) < 3*6.0/w()) H = ih;
+    if (fabs(S-is) < 3*1.0/h()) S = is;
+    if (fltk3::event_state(fltk3::CTRL)) H = ih;
+    if (c->hsv(H, S, c->value())) c->do_callback();
+    } return 1;
+  case fltk3::FOCUS : /* FALLTHROUGH */
+  case fltk3::UNFOCUS :
+    if (fltk3::visible_focus()) {
+      redraw();
+      return 1;
+    }
+    else return 1;
+  case fltk3::KEYBOARD :
+    return handle_key(fltk3::event_key());
+  default:
+    return 0;
+  }
+}
+#endif // !FLTK3_DOXYGEN
+
+static void generate_image(void* vv, int X, int Y, int W, uchar* buf) {
+  fltk3::cc_HueBox* v = (fltk3::cc_HueBox*)vv;
+  int iw = v->w()-fltk3::box_dw(v->box());
+  double Yf = double(Y)/(v->h()-fltk3::box_dh(v->box()));
+#ifdef UPDATE_HUE_BOX
+  const double V = ((fltk3::ColorChooser*)(v->parent()))->value();
+#else
+  const double V = 1.0;
+#endif
+  for (int x = X; x < X+W; x++) {
+    double Xf = double(x)/iw;
+    double H,S; tohs(Xf,Yf,H,S);
+    double r,g,b;
+    fltk3::ColorChooser::hsv2rgb(H,S,V,r,g,b);
+    *buf++ = uchar(255*r+.5);
+    *buf++ = uchar(255*g+.5);
+    *buf++ = uchar(255*b+.5);
+  }
+}
+
+#ifndef FLTK3_DOXYGEN
+int fltk3::cc_HueBox::handle_key(int key) {
+  int w1 = w()-fltk3::box_dw(box())-6;
+  int h1 = h()-fltk3::box_dh(box())-6;
+  fltk3::ColorChooser* c = (fltk3::ColorChooser*)parent();
+
+#ifdef CIRCLE
+  int X = int(.5*(cos(c->hue()*(M_PI/3.0))*c->saturation()+1) * w1);
+  int Y = int(.5*(1-sin(c->hue()*(M_PI/3.0))*c->saturation()) * h1);
+#else
+  int X = int(c->hue()/6.0*w1);
+  int Y = int((1-c->saturation())*h1);
+#endif
+
+  switch (key) {
+    case fltk3::UpKey :
+      Y -= 3;
+      break;
+    case fltk3::DownKey :
+      Y += 3;
+      break;
+    case fltk3::LeftKey :
+      X -= 3;
+      break;
+    case fltk3::RightKey :
+      X += 3;
+      break;
+    default :
+      return 0;
+  }
+
+  double Xf, Yf, H, S;
+  Xf = (double)X/(double)w1;
+  Yf = (double)Y/(double)h1;
+  tohs(Xf, Yf, H, S);
+  if (c->hsv(H, S, c->value())) c->do_callback();
+
+  return 1;
+}
+#endif // !FLTK3_DOXYGEN
+
+#ifndef FLTK3_DOXYGEN
+void fltk3::cc_HueBox::draw() {
+  if (damage()&fltk3::DAMAGE_ALL) draw_box();
+  int x1 = x()+fltk3::box_dx(box());
+  int yy1 = y()+fltk3::box_dy(box());
+  int w1 = w()-fltk3::box_dw(box());
+  int h1 = h()-fltk3::box_dh(box());
+  if (damage() == fltk3::DAMAGE_EXPOSE) fltk3::push_clip(x1+px,yy1+py,6,6);
+  fltk3::draw_image(generate_image, this, x1, yy1, w1, h1);
+  if (damage() == fltk3::DAMAGE_EXPOSE) fltk3::pop_clip();
+  fltk3::ColorChooser* c = (fltk3::ColorChooser*)parent();
+#ifdef CIRCLE
+  int X = int(.5*(cos(c->hue()*(M_PI/3.0))*c->saturation()+1) * (w1-6));
+  int Y = int(.5*(1-sin(c->hue()*(M_PI/3.0))*c->saturation()) * (h1-6));
+#else
+  int X = int(c->hue()/6.0*(w1-6));
+  int Y = int((1-c->saturation())*(h1-6));
+#endif
+  if (X < 0) X = 0; else if (X > w1-6) X = w1-6;
+  if (Y < 0) Y = 0; else if (Y > h1-6) Y = h1-6;
+  //  fltk3::color(c->value()>.75 ? fltk3::BLACK : fltk3::WHITE);
+  draw_box(fltk3::UP_BOX,x1+X,yy1+Y,6,6,fltk3::focus() == this ? fltk3::FOREGROUND_COLOR : fltk3::GRAY);
+  px = X; py = Y;
+}
+#endif // !FLTK3_DOXYGEN
+
+////////////////////////////////////////////////////////////////
+
+#ifndef FLTK3_DOXYGEN
+int fltk3::cc_ValueBox::handle(int e) {
+  static double iv;
+  fltk3::ColorChooser* c = (fltk3::ColorChooser*)parent();
+  switch (e) {
+  case fltk3::PUSH:
+    if (fltk3::visible_focus()) {
+      fltk3::focus(this);
+      redraw();
+    }
+    iv = c->value();
+  case fltk3::DRAG: {
+    double Yf;
+    Yf = 1-(fltk3::event_y()-y()-fltk3::box_dy(box()))/double(h()-fltk3::box_dh(box()));
+    if (fabs(Yf-iv)<(3*1.0/h())) Yf = iv;
+    if (c->hsv(c->hue(),c->saturation(),Yf)) c->do_callback();
+    } return 1;
+  case fltk3::FOCUS : /* FALLTHROUGH */
+  case fltk3::UNFOCUS :
+    if (fltk3::visible_focus()) {
+      redraw();
+      return 1;
+    }
+    else return 1;
+  case fltk3::KEYBOARD :
+    return handle_key(fltk3::event_key());
+  default:
+    return 0;
+  }
+}
+#endif // !FLTK3_DOXYGEN
+
+static double tr, tg, tb;
+static void generate_vimage(void* vv, int X, int Y, int W, uchar* buf) {
+  fltk3::cc_ValueBox* v = (fltk3::cc_ValueBox*)vv;
+  double Yf = 255*(1.0-double(Y)/(v->h()-fltk3::box_dh(v->box())));
+  uchar r = uchar(tr*Yf+.5);
+  uchar g = uchar(tg*Yf+.5);
+  uchar b = uchar(tb*Yf+.5);
+  for (int x = X; x < X+W; x++) {
+    *buf++ = r; *buf++ = g; *buf++ = b;
+  }
+}
+
+#ifndef FLTK3_DOXYGEN
+void fltk3::cc_ValueBox::draw() {
+  if (damage()&fltk3::DAMAGE_ALL) draw_box();
+  fltk3::ColorChooser* c = (fltk3::ColorChooser*)parent();
+  c->hsv2rgb(c->hue(),c->saturation(),1.0,tr,tg,tb);
+  int x1 = x()+fltk3::box_dx(box());
+  int yy1 = y()+fltk3::box_dy(box());
+  int w1 = w()-fltk3::box_dw(box());
+  int h1 = h()-fltk3::box_dh(box());
+  if (damage() == fltk3::DAMAGE_EXPOSE) fltk3::push_clip(x1,yy1+py,w1,6);
+  fltk3::draw_image(generate_vimage, this, x1, yy1, w1, h1);
+  if (damage() == fltk3::DAMAGE_EXPOSE) fltk3::pop_clip();
+  int Y = int((1-c->value()) * (h1-6));
+  if (Y < 0) Y = 0; else if (Y > h1-6) Y = h1-6;
+  draw_box(fltk3::UP_BOX,x1,yy1+Y,w1,6,fltk3::focus() == this ? fltk3::FOREGROUND_COLOR : fltk3::GRAY);
+  py = Y;
+}
+#endif // !FLTK3_DOXYGEN
+
+#ifndef FLTK3_DOXYGEN
+int fltk3::cc_ValueBox::handle_key(int key) {
+  int h1 = h()-fltk3::box_dh(box())-6;
+  fltk3::ColorChooser* c = (fltk3::ColorChooser*)parent();
+
+  int Y = int((1-c->value()) * h1);
+  if (Y < 0) Y = 0; else if (Y > h1) Y = h1;
+
+  switch (key) {
+    case fltk3::UpKey :
+      Y -= 3;
+      break;
+    case fltk3::DownKey :
+      Y += 3;
+      break;
+    default :
+      return 0;
+  }
+
+  double Yf;
+  Yf = 1-((double)Y/(double)h1);
+  if (c->hsv(c->hue(),c->saturation(),Yf)) c->do_callback();
+
+  return 1;
+}
+#endif // !FLTK3_DOXYGEN
+
+////////////////////////////////////////////////////////////////
+
+void fltk3::ColorChooser::rgb_cb(fltk3::Widget* o, void*) {
+  fltk3::ColorChooser* c = (fltk3::ColorChooser*)(o->parent());
+  double R = c->rvalue.value();
+  double G = c->gvalue.value();
+  double B = c->bvalue.value();
+  if (c->mode() == M_HSV) {
+    if (c->hsv(R,G,B)) c->do_callback();
+    return;
+  }
+  if (c->mode() != M_RGB) {
+    R = R/255;
+    G = G/255;
+    B = B/255;
+  }
+  if (c->rgb(R,G,B)) c->do_callback();
+}
+
+void fltk3::ColorChooser::mode_cb(fltk3::Widget* o, void*) {
+  fltk3::ColorChooser* c = (fltk3::ColorChooser*)(o->parent());
+  // force them to redraw even if value is the same:
+  c->rvalue.value(-1);
+  c->gvalue.value(-1);
+  c->bvalue.value(-1);
+  c->set_valuators();
+}
+
+void fltk3::ColorChooser::mode(int newMode)
+{
+  choice.value(newMode);
+  choice.do_callback();
+}
+
+
+////////////////////////////////////////////////////////////////
+
+/**
+  Creates a new fltk3::ColorChooser widget using the given position, size, and
+  label string.
+  The recommended dimensions are 200x95. The color is initialized to black.
+  \param[in] X, Y, W, H position and size of the widget
+  \param[in] L widget label, default is no label
+ */
+fltk3::ColorChooser::ColorChooser(int X, int Y, int W, int H, const char* L)
+  : fltk3::Group(0,0,195,115,L),
+    huebox(0,0,115,115),
+    valuebox(115,0,20,115),
+    choice(140,0,55,25),
+    rvalue(140,30,55,25),
+    gvalue(140,60,55,25),
+    bvalue(140,90,55,25),
+    resize_box(0,0,115,115)
+{
+  end();
+  resizable(resize_box);
+  resize(X,Y,W,H);
+  r_ = g_ = b_ = 0;
+  hue_ = 0.0;
+  saturation_ = 0.0;
+  value_ = 0.0;
+  huebox.box(fltk3::DOWN_FRAME);
+  valuebox.box(fltk3::DOWN_FRAME);
+  choice.menu(mode_menu);
+  set_valuators();
+  rvalue.callback(rgb_cb);
+  gvalue.callback(rgb_cb);
+  bvalue.callback(rgb_cb);
+  choice.callback(mode_cb);
+  choice.box(fltk3::THIN_UP_BOX);
+  choice.textfont(fltk3::HELVETICA_BOLD_ITALIC);
+}
+
+////////////////////////////////////////////////////////////////
+// fltk3::color_chooser():
+
+#include <fltk3/Window.h>
+#include <fltk3/Box.h>
+#include <fltk3/ReturnButton.h>
+
+class ColorChip : public fltk3::Widget {
+  void draw();
+public:
+  uchar r,g,b;
+  ColorChip(int X, int Y, int W, int H) : fltk3::Widget(X,Y,W,H) {
+    box(fltk3::ENGRAVED_FRAME);}
+};
+
+void ColorChip::draw() {
+  if (damage()&fltk3::DAMAGE_ALL) draw_box();
+  fltk3::rectf(x()+fltk3::box_dx(box()),
+	   y()+fltk3::box_dy(box()),
+	   w()-fltk3::box_dw(box()),
+	   h()-fltk3::box_dh(box()),r,g,b);
+}
+
+static void chooser_cb(fltk3::Widget* o, void* vv) {
+  fltk3::ColorChooser* c = (fltk3::ColorChooser*)o;
+  ColorChip* v = (ColorChip*)vv;
+  v->r = uchar(255*c->r()+.5);
+  v->g = uchar(255*c->g()+.5);
+  v->b = uchar(255*c->b()+.5);
+  v->damage(fltk3::DAMAGE_EXPOSE);
+}
+
+namespace fltk3 {
+  extern const char* ok;
+  extern const char* cancel;
+}
+
+// fltk3::color_chooser's callback for ok_button (below)
+//  [in] o is a pointer to okay_button (below) 
+//  [in] p is a pointer to an int to receive the return value (1)
+// closes the fltk3::color_chooser window
+static void cc_ok_cb (fltk3::Widget *o, void *p) {
+  *((int *)p) = 1; // set return value
+  o->window()->hide();
+}
+
+// fltk3::color_chooser's callback for cancel_button and window close
+//  [in] o is a pointer to cancel_button (below) _or_ the dialog window
+//  [in] p is a pointer to an int to receive the return value (0)
+// closes the fltk3::color_chooser window
+static void cc_cancel_cb (fltk3::Widget *o, void *p) {
+  *((int *)p) = 0; // set return value
+  if (o->window()) // cancel button
+    o->window()->hide();
+  else // window close
+    o->hide();
+}
+
+/** \addtogroup  group_comdlg 
+    @{ */
+/**
+  \brief Pops up a window to let the user pick an arbitrary RGB color.
+  \note \#include <fltk3/ColorChooser.h>
+  \image html fltk3::color_chooser.jpg 
+  \image latex  fltk3::color_chooser.jpg "fltk3::color_chooser" width=8cm
+  \param[in] name Title label for the window
+  \param[in,out] r, g, b Color components in the range 0.0 to 1.0.
+  \param[in] cmode Optional mode for color chooser. See mode(int). Default -1 if none (rgb mode).
+  \retval 1 if user confirms the selection 
+  \retval 0 if user cancels the dialog
+  \relates fltk3::ColorChooser
+ */
+int fltk3::color_chooser(const char* name, double& r, double& g, double& b, int cmode) {
+  int ret = 0;
+  fltk3::Window window(215,200,name);
+  window.callback(cc_cancel_cb,&ret);
+  fltk3::ColorChooser chooser(10, 10, 195, 115);
+  ColorChip ok_color(10, 130, 95, 25);
+  fltk3::ReturnButton ok_button(10, 165, 95, 25, fltk3::ok);
+  ok_button.callback(cc_ok_cb,&ret);
+  ColorChip cancel_color(110, 130, 95, 25);
+  cancel_color.r = uchar(255*r+.5); ok_color.r = cancel_color.r;
+  ok_color.g = cancel_color.g = uchar(255*g+.5);
+  ok_color.b = cancel_color.b = uchar(255*b+.5);
+  fltk3::Button cancel_button(110, 165, 95, 25, fltk3::cancel);
+  cancel_button.callback(cc_cancel_cb,&ret);
+  window.resizable(chooser);
+  chooser.rgb(r,g,b);
+  chooser.callback(chooser_cb, &ok_color);
+  if (cmode!=-1) chooser.mode(cmode);
+  window.end();
+  window.set_modal();
+  window.hotspot(window);
+  window.show();
+  while (window.shown()) fltk3::wait();
+  if (ret) { // ok_button or Enter
+    r = chooser.r();
+    g = chooser.g();
+    b = chooser.b();
+  }
+  return ret;
+}
+
+/**
+  \brief Pops up a window to let the user pick an arbitrary RGB color.
+  \note \#include <fltk3/ColorChooser.h>
+  \image html fltk3::color_chooser.jpg 
+  \image latex  fltk3::color_chooser.jpg "fltk3::color_chooser" width=8cm
+  \param[in] name Title label for the window
+  \param[in,out] r, g, b Color components in the range 0 to 255.
+  \param[in] cmode Optional mode for color chooser. See mode(int). Default -1 if none (rgb mode).
+  \retval 1 if user confirms the selection 
+  \retval 0 if user cancels the dialog
+  \relates fltk3::ColorChooser
+ */
+int fltk3::color_chooser(const char* name, uchar& r, uchar& g, uchar& b, int cmode) {
+  double dr = r/255.0;
+  double dg = g/255.0;
+  double db = b/255.0;
+  if (fltk3::color_chooser(name,dr,dg,db,cmode)) {
+    r = uchar(255*dr+.5);
+    g = uchar(255*dg+.5);
+    b = uchar(255*db+.5);
+    return 1;
+  }
+  return 0;
+}
+
+/** @} */
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Counter.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Counter.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Counter.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Counter.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,213 @@
+//
+// "$Id$"
+//
+// Counter widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/Counter.h>
+#include <fltk3/draw.h>
+
+void fltk3::Counter::draw() {
+  FLTK3_OBJECT_VCALLS_WRAPPER(draw(), Draw)
+  int i; fltk3::Boxtype boxtype[5];
+  fltk3::Color selcolor;
+
+  boxtype[0] = box();
+  if (boxtype[0] == fltk3::UP_BOX) boxtype[0] = fltk3::DOWN_BOX;
+  if (boxtype[0] == fltk3::THIN_UP_BOX) boxtype[0] = fltk3::THIN_DOWN_BOX;
+  for (i=1; i<5; i++)
+    if (mouseobj == i)
+      boxtype[i] = fltk3::down(box());
+    else
+      boxtype[i] = box();
+
+  int xx[5], ww[5];
+  if (type() == fltk3::NORMAL_COUNTER) {
+    int W = w()*15/100;
+    xx[1] = x();	 ww[1] = W;
+    xx[2] = x()+1*W;     ww[2] = W;
+    xx[0] = x()+2*W;     ww[0] = w()-4*W;
+    xx[3] = x()+w()-2*W; ww[3] = W;
+    xx[4] = x()+w()-1*W; ww[4] = W;
+  } else {
+    int W = w()*20/100;
+    xx[1] = 0;	         ww[1] = 0;
+    xx[2] = x();	 ww[2] = W;
+    xx[0] = x()+W;	 ww[0] = w()-2*W;
+    xx[3] = x()+w()-1*W; ww[3] = W;
+    xx[4] = 0;	         ww[4] = 0;
+  }
+
+  draw_box(boxtype[0], xx[0], y(), ww[0], h(), fltk3::BACKGROUND2_COLOR);
+  fltk3::font(textfont(), textsize());
+  fltk3::color(active_r() ? textcolor() : fltk3::inactive(textcolor()));
+  char str[128]; format(str);
+  fltk3::draw(str, xx[0], y(), ww[0], h(), fltk3::ALIGN_CENTER);
+  if (fltk3::focus() == this) draw_focus(boxtype[0], xx[0], y(), ww[0], h());
+  if (!(damage()&fltk3::DAMAGE_ALL)) return; // only need to redraw text
+
+  if (active_r())
+    selcolor = labelcolor();
+  else
+    selcolor = fltk3::inactive(labelcolor());
+
+  if (type() == fltk3::NORMAL_COUNTER) {
+    draw_box(boxtype[1], xx[1], y(), ww[1], h(), color());
+    fltk3::draw_symbol("@-4<<", xx[1], y(), ww[1], h(), selcolor);
+  }
+  draw_box(boxtype[2], xx[2], y(), ww[2], h(), color());
+  fltk3::draw_symbol("@-4<",  xx[2], y(), ww[2], h(), selcolor);
+  draw_box(boxtype[3], xx[3], y(), ww[3], h(), color());
+  fltk3::draw_symbol("@-4>",  xx[3], y(), ww[3], h(), selcolor);
+  if (type() == fltk3::NORMAL_COUNTER) {
+    draw_box(boxtype[4], xx[4], y(), ww[4], h(), color());
+    fltk3::draw_symbol("@-4>>", xx[4], y(), ww[4], h(), selcolor);
+  }
+}
+
+void fltk3::Counter::increment_cb() {
+  if (!mouseobj) return;
+  double v = value();
+  switch (mouseobj) {
+  case 1: v -= lstep_; break;
+  case 2: v = increment(v, -1); break;
+  case 3: v = increment(v, 1); break;
+  case 4: v += lstep_; break;
+  }
+  handle_drag(clamp(round(v)));
+}
+
+#define INITIALREPEAT .5
+#define REPEAT .1
+
+void fltk3::Counter::repeat_callback(void* v) {
+  fltk3::Counter* b = (fltk3::Counter*)v;
+  if (b->mouseobj) {
+    fltk3::add_timeout(REPEAT, repeat_callback, b);
+    b->increment_cb();
+  }
+}
+
+int fltk3::Counter::calc_mouseobj() {
+  if (type() == fltk3::NORMAL_COUNTER) {
+    int W = w()*15/100;
+    if (fltk3::event_inside(x(), y(), W, h())) return 1;
+    if (fltk3::event_inside(x()+W, y(), W, h())) return 2;
+    if (fltk3::event_inside(x()+w()-2*W, y(), W, h())) return 3;
+    if (fltk3::event_inside(x()+w()-W, y(), W, h())) return 4;
+  } else {
+    int W = w()*20/100;
+    if (fltk3::event_inside(x(), y(), W, h())) return 2;
+    if (fltk3::event_inside(x()+w()-W, y(), W, h())) return 3;
+  }
+  return -1;
+}
+
+int fltk3::Counter::handle(int event) {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, handle(event), Handle)
+  int i;
+  switch (event) {
+  case fltk3::RELEASE:
+    if (mouseobj) {
+      fltk3::remove_timeout(repeat_callback, this);
+      mouseobj = 0;
+      redraw();
+    }
+    handle_release();
+    return 1;
+  case fltk3::PUSH:
+    if (fltk3::visible_focus()) fltk3::focus(this);
+    { fltk3::WidgetTracker wp(this);
+      handle_push();
+      if (wp.deleted()) return 1;
+    }
+  case fltk3::DRAG:
+    i = calc_mouseobj();
+    if (i != mouseobj) {
+      fltk3::remove_timeout(repeat_callback, this);
+      mouseobj = (uchar)i;
+      if (i) fltk3::add_timeout(INITIALREPEAT, repeat_callback, this);
+      fltk3::WidgetTracker wp(this);
+      increment_cb();
+      if (wp.deleted()) return 1;
+      redraw();
+    }
+    return 1;
+  case fltk3::KEYBOARD :
+    switch (fltk3::event_key()) {
+      case fltk3::LeftKey:
+	handle_drag(clamp(increment(value(),-1)));
+	return 1;
+      case fltk3::RightKey:
+	handle_drag(clamp(increment(value(),1)));
+	return 1;
+      default:
+        return 0;
+    }
+    // break not required because of switch...
+  case fltk3::FOCUS : /* FALLTHROUGH */
+  case fltk3::UNFOCUS :
+    if (fltk3::visible_focus()) {
+      redraw();
+      return 1;
+    } else return 0;
+  case fltk3::ENTER : /* FALLTHROUGH */
+  case fltk3::LEAVE :
+    return 1;
+  default:
+    return 0;
+  }
+}
+
+/**
+  Destroys the valuator.
+ */
+fltk3::Counter::~Counter() {
+  fltk3::remove_timeout(repeat_callback, this);
+}
+
+/**
+  Creates a new fltk3::Counter widget using the given position, size, and label
+  string. The default type is fltk3::NORMAL_COUNTER.
+  \param[in] X, Y, W, H position and size of the widget
+  \param[in] L widget label, default is no label
+ */
+fltk3::Counter::Counter(int X, int Y, int W, int H, const char* L)
+  : fltk3::Valuator(X, Y, W, H, L) {
+  box(fltk3::UP_BOX);
+  selection_color(fltk3::INACTIVE_COLOR); // was fltk3::BLUE
+  align(fltk3::ALIGN_BOTTOM);
+  bounds(-1000000.0, 1000000.0);
+  Valuator::step(1, 10);
+  lstep_ = 1.0;
+  mouseobj = 0;
+  textfont(fltk3::HELVETICA);
+  textsize(fltk3::NORMAL_SIZE);
+  textcolor(fltk3::FOREGROUND_COLOR);
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Device.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Device.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Device.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Device.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,92 @@
+//
+// "$Id$"
+//
+// implementation of fltk3::Device class for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2010-2011 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/Device.h>
+#include <fltk3/Image.h>
+
+const char *fltk3::Device::class_id = "fltk3::Device";
+const char *fltk3::SurfaceDevice::class_id = "fltk3::SurfaceDevice";
+const char *fltk3::DisplayDevice::class_id = "fltk3::DisplayDevice";
+const char *fltk3::GraphicsDriver::class_id = "fltk3::GraphicsDriver";
+#if defined(__APPLE__) || defined(FLTK3_DOXYGEN)
+const char *fltk3::QuartzGraphicsDriver::class_id = "fltk3::QuartzGraphicsDriver";
+#endif
+#if defined(WIN32) || defined(FLTK3_DOXYGEN)
+const char *fltk3::GDIGraphicsDriver::class_id = "fltk3::GDIGraphicsDriver";
+#endif
+#if !(defined(__APPLE__) || defined(WIN32))
+namespace fltk3 {
+  const char *XlibGraphicsDriver::class_id = "fltk3::XlibGraphicsDriver";
+}
+#endif
+
+
+/** \brief Use this drawing surface for future graphics requests. */
+void fltk3::SurfaceDevice::set_current(void)
+{
+  fltk3::graphics_driver = _driver;
+  _surface = this;
+}
+
+const fltk3::GraphicsDriver::matrix fltk3::GraphicsDriver::m0 = {1, 0, 0, 1, 0, 0};
+
+fltk3::GraphicsDriver::GraphicsDriver() {
+  font_ = 0;
+  size_ = 0;
+  sptr=0; rstackptr=0; 
+  fl_clip_state_number=0;
+  m = m0; 
+  fl_matrix = &m; 
+  p = (XPOINT *)0;
+  font_descriptor_ = NULL;
+};
+
+void fltk3::GraphicsDriver::text_extents(const char*t, int n, int& dx, int& dy, int& w, int& h)
+{
+  w = (int)width(t, n);
+  h = - height();
+  dx = 0;
+  dy = descent();
+}
+
+fltk3::DisplayDevice::DisplayDevice(fltk3::GraphicsDriver *graphics_driver) : fltk3::SurfaceDevice( graphics_driver) {
+#ifdef __APPLE__
+  SInt32 versionMajor = 0;
+  SInt32 versionMinor = 0;
+  SInt32 versionBugFix = 0;
+  Gestalt( gestaltSystemVersionMajor, &versionMajor );
+  Gestalt( gestaltSystemVersionMinor, &versionMinor );
+  Gestalt( gestaltSystemVersionBugFix, &versionBugFix );
+  fl_mac_os_version = versionMajor * 10000 + versionMinor * 100 + versionBugFix;
+#endif
+};
+
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Dial.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Dial.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Dial.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Dial.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,169 @@
+//
+// "$Id$"
+//
+// Circular dial widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/Dial.h>
+#include <fltk3/draw.h>
+#include <stdlib.h>
+#include <fltk3/math.h>
+#include <fltk3/Wrapper.h>
+
+// All angles are measured with 0 to the right and counter-clockwise
+/**
+  Draws dial at given position and size.
+  \param[in] X, Y, W, H position and size
+*/
+void fltk3::Dial::draw(int X, int Y, int W, int H) {
+  if (damage()&fltk3::DAMAGE_ALL) draw_box(box(), X, Y, W, H, color());
+  X += fltk3::box_dx(box());
+  Y += fltk3::box_dy(box());
+  W -= fltk3::box_dw(box());
+  H -= fltk3::box_dh(box());
+  double angle = (a2-a1)*(value()-minimum())/(maximum()-minimum()) + a1;
+  if (type() == fltk3::FILL_DIAL) {
+    // foo: draw this nicely in certain round box types
+    int foo = (box() > fltk3::ROUND_UP_BOX && fltk3::box_dx(box()));
+    if (foo) {X--; Y--; W+=2; H+=2;}
+    if (active_r()) fltk3::color(color());
+    else fltk3::color(fltk3::inactive(color()));
+    fltk3::pie(X, Y, W, H, 270-a1, angle > a1 ? 360+270-angle : 270-360-angle);
+    if (active_r()) fltk3::color(selection_color());
+    else fltk3::color(fltk3::inactive(selection_color()));
+    fltk3::pie(X, Y, W, H, 270-angle, 270-a1);
+    if (foo) {
+      if (active_r()) fltk3::color(fltk3::FOREGROUND_COLOR);
+      else fltk3::color(fltk3::inactive(fltk3::FOREGROUND_COLOR));
+      fltk3::arc(X, Y, W, H, 0, 360);
+    }
+    return;
+  }
+  if (!(damage()&fltk3::DAMAGE_ALL)) {
+    if (active_r()) fltk3::color(color());
+    else fltk3::color(fltk3::inactive(color()));
+    fltk3::pie(X+1, Y+1, W-2, H-2, 0, 360);
+  }
+  fltk3::push_matrix();
+  fltk3::translate(X+W/2-.5, Y+H/2-.5);
+  fltk3::scale(W-1, H-1);
+  fltk3::rotate(45-angle);
+  if (active_r()) fltk3::color(selection_color());
+  else fltk3::color(fltk3::inactive(selection_color()));
+  if (type()) { // fltk3::LINE_DIAL
+    fltk3::begin_polygon();
+    fltk3::vertex(0.0,   0.0);
+    fltk3::vertex(-0.04, 0.0);
+    fltk3::vertex(-0.25, 0.25);
+    fltk3::vertex(0.0,   0.04);
+    fltk3::end_polygon();
+    if (active_r()) fltk3::color(fltk3::FOREGROUND_COLOR);
+    else fltk3::color(fltk3::inactive(fltk3::FOREGROUND_COLOR));
+    fltk3::begin_loop();
+    fltk3::vertex(0.0,   0.0);
+    fltk3::vertex(-0.04, 0.0);
+    fltk3::vertex(-0.25, 0.25);
+    fltk3::vertex(0.0,   0.04);
+    fltk3::end_loop();
+  } else {
+    fltk3::begin_polygon(); fltk3::circle(-0.20, 0.20, 0.07); fltk3::end_polygon();
+    if (active_r()) fltk3::color(fltk3::FOREGROUND_COLOR);
+    else fltk3::color(fltk3::inactive(fltk3::FOREGROUND_COLOR));
+    fltk3::begin_loop(); fltk3::circle(-0.20, 0.20, 0.07); fltk3::end_loop();
+  }
+  fltk3::pop_matrix();
+}
+
+/**
+  Draws dial at current position and size.
+*/
+void fltk3::Dial::draw() {
+  FLTK3_OBJECT_VCALLS_WRAPPER(draw(), Draw)
+  draw(x(), y(), w(), h());
+  draw_label();
+}
+
+/**
+  Allows subclasses to handle event based on given position and size.
+  \param[in] event, X, Y, W, H event to handle, related position and size.
+*/
+int fltk3::Dial::handle(int event, int X, int Y, int W, int H) {
+  switch (event) {
+  case fltk3::PUSH: {
+    fltk3::WidgetTracker wp(this);  
+    handle_push();
+    if (wp.deleted()) return 1; }
+  case fltk3::DRAG: {
+    int mx = (fltk3::event_x()-X-W/2)*H;
+    int my = (fltk3::event_y()-Y-H/2)*W;
+    if (!mx && !my) return 1;
+    double angle = 270-atan2((float)-my, (float)mx)*180/M_PI;
+    double oldangle = (a2-a1)*(value()-minimum())/(maximum()-minimum()) + a1;
+    while (angle < oldangle-180) angle += 360;
+    while (angle > oldangle+180) angle -= 360;
+    double val;
+    if ((a1<a2) ? (angle <= a1) : (angle >= a1)) {
+      val = minimum();
+    } else if ((a1<a2) ? (angle >= a2) : (angle <= a2)) {
+      val = maximum();
+    } else {
+      val = minimum() + (maximum()-minimum())*(angle-a1)/(a2-a1);
+    }
+    handle_drag(clamp(round(val)));
+  } return 1;
+  case fltk3::RELEASE:
+    handle_release();
+    return 1;
+  case fltk3::ENTER : /* FALLTHROUGH */
+  case fltk3::LEAVE :
+    return 1;
+  default:
+    return 0;
+  }
+}
+
+/**
+  Allow subclasses to handle event based on current position and size.
+*/
+int fltk3::Dial::handle(int e) {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, handle(e), Handle)
+  return handle(e, x(), y(), w(), h());
+}
+
+/**
+ Creates a new fltk3::Dial widget using the given position, size,
+ and label string. The default type is fltk3::NORMAL_DIAL.
+ */
+fltk3::Dial::Dial(int X, int Y, int W, int H, const char* l)
+: fltk3::Valuator(X, Y, W, H, l) {
+  box(fltk3::OVAL_BOX);
+  selection_color(fltk3::INACTIVE_COLOR); // was 37
+  a1 = 45;
+  a2 = 315;
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/DoubleWindow.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Double_Window.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/DoubleWindow.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/DoubleWindow.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,465 @@
+//
+// "$Id$"
+//
+// Double-buffered window code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <config.h>
+#include <fltk3/run.h>
+#include <fltk3/DoubleWindow.h>
+#include <fltk3/Printer.h>
+#include <fltk3/x.h>
+#include <fltk3/draw.h>
+
+
+// On systems that support double buffering "naturally" the base
+// fltk3::Window class will probably do double-buffer and this subclass
+// does nothing.
+
+#if USE_XDBE
+
+#include <X11/extensions/Xdbe.h>
+
+static int use_xdbe;
+
+static int can_xdbe() {
+  static int tried;
+  if (!tried) {
+    tried = 1;
+    int event_base, error_base;
+    if (!XdbeQueryExtension(fl_display, &event_base, &error_base)) return 0;
+    Drawable root = RootWindow(fl_display,fl_screen);
+    int numscreens = 1;
+    XdbeScreenVisualInfo *a = XdbeGetVisualInfo(fl_display,&root,&numscreens);
+    if (!a) return 0;
+    for (int j = 0; j < a->count; j++) {
+      if (a->visinfo[j].visual == fl_visual->visualid
+	  /*&& a->visinfo[j].perflevel > 0*/) {
+        use_xdbe = 1; break;
+      }
+    }
+    XdbeFreeVisualInfo(a);
+  }
+  return use_xdbe;
+}
+#endif
+
+void fltk3::DoubleWindow::show() {
+  Window::show();
+}
+
+static void fl_copy_offscreen_to_display(int x, int y, int w, int h, fltk3::Offscreen pixmap, int srcx, int srcy);
+
+/** \addtogroup fl_drawings
+ @{
+ */
+/** Copy a rectangular area of the given offscreen buffer into the current drawing destination.
+ \param x,y	position where to draw the copied rectangle
+ \param w,h	size of the copied rectangle
+ \param pixmap  offscreen buffer containing the rectangle to copy
+ \param srcx,srcy origin in offscreen buffer of rectangle to copy
+ */
+void fl_copy_offscreen(int x, int y, int w, int h, fltk3::Offscreen pixmap, int srcx, int srcy) {
+  if (fltk3::graphics_driver == fltk3::DisplayDevice::display_device()->driver()) {
+    fl_copy_offscreen_to_display(x, y, w, h, pixmap, srcx, srcy);
+  }
+  else { // when copy is not to the display
+    fl_begin_offscreen(pixmap);
+    uchar *img = fltk3::read_image(NULL, srcx, srcy, w, h, 0);
+    fl_end_offscreen();
+    fltk3::draw_image(img, x, y, w, h, 3, 0);
+    delete[] img;
+  }
+}
+/** @} */
+
+#if defined(USE_X11)
+
+static void fl_copy_offscreen_to_display(int x, int y, int w, int h, fltk3::Offscreen pixmap, int srcx, int srcy) {
+  XCopyArea(fl_display, pixmap, fl_window, fl_gc, srcx, srcy, w, h, x, y);
+}
+
+
+// maybe someone feels inclined to implement alpha blending on X11?
+char fltk3::can_do_alpha_blending() {
+  return 0;
+}
+#elif defined(WIN32)
+
+// Code used to switch output to an off-screen window.  See macros in
+// win32.h which save the old state in local variables.
+
+typedef struct { BYTE a; BYTE b; BYTE c; BYTE d; } FL_BLENDFUNCTION;
+typedef BOOL (WINAPI* fl_alpha_blend_func)
+    (HDC,int,int,int,int,HDC,int,int,int,int,FL_BLENDFUNCTION);
+static fl_alpha_blend_func fl_alpha_blend = NULL;
+static FL_BLENDFUNCTION blendfunc = { 0, 0, 255, 1};
+
+/*
+ * This function checks if the version of MSWindows that we
+ * curently run on supports alpha blending for bitmap transfers
+ * and finds the required function if so.
+ */
+char fltk3::can_do_alpha_blending() {
+  static char been_here = 0;
+  static char can_do = 0;
+  // do this test only once
+  if (been_here) return can_do;
+  been_here = 1;
+  // load the library that implements alpha blending
+  HMODULE hMod = LoadLibrary("MSIMG32.DLL");
+  // give up if that doesn't exist (Win95?)
+  if (!hMod) return 0;
+  // now find the blending function inside that dll
+  fl_alpha_blend = (fl_alpha_blend_func)GetProcAddress(hMod, "AlphaBlend");
+  // give up if we can't find it (Win95)
+  if (!fl_alpha_blend) return 0;
+  // we have the call, but does our display support alpha blending?
+  // get the desktop's device context
+  HDC dc = GetDC(0L);
+  if (!dc) return 0;
+  // check the device capabilities flags. However GetDeviceCaps
+  // does not return anything useful, so we have to do it manually:
+
+  HBITMAP bm = CreateCompatibleBitmap(dc, 1, 1);
+  HDC new_gc = CreateCompatibleDC(dc);
+  int save = SaveDC(new_gc);
+  SelectObject(new_gc, bm);
+  /*COLORREF set = */ SetPixel(new_gc, 0, 0, 0x01010101);
+  BOOL alpha_ok = fl_alpha_blend(dc, 0, 0, 1, 1, new_gc, 0, 0, 1, 1, blendfunc);
+  RestoreDC(new_gc, save);
+  DeleteDC(new_gc);
+  DeleteObject(bm);
+  ReleaseDC(0L, dc);
+
+  if (alpha_ok) can_do = 1;
+  return can_do;
+}
+
+HDC fl_makeDC(HBITMAP bitmap) {
+  HDC new_gc = CreateCompatibleDC(fl_gc);
+  SetTextAlign(new_gc, TA_BASELINE|TA_LEFT);
+  SetBkMode(new_gc, TRANSPARENT);
+#if USE_COLORMAP
+  if (fl_palette) SelectPalette(new_gc, fl_palette, FALSE);
+#endif
+  SelectObject(new_gc, bitmap);
+  return new_gc;
+}
+
+static void fl_copy_offscreen_to_display(int x,int y,int w,int h,HBITMAP bitmap,int srcx,int srcy) {
+  HDC new_gc = CreateCompatibleDC(fl_gc);
+  int save = SaveDC(new_gc);
+  SelectObject(new_gc, bitmap);
+  BitBlt(fl_gc, x, y, w, h, new_gc, srcx, srcy, SRCCOPY);
+  RestoreDC(new_gc, save);
+  DeleteDC(new_gc);
+}
+
+void fl_copy_offscreen_with_alpha(int x,int y,int w,int h,HBITMAP bitmap,int srcx,int srcy) {
+  HDC new_gc = CreateCompatibleDC(fl_gc);
+  int save = SaveDC(new_gc);
+  SelectObject(new_gc, bitmap);
+  BOOL alpha_ok = 0;
+  // first try to alpha blend
+  // if to printer, always try alpha_blend
+  int to_display = fltk3::SurfaceDevice::surface()->class_name() == fltk3::DisplayDevice::class_id; // true iff display output
+  if ( (to_display && fltk3::can_do_alpha_blending()) || fltk3::SurfaceDevice::surface()->class_name() == fltk3::Printer::class_id) {
+    alpha_ok = fl_alpha_blend(fl_gc, x, y, w, h, new_gc, srcx, srcy, w, h, blendfunc);
+  }
+  // if that failed (it shouldn't), still copy the bitmap over, but now alpha is 1
+  if (!alpha_ok) {
+    BitBlt(fl_gc, x, y, w, h, new_gc, srcx, srcy, SRCCOPY);
+  }
+  RestoreDC(new_gc, save);
+  DeleteDC(new_gc);
+}
+
+extern void fltk3::restore_clip();
+
+#elif defined(__APPLE_QUARTZ__) || defined(FLTK3_DOXYGEN)
+
+char fltk3::can_do_alpha_blending() {
+  return 1;
+}
+
+fltk3::Offscreen fl_create_offscreen_with_alpha(int w, int h) {
+  void *data = calloc(w*h,4);
+  CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
+  CGContextRef ctx = CGBitmapContextCreate(
+    data, w, h, 8, w*4, lut, kCGImageAlphaPremultipliedLast);
+  CGColorSpaceRelease(lut);
+  return (fltk3::Offscreen)ctx;
+}
+
+/** \addtogroup fl_drawings
+ @{
+ */
+
+/** 
+  Creation of an offscreen graphics buffer.
+ \param w,h     width and height in pixels of the buffer.
+ \return    the created graphics buffer.
+ */
+fltk3::Offscreen fl_create_offscreen(int w, int h) {
+  void *data = calloc(w*h,4);
+  CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
+  CGContextRef ctx = CGBitmapContextCreate(
+    data, w, h, 8, w*4, lut, kCGImageAlphaNoneSkipLast);
+  CGColorSpaceRelease(lut);
+  return (fltk3::Offscreen)ctx;
+}
+
+static void bmProviderRelease (void *src, const void *data, size_t size) {
+  CFIndex count = CFGetRetainCount(src);
+  CFRelease(src);
+  if(count == 1) free((void*)data);
+}
+
+static void fl_copy_offscreen_to_display(int x,int y,int w,int h,fltk3::Offscreen osrc,int srcx,int srcy) {
+  CGContextRef src = (CGContextRef)osrc;
+  void *data = CGBitmapContextGetData(src);
+  int sw = CGBitmapContextGetWidth(src);
+  int sh = CGBitmapContextGetHeight(src);
+  CGImageAlphaInfo alpha = CGBitmapContextGetAlphaInfo(src);
+  CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
+  // when output goes to a Quartz printercontext, release of the bitmap must be
+  // delayed after the end of the print page
+  CFRetain(src);
+  CGDataProviderRef src_bytes = CGDataProviderCreateWithData( src, data, sw*sh*4, bmProviderRelease);
+  CGImageRef img = CGImageCreate( sw, sh, 8, 4*8, 4*sw, lut, alpha,
+    src_bytes, 0L, false, kCGRenderingIntentDefault);
+  // fltk3::push_clip();
+  CGRect rect = { { x, y }, { w, h } };
+  Fl_X::q_begin_image(rect, srcx, srcy, sw, sh);
+  CGContextDrawImage(fl_gc, rect, img);
+  Fl_X::q_end_image();
+  CGImageRelease(img);
+  CGColorSpaceRelease(lut);
+  CGDataProviderRelease(src_bytes);
+}
+
+/**  Deletion of an offscreen graphics buffer.
+ \param ctx     the buffer to be deleted.
+ */
+void fl_delete_offscreen(fltk3::Offscreen ctx) {
+  if (!ctx) return;
+  void *data = CGBitmapContextGetData((CGContextRef)ctx);
+  CFIndex count = CFGetRetainCount(ctx);
+  CGContextRelease((CGContextRef)ctx);
+  if(count == 1) free(data);
+}
+
+const int stack_max = 16;
+static int stack_ix = 0;
+static CGContextRef stack_gc[stack_max];
+static Window stack_window[stack_max];
+static fltk3::SurfaceDevice *_ss;
+
+/**  Send all subsequent drawing commands to this offscreen buffer.
+ \param ctx     the offscreen buffer.
+ */
+void fl_begin_offscreen(fltk3::Offscreen ctx) {
+  _ss = fltk3::SurfaceDevice::surface(); 
+  fltk3::DisplayDevice::display_device()->set_current();
+  if (stack_ix<stack_max) {
+    stack_gc[stack_ix] = fl_gc;
+    stack_window[stack_ix] = fl_window;
+  } else 
+    fprintf(stderr, "FLTK CGContext Stack overflow error\n");
+  stack_ix++;
+
+  fl_gc = (CGContextRef)ctx;
+  fl_window = 0;
+  CGContextSaveGState(fl_gc);
+  fltk3::push_no_clip();
+}
+
+/** Quit sending drawing commands to the current offscreen buffer.
+ */
+void fl_end_offscreen() {
+  Fl_X::q_release_context();
+  fltk3::pop_clip();
+  if (stack_ix>0)
+    stack_ix--;
+  else
+    fprintf(stderr, "FLTK CGContext Stack underflow error\n");
+  if (stack_ix<stack_max) {
+    fl_gc = stack_gc[stack_ix];
+    fl_window = stack_window[stack_ix];
+  }
+  _ss->set_current();
+}
+
+/** @} */
+
+namespace fltk3 {
+  extern void restore_clip();
+}
+
+#else
+# error unsupported platform
+#endif
+
+/**
+  Forces the window to be redrawn.
+*/
+void fltk3::DoubleWindow::flush() {flush(0);}
+
+/**
+  Forces the window to be redrawn.
+  \param[in] eraseoverlay non-zero to erase overlay, zero to ignore
+
+  fltk3::OverlayWindow relies on flush(1) copying the back buffer to the
+  front everywhere, even if damage() == 0, thus erasing the overlay,
+  and leaving the clip region set to the entire window.
+*/
+void fltk3::DoubleWindow::flush(int eraseoverlay) {
+  make_current(); // make sure fl_gc is non-zero
+  Fl_X *myi = Fl_X::i(this);
+  if (!myi->other_xid) {
+#if USE_XDBE
+    if (can_xdbe()) {
+      myi->other_xid = XdbeAllocateBackBufferName(fl_display, fl_xid(this), XdbeCopied);
+      myi->backbuffer_bad = 1;
+    } else
+#endif
+#if defined(USE_X11) || defined(WIN32)
+    myi->other_xid = fl_create_offscreen(w(), h());
+    clear_damage(fltk3::DAMAGE_ALL);
+#elif defined(__APPLE_QUARTZ__)
+    if (force_doublebuffering_) {
+      myi->other_xid = fl_create_offscreen(w(), h());
+      clear_damage(fltk3::DAMAGE_ALL);
+    }
+#else
+# error unsupported platform
+#endif
+  }
+#if USE_XDBE
+  if (use_xdbe) {
+    if (myi->backbuffer_bad || eraseoverlay) {
+      // Make sure we do a complete redraw...
+      if (myi->region) {XDestroyRegion(myi->region); myi->region = 0;}
+      clear_damage(fltk3::DAMAGE_ALL);
+      myi->backbuffer_bad = 0;
+    }
+
+    // Redraw as needed...
+    if (damage()) {
+      fltk3::clip_region(myi->region); myi->region = 0;
+      fl_window = myi->other_xid;
+      draw();
+      fl_window = myi->xid;
+    }
+
+    // Copy contents of back buffer to window...
+    XdbeSwapInfo s;
+    s.swap_window = fl_xid(this);
+    s.swap_action = XdbeCopied;
+    XdbeSwapBuffers(fl_display, &s, 1);
+    return;
+  } else
+#endif
+    if (damage() & ~fltk3::DAMAGE_EXPOSE) {
+    fltk3::clip_region(myi->region); myi->region = 0;
+#ifdef WIN32
+    HDC _sgc = fl_gc;
+    fl_gc = fl_makeDC(myi->other_xid);
+    int save = SaveDC(fl_gc);
+    fltk3::restore_clip(); // duplicate region into new gc
+    draw();
+    RestoreDC(fl_gc, save);
+    DeleteDC(fl_gc);
+    fl_gc = _sgc;
+    //# if defined(FLTK_USE_CAIRO)
+    //if fltk3::cairo_autolink_context() fltk3::cairo_make_current(this); // capture gc changes automatically to update the cairo context adequately
+    //# endif
+#elif defined(__APPLE__)
+    if ( myi->other_xid ) {
+      fl_begin_offscreen( myi->other_xid );
+      fltk3::clip_region( 0 );   
+      draw();
+      fl_end_offscreen();
+    } else {
+      draw();
+    }
+#else // X:
+    fl_window = myi->other_xid;
+    draw();
+    fl_window = myi->xid;
+#endif
+  }
+  if (eraseoverlay) fltk3::clip_region(0);
+  // on Irix (at least) it is faster to reduce the area copied to
+  // the current clip region:
+  int X,Y,W,H; fltk3::clip_box(0,0,w(),h(),X,Y,W,H);
+  if (myi->other_xid) fl_copy_offscreen(X, Y, W, H, myi->other_xid, X, Y);
+}
+
+void fltk3::DoubleWindow::resize(int X,int Y,int W,int H) {
+  int ow = w();
+  int oh = h();
+  Window::resize(X,Y,W,H);
+#if USE_XDBE
+  if (use_xdbe) {
+    Fl_X* myi = Fl_X::i(this);
+    if (myi && myi->other_xid && (ow < w() || oh < h())) {
+      // STR #2152: Deallocate the back buffer to force creation of a new one.
+      XdbeDeallocateBackBufferName(fl_display,myi->other_xid);
+      myi->other_xid = 0;
+    }
+    return;
+  }
+#endif
+  Fl_X* myi = Fl_X::i(this);
+  if (myi && myi->other_xid && (ow != w() || oh != h())) {
+    fl_delete_offscreen(myi->other_xid);
+    myi->other_xid = 0;
+  }
+}
+
+void fltk3::DoubleWindow::hide() {
+  Fl_X* myi = Fl_X::i(this);
+  if (myi && myi->other_xid) {
+#if USE_XDBE
+    if (!use_xdbe)
+#endif
+      fl_delete_offscreen(myi->other_xid);
+  }
+  Window::hide();
+}
+
+/**
+  The destructor <I>also deletes all the children</I>. This allows a
+  whole tree to be deleted at once, without having to keep a pointer to
+  all the children in the user code.
+*/
+fltk3::DoubleWindow::~DoubleWindow() {
+  hide();
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/FileBrowser.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_File_Browser.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/FileBrowser.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/FileBrowser.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,643 @@
+//
+// "$Id$"
+//
+// fltk3::FileBrowser routines.
+//
+// Copyright 1999-2010 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
+//
+// Contents:
+//
+//   fltk3::FileBrowser::full_height()     - Return the height of the list.
+//   fltk3::FileBrowser::item_height()     - Return the height of a list item.
+//   fltk3::FileBrowser::item_width()      - Return the width of a list item.
+//   fltk3::FileBrowser::item_draw()       - Draw a list item.
+//   fltk3::FileBrowser::fltk3::FileBrowser() - Create a fltk3::FileBrowser widget.
+//   fltk3::FileBrowser::load()            - Load a directory into the browser.
+//   fltk3::FileBrowser::filter()          - Set the filename filter.
+//
+
+//
+// Include necessary header files...
+//
+
+#include <fltk3/FileBrowser.h>
+#include <fltk3/draw.h>
+#include <fltk3/filename.h>
+#include <fltk3/Image.h>	// icon
+#include <stdio.h>
+#include <stdlib.h>
+#include "flstring.h"
+
+#ifdef __CYGWIN__
+#  include <mntent.h>
+#elif defined(WIN32)
+#  include <windows.h>
+#  include <direct.h>
+// Apparently Borland C++ defines DIRECTORY in <direct.h>, which
+// interfers with the fltk3::FileIcon enumeration of the same name.
+#  ifdef DIRECTORY
+#    undef DIRECTORY
+#  endif // DIRECTORY
+#endif // __CYGWIN__
+
+#ifdef __EMX__
+#  define  INCL_DOS
+#  define  INCL_DOSMISC
+#  include <os2.h>
+#endif // __EMX__
+
+#if defined(__APPLE__)
+#  include <sys/param.h>
+#  include <sys/ucred.h>
+#  include <sys/mount.h>
+#endif // __APPLE__
+
+//
+// fltk3::BrowserLine_ definition from "fltk3::Browser.cxx"...
+//
+
+#define SELECTED 1
+#define NOTDISPLAYED 2
+
+// TODO -- Warning: The definition of fltk3::BrowserLine_ here is a hack.
+//    fltk3::FileBrowser should not do this. PLEASE FIX.
+//    fltk3::BrowserLine_ should be private to fltk3::Browser, and not re-defined here.
+//    For now, make sure this struct is precisely consistent with fltk3::Browser.cxx.
+//
+struct fltk3::BrowserLine_			// data is in a linked list of these
+{
+  fltk3::BrowserLine_	*prev;		// Previous item in list
+  fltk3::BrowserLine_	*next;		// Next item in list
+  void		*data;		// Pointer to data (function)
+  fltk3::Image      *icon;		// Pointer to optional icon
+  short		length;		// sizeof(txt)-1, may be longer than string
+  char		flags;		// selected, displayed
+  char		txt[1];		// start of allocated array
+};
+
+
+//
+// 'fltk3::FileBrowser::full_height()' - Return the height of the list.
+//
+
+int					// O - Height in pixels
+fltk3::FileBrowser::full_height() const
+{
+  int	i,				// Looping var
+	th;				// Total height of list.
+
+
+  for (i = 0, th = 0; i < size(); i ++)
+    th += item_height(find_line(i));
+
+  return (th);
+}
+
+
+//
+// 'fltk3::FileBrowser::item_height()' - Return the height of a list item.
+//
+
+int					// O - Height in pixels
+fltk3::FileBrowser::item_height(void *p) const	// I - List item data
+{
+  fltk3::BrowserLine_	*line;			// Pointer to line
+  char		*t;			// Pointer into text
+  int		height;			// Width of line
+  int		textheight;		// Height of text
+
+
+  // Figure out the standard text height...
+  fltk3::font(textfont(), textsize());
+  textheight = fltk3::height();
+
+  // We always have at least 1 line...
+  height = textheight;
+
+  // Scan for newlines...
+  line = (fltk3::BrowserLine_ *)p;
+
+  if (line != NULL)
+    for (t = line->txt; *t != '\0'; t ++)
+      if (*t == '\n')
+	height += textheight;
+
+  // If we have enabled icons then add space for them...
+  if (fltk3::FileIcon::first() != NULL && height < iconsize_)
+    height = iconsize_;
+
+  // Add space for the selection border..
+  height += 2;
+
+  // Return the height
+  return (height);
+}
+
+
+//
+// 'fltk3::FileBrowser::item_width()' - Return the width of a list item.
+//
+
+int					// O - Width in pixels
+fltk3::FileBrowser::item_width(void *p) const	// I - List item data
+{
+  int		i;			// Looping var
+  fltk3::BrowserLine_	*line;			// Pointer to line
+  char		*t,			// Pointer into text
+		*ptr,			// Pointer into fragment
+		fragment[10240];	// Fragment of text
+  int		width,			// Width of line
+		tempwidth;		// Width of fragment
+  int		column;			// Current column
+  const int	*columns;		// Columns
+
+
+  // Scan for newlines...
+  line    = (fltk3::BrowserLine_ *)p;
+  columns = column_widths();
+
+  // Set the font and size...
+  if (line->txt[strlen(line->txt) - 1] == '/')
+    fltk3::font(textfont() | fltk3::BOLD, textsize());
+  else
+    fltk3::font(textfont(), textsize());
+
+  if (strchr(line->txt, '\n') == NULL &&
+      strchr(line->txt, column_char()) == NULL)
+  {
+    // Do a fast width calculation...
+    width = (int)fltk3::width(line->txt);
+  }
+  else
+  {
+    // More than 1 line or have columns; find the maximum width...
+    width     = 0;
+    tempwidth = 0;
+    column    = 0;
+
+    for (t = line->txt, ptr = fragment; *t != '\0'; t ++)
+      if (*t == '\n')
+      {
+        // Newline - nul terminate this fragment and get the width...
+        *ptr = '\0';
+
+	tempwidth += (int)fltk3::width(fragment);
+
+        // Update the max width as needed...
+	if (tempwidth > width)
+	  width = tempwidth;
+
+        // Point back to the start of the fragment...
+	ptr       = fragment;
+	tempwidth = 0;
+	column    = 0;
+      }
+      else if (*t == column_char())
+      {
+        // Advance to the next column...
+        column ++;
+	if (columns)
+	{
+	  for (i = 0, tempwidth = 0; i < column && columns[i]; i ++)
+	    tempwidth += columns[i];
+	}
+	else
+          tempwidth = column * (int)(fltk3::height() * 0.6 * 8.0);
+
+        if (tempwidth > width)
+	  width = tempwidth;
+
+	ptr = fragment;
+      }
+      else
+        *ptr++ = *t;
+
+    if (ptr > fragment)
+    {
+      // Nul terminate this fragment and get the width...
+      *ptr = '\0';
+
+      tempwidth += (int)fltk3::width(fragment);
+
+      // Update the max width as needed...
+      if (tempwidth > width)
+	width = tempwidth;
+    }
+  }
+
+  // If we have enabled icons then add space for them...
+  if (fltk3::FileIcon::first() != NULL)
+    width += iconsize_ + 8;
+
+  // Add space for the selection border..
+  width += 2;
+
+  // Return the width
+  return (width);
+}
+
+
+//
+// 'fltk3::FileBrowser::item_draw()' - Draw a list item.
+//
+
+void
+fltk3::FileBrowser::item_draw(void *p,	// I - List item data
+                 	   int  X,	// I - Upper-lefthand X coordinate
+		 	   int  Y,	// I - Upper-lefthand Y coordinate
+		 	   int  W,	// I - Width of item
+			   int) const	// I - Height of item
+{
+  int		i;			// Looping var
+  fltk3::BrowserLine_	*line;			// Pointer to line
+  fltk3::Color	c;			// Text color
+  char		*t,			// Pointer into text
+		*ptr,			// Pointer into fragment
+		fragment[10240];	// Fragment of text
+  int		width,			// Width of line
+		height;			// Height of line
+  int		column;			// Current column
+  const int	*columns;		// Columns
+
+
+  // Draw the list item text...
+  line = (fltk3::BrowserLine_ *)p;
+
+  if (line->txt[strlen(line->txt) - 1] == '/')
+    fltk3::font(textfont() | fltk3::BOLD, textsize());
+  else
+    fltk3::font(textfont(), textsize());
+
+  if (line->flags & SELECTED)
+    c = fltk3::contrast(textcolor(), selection_color());
+  else
+    c = textcolor();
+
+  if (fltk3::FileIcon::first() == NULL)
+  {
+    // No icons, just draw the text...
+    X ++;
+    W -= 2;
+  }
+  else
+  {
+    // Draw the icon if it is set...
+    if (line->data)
+      ((fltk3::FileIcon *)line->data)->draw(X, Y, iconsize_, iconsize_,
+                                	(line->flags & SELECTED) ? fltk3::YELLOW :
+				                                   fltk3::LIGHT2,
+					active_r());
+
+    // Draw the text offset to the right...
+    X += iconsize_ + 9;
+    W -= iconsize_ - 10;
+
+    // Center the text vertically...
+    height = fltk3::height();
+
+    for (t = line->txt; *t != '\0'; t ++)
+      if (*t == '\n')
+	height += fltk3::height();
+
+    if (height < iconsize_)
+      Y += (iconsize_ - height) / 2;
+  }
+
+  // Draw the text...
+  line    = (fltk3::BrowserLine_ *)p;
+  columns = column_widths();
+  width   = 0;
+  column  = 0;
+
+  if (active_r())
+    fltk3::color(c);
+  else
+    fltk3::color(fltk3::inactive(c));
+
+  for (t = line->txt, ptr = fragment; *t != '\0'; t ++)
+    if (*t == '\n')
+    {
+      // Newline - nul terminate this fragment and draw it...
+      *ptr = '\0';
+
+      fltk3::draw(fragment, X + width, Y, W - width, fltk3::height(),
+              (fltk3::Align)(fltk3::ALIGN_LEFT | fltk3::ALIGN_CLIP), 0, 0);
+
+      // Point back to the start of the fragment...
+      ptr    = fragment;
+      width  = 0;
+      Y      += fltk3::height();
+      column = 0;
+    }
+    else if (*t == column_char())
+    {
+      // Tab - nul terminate this fragment and draw it...
+      *ptr = '\0';
+
+      int cW = W - width; // Clip width...
+
+      if (columns)
+      {
+        // Try clipping inside this column...
+	for (i = 0; i < column && columns[i]; i ++);
+
+        if (columns[i])
+          cW = columns[i];
+      }
+
+      fltk3::draw(fragment, X + width, Y, cW, fltk3::height(),
+              (fltk3::Align)(fltk3::ALIGN_LEFT | fltk3::ALIGN_CLIP), 0, 0);
+
+      // Advance to the next column...
+      column ++;
+      if (columns)
+      {
+	for (i = 0, width = 0; i < column && columns[i]; i ++)
+	  width += columns[i];
+      }
+      else
+        width = column * (int)(fltk3::height() * 0.6 * 8.0);
+
+      ptr = fragment;
+    }
+    else
+      *ptr++ = *t;
+
+  if (ptr > fragment)
+  {
+    // Nul terminate this fragment and draw it...
+    *ptr = '\0';
+
+    fltk3::draw(fragment, X + width, Y, W - width, fltk3::height(),
+            (fltk3::Align)(fltk3::ALIGN_LEFT | fltk3::ALIGN_CLIP), 0, 0);
+  }
+}
+
+
+//
+// 'fltk3::FileBrowser::fltk3::FileBrowser()' - Create a fltk3::FileBrowser widget.
+//
+
+fltk3::FileBrowser::FileBrowser(int        X,  // I - Upper-lefthand X coordinate
+                        	 int        Y,  // I - Upper-lefthand Y coordinate
+				 int        W,  // I - Width in pixels
+				 int        H,  // I - Height in pixels
+				 const char *l)	// I - Label text
+    : fltk3::Browser(X, Y, W, H, l)
+{
+  // Initialize the filter pattern, current directory, and icon size...
+  pattern_   = "*";
+  directory_ = "";
+  iconsize_  = (uchar)(3 * textsize() / 2);
+  filetype_  = FILES;
+}
+
+
+//
+// 'fltk3::FileBrowser::load()' - Load a directory into the browser.
+//
+
+int						// O - Number of files loaded
+fltk3::FileBrowser::load(const char     *directory,// I - Directory to load
+                      fltk3::FileSortF *sort)	// I - Sort function to use
+{
+  int		i;				// Looping var
+  int		num_files;			// Number of files in directory
+  int		num_dirs;			// Number of directories in list
+  char		filename[4096];			// Current file
+  fltk3::FileIcon	*icon;				// Icon to use
+
+
+//  printf("fltk3::FileBrowser::load(\"%s\")\n", directory);
+
+  clear();
+
+  directory_ = directory;
+
+  if (!directory)
+    return (0);
+
+  if (directory_[0] == '\0')
+  {
+    //
+    // No directory specified; for UNIX list all mount points.  For DOS
+    // list all valid drive letters...
+    //
+
+    num_files = 0;
+    if ((icon = fltk3::FileIcon::find("any", fltk3::FileIcon::DEVICE)) == NULL)
+      icon = fltk3::FileIcon::find("any", fltk3::FileIcon::DIRECTORY);
+
+#ifdef WIN32
+#  ifdef __CYGWIN__
+    //
+    // Cygwin provides an implementation of setmntent() to get the list
+    // of available drives...
+    //
+    FILE          *m = setmntent("/-not-used-", "r");
+    struct mntent *p;
+
+    while ((p = getmntent (m)) != NULL) {
+      add(p->mnt_dir, icon);
+      num_files ++;
+    }
+
+    endmntent(m);
+#  else
+    //
+    // Normal WIN32 code uses drive bits...
+    //
+    DWORD	drives;		// Drive available bits
+
+    drives = GetLogicalDrives();
+    for (i = 'A'; i <= 'Z'; i ++, drives >>= 1)
+      if (drives & 1)
+      {
+        sprintf(filename, "%c:/", i);
+
+	if (i < 'C') // see also: GetDriveType and GetVolumeInformation in WIN32
+	  add(filename, icon);
+	else
+	  add(filename, icon);
+
+	num_files ++;
+      }
+#  endif // __CYGWIN__
+#elif defined(__EMX__)
+    //
+    // OS/2 code uses drive bits...
+    //
+    ULONG	curdrive;	// Current drive
+    ULONG	drives;		// Drive available bits
+    int		start = 3;      // 'C' (MRS - dunno if this is correct!)
+
+
+    DosQueryCurrentDisk(&curdrive, &drives);
+    drives >>= start - 1;
+    for (i = 'A'; i <= 'Z'; i ++, drives >>= 1)
+      if (drives & 1)
+      {
+        sprintf(filename, "%c:/", i);
+        add(filename, icon);
+
+	num_files ++;
+      }
+#elif defined(__APPLE__)
+    // MacOS X and Darwin use getfsstat() system call...
+    int			numfs;	// Number of file systems
+    struct statfs	*fs;	// Buffer for file system info
+
+
+    // We always have the root filesystem.
+    add("/", icon);
+
+    // Get the mounted filesystems...
+    numfs = getfsstat(NULL, 0, MNT_NOWAIT);
+    if (numfs > 0) {
+      // We have file systems, get them...
+      fs = new struct statfs[numfs];
+      getfsstat(fs, sizeof(struct statfs) * numfs, MNT_NOWAIT);
+
+      // Add filesystems to the list...
+      for (i = 0; i < numfs; i ++) {
+	// Ignore "/", "/dev", and "/.vol"...
+        if (fs[i].f_mntonname[1] && strcmp(fs[i].f_mntonname, "/dev") &&
+	    strcmp(fs[i].f_mntonname, "/.vol")) {
+          snprintf(filename, sizeof(filename), "%s/", fs[i].f_mntonname);
+          add(filename, icon);
+        }
+        num_files ++;
+      }
+
+      // Free the memory used for the file system info array...
+      delete[] fs;
+    }
+#else
+    //
+    // UNIX code uses /etc/fstab or similar...
+    //
+    FILE	*mtab;		// /etc/mtab or /etc/mnttab file
+    char	line[FLTK3_PATH_MAX];	// Input line
+
+    //
+    // Open the file that contains a list of mounted filesystems...
+    //
+
+    mtab = fltk3::fopen("/etc/mnttab", "r");	// Fairly standard
+    if (mtab == NULL)
+      mtab = fltk3::fopen("/etc/mtab", "r");	// More standard
+    if (mtab == NULL)
+      mtab = fltk3::fopen("/etc/fstab", "r");	// Otherwise fallback to full list
+    if (mtab == NULL)
+      mtab = fltk3::fopen("/etc/vfstab", "r");	// Alternate full list file
+
+    if (mtab != NULL)
+    {
+      while (fgets(line, sizeof(line), mtab) != NULL)
+      {
+        if (line[0] == '#' || line[0] == '\n')
+	  continue;
+        if (sscanf(line, "%*s%4095s", filename) != 1)
+	  continue;
+
+        strlcat(filename, "/", sizeof(filename));
+
+//        printf("fltk3::FileBrowser::load() - adding \"%s\" to list...\n", filename);
+        add(filename, icon);
+	num_files ++;
+      }
+
+      fclose(mtab);
+    }
+#endif // WIN32 || __EMX__
+  }
+  else
+  {
+    dirent	**files;	// Files in in directory
+
+
+    //
+    // Build the file list...
+    //
+
+#if (defined(WIN32) && !defined(__CYGWIN__)) || defined(__EMX__)
+    strlcpy(filename, directory_, sizeof(filename));
+    i = strlen(filename) - 1;
+
+    if (i == 2 && filename[1] == ':' &&
+        (filename[2] == '/' || filename[2] == '\\'))
+      filename[2] = '/';
+    else if (filename[i] != '/' && filename[i] != '\\')
+      strlcat(filename, "/", sizeof(filename));
+
+    num_files = fltk3::filename_list(filename, &files, sort);
+#else
+    num_files = fltk3::filename_list(directory_, &files, sort);
+#endif /* WIN32 || __EMX__ */
+
+    if (num_files <= 0)
+      return (0);
+
+    for (i = 0, num_dirs = 0; i < num_files; i ++) {
+      if (strcmp(files[i]->d_name, "./")) {
+	snprintf(filename, sizeof(filename), "%s/%s", directory_,
+	         files[i]->d_name);
+
+        icon = fltk3::FileIcon::find(filename);
+	if ((icon && icon->type() == fltk3::FileIcon::DIRECTORY) ||
+	     fltk3::_filename_isdir_quick(filename)) {
+          num_dirs ++;
+          insert(num_dirs, files[i]->d_name, icon);
+	} else if (filetype_ == FILES &&
+	           fltk3::filename_match(files[i]->d_name, pattern_)) {
+          add(files[i]->d_name, icon);
+	}
+      }
+
+      free(files[i]);
+    }
+
+    free(files);
+  }
+
+  return (num_files);
+}
+
+
+//
+// 'fltk3::FileBrowser::filter()' - Set the filename filter.
+//
+
+void
+fltk3::FileBrowser::filter(const char *pattern)	// I - Pattern string
+{
+  // If pattern is NULL set the pattern to "*"...
+  if (pattern)
+    pattern_ = pattern;
+  else
+    pattern_ = "*";
+}
+
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/FileChooser.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_File_Chooser.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/FileChooser.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/FileChooser.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,475 @@
+//
+// "$Id$"
+//
+// fltk3::FileChooser dialog for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 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
+//
+
+// generated by Fast Light User Interface Designer (fluid) version 1.0300
+
+#include <fltk3/FileChooser.h>
+#include <fltk3/draw.h>
+
+void fltk3::FileChooser::cb_window_i(fltk3::DoubleWindow*, void*) {
+  fileName->value("");
+fileList->deselect();
+fltk3::remove_timeout((fltk3::TimeoutHandler)previewCB, this);
+window->hide();
+}
+void fltk3::FileChooser::cb_window(fltk3::DoubleWindow* o, void* v) {
+  ((fltk3::FileChooser*)(o->user_data()))->cb_window_i(o,v);
+}
+
+void fltk3::FileChooser::cb_showChoice_i(fltk3::Choice*, void*) {
+  showChoiceCB();
+}
+void fltk3::FileChooser::cb_showChoice(fltk3::Choice* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->user_data()))->cb_showChoice_i(o,v);
+}
+
+void fltk3::FileChooser::cb_favoritesButton_i(fltk3::MenuButton*, void*) {
+  favoritesButtonCB();
+}
+void fltk3::FileChooser::cb_favoritesButton(fltk3::MenuButton* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->user_data()))->cb_favoritesButton_i(o,v);
+}
+
+void fltk3::FileChooser::cb_newButton_i(fltk3::Button*, void*) {
+  newdir();
+}
+void fltk3::FileChooser::cb_newButton(fltk3::Button* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->user_data()))->cb_newButton_i(o,v);
+}
+
+#include <fltk3/Bitmap.h>
+static unsigned char idata_new[] =
+{0,0,120,0,132,0,2,1,1,254,1,128,49,128,49,128,253,128,253,128,49,128,49,
+128,1,128,1,128,255,255,0,0};
+static fltk3::Bitmap image_new(idata_new, 16, 16);
+
+void fltk3::FileChooser::cb__i(fltk3::TiledGroup*, void*) {
+  update_preview();
+}
+void fltk3::FileChooser::cb_(fltk3::TiledGroup* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->user_data()))->cb__i(o,v);
+}
+
+void fltk3::FileChooser::cb_fileList_i(fltk3::FileBrowser*, void*) {
+  fileListCB();
+}
+void fltk3::FileChooser::cb_fileList(fltk3::FileBrowser* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->user_data()))->cb_fileList_i(o,v);
+}
+
+void fltk3::FileChooser::cb_previewButton_i(fltk3::CheckButton*, void*) {
+  preview(previewButton->value());
+}
+void fltk3::FileChooser::cb_previewButton(fltk3::CheckButton* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->parent()->user_data()))->cb_previewButton_i(o,v);
+}
+
+void fltk3::FileChooser::cb_showHiddenButton_i(fltk3::CheckButton*, void*) {
+  showHidden(showHiddenButton->value());
+}
+void fltk3::FileChooser::cb_showHiddenButton(fltk3::CheckButton* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->parent()->user_data()))->cb_showHiddenButton_i(o,v);
+}
+
+void fltk3::FileChooser::cb_fileName_i(fltk3::FileInput*, void*) {
+  fileNameCB();
+}
+void fltk3::FileChooser::cb_fileName(fltk3::FileInput* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->user_data()))->cb_fileName_i(o,v);
+}
+
+void fltk3::FileChooser::cb_okButton_i(fltk3::ReturnButton*, void*) {
+  window->hide();
+
+// Do any callback that is registered...
+if (callback_)
+  (*callback_)(this, data_);
+}
+void fltk3::FileChooser::cb_okButton(fltk3::ReturnButton* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->parent()->user_data()))->cb_okButton_i(o,v);
+}
+
+void fltk3::FileChooser::cb_cancelButton_i(fltk3::Button*, void*) {
+  fileName->value("");
+fileList->deselect();
+fltk3::remove_timeout((fltk3::TimeoutHandler)previewCB, this);
+window->hide();
+}
+void fltk3::FileChooser::cb_cancelButton(fltk3::Button* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->parent()->user_data()))->cb_cancelButton_i(o,v);
+}
+
+void fltk3::FileChooser::cb_favList_i(fltk3::FileBrowser*, void*) {
+  favoritesCB(favList);
+}
+void fltk3::FileChooser::cb_favList(fltk3::FileBrowser* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->user_data()))->cb_favList_i(o,v);
+}
+
+void fltk3::FileChooser::cb_favUpButton_i(fltk3::Button*, void*) {
+  favoritesCB(favUpButton);
+}
+void fltk3::FileChooser::cb_favUpButton(fltk3::Button* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->user_data()))->cb_favUpButton_i(o,v);
+}
+
+void fltk3::FileChooser::cb_favDeleteButton_i(fltk3::Button*, void*) {
+  favoritesCB(favDeleteButton);
+}
+void fltk3::FileChooser::cb_favDeleteButton(fltk3::Button* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->user_data()))->cb_favDeleteButton_i(o,v);
+}
+
+void fltk3::FileChooser::cb_favDownButton_i(fltk3::Button*, void*) {
+  favoritesCB(favDownButton);
+}
+void fltk3::FileChooser::cb_favDownButton(fltk3::Button* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->user_data()))->cb_favDownButton_i(o,v);
+}
+
+void fltk3::FileChooser::cb_favCancelButton_i(fltk3::Button*, void*) {
+  favWindow->hide();
+}
+void fltk3::FileChooser::cb_favCancelButton(fltk3::Button* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->user_data()))->cb_favCancelButton_i(o,v);
+}
+
+void fltk3::FileChooser::cb_favOkButton_i(fltk3::ReturnButton*, void*) {
+  favoritesCB(favOkButton);
+}
+void fltk3::FileChooser::cb_favOkButton(fltk3::ReturnButton* o, void* v) {
+  ((fltk3::FileChooser*)(o->parent()->parent()->user_data()))->cb_favOkButton_i(o,v);
+}
+
+fltk3::FileChooser::FileChooser(const char *d, const char *p, int t, const char *title) {
+  fltk3::Group *prev_current = fltk3::Group::current();
+  { window = new fltk3::DoubleWindow(490, 380, "Choose File");
+    window->callback((fltk3::Callback*)cb_window, (void*)(this));
+    { fltk3::Group* o = new fltk3::Group(10, 10, 470, 25);
+      { showChoice = new fltk3::Choice(65, 10, 215, 25, "Show:");
+        showChoice->down_box(fltk3::BORDER_BOX);
+        showChoice->labelfont(1);
+        showChoice->callback((fltk3::Callback*)cb_showChoice);
+        fltk3::Group::current()->resizable(showChoice);
+        showChoice->label(show_label);
+      } // fltk3::Choice* showChoice
+      { favoritesButton = new fltk3::MenuButton(290, 10, 155, 25, "Favorites");
+        favoritesButton->down_box(fltk3::BORDER_BOX);
+        favoritesButton->callback((fltk3::Callback*)cb_favoritesButton);
+        favoritesButton->align(fltk3::Align(fltk3::ALIGN_LEFT|fltk3::ALIGN_INSIDE));
+        favoritesButton->label(favorites_label);
+      } // fltk3::MenuButton* favoritesButton
+      { fltk3::Button* o = newButton = new fltk3::Button(455, 10, 25, 25);
+        newButton->image(image_new);
+        newButton->labelsize(8);
+        newButton->callback((fltk3::Callback*)cb_newButton);
+        o->tooltip(new_directory_tooltip);
+      } // fltk3::Button* newButton
+      o->end();
+    } // fltk3::Group* o
+    { fltk3::TiledGroup* o = new fltk3::TiledGroup(10, 45, 470, 225);
+      o->callback((fltk3::Callback*)cb_);
+      { fileList = new fltk3::FileBrowser(10, 45, 295, 225);
+        fileList->type(2);
+        fileList->callback((fltk3::Callback*)cb_fileList);
+        fileList->window()->hotspot(fileList);
+      } // fltk3::FileBrowser* fileList
+      { previewBox = new fltk3::Box(305, 45, 175, 225, "?");
+        previewBox->box(fltk3::DOWN_BOX);
+        previewBox->labelsize(100);
+        previewBox->align(fltk3::Align(fltk3::ALIGN_CLIP|fltk3::ALIGN_INSIDE));
+      } // fltk3::Box* previewBox
+      o->end();
+      fltk3::Group::current()->resizable(o);
+    } // fltk3::TiledGroup* o
+    { fltk3::Group* o = new fltk3::Group(10, 275, 470, 95);
+      { fltk3::Group* o = new fltk3::Group(10, 275, 470, 20);
+        { previewButton = new fltk3::CheckButton(10, 275, 73, 20, "Preview");
+          previewButton->shortcut(0x80070);
+          previewButton->down_box(fltk3::DOWN_BOX);
+          previewButton->value(1);
+          previewButton->callback((fltk3::Callback*)cb_previewButton);
+          previewButton->label(preview_label);
+        } // fltk3::CheckButton* previewButton
+        { showHiddenButton = new fltk3::CheckButton(115, 275, 165, 20, "Show hidden files");
+          showHiddenButton->down_box(fltk3::DOWN_BOX);
+          showHiddenButton->callback((fltk3::Callback*)cb_showHiddenButton);
+          showHiddenButton->label(hidden_label);
+        } // fltk3::CheckButton* showHiddenButton
+        { fltk3::Box* o = new fltk3::Box(115, 275, 365, 20);
+          fltk3::Group::current()->resizable(o);
+        } // fltk3::Box* o
+        o->end();
+      } // fltk3::Group* o
+      { fileName = new fltk3::FileInput(115, 300, 365, 35);
+        fileName->labelfont(1);
+        fileName->callback((fltk3::Callback*)cb_fileName);
+        fileName->when(fltk3::WHEN_ENTER_KEY);
+        fltk3::Group::current()->resizable(fileName);
+        fileName->when(fltk3::WHEN_CHANGED | fltk3::WHEN_ENTER_KEY);
+      } // fltk3::FileInput* fileName
+      { fltk3::Box* o = new fltk3::Box(10, 310, 105, 25, "Filename:");
+        o->labelfont(1);
+        o->align(fltk3::Align(fltk3::ALIGN_RIGHT|fltk3::ALIGN_INSIDE));
+        o->label(filename_label);
+      } // fltk3::Box* o
+      { fltk3::Group* o = new fltk3::Group(10, 345, 470, 25);
+        { okButton = new fltk3::ReturnButton(313, 345, 85, 25, "OK");
+          okButton->callback((fltk3::Callback*)cb_okButton);
+          okButton->label(fltk3::ok);
+        } // fltk3::ReturnButton* okButton
+        { fltk3::Button* o = cancelButton = new fltk3::Button(408, 345, 72, 25, "Cancel");
+          cancelButton->callback((fltk3::Callback*)cb_cancelButton);
+          o->label(fltk3::cancel);
+        } // fltk3::Button* cancelButton
+        { fltk3::Box* o = new fltk3::Box(10, 345, 30, 25);
+          fltk3::Group::current()->resizable(o);
+        } // fltk3::Box* o
+        o->end();
+      } // fltk3::Group* o
+      o->end();
+    } // fltk3::Group* o
+    if (title) window->label(title);
+    window->set_modal();
+    window->end();
+  } // fltk3::DoubleWindow* window
+  { favWindow = new fltk3::DoubleWindow(355, 150, "Manage Favorites");
+    favWindow->user_data((void*)(this));
+    { favList = new fltk3::FileBrowser(10, 10, 300, 95);
+      favList->type(2);
+      favList->callback((fltk3::Callback*)cb_favList);
+      fltk3::Group::current()->resizable(favList);
+    } // fltk3::FileBrowser* favList
+    { fltk3::Group* o = new fltk3::Group(320, 10, 25, 95);
+      { favUpButton = new fltk3::Button(320, 10, 25, 25, "@8>");
+        favUpButton->callback((fltk3::Callback*)cb_favUpButton);
+      } // fltk3::Button* favUpButton
+      { favDeleteButton = new fltk3::Button(320, 45, 25, 25, "X");
+        favDeleteButton->labelfont(1);
+        favDeleteButton->callback((fltk3::Callback*)cb_favDeleteButton);
+        fltk3::Group::current()->resizable(favDeleteButton);
+      } // fltk3::Button* favDeleteButton
+      { favDownButton = new fltk3::Button(320, 80, 25, 25, "@2>");
+        favDownButton->callback((fltk3::Callback*)cb_favDownButton);
+      } // fltk3::Button* favDownButton
+      o->end();
+    } // fltk3::Group* o
+    { fltk3::Group* o = new fltk3::Group(10, 113, 335, 29);
+      { favCancelButton = new fltk3::Button(273, 115, 72, 25, "Cancel");
+        favCancelButton->callback((fltk3::Callback*)cb_favCancelButton);
+        favCancelButton->label(fltk3::cancel);
+      } // fltk3::Button* favCancelButton
+      { favOkButton = new fltk3::ReturnButton(181, 115, 79, 25, "Save");
+        favOkButton->callback((fltk3::Callback*)cb_favOkButton);
+        favOkButton->label(save_label);
+      } // fltk3::ReturnButton* favOkButton
+      { fltk3::Box* o = new fltk3::Box(10, 115, 161, 25);
+        fltk3::Group::current()->resizable(o);
+      } // fltk3::Box* o
+      o->end();
+    } // fltk3::Group* o
+    favWindow->label(manage_favorites_label);
+    favWindow->set_modal();
+    favWindow->size_range(181, 150);
+    favWindow->end();
+  } // fltk3::DoubleWindow* favWindow
+  callback_ = 0;
+  data_ = 0;
+  directory_[0] = 0;
+  window->size_range(window->w(), window->h(), fltk3::w(), fltk3::h());
+  type(t);
+  filter(p);
+  update_favorites();
+  value(d);
+  type(t);
+  int e;
+  prefs_.get("preview", e, 1);
+  preview(e);
+  fltk3::Group::current(prev_current);
+  ext_group=(fltk3::Widget*)0;
+}
+
+fltk3::FileChooser::~FileChooser() {
+  fltk3::remove_timeout((fltk3::TimeoutHandler)previewCB, this);
+  if(ext_group)window->remove(ext_group);
+  delete window;
+  delete favWindow;
+}
+
+void fltk3::FileChooser::callback(void (*cb)(fltk3::FileChooser *, void *), void *d ) {
+  callback_ = cb;
+  data_     = d;
+}
+
+void fltk3::FileChooser::color(fltk3::Color c) {
+  fileList->color(c);
+}
+
+fltk3::Color fltk3::FileChooser::color() {
+  return (fileList->color());
+}
+
+char * fltk3::FileChooser::directory() {
+  return directory_;
+}
+
+const char * fltk3::FileChooser::filter() {
+  return (fileList->filter());
+}
+
+int fltk3::FileChooser::filter_value() {
+  return showChoice->value();
+}
+
+void fltk3::FileChooser::filter_value(int f) {
+  showChoice->value(f);
+  showChoiceCB();
+}
+
+void fltk3::FileChooser::hide() {
+  window->hide();
+}
+
+void fltk3::FileChooser::iconsize(uchar s) {
+  fileList->iconsize(s);
+}
+
+uchar fltk3::FileChooser::iconsize() {
+  return (fileList->iconsize());
+}
+
+void fltk3::FileChooser::label(const char *l) {
+  window->label(l);
+}
+
+const char * fltk3::FileChooser::label() {
+  return (window->label());
+}
+
+void fltk3::FileChooser::ok_label(const char *l) {
+  okButton->label(l);
+  int w=0, h=0;
+  okButton->measure_label(w, h);
+  okButton->resize(cancelButton->x() - 50 - w, cancelButton->y(),
+                   w + 40, 25);
+  okButton->parent()->init_sizes();
+}
+
+const char * fltk3::FileChooser::ok_label() {
+  return (okButton->label());
+}
+
+int fltk3::FileChooser::shown() {
+  return window->shown();
+}
+
+void fltk3::FileChooser::textcolor(fltk3::Color c) {
+  fileList->textcolor(c);
+}
+
+fltk3::Color fltk3::FileChooser::textcolor() {
+  return (fileList->textcolor());
+}
+
+void fltk3::FileChooser::textfont(fltk3::Font f) {
+  fileList->textfont(f);
+}
+
+fltk3::Font fltk3::FileChooser::textfont() {
+  return (fileList->textfont());
+}
+
+void fltk3::FileChooser::textsize(fltk3::Fontsize s) {
+  fileList->textsize(s);
+}
+
+fltk3::Fontsize fltk3::FileChooser::textsize() {
+  return (fileList->textsize());
+}
+
+void fltk3::FileChooser::type(int t) {
+  type_ = t;
+  if (t & MULTI)
+    fileList->type(fltk3::MULTI_BROWSER);
+  else
+    fileList->type(fltk3::HOLD_BROWSER);
+  if (t & CREATE)
+    newButton->activate();
+  else
+    newButton->deactivate();
+  if (t & DIRECTORY)
+    fileList->filetype(fltk3::FileBrowser::DIRECTORIES);
+  else
+    fileList->filetype(fltk3::FileBrowser::FILES);
+}
+
+int fltk3::FileChooser::type() {
+  return (type_);
+}
+
+void * fltk3::FileChooser::user_data() const {
+  return (data_);
+}
+
+void fltk3::FileChooser::user_data(void *d) {
+  data_ = d;
+}
+
+int fltk3::FileChooser::visible() {
+  return window->visible();
+}
+
+fltk3::Widget* fltk3::FileChooser::add_extra(fltk3::Widget* gr) {
+  fltk3::Widget* ret=ext_group;
+  if (gr==ext_group) {
+    return ret;
+  }
+  if (ext_group) {
+    int sh=ext_group->h()+4;
+    fltk3::Widget* svres=window->resizable();
+    window->resizable(NULL);
+    window->size(window->w(),window->h()-sh);
+    window->remove(ext_group);
+    ext_group=NULL;
+    window->resizable(svres);
+  }
+  if (gr) {
+    int nh=window->h()+gr->h()+4;
+    fltk3::Widget* svres=window->resizable();
+    window->resizable(NULL);
+    window->size(window->w(),nh);
+    gr->position(2,okButton->y()+okButton->h()+2);
+    window->add(gr);
+    ext_group=gr;
+    window->resizable(svres);
+  }
+  return ret;
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/FileChooser.fl (from rev 9002, branches/branch-3.0/src/core/Fl_File_Chooser.fl)
===================================================================
--- branches/branch-3.0/src/fltk3/FileChooser.fl	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/FileChooser.fl	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,470 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0300 
+header_name {../FL/Fl_File_Chooser.H} 
+code_name {.cxx}
+comment {//
+// "$Id$"
+//
+// Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 by Bill Spitzak and others.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file.  If this
+// file is missing or damaged, see the license at:
+//
+//     http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+} {in_source in_header
+} 
+
+decl {\#include <FL/fl_draw.H>} {} 
+
+class FL_EXPORT Fl_File_Chooser {open
+} {
+  decl {enum { SINGLE = 0, MULTI = 1, CREATE = 2, DIRECTORY = 4 };} {public
+  }
+  decl {static Fl_Preferences prefs_;} {}
+  decl {void (*callback_)(Fl_File_Chooser*, void *);} {}
+  decl {void *data_;} {}
+  decl {char directory_[FL_PATH_MAX];} {}
+  decl {char pattern_[FL_PATH_MAX];} {}
+  decl {char preview_text_[2048];} {}
+  decl {int type_;} {}
+  decl {void favoritesButtonCB();} {}
+  decl {void favoritesCB(Fl_Widget *w);} {}
+  decl {void fileListCB();} {}
+  decl {void fileNameCB();} {}
+  decl {void newdir();} {}
+  decl {static void previewCB(Fl_File_Chooser *fc);} {}
+  decl {void showChoiceCB();} {}
+  decl {void update_favorites();} {}
+  decl {void update_preview();} {}
+  Function {Fl_File_Chooser(const char *d, const char *p, int t, const char *title)} {} {
+    code {Fl_Group *prev_current = Fl_Group::current();} {}
+    Fl_Window window {
+      label {Choose File}
+      callback {fileName->value("");
+fileList->deselect();
+Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
+window->hide();} open
+      private xywh {507 327 490 380} type Double resizable
+      code0 {if (title) window->label(title);}
+      code1 {\#include <stdio.h>}
+      code2 {\#include <stdlib.h>}
+      code3 {\#include <string.h>} modal visible
+    } {
+      Fl_Group {} {open
+        private xywh {10 10 470 25}
+      } {
+        Fl_Choice showChoice {
+          label {Show:}
+          callback {showChoiceCB();} open
+          private xywh {65 10 215 25} down_box BORDER_BOX labelfont 1 resizable
+          code0 {showChoice->label(show_label);}
+        } {}
+        Fl_Menu_Button favoritesButton {
+          label Favorites
+          callback {favoritesButtonCB();} open
+          private xywh {290 10 155 25} down_box BORDER_BOX align 20
+          code0 {favoritesButton->label(favorites_label);}
+        } {}
+        Fl_Button newButton {
+          callback {newdir();}
+          image {new.xbm} xywh {455 10 25 25} labelsize 8
+          code0 {\#include <FL/Fl_Preferences.H>}
+          code1 {o->tooltip(new_directory_tooltip);}
+        }
+      }
+      Fl_Tile {} {
+        callback {update_preview();}
+        private xywh {10 45 470 225} resizable
+      } {
+        Fl_File_Browser fileList {
+          callback {fileListCB();}
+          private xywh {10 45 295 225} type Hold hotspot
+          code0 {\#include <FL/Fl_File_Browser.H>}
+        }
+        Fl_Box previewBox {
+          label {?}
+          private xywh {305 45 175 225} box DOWN_BOX labelsize 100 align 80
+        }
+      }
+      Fl_Group {} {open
+        private xywh {10 275 470 95}
+      } {
+        Fl_Group {} {open
+          private xywh {10 275 470 20}
+        } {
+          Fl_Check_Button previewButton {
+            label Preview
+            callback {preview(previewButton->value());}
+            xywh {10 275 73 20} down_box DOWN_BOX shortcut 0x80070 value 1
+            code0 {previewButton->label(preview_label);}
+          }
+          Fl_Check_Button showHiddenButton {
+            label {Show hidden files}
+            callback {showHidden(showHiddenButton->value());}
+            xywh {115 275 165 20} down_box DOWN_BOX
+            code0 {showHiddenButton->label(hidden_label);}
+          }
+          Fl_Box {} {
+            private xywh {115 275 365 20} resizable
+          }
+        }
+        Fl_File_Input fileName {
+          callback {fileNameCB();}
+          private xywh {115 300 365 35} labelfont 1 when 8 resizable
+          code0 {fileName->when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY);}
+        }
+        Fl_Box {} {
+          label {Filename:}
+          private xywh {10 310 105 25} labelfont 1 align 24
+          code0 {o->label(filename_label);}
+        }
+        Fl_Group {} {open
+          private xywh {10 345 470 25}
+        } {
+          Fl_Return_Button okButton {
+            label OK
+            callback {window->hide();
+
+// Do any callback that is registered...
+if (callback_)
+  (*callback_)(this, data_);}
+            private xywh {313 345 85 25}
+            code0 {\#include <FL/fl_ask.H>}
+            code1 {okButton->label(fl_ok);}
+          }
+          Fl_Button cancelButton {
+            label Cancel
+            callback {fileName->value("");
+fileList->deselect();
+Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
+window->hide();}
+            private xywh {408 345 72 25}
+            code0 {o->label(fl_cancel);}
+          }
+          Fl_Box {} {
+            private xywh {10 345 30 25} resizable
+          }
+        }
+      }
+    }
+    Fl_Window favWindow {
+      label {Manage Favorites}
+      private xywh {413 100 355 150} type Double resizable
+      code0 {favWindow->label(manage_favorites_label);} modal size_range {181 150 0 0} visible
+    } {
+      Fl_File_Browser favList {
+        callback {favoritesCB(favList);}
+        private xywh {10 10 300 95} type Hold resizable
+      }
+      Fl_Group {} {open
+        xywh {320 10 25 95}
+      } {
+        Fl_Button favUpButton {
+          label {@8>}
+          callback {favoritesCB(favUpButton);}
+          private xywh {320 10 25 25}
+        }
+        Fl_Button favDeleteButton {
+          label X
+          callback {favoritesCB(favDeleteButton);}
+          private xywh {320 45 25 25} labelfont 1 resizable
+        }
+        Fl_Button favDownButton {
+          label {@2>}
+          callback {favoritesCB(favDownButton);}
+          private xywh {320 80 25 25}
+        }
+      }
+      Fl_Group {} {open
+        xywh {10 113 335 29}
+      } {
+        Fl_Button favCancelButton {
+          label Cancel
+          callback {favWindow->hide();}
+          private xywh {273 115 72 25}
+          code0 {favCancelButton->label(fl_cancel);}
+        }
+        Fl_Return_Button favOkButton {
+          label Save
+          callback {favoritesCB(favOkButton);}
+          private xywh {181 115 79 25}
+          code0 {\#include <FL/fl_ask.H>}
+          code1 {favOkButton->label(save_label);}
+        }
+        Fl_Box {} {
+          xywh {10 115 161 25} resizable
+        }
+      }
+    }
+    code {callback_ = 0;
+data_ = 0;
+directory_[0] = 0;
+window->size_range(window->w(), window->h(), Fl::w(), Fl::h());
+type(t);
+filter(p);
+update_favorites();
+value(d);
+type(t);
+int e;
+prefs_.get("preview", e, 1);
+preview(e);
+Fl_Group::current(prev_current);} {}
+    code {ext_group=(Fl_Widget*)0;} {}
+  }
+  Function {~Fl_File_Chooser()} {open
+  } {
+    code {Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
+if(ext_group)window->remove(ext_group);
+delete window;
+delete favWindow;} {}
+  }
+  Function {callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0)} {return_type void
+  } {
+    code {callback_ = cb;
+data_     = d;} {}
+  }
+  Function {color(Fl_Color c)} {} {
+    code {fileList->color(c);} {}
+  }
+  Function {color()} {return_type Fl_Color
+  } {
+    code {return (fileList->color());} {}
+  }
+  decl {int count();} {public
+  }
+  decl {void directory(const char *d);} {public
+  }
+  Function {directory()} {return_type {char *}
+  } {
+    code {return directory_;} {}
+  }
+  decl {void filter(const char *p);} {public
+  }
+  Function {filter()} {return_type {const char *}
+  } {
+    code {return (fileList->filter());} {}
+  }
+  Function {filter_value()} {return_type int
+  } {
+    code {return showChoice->value();} {}
+  }
+  Function {filter_value(int f)} {return_type void
+  } {
+    code {showChoice->value(f);
+showChoiceCB();} {}
+  }
+  Function {hide()} {return_type void
+  } {
+    code {window->hide();} {}
+  }
+  Function {iconsize(uchar s)} {return_type void
+  } {
+    code {fileList->iconsize(s);} {}
+  }
+  Function {iconsize()} {return_type uchar
+  } {
+    code {return (fileList->iconsize());} {}
+  }
+  Function {label(const char *l)} {return_type void
+  } {
+    code {window->label(l);} {}
+  }
+  Function {label()} {return_type {const char *}
+  } {
+    code {return (window->label());} {}
+  }
+  Function {ok_label(const char *l)} {return_type void
+  } {
+    code {okButton->label(l);
+int w=0, h=0;
+okButton->measure_label(w, h);
+okButton->resize(cancelButton->x() - 50 - w, cancelButton->y(),
+                 w + 40, 25);
+okButton->parent()->init_sizes();} {}
+  }
+  Function {ok_label()} {return_type {const char *}
+  } {
+    code {return (okButton->label());} {}
+  }
+  decl {void preview(int e);} {public
+  }
+  decl {int preview() const { return previewButton->value(); }} {public
+  }
+  decl {void showHidden(int e);} {private
+  }
+  decl {void remove_hidden_files();} {private
+  }
+  decl {void rescan();} {public
+  }
+  decl {void rescan_keep_filename();} {public
+  }
+  decl {void show();} {public
+  }
+  Function {shown()} {return_type int
+  } {
+    code {return window->shown();} {}
+  }
+  Function {textcolor(Fl_Color c)} {return_type void
+  } {
+    code {fileList->textcolor(c);} {}
+  }
+  Function {textcolor()} {return_type Fl_Color
+  } {
+    code {return (fileList->textcolor());} {}
+  }
+  Function {textfont(Fl_Font f)} {return_type void
+  } {
+    code {fileList->textfont(f);} {}
+  }
+  Function {textfont()} {selected return_type Fl_Font
+  } {
+    code {return (fileList->textfont());} {}
+  }
+  Function {textsize(Fl_Fontsize s)} {return_type void
+  } {
+    code {fileList->textsize(s);} {}
+  }
+  Function {textsize()} {return_type Fl_Fontsize
+  } {
+    code {return (fileList->textsize());} {}
+  }
+  Function {type(int t)} {return_type void
+  } {
+    code {type_ = t;
+if (t & MULTI)
+  fileList->type(FL_MULTI_BROWSER);
+else
+  fileList->type(FL_HOLD_BROWSER);
+if (t & CREATE)
+  newButton->activate();
+else
+  newButton->deactivate();
+if (t & DIRECTORY)
+  fileList->filetype(Fl_File_Browser::DIRECTORIES);
+else
+  fileList->filetype(Fl_File_Browser::FILES);} {}
+  }
+  Function {type()} {return_type int
+  } {
+    code {return (type_);} {}
+  }
+  Function {user_data() const} {return_type {void *}
+  } {
+    code {return (data_);} {}
+  }
+  Function {user_data(void *d)} {return_type void
+  } {
+    code {data_ = d;} {}
+  }
+  decl {const char *value(int f = 1);} {public
+  }
+  decl {void value(const char *filename);} {public
+  }
+  Function {visible()} {return_type int
+  } {
+    code {return window->visible();} {}
+  }
+  decl {static const char *add_favorites_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *all_files_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *custom_filter_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *existing_file_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *favorites_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *filename_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *filesystems_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *manage_favorites_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *new_directory_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *new_directory_tooltip;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *preview_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *save_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *show_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static const char *hidden_label;} {
+    comment {[standard text may be customized at run-time]} public
+  }
+  decl {static Fl_File_Sort_F *sort;} {
+    comment {the sort function that is used when loading
+the contents of a directory.} public
+  }
+  decl {Fl_Widget* ext_group;} {}
+  Function {add_extra(Fl_Widget* gr)} {open return_type {Fl_Widget*}
+  } {
+    code {Fl_Widget* ret=ext_group;} {}
+    codeblock {if (gr==ext_group)} {open
+    } {
+      code {return ret;} {}
+    }
+    codeblock {if (ext_group)} {open
+    } {
+      code {int sh=ext_group->h()+4;
+Fl_Widget* svres=window->resizable();
+window->resizable(NULL);
+window->size(window->w(),window->h()-sh);
+window->remove(ext_group);
+ext_group=NULL;
+window->resizable(svres);} {}
+    }
+    codeblock {if (gr)} {open
+    } {
+      code {int nh=window->h()+gr->h()+4;
+Fl_Widget* svres=window->resizable();
+window->resizable(NULL);
+window->size(window->w(),nh);
+gr->position(2,okButton->y()+okButton->h()+2);
+window->add(gr);
+ext_group=gr;
+window->resizable(svres);} {}
+    }
+    code {return ret;} {}
+  }
+} 
+
+decl {FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname,int relative=0);} {public
+} 
+
+decl {FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname,int relative=0);} {public
+} 
+
+decl {FL_EXPORT void fl_file_chooser_callback(void (*cb)(const char*));} {public
+} 
+
+decl {FL_EXPORT void fl_file_chooser_ok_label(const char*l);} {public
+} 
+
+comment {
+//
+// End of "$Id$".
+//} {in_source in_header
+} 

Copied: branches/branch-3.0/src/fltk3/FileChooser2.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_File_Chooser2.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/FileChooser2.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/FileChooser2.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,1695 @@
+//
+// "$Id$"
+//
+// More fltk3::FileChooser routines.
+//
+// Copyright 1999-2011 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
+//
+
+// fabien: ATTENTION: Only Out Of Source Gen. because cxx/H files are autogenerated by fluid.
+/** \defgroup group_comdlg Common Dialogs classes and functions
+    @{
+*/
+/** \class fltk3::FileChooser
+  The fltk3::FileChooser widget displays a standard file selection
+  dialog that supports various selection modes.
+  
+  \image html fltk3::FileChooser.jpg 
+  \image latex  fltk3::FileChooser.jpg "fltk3::FileChooser" width=12cm
+  
+  The fltk3::FileChooser class also exports several static values
+  that may be used to localize or customize the appearance of all file chooser
+  dialogs:
+  
+  <CENTER><TABLE BORDER="1">
+  <TR>
+  	<TH>Member</TH>
+  	<TH>Default value</TH>
+  </TR>
+  <TR>
+  	<TD>add_favorites_label</TD>
+  	<TD>"Add to Favorites"</TD>
+  </TR>
+  <TR>
+  	<TD>all_files_label</TD>
+  	<TD>"All Files (*)"</TD>
+  </TR>
+  <TR>
+  	<TD>custom_filter_label</TD>
+  	<TD>"Custom Filter"</TD>
+  </TR>
+  <TR>
+  	<TD>existing_file_label</TD>
+  	<TD>"Please choose an existing file!"</TD>
+  </TR>
+  <TR>
+  	<TD>favorites_label</TD>
+  	<TD>"Favorites"</TD>
+  </TR>
+  <TR>
+  	<TD>filename_label</TD>
+  	<TD>"Filename:"</TD>
+  </TR>
+  <TR>
+  	<TD>filesystems_label</TD>
+  	<TD>"My Computer" (WIN32)<BR>
+  	"File Systems" (all others)</TD>
+  </TR>
+ <TR>
+	<TD>hidden_label</TD>
+	<TD>"Show hidden files:"</TD>
+ </TR>
+ <TR>
+  	<TD>manage_favorites_label</TD>
+  	<TD>"Manage Favorites"</TD>
+  </TR>
+  <TR>
+  	<TD>new_directory_label</TD>
+  	<TD>"New Directory?"</TD>
+  </TR>
+  <TR>
+  	<TD>new_directory_tooltip</TD>
+  	<TD>"Create a new directory."</TD>
+  </TR>
+  <TR>
+  	<TD>preview_label</TD>
+  	<TD>"Preview"</TD>
+  </TR>
+  <TR>
+  	<TD>save_label</TD>
+  	<TD>"Save"</TD>
+  </TR>
+  <TR>
+  	<TD>show_label</TD>
+  	<TD>"Show:"</TD>
+  </TR>
+ <TR>
+  	<TD>sort</TD>
+  	<TD>fltk3::numericsort</TD>
+  </TR>
+  </TABLE></CENTER>
+
+  The fltk3::FileChooser::sort member specifies the sort function that is
+  used when loading the contents of a directory and can be customized
+  at run-time.
+
+  The fltk3::FileChooser class also exports the fltk3::FileChooser::newButton
+  and fltk3::FileChooser::previewButton widgets so that application developers
+  can control their appearance and use.  For more complex customization,
+  consider copying the FLTK file chooser code and changing it accordingly.
+*/
+/** @} */
+
+/** \fn fltk3::FileChooser::fltk3::FileChooser(const char *pathname, const char *pattern, int type, const char *title)
+  The constructor creates the fltk3::FileChooser dialog shown.
+  The pathname argument can be a directory name or a
+  complete file name (in which case the corresponding file is highlighted
+  in the list and in the filename input field.)
+  
+  The pattern argument can be a NULL
+  string or "*" to list all files, or it can be a
+  series of descriptions and filter strings separated by tab
+  characters (\\t). The format of filters is either
+  "Description text (patterns)" or just "patterns". A file chooser
+  that provides filters for HTML and image files might look like:
+  
+  \code
+  "HTML Files (*.html)\tImage Files (*.{bmp,gif,jpg,png})"
+  \endcode
+  
+  The file chooser will automatically add the "All Files (*)"
+  pattern to the end of the string you pass if you do not provide
+  one. The first filter in the string is the default filter.
+  
+  See the FLTK documentation on fltk3::filename_match()
+  for the kinds of pattern strings that are supported.
+  
+  The type argument can be one of the following:
+  
+  \li \c SINGLE - allows the user to select a single, existing file.
+  \li \c MULTI - allows the user to select one or more existing files.
+  \li \c CREATE - allows the user to select a single, existing file or
+         specify a new filename.
+  \li \c DIRECTORY - allows the user to select a single, existing directory.
+  
+  The title argument is used to set the title bar text for the
+  fltk3::FileChooser window.
+*/
+
+/** \var fltk3::FileChooser::newButton
+  The "new directory" button is exported so that application developers
+  can control the appearance and use.
+*/
+
+/** \var fltk3::FileChooser::previewButton
+  The "preview" button is exported so that application developers can
+  control the appearance and use.
+*/
+
+/** \fn fltk3::FileChooser::~Fl_File_Chooser()
+  Destroys the widget and frees all memory used by it.*/
+
+/** \fn void fltk3::FileChooser::color(fltk3::Color c)
+  Sets the background color of the fltk3::FileBrowser list.*/
+
+/** \fn fltk3::Color fltk3::FileChooser::color()
+  Gets the background color of the fltk3::FileBrowser list.*/
+
+/** \fn int fltk3::FileChooser::count()
+  Returns the number of selected files.*/
+
+/** \fn void fltk3::FileChooser::directory(const char *pathname)
+  Sets the current directory.*/
+
+/** \fn const char *fltk3::FileChooser::directory()
+  Gets the current directory.*/
+
+/** \fn void fltk3::FileChooser::filter(const char *pattern)
+  Sets or gets the current filename filter patterns. The filter
+  patterns use fltk3::filename_match().
+  Multiple patterns can be used by separating them with tabs, like
+  <tt>"*.jpg\t*.png\t*.gif\t*"</tt>. In addition, you can provide
+  human-readable labels with the patterns inside parenthesis, like
+  <tt>"JPEG Files (*.jpg)\tPNG Files (*.png)\tGIF Files (*.gif)\tAll Files (*)"
+  </tt>.
+
+  Use filter(NULL) to show all files.
+*/
+
+/** \fn const char *fltk3::FileChooser::filter()
+  See void filter(const char *pattern)*/
+
+/** \fn void fltk3::FileChooser::filter_value(int f)
+  Sets the current filename filter selection.*/
+
+/** \fn int fltk3::FileChooser::filter_value()
+  Gets the current filename filter selection.*/
+
+/** \fn void fltk3::FileChooser::hide()
+  Hides the fltk3::FileChooser window.*/
+
+/** \fn void fltk3::FileChooser::iconsize(uchar s)
+  Sets the size of the icons in the fltk3::FileBrowser.  By
+  default the icon size is set to 1.5 times the textsize().
+*/
+
+/** \fn uchar fltk3::FileChooser::iconsize()
+  Gets the size of the icons in the fltk3::FileBrowser.  By
+  default the icon size is set to 1.5 times the textsize().
+*/
+
+/** \fn void fltk3::FileChooser::label(const char *l)
+  Sets the title bar text for the fltk3::FileChooser.*/
+
+/** \fn const char *fltk3::FileChooser::label()
+  Gets the title bar text for the fltk3::FileChooser.*/
+
+/** \fn void fltk3::FileChooser::ok_label(const char *l)
+  Sets the label for the "ok" button in the fltk3::FileChooser.
+*/
+
+/** \fn const char *fltk3::FileChooser::ok_label()
+  Gets the label for the "ok" button in the fltk3::FileChooser.
+*/
+
+/** \fn int fltk3::FileChooser::preview() const
+   Returns the current state of the preview box. */
+
+/** \fn void fltk3::FileChooser::rescan()
+  Reloads the current directory in the fltk3::FileBrowser.*/
+
+/** \fn void fltk3::FileChooser::show()
+  Shows the fltk3::FileChooser window.*/
+
+/** \fn void fltk3::FileChooser::textcolor(fltk3::Color c)
+  Sets the current fltk3::FileBrowser text color.*/
+
+/** \fn fltk3::Color fltk3::FileChooser::textcolor()
+  Gets the current fltk3::FileBrowser text color.*/
+
+/** \fn void fltk3::FileChooser::textfont(fltk3::Font f)
+  Sets the current fltk3::FileBrowser text font.*/
+
+/** \fn fltk3::Font fltk3::FileChooser::textfont()
+  Gets the current fltk3::FileBrowser text font.*/
+
+/** \fn void fltk3::FileChooser::textsize(fltk3::Fontsize s)
+  Sets the current fltk3::FileBrowser text size.*/
+
+/** \fn fltk3::Fontsize fltk3::FileChooser::textsize()
+  Gets the current fltk3::FileBrowser text size.*/
+
+/** \fn void fltk3::FileChooser::type(int t)
+  Sets the current type of fltk3::FileChooser.*/
+
+/** \fn int fltk3::FileChooser::type()
+  Gets the current type of fltk3::FileChooser.*/
+
+/** \fn void fltk3::FileChooser::value(const char *pathname)
+  Sets the current value of the selected file.
+*/
+
+/** \fn const char *fltk3::FileChooser::value(int f)
+ Gets the current value of the selected file(s).
+ \p f is a \c 1-based index into a list of
+ file names. The number of selected files is returned by
+ fltk3::FileChooser::count().
+ 
+ This sample code loops through all selected files:
+ \code
+ // Get list of filenames user selected from a MULTI chooser
+ for ( int t=1; t<=chooser->count(); t++ ) {
+ const char *filename = chooser->value(t);
+ ...
+ }
+ \endcode
+ */
+
+/** \fn int fltk3::FileChooser::visible()
+  Returns 1 if the fltk3::FileChooser window is visible.*/
+
+/** \fn fltk3::Widget* fltk3::FileChooser::add_extra(fltk3::Widget*)
+  Adds extra widget at the bottom of fltk3::FileChooser window.
+  Returns pointer for previous extra widget or NULL if not set previously.
+  If argument is NULL only remove previous extra widget.
+
+  \note fltk3::FileChooser does \b not delete extra widget in destructor!
+     To prevent memory leakage, don't forget to delete unused extra widgets
+*/
+  /** \fn int fltk3::FileChooser::shown()
+    Returns non-zero if the file chooser main window show() has been called (but not hide()
+    see fltk3::Window::shown()
+  */
+
+  /** \fn void fltk3::FileChooser::callback(void (*cb)(fltk3::FileChooser *, void *), void *d = 0)
+    Sets the file chooser callback cb and associated data d */
+
+  /** \fn void fltk3::FileChooser::user_data(void *d)
+    Sets the file chooser user data d */
+
+  /** \fn void * fltk3::FileChooser::user_data() const
+    Gets the file chooser user data d */
+
+// *** END OF OUT OF SOURCE DOC ***
+
+// Contents:
+//
+//   fltk3::FileChooser::count()             - Return the number of selected files.
+//   fltk3::FileChooser::directory()         - Set the directory in the file chooser.
+//   fltk3::FileChooser::filter()            - Set the filter(s) for the chooser.
+//   fltk3::FileChooser::newdir()            - Make a new directory.
+//   fltk3::FileChooser::value()             - Return a selected filename.
+//   fltk3::FileChooser::rescan()            - Rescan the current directory.
+//   fltk3::FileChooser::favoritesButtonCB() - Handle favorites selections.
+//   fltk3::FileChooser::fileListCB()        - Handle clicks (and double-clicks)
+//                                          in the fltk3::FileBrowser.
+//   fltk3::FileChooser::fileNameCB()        - Handle text entry in the FileBrowser.
+//   fltk3::FileChooser::showChoiceCB()      - Handle show selections.
+//   compare_dirnames()                   - Compare two directory names.
+//   quote_pathname()                     - Quote a pathname for a menu.
+//   unquote_pathname()                   - Unquote a pathname from a menu.
+//
+//   fltk3::FileChooser::add_extra()         - add extra widget at the bottom, return pointer 
+//                                          to previous extra widget or NULL if none,
+//                                          If argument is NULL extra widget removed.
+//                                          NOTE! file chooser does't delete extra widget in 
+//                                          destructor! To prevent memory leakage don't forget
+//					    delete unused extra widgets by yourself.
+//
+
+//
+// Include necessary headers.
+//
+
+#include <fltk3/FileChooser.h>
+#include <fltk3/filename.h>
+#include <fltk3/ask.h>
+#include <fltk3/x.h>
+#include <fltk3/SharedImage.h>
+#include <fltk3/draw.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "flstring.h"
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined(WIN32) && ! defined (__CYGWIN__)
+#  include <direct.h>
+#  include <io.h>
+// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
+// on Windows, which is supposed to be POSIX compliant...
+#  define access _access
+#  define mkdir _mkdir
+// Apparently Borland C++ defines DIRECTORY in <direct.h>, which
+// interfers with the fltk3::FileIcon enumeration of the same name.
+#  ifdef DIRECTORY
+#    undef DIRECTORY
+#  endif // DIRECTORY
+#else
+#  include <unistd.h>
+#  include <pwd.h>
+#endif /* WIN32 */
+
+
+//
+// File chooser label strings and sort function...
+//
+
+fltk3::Preferences	fltk3::FileChooser::prefs_(fltk3::Preferences::USER, "fltk.org", "filechooser");
+
+const char	*fltk3::FileChooser::add_favorites_label = "Add to Favorites";
+const char	*fltk3::FileChooser::all_files_label = "All Files (*)";
+const char	*fltk3::FileChooser::custom_filter_label = "Custom Filter";
+const char	*fltk3::FileChooser::existing_file_label = "Please choose an existing file!";
+const char	*fltk3::FileChooser::favorites_label = "Favorites";
+const char	*fltk3::FileChooser::filename_label = "Filename:";
+#ifdef WIN32
+const char	*fltk3::FileChooser::filesystems_label = "My Computer";
+#else
+const char	*fltk3::FileChooser::filesystems_label = "File Systems";
+#endif // WIN32
+const char	*fltk3::FileChooser::manage_favorites_label = "Manage Favorites";
+const char	*fltk3::FileChooser::new_directory_label = "New Directory?";
+const char	*fltk3::FileChooser::new_directory_tooltip = "Create a new directory.";
+const char	*fltk3::FileChooser::preview_label = "Preview";
+const char	*fltk3::FileChooser::save_label = "Save";
+const char	*fltk3::FileChooser::show_label = "Show:";
+const char      *fltk3::FileChooser::hidden_label = "Show hidden files";
+fltk3::FileSortF	*fltk3::FileChooser::sort = fltk3::numericsort;
+
+
+//
+// Local functions...
+//
+
+static int	compare_dirnames(const char *a, const char *b);
+static void	quote_pathname(char *, const char *, int);
+static void	unquote_pathname(char *, const char *, int);
+
+
+//
+// 'fltk3::FileChooser::count()' - Return the number of selected files.
+//
+
+int				// O - Number of selected files
+fltk3::FileChooser::count() {
+  int		i;		// Looping var
+  int		fcount;		// Number of selected files
+  const char	*filename;	// Filename in input field or list
+
+
+  filename = fileName->value();
+
+  if (!(type_ & MULTI)) {
+    // Check to see if the file name input field is blank...
+    if (!filename || !filename[0]) return 0;
+    else return 1;
+  }
+
+  for (i = 1, fcount = 0; i <= fileList->size(); i ++)
+    if (fileList->selected(i)) {
+      // See if this file is a directory...
+      // matt: why would we do that? It is perfectly legal to select multiple
+      // directories in a DIR chooser. They are visually selected and value(i)
+      // returns all of them as expected
+      //filename = (char *)fileList->text(i);
+
+      //if (filename[strlen(filename) - 1] != '/')
+	fcount ++;
+    }
+
+  if (fcount) return fcount;
+  else if (!filename || !filename[0]) return 0;
+  else return 1;
+}
+
+
+//
+// 'fltk3::FileChooser::directory()' - Set the directory in the file chooser.
+//
+
+void
+fltk3::FileChooser::directory(const char *d)// I - Directory to change to
+{
+  char	*dirptr;			// Pointer into directory
+
+
+//  printf("fltk3::FileChooser::directory(\"%s\")\n", d == NULL ? "(null)" : d);
+
+  // NULL == current directory
+  if (d == NULL)
+    d = ".";
+
+#ifdef WIN32
+  // See if the filename contains backslashes...
+  char	*slash;				// Pointer to slashes
+  char	fixpath[FLTK3_PATH_MAX];			// Path with slashes converted
+  if (strchr(d, '\\')) {
+    // Convert backslashes to slashes...
+    strlcpy(fixpath, d, sizeof(fixpath));
+
+    for (slash = strchr(fixpath, '\\'); slash; slash = strchr(slash + 1, '\\'))
+      *slash = '/';
+
+    d = fixpath;
+  }
+#endif // WIN32
+
+  if (d[0] != '\0')
+  {
+    // Make the directory absolute...
+#if (defined(WIN32) && ! defined(__CYGWIN__))|| defined(__EMX__)
+    if (d[0] != '/' && d[0] != '\\' && d[1] != ':')
+#else
+    if (d[0] != '/' && d[0] != '\\')
+#endif /* WIN32 || __EMX__ */
+      fltk3::filename_absolute(directory_, d);
+    else
+      strlcpy(directory_, d, sizeof(directory_));
+
+    // Strip any trailing slash...
+    dirptr = directory_ + strlen(directory_) - 1;
+    if ((*dirptr == '/' || *dirptr == '\\') && dirptr > directory_)
+      *dirptr = '\0';
+
+    // See if we have a trailing .. or . in the filename...
+    dirptr = directory_ + strlen(directory_) - 3;
+    if (dirptr >= directory_ && strcmp(dirptr, "/..") == 0) {
+      // Yes, we have "..", so strip the trailing path...
+      *dirptr = '\0';
+      while (dirptr > directory_) {
+        if (*dirptr == '/') break;
+	dirptr --;
+      }
+
+      if (dirptr >= directory_ && *dirptr == '/')
+        *dirptr = '\0';
+    } else if ((dirptr + 1) >= directory_ && strcmp(dirptr + 1, "/.") == 0) {
+      // Strip trailing "."...
+      dirptr[1] = '\0';
+    }
+  }
+  else
+    directory_[0] = '\0';
+
+  if (shown()) {
+    // Rescan the directory...
+    rescan();
+  }
+}
+
+
+//
+// 'fltk3::FileChooser::favoritesButtonCB()' - Handle favorites selections.
+//
+
+void
+fltk3::FileChooser::favoritesButtonCB()
+{
+  int		v;			// Current selection
+  char		pathname[FLTK3_PATH_MAX],		// Pathname
+		menuname[FLTK3_PATH_MAX];		// Menu name
+
+
+  v = favoritesButton->value();
+
+  if (!v) {
+    // Add current directory to favorites...
+    if (getenv("HOME")) v = favoritesButton->size() - 5;
+    else v = favoritesButton->size() - 4;
+
+    sprintf(menuname, "favorite%02d", v);
+
+    prefs_.set(menuname, directory_);
+    prefs_.flush();
+
+    quote_pathname(menuname, directory_, sizeof(menuname));
+    favoritesButton->add(menuname);
+
+    if (favoritesButton->size() > 104) {
+      ((fltk3::MenuItem *)favoritesButton->menu())[0].deactivate();
+    }
+  } else if (v == 1) {
+    // Manage favorites...
+    favoritesCB(0);
+  } else if (v == 2) {
+    // Filesystems/My Computer
+    directory("");
+  } else {
+    unquote_pathname(pathname, favoritesButton->text(v), sizeof(pathname));
+    directory(pathname);
+  }
+}
+
+
+//
+// 'fltk3::FileChooser::favoritesCB()' - Handle favorites dialog.
+//
+
+void
+fltk3::FileChooser::favoritesCB(fltk3::Widget *w)
+					// I - Widget
+{
+  int		i;			// Looping var
+  char		name[32],		// Preference name
+		pathname[1024];		// Directory in list
+
+
+  if (!w) {
+    // Load the favorites list...
+    favList->clear();
+    favList->deselect();
+
+    for (i = 0; i < 100; i ++) {
+      // Get favorite directory 0 to 99...
+      sprintf(name, "favorite%02d", i);
+
+      prefs_.get(name, pathname, "", sizeof(pathname));
+
+      // Stop on the first empty favorite...
+      if (!pathname[0]) break;
+
+      // Add the favorite to the list...
+      favList->add(pathname,
+                   fltk3::FileIcon::find(pathname, fltk3::FileIcon::DIRECTORY));
+    }
+
+    favUpButton->deactivate();
+    favDeleteButton->deactivate();
+    favDownButton->deactivate();
+    favOkButton->deactivate();
+
+    favWindow->hotspot(favList);
+    favWindow->show();
+  } else if (w == favList) {
+    i = favList->value();
+    if (i) {
+      if (i > 1) favUpButton->activate();
+      else favUpButton->deactivate();
+
+      favDeleteButton->activate();
+
+      if (i < favList->size()) favDownButton->activate();
+      else favDownButton->deactivate();
+    } else {
+      favUpButton->deactivate();
+      favDeleteButton->deactivate();
+      favDownButton->deactivate();
+    }
+  } else if (w == favUpButton) {
+    i = favList->value();
+
+    favList->insert(i - 1, favList->text(i), favList->data(i));
+    favList->remove(i + 1);
+    favList->select(i - 1);
+
+    if (i == 2) favUpButton->deactivate();
+
+    favDownButton->activate();
+
+    favOkButton->activate();
+  } else if (w == favDeleteButton) {
+    i = favList->value();
+
+    favList->remove(i);
+
+    if (i > favList->size()) i --;
+    favList->select(i);
+
+    if (i < favList->size()) favDownButton->activate();
+    else favDownButton->deactivate();
+
+    if (i > 1) favUpButton->activate();
+    else favUpButton->deactivate();
+
+    if (!i) favDeleteButton->deactivate();
+
+    favOkButton->activate();
+  } else if (w == favDownButton) {
+    i = favList->value();
+
+    favList->insert(i + 2, favList->text(i), favList->data(i));
+    favList->remove(i);
+    favList->select(i + 1);
+
+    if ((i + 1) == favList->size()) favDownButton->deactivate();
+
+    favUpButton->activate();
+
+    favOkButton->activate();
+  } else if (w == favOkButton) {
+    // Copy the new list over...
+    for (i = 0; i < favList->size(); i ++) {
+      // Set favorite directory 0 to 99...
+      sprintf(name, "favorite%02d", i);
+
+      prefs_.set(name, favList->text(i + 1));
+    }
+
+    // Clear old entries as necessary...
+    for (; i < 100; i ++) {
+      // Clear favorite directory 0 to 99...
+      sprintf(name, "favorite%02d", i);
+
+      prefs_.get(name, pathname, "", sizeof(pathname));
+
+      if (pathname[0]) prefs_.set(name, "");
+      else break;
+    }
+
+    update_favorites();
+    prefs_.flush();
+
+    favWindow->hide();
+  }
+}
+
+
+//
+// 'fltk3::FileChooser::fileListCB()' - Handle clicks (and double-clicks) in the
+//                                   fltk3::FileBrowser.
+//
+
+void
+fltk3::FileChooser::fileListCB()
+{
+  char	*filename,			// New filename
+	pathname[FLTK3_PATH_MAX];			// Full pathname to file
+
+
+  filename = (char *)fileList->text(fileList->value());
+  if (!filename)
+    return;
+
+  if (!directory_[0]) {
+    strlcpy(pathname, filename, sizeof(pathname));
+  } else if (strcmp(directory_, "/") == 0) {
+    snprintf(pathname, sizeof(pathname), "/%s", filename);
+  } else {
+    snprintf(pathname, sizeof(pathname), "%s/%s", directory_, filename);
+  }
+
+  if (fltk3::event_clicks()) {
+#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
+    if ((strlen(pathname) == 2 && pathname[1] == ':') ||
+        fltk3::_filename_isdir_quick(pathname))
+#else
+    if (fltk3::_filename_isdir_quick(pathname))
+#endif /* WIN32 || __EMX__ */
+    {
+      // Change directories...
+      directory(pathname);
+
+      // Reset the click count so that a click in the same spot won't
+      // be treated as a triple-click.  We use a value of -1 because
+      // the next click will increment click count to 0, which is what
+      // we really want...
+      fltk3::event_clicks(-1);
+    }
+    else
+    {
+      // Hide the window - picked the file...
+      window->hide();
+      if (callback_) (*callback_)(this, data_);
+    }
+  }
+  else
+  {
+    // Check if the user clicks on a directory when picking files;
+    // if so, make sure only that item is selected...
+    filename = pathname + strlen(pathname) - 1;
+
+    if ((type_ & MULTI) && !(type_ & DIRECTORY)) {
+      if (*filename == '/') {
+	// Clicked on a directory, deselect everything else...
+	int i = fileList->value();
+	fileList->deselect();
+	fileList->select(i);
+      } else {
+        // Clicked on a file - see if there are other directories selected...
+        int i;
+	const char *temp;
+	for (i = 1; i <= fileList->size(); i ++) {
+	  if (i != fileList->value() && fileList->selected(i)) {
+	    temp = fileList->text(i);
+	    temp += strlen(temp) - 1;
+	    if (*temp == '/') break;	// Yes, selected directory
+	  }
+	}
+
+        if (i <= fileList->size()) {
+	  i = fileList->value();
+	  fileList->deselect();
+	  fileList->select(i);
+	}
+      }
+    }
+    // Strip any trailing slash from the directory name...
+    if (*filename == '/') *filename = '\0';
+
+//    puts("Setting fileName from fileListCB...");
+    fileName->value(pathname);
+
+    // Update the preview box...
+    fltk3::remove_timeout((fltk3::TimeoutHandler)previewCB, this);
+    fltk3::add_timeout(1.0, (fltk3::TimeoutHandler)previewCB, this);
+
+    // Do any callback that is registered...
+    if (callback_) (*callback_)(this, data_);
+
+    // Activate the OK button as needed...
+    if (!fltk3::_filename_isdir_quick(pathname) || (type_ & DIRECTORY))
+      okButton->activate();
+    else
+      okButton->deactivate();
+  }
+}
+
+
+//
+// 'fltk3::FileChooser::fileNameCB()' - Handle text entry in the FileBrowser.
+//
+
+void
+fltk3::FileChooser::fileNameCB()
+{
+  char		*filename,	// New filename
+		*slash,		// Pointer to trailing slash
+		pathname[FLTK3_PATH_MAX],	// Full pathname to file
+		matchname[FLTK3_PATH_MAX];	// Matching filename
+  int		i,		// Looping var
+		min_match,	// Minimum number of matching chars
+		max_match,	// Maximum number of matching chars
+		num_files,	// Number of files in directory
+		first_line;	// First matching line
+  const char	*file;		// File from directory
+
+//  puts("fileNameCB()");
+//  printf("Event: %s\n", fl_eventnames[fltk3::event()]);
+
+  // Get the filename from the text field...
+  filename = (char *)fileName->value();
+
+  if (!filename || !filename[0]) {
+    okButton->deactivate();
+    return;
+  }
+
+  // Expand ~ and $ variables as needed...
+  if (strchr(filename, '~') || strchr(filename, '$')) {
+    fltk3::filename_expand(pathname, sizeof(pathname), filename);
+    filename = pathname;
+    value(pathname);
+  }
+
+  // Make sure we have an absolute path...
+#if (defined(WIN32) && !defined(__CYGWIN__)) || defined(__EMX__)
+  if (directory_[0] != '\0' && filename[0] != '/' &&
+      filename[0] != '\\' &&
+      !(isalpha(filename[0] & 255) && (!filename[1] || filename[1] == ':'))) {
+#else
+  if (directory_[0] != '\0' && filename[0] != '/') {
+#endif /* WIN32 || __EMX__ */
+    fltk3::filename_absolute(pathname, sizeof(pathname), filename);
+    value(pathname);
+    fileName->mark(fileName->position()); // no selection after expansion
+  } else if (filename != pathname) {
+    // Finally, make sure that we have a writable copy...
+    strlcpy(pathname, filename, sizeof(pathname));
+  }
+
+  filename = pathname;
+
+  // Now process things according to the key pressed...
+  if (fltk3::event_key() == fltk3::EnterKey || fltk3::event_key() == fltk3::KPEnterKey) {
+    // Enter pressed - select or change directory...
+#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
+    if ((isalpha(pathname[0] & 255) && pathname[1] == ':' && !pathname[2]) ||
+        (fltk3::_filename_isdir_quick(pathname) &&
+	 compare_dirnames(pathname, directory_))) {
+#else
+    if (fltk3::_filename_isdir_quick(pathname) &&
+	compare_dirnames(pathname, directory_)) {
+#endif /* WIN32 || __EMX__ */
+      directory(pathname);
+    } else if ((type_ & CREATE) || access(pathname, 0) == 0) {
+      if (!fltk3::_filename_isdir_quick(pathname) || (type_ & DIRECTORY)) {
+	// Update the preview box...
+	update_preview();
+
+	// Do any callback that is registered...
+	if (callback_) (*callback_)(this, data_);
+
+	// Hide the window to signal things are done...
+	window->hide();
+      }
+    } else {
+      // File doesn't exist, so beep at and alert the user...
+      fltk3::alert("%s",existing_file_label);
+    }
+  }
+  else if (fltk3::event_key() != fltk3::DeleteKey &&
+           fltk3::event_key() != fltk3::BackSpaceKey) {
+    // Check to see if the user has entered a directory...
+    if ((slash = strrchr(pathname, '/')) == NULL)
+      slash = strrchr(pathname, '\\');
+
+    if (!slash) return;
+
+    // Yes, change directories if necessary...
+    *slash++ = '\0';
+    filename = slash;
+
+#if defined(WIN32) || defined(__EMX__)
+    if (strcasecmp(pathname, directory_) &&
+        (pathname[0] || strcasecmp("/", directory_))) {
+#else
+    if (strcmp(pathname, directory_) &&
+        (pathname[0] || strcasecmp("/", directory_))) {
+#endif // WIN32 || __EMX__
+      int p = fileName->position();
+      int m = fileName->mark();
+
+      directory(pathname);
+
+      if (filename[0]) {
+	char tempname[FLTK3_PATH_MAX];
+
+	snprintf(tempname, sizeof(tempname), "%s/%s", directory_, filename);
+	fileName->value(tempname);
+	strlcpy(pathname, tempname, sizeof(pathname));
+      }
+
+      fileName->position(p, m);
+    }
+
+    // Other key pressed - do filename completion as possible...
+    num_files  = fileList->size();
+    min_match  = strlen(filename);
+    max_match  = min_match + 1;
+    first_line = 0;
+
+    for (i = 1; i <= num_files && max_match > min_match; i ++) {
+      file = fileList->text(i);
+
+#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
+      if (strncasecmp(filename, file, min_match) == 0) {
+#else
+      if (strncmp(filename, file, min_match) == 0) {
+#endif // WIN32 || __EMX__
+        // OK, this one matches; check against the previous match
+	if (!first_line) {
+	  // First match; copy stuff over...
+	  strlcpy(matchname, file, sizeof(matchname));
+	  max_match = strlen(matchname);
+
+          // Strip trailing /, if any...
+	  if (matchname[max_match - 1] == '/') {
+	    max_match --;
+	    matchname[max_match] = '\0';
+	  }
+
+	  // And then make sure that the item is visible
+          fileList->topline(i);
+	  first_line = i;
+	} else {
+	  // Succeeding match; compare to find maximum string match...
+	  while (max_match > min_match)
+#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
+	    if (strncasecmp(file, matchname, max_match) == 0)
+#else
+	    if (strncmp(file, matchname, max_match) == 0)
+#endif // WIN32 || __EMX__
+	      break;
+	    else
+	      max_match --;
+
+          // Truncate the string as needed...
+          matchname[max_match] = '\0';
+	}
+      }
+    }
+
+    // If we have any matches, add them to the input field...
+    if (first_line > 0 && min_match == max_match &&
+        max_match == (int)strlen(fileList->text(first_line))) {
+      // This is the only possible match...
+      fileList->deselect(0);
+      fileList->select(first_line);
+      fileList->redraw();
+    } else if (max_match > min_match && first_line) {
+      // Add the matching portion...
+      fileName->replace(filename - pathname, filename - pathname + min_match,
+                        matchname);
+
+      // Highlight it with the cursor at the end of the selection so
+      // s/he can press the right arrow to accept the selection
+      // (Tab and End also do this for both cases.)
+      fileName->position(filename - pathname + max_match,
+	                 filename - pathname + min_match);
+    } else if (max_match == 0) {
+      fileList->deselect(0);
+      fileList->redraw();
+    }
+
+    // See if we need to enable the OK button...
+    if (((type_ & CREATE) || !access(fileName->value(), 0)) &&
+        (!fltk3::filename_isdir(fileName->value()) || (type_ & DIRECTORY))) {
+      okButton->activate();
+    } else {
+      okButton->deactivate();
+    }
+  } else {
+    // fltk3::DeleteKey or fltk3::BackSpaceKey
+    fileList->deselect(0);
+    fileList->redraw();
+    if (((type_ & CREATE) || !access(fileName->value(), 0)) &&
+        (!fltk3::filename_isdir(fileName->value()) || (type_ & DIRECTORY))) {
+      okButton->activate();
+    } else {
+      okButton->deactivate();
+    }
+  }
+}
+
+
+//
+// 'fltk3::FileChooser::filter()' - Set the filter(s) for the chooser.
+//
+
+void
+fltk3::FileChooser::filter(const char *p)		// I - Pattern(s)
+{
+  char		*copyp,				// Copy of pattern
+		*start,				// Start of pattern
+		*end;				// End of pattern
+  int		allfiles;			// Do we have a "*" pattern?
+  char		temp[FLTK3_PATH_MAX];			// Temporary pattern string
+
+
+  // Make sure we have a pattern...
+  if (!p || !*p) p = "*";
+
+  // Copy the pattern string...
+  copyp = strdup(p);
+
+  // Separate the pattern string as necessary...
+  showChoice->clear();
+
+  for (start = copyp, allfiles = 0; start && *start; start = end) {
+    end = strchr(start, '\t');
+    if (end) *end++ = '\0';
+
+    if (strcmp(start, "*") == 0) {
+      showChoice->add(all_files_label);
+      allfiles = 1;
+    } else {
+      quote_pathname(temp, start, sizeof(temp));
+      showChoice->add(temp);
+      if (strstr(start, "(*)") != NULL) allfiles = 1;
+    }
+  }
+
+  free(copyp);
+
+  if (!allfiles) showChoice->add(all_files_label);
+
+  showChoice->add(custom_filter_label);
+  
+  showChoice->value(0);
+  showChoiceCB();
+}
+
+
+//
+// 'fltk3::FileChooser::newdir()' - Make a new directory.
+//
+
+void
+fltk3::FileChooser::newdir()
+{
+  const char	*dir;		// New directory name
+  char		pathname[FLTK3_PATH_MAX];	// Full path of directory
+
+
+  // Get a directory name from the user
+  if ((dir = fltk3::input("%s", NULL, new_directory_label)) == NULL)
+    return;
+
+  // Make it relative to the current directory as needed...
+#if (defined(WIN32) && ! defined (__CYGWIN__)) || defined(__EMX__)
+  if (dir[0] != '/' && dir[0] != '\\' && dir[1] != ':')
+#else
+  if (dir[0] != '/' && dir[0] != '\\')
+#endif /* WIN32 || __EMX__ */
+    snprintf(pathname, sizeof(pathname), "%s/%s", directory_, dir);
+  else
+    strlcpy(pathname, dir, sizeof(pathname));
+
+  // Create the directory; ignore EEXIST errors...
+#if defined(WIN32) && ! defined (__CYGWIN__)
+  if (mkdir(pathname))
+#else
+  if (mkdir(pathname, 0777))
+#endif /* WIN32 */
+    if (errno != EEXIST)
+    {
+      fltk3::alert("%s", strerror(errno));
+      return;
+    }
+
+  // Show the new directory...
+  directory(pathname);
+}
+
+
+
+/** Enable or disable the preview tile. 1 = enable preview, 0 = disable preview. */
+void fltk3::FileChooser::preview(int e)
+{
+  previewButton->value(e);
+  prefs_.set("preview", e);
+  prefs_.flush();
+
+  fltk3::Group *p = previewBox->parent();
+  if (e) {
+    int w = p->w() * 2 / 3;
+    fileList->resize(fileList->x(), fileList->y(),
+                     w, fileList->h());
+    previewBox->resize(fileList->x()+w, previewBox->y(),
+                       p->w()-w, previewBox->h());
+    previewBox->show();
+    update_preview();
+  } else {
+    fileList->resize(fileList->x(), fileList->y(),
+                     p->w(), fileList->h());
+    previewBox->resize(p->x()+p->w(), previewBox->y(),
+                       0, previewBox->h());
+    previewBox->hide();
+  }
+  p->init_sizes();
+
+  fileList->parent()->redraw();
+}
+
+
+//
+// 'fltk3::FileChooser::previewCB()' - Timeout handler for the preview box.
+//
+
+void
+fltk3::FileChooser::previewCB(fltk3::FileChooser *fc) {	// I - File chooser
+  fc->update_preview();
+}
+
+
+//
+// 'fltk3::FileChooser::rescan()' - Rescan the current directory.
+//
+
+void
+fltk3::FileChooser::rescan()
+{
+  char	pathname[FLTK3_PATH_MAX];		// New pathname for filename field
+
+
+  // Clear the current filename
+  strlcpy(pathname, directory_, sizeof(pathname));
+  if (pathname[0] && pathname[strlen(pathname) - 1] != '/') {
+    strlcat(pathname, "/", sizeof(pathname));
+  }
+//  puts("Setting fileName in rescan()");
+  fileName->value(pathname);
+
+  if (type_ & DIRECTORY)
+    okButton->activate();
+  else
+    okButton->deactivate();
+
+  // Build the file list...
+  fileList->load(directory_, sort);
+#ifndef WIN32	
+  if (!showHiddenButton->value()) remove_hidden_files();
+#endif
+  // Update the preview box...
+  update_preview();
+}
+
+//
+/**  
+  Rescan the current directory  without clearing the filename, 
+  then select the file if it is in the list
+*/
+void fltk3::FileChooser::rescan_keep_filename()
+{
+  // if no filename was set, this is likely a diretory browser
+  const char *fn = fileName->value();
+  if (!fn || !*fn || fn[strlen(fn) - 1]=='/') {
+    rescan();
+    return;
+  }
+
+  int   i;
+  char	pathname[FLTK3_PATH_MAX];		// New pathname for filename field
+  strlcpy(pathname, fn, sizeof(pathname));
+
+  // Build the file list...
+  fileList->load(directory_, sort);
+#ifndef WIN32	
+  if (!showHiddenButton->value()) remove_hidden_files();
+#endif
+  // Update the preview box...
+  update_preview();
+
+  // and select the chosen file
+  char found = 0;
+  char *slash = strrchr(pathname, '/');
+  if (slash) 
+    slash++;
+  else
+    slash = pathname;
+  for (i = 1; i <= fileList->size(); i ++)
+#if defined(WIN32) || defined(__EMX__)
+    if (strcasecmp(fileList->text(i), slash) == 0) {
+#else
+    if (strcmp(fileList->text(i), slash) == 0) {
+#endif // WIN32 || __EMX__
+      fileList->topline(i);
+      fileList->select(i);
+      found = 1;
+      break;
+    }
+
+  // update OK button activity
+  if (found || type_ & CREATE)
+    okButton->activate();
+  else
+    okButton->deactivate();
+}
+
+
+//
+// 'fltk3::FileChooser::showChoiceCB()' - Handle show selections.
+//
+
+void
+fltk3::FileChooser::showChoiceCB()
+{
+  const char	*item,			// Selected item
+		*patstart;		// Start of pattern
+  char		*patend;		// End of pattern
+  char		temp[FLTK3_PATH_MAX];		// Temporary string for pattern
+
+
+  item = showChoice->text(showChoice->value());
+
+  if (strcmp(item, custom_filter_label) == 0) {
+    if ((item = fltk3::input("%s", pattern_, custom_filter_label)) != NULL) {
+      strlcpy(pattern_, item, sizeof(pattern_));
+
+      quote_pathname(temp, item, sizeof(temp));
+      showChoice->add(temp);
+      showChoice->value(showChoice->size() - 2);
+    }
+  } else if ((patstart = strchr(item, '(')) == NULL) {
+    strlcpy(pattern_, item, sizeof(pattern_));
+  } else {
+    strlcpy(pattern_, patstart + 1, sizeof(pattern_));
+    if ((patend = strrchr(pattern_, ')')) != NULL) *patend = '\0';
+  }
+
+  fileList->filter(pattern_);
+
+  if (shown()) {
+    // Rescan the directory...
+    rescan_keep_filename();
+  }
+}
+
+
+//
+// 'fltk3::FileChooser::update_favorites()' - Update the favorites menu.
+//
+
+void
+fltk3::FileChooser::update_favorites()
+{
+  int		i;			// Looping var
+  char		pathname[FLTK3_PATH_MAX],		// Pathname
+		menuname[2048];		// Menu name
+  const char	*home;			// Home directory
+
+
+  favoritesButton->clear();
+  favoritesButton->add("bla");
+  favoritesButton->clear();
+  favoritesButton->add(add_favorites_label, fltk3::ALT + 'a', 0);
+  favoritesButton->add(manage_favorites_label, fltk3::ALT + 'm', 0, 0, fltk3::MENU_DIVIDER);
+  favoritesButton->add(filesystems_label, fltk3::ALT + 'f', 0);
+    
+  if ((home = getenv("HOME")) != NULL) {
+    quote_pathname(menuname, home, sizeof(menuname));
+    favoritesButton->add(menuname, fltk3::ALT + 'h', 0);
+  }
+
+  for (i = 0; i < 100; i ++) {
+    sprintf(menuname, "favorite%02d", i);
+    prefs_.get(menuname, pathname, "", sizeof(pathname));
+    if (!pathname[0]) break;
+
+    quote_pathname(menuname, pathname, sizeof(menuname));
+
+    if (i < 10) favoritesButton->add(menuname, fltk3::ALT + '0' + i, 0);
+    else favoritesButton->add(menuname);
+  }
+
+  if (i == 100) ((fltk3::MenuItem *)favoritesButton->menu())[0].deactivate();
+}
+
+
+//
+// 'fltk3::FileChooser::update_preview()' - Update the preview box...
+//
+
+void
+fltk3::FileChooser::update_preview()
+{
+  const char		*filename;	// Current filename
+  const char            *newlabel = 0;  // New label text
+  fltk3::SharedImage	*image = 0,     // New image
+			*oldimage;	// Old image
+  int			pbw, pbh;	// Width and height of preview box
+  int			w, h;		// Width and height of preview image
+  int                   set = 0;        // Set this flag as soon as a decent preview is found
+
+  if (!previewButton->value()) return;
+
+  filename = value();
+  if (filename == NULL) {
+    // no file name at all, so we have an empty preview
+    set = 1;
+  } else if (fltk3::filename_isdir(filename)) {
+    // filename is a directory, show a folder icon
+    newlabel = "@fileopen";
+    set = 1;
+  } else {
+    struct stat s;
+    if (fltk3::stat(filename, &s)==0) {
+      if ((s.st_mode&S_IFMT)!=S_IFREG) {
+        // this is no regular file, probably some kind of device
+        newlabel = "@-3refresh"; // a cross
+        set = 1;
+      } else if (s.st_size==0) {
+        // this file is emty
+        newlabel = "<empty file>";
+        set = 1;
+      } else {
+        // if this file is an image, try to load it
+        window->cursor(fltk3::CURSOR_WAIT);
+        fltk3::check();
+        
+        image = fltk3::SharedImage::get(filename);
+        
+        if (image) {
+          window->cursor(fltk3::CURSOR_DEFAULT);
+          fltk3::check();
+          set = 1;
+        }
+      }
+    }
+  }
+
+  oldimage = (fltk3::SharedImage *)previewBox->image();
+
+  if (oldimage) oldimage->release();
+
+  previewBox->image(0);
+
+  if (!set) {
+    FILE	*fp;
+    int		bytes;
+    char	*ptr;
+
+    if (filename) fp = fltk3::fopen(filename, "rb");
+    else fp = NULL;
+
+    if (fp != NULL) {
+      // Try reading the first 1k of data for a label...
+      bytes = fread(preview_text_, 1, sizeof(preview_text_) - 1, fp);
+      preview_text_[bytes] = '\0';
+      fclose(fp);
+    } else {
+      // Assume we can't read any data...
+      preview_text_[0] = '\0';
+    }
+
+    window->cursor(fltk3::CURSOR_DEFAULT);
+    fltk3::check();
+
+    // Scan the buffer for printable UTF8 chars...
+    for (ptr = preview_text_; *ptr; ptr++) {
+      uchar c = uchar(*ptr);
+      if ( (c&0x80)==0 ) {
+        if (!isprint(c&255) && !isspace(c&255)) break;
+      } else if ( (c&0xe0)==0xc0 ) {
+        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
+        ptr++;
+      } else if ( (c&0xf0)==0xe0 ) {
+        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
+        ptr++;
+        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
+        ptr++;
+      } else if ( (c&0xf8)==0xf0 ) {
+        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
+        ptr++;
+        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
+        ptr++;
+        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
+        ptr++;
+      }
+    } 
+//         *ptr && (isprint(*ptr & 255) || isspace(*ptr & 255));
+//	 ptr ++);
+
+    // Scan the buffer for printable characters in 8 bit
+    if (*ptr || ptr == preview_text_) {
+      for (ptr = preview_text_;
+         *ptr && (isprint(*ptr & 255) || isspace(*ptr & 255));
+	 ptr ++);
+    }
+
+    if (*ptr || ptr == preview_text_) {
+      // Non-printable file, just show a big ?...
+      previewBox->label(filename ? "?" : 0);
+      previewBox->align(fltk3::ALIGN_CLIP);
+      previewBox->labelsize(75);
+      previewBox->labelfont(fltk3::HELVETICA);
+    } else {
+      // Show the first 1k of text...
+      int size = previewBox->h() / 20;
+      if (size < 6) size = 6;
+      else if (size > fltk3::NORMAL_SIZE) size = fltk3::NORMAL_SIZE;
+
+      previewBox->label(preview_text_);
+      previewBox->align((fltk3::Align)(fltk3::ALIGN_CLIP | fltk3::ALIGN_INSIDE |
+                                   fltk3::ALIGN_LEFT | fltk3::ALIGN_TOP));
+      previewBox->labelsize(size);
+      previewBox->labelfont(fltk3::COURIER);
+    }
+  } else if (image) {
+    pbw = previewBox->w() - 20;
+    pbh = previewBox->h() - 20;
+
+    if (image->w() > pbw || image->h() > pbh) {
+      w   = pbw;
+      h   = w * image->h() / image->w();
+
+      if (h > pbh) {
+	h = pbh;
+	w = h * image->w() / image->h();
+      }
+
+      oldimage = (fltk3::SharedImage *)image->copy(w, h);
+      previewBox->image((fltk3::Image *)oldimage);
+
+      image->release();
+    } else {
+      previewBox->image((fltk3::Image *)image);
+    }
+
+    previewBox->align(fltk3::ALIGN_CLIP);
+    previewBox->label(0);
+  } else if (newlabel) {
+    previewBox->label(newlabel);
+    previewBox->align(fltk3::ALIGN_CLIP);
+    previewBox->labelsize(newlabel[0]=='@'?75:12);
+    previewBox->labelfont(fltk3::HELVETICA);
+  }
+
+  previewBox->redraw();
+}
+
+
+//
+// 'fltk3::FileChooser::value()' - Return a selected filename.
+//
+
+const char *			// O - Filename or NULL
+fltk3::FileChooser::value(int f)	// I - File number
+{
+  int		i;		// Looping var
+  int		fcount;		// Number of selected files
+  const char	*name;		// Current filename
+  static char	pathname[FLTK3_PATH_MAX];	// Filename + directory
+
+
+  name = fileName->value();
+
+  if (!(type_ & MULTI)) {
+    // Return the filename in the filename field...
+    if (!name || !name[0]) return NULL;
+    else return name;
+  }
+
+  // Return a filename from the list...
+  for (i = 1, fcount = 0; i <= fileList->size(); i ++)
+    if (fileList->selected(i)) {
+      // See if this file is a selected file/directory...
+      name = fileList->text(i);
+
+      fcount ++;
+
+      if (fcount == f) {
+	if (directory_[0]) {
+	  snprintf(pathname, sizeof(pathname), "%s/%s", directory_, name);
+	} else {
+	  strlcpy(pathname, name, sizeof(pathname));
+	}
+
+	return pathname;
+      }
+    }
+
+  // If nothing is selected, use the filename field...
+  if (!name || !name[0]) return NULL;
+  else return name;
+}
+
+
+//
+// 'fltk3::FileChooser::value()' - Set the current filename.
+//
+
+void
+fltk3::FileChooser::value(const char *filename)
+					// I - Filename + directory
+{
+  int	i,				// Looping var
+  	fcount;				// Number of items in list
+  char	*slash;				// Directory separator
+  char	pathname[FLTK3_PATH_MAX];		// Local copy of filename
+
+
+//  printf("fltk3::FileChooser::value(\"%s\")\n", filename == NULL ? "(null)" : filename);
+
+  // See if the filename is the "My System" directory...
+  if (filename == NULL || !filename[0]) {
+    // Yes, just change the current directory...
+    directory(filename);
+    fileName->value("");
+    okButton->deactivate();
+    return;
+  }
+
+#ifdef WIN32
+  // See if the filename contains backslashes...
+  char	fixpath[FLTK3_PATH_MAX];			// Path with slashes converted
+  if (strchr(filename, '\\')) {
+    // Convert backslashes to slashes...
+    strlcpy(fixpath, filename, sizeof(fixpath));
+
+    for (slash = strchr(fixpath, '\\'); slash; slash = strchr(slash + 1, '\\'))
+      *slash = '/';
+
+    filename = fixpath;
+  }
+#endif // WIN32
+
+  // See if there is a directory in there...
+  fltk3::filename_absolute(pathname, sizeof(pathname), filename);
+
+  if ((slash = strrchr(pathname, '/')) != NULL) {
+    // Yes, change the display to the directory... 
+    if (!fltk3::filename_isdir(pathname)) *slash++ = '\0';
+
+    directory(pathname);
+    if (*slash == '/') slash = pathname;
+  } else {
+    directory(".");
+    slash = pathname;
+  }
+
+  // Set the input field to the absolute path...
+  if (slash > pathname) slash[-1] = '/';
+
+  fileName->value(pathname);
+  fileName->position(0, strlen(pathname));
+  okButton->activate();
+
+  // Then find the file in the file list and select it...
+  fcount = fileList->size();
+
+  fileList->deselect(0);
+  fileList->redraw();
+
+  for (i = 1; i <= fcount; i ++)
+#if defined(WIN32) || defined(__EMX__)
+    if (strcasecmp(fileList->text(i), slash) == 0) {
+#else
+    if (strcmp(fileList->text(i), slash) == 0) {
+#endif // WIN32 || __EMX__
+//      printf("Selecting line %d...\n", i);
+      fileList->topline(i);
+      fileList->select(i);
+      break;
+    }
+}
+  
+void fltk3::FileChooser::show()
+{
+  window->hotspot(fileList);
+  window->show();
+  fltk3::flush();
+  fltk3::cursor(fltk3::CURSOR_WAIT);
+  rescan_keep_filename();
+  fltk3::cursor(fltk3::CURSOR_DEFAULT);
+  fileName->take_focus();
+#ifdef WIN32
+  showHiddenButton->hide();
+#endif
+}
+  
+void fltk3::FileChooser::showHidden(int value)
+{
+  if (value) {
+    fileList->load(directory());
+  } else {
+    remove_hidden_files();
+    fileList->redraw();
+  }
+}
+
+void fltk3::FileChooser::remove_hidden_files()
+{
+  int count = fileList->size();
+  for(int num = count; num >= 1; num--) {
+    const char *p = fileList->text(num);
+    if (*p == '.' && strcmp(p, "../") != 0) fileList->remove(num);
+  }
+  fileList->topline(1);
+}
+  
+
+
+//
+// 'compare_dirnames()' - Compare two directory names.
+//
+
+static int
+compare_dirnames(const char *a, const char *b) {
+  int alen, blen;
+
+  // Get length of each string...
+  alen = strlen(a) - 1;
+  blen = strlen(b) - 1;
+
+  if (alen < 0 || blen < 0) return alen - blen;
+
+  // Check for trailing slashes...
+  if (a[alen] != '/') alen ++;
+  if (b[blen] != '/') blen ++;
+
+  // If the lengths aren't the same, then return the difference...
+  if (alen != blen) return alen - blen;
+
+  // Do a comparison of the first N chars (alen == blen at this point)...
+#ifdef WIN32
+  return strncasecmp(a, b, alen);
+#else
+  return strncmp(a, b, alen);
+#endif // WIN32
+}
+
+
+//
+// 'quote_pathname()' - Quote a pathname for a menu.
+//
+
+static void
+quote_pathname(char       *dst,		// O - Destination string
+               const char *src,		// I - Source string
+	       int        dstsize)	// I - Size of destination string
+{
+  dstsize --;
+
+  while (*src && dstsize > 1) {
+    if (*src == '\\') {
+      // Convert backslash to forward slash...
+      *dst++ = '\\';
+      *dst++ = '/';
+      src ++;
+    } else {
+      if (*src == '/') *dst++ = '\\';
+
+      *dst++ = *src++;
+    }
+  }
+
+  *dst = '\0';
+}
+
+
+//
+// 'unquote_pathname()' - Unquote a pathname from a menu.
+//
+
+static void
+unquote_pathname(char       *dst,	// O - Destination string
+                 const char *src,	// I - Source string
+	         int        dstsize)	// I - Size of destination string
+{
+  dstsize --;
+
+  while (*src && dstsize > 1) {
+    if (*src == '\\') src ++;
+    *dst++ = *src++;
+  }
+
+  *dst = '\0';
+}
+
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/FileIcon.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_File_Icon.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/FileIcon.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/FileIcon.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,490 @@
+//
+// "$Id$"
+//
+// fltk3::FileIcon routines.
+//
+// KDE icon code donated by Maarten De Boer.
+//
+// Copyright 1999-2010 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
+//
+// Contents:
+//
+//   fltk3::FileIcon::fltk3::FileIcon()       - Create a new file icon.
+//   fltk3::FileIcon::~Fl_File_Icon()      - Remove a file icon.
+//   fltk3::FileIcon::add()               - Add data to an icon.
+//   fltk3::FileIcon::find()              - Find an icon based upon a given file.
+//   fltk3::FileIcon::draw()              - Draw an icon.
+//   fltk3::FileIcon::label()             - Set the widgets label to an icon.
+//   fltk3::FileIcon::labeltype()         - Draw the icon label.
+//
+
+//
+// Include necessary header files...
+//
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fltk3/utf8.h>
+#include "flstring.h"
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
+#  include <io.h>
+#  define F_OK	0
+#else
+#  include <unistd.h>
+#endif /* WIN32 || __EMX__ */
+
+#include <fltk3/FileIcon.h>
+#include <fltk3/Widget.h>
+#include <fltk3/draw.h>
+#include <fltk3/filename.h>
+
+
+//
+// Define missing POSIX/XPG4 macros as needed...
+//
+
+#ifndef S_ISDIR
+#  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+#  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+#  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+#  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#endif /* !S_ISDIR */
+
+
+//
+// Icon cache...
+//
+
+fltk3::FileIcon	*fltk3::FileIcon::first_ = (fltk3::FileIcon *)0;
+
+
+/**
+  Creates a new fltk3::FileIcon with the specified information.
+  \param[in] p filename pattern
+  \param[in] t file type
+  \param[in] nd number of data values
+  \param[in] d data values
+*/
+fltk3::FileIcon::FileIcon(const char *p,	/* I - Filename pattern */
+                	   int        t,	/* I - File type */
+			   int        nd,	/* I - Number of data values */
+			   short      *d)	/* I - Data values */
+{
+  // Initialize the pattern and type...
+  pattern_ = p;
+  type_    = t;
+
+  // Copy icon data as needed...
+  if (nd)
+  {
+    num_data_   = nd;
+    alloc_data_ = nd + 1;
+    data_       = (short *)calloc(sizeof(short), nd + 1);
+    memcpy(data_, d, nd * sizeof(short));
+  }
+  else
+  {
+    num_data_   = 0;
+    alloc_data_ = 0;
+  }
+
+  // And add the icon to the list of icons...
+  next_  = first_;
+  first_ = this;
+}
+
+
+/**
+  The destructor destroys the icon and frees all memory that has been
+  allocated for it.
+*/
+fltk3::FileIcon::~FileIcon() {
+  fltk3::FileIcon	*current,	// Current icon in list
+		*prev;		// Previous icon in list
+
+
+  // Find the icon in the list...
+  for (current = first_, prev = (fltk3::FileIcon *)0;
+       current != this && current != (fltk3::FileIcon *)0;
+       prev = current, current = current->next_);
+
+  // Remove the icon from the list as needed...
+  if (current)
+  {
+    if (prev)
+      prev->next_ = current->next_;
+    else
+      first_ = current->next_;
+  }
+
+  // Free any memory used...
+  if (alloc_data_)
+    free(data_);
+}
+
+
+/**
+  Adds a keyword value to the icon array, returning a pointer to it.
+  \param[in] d data value
+*/
+short *				// O - Pointer to new data value
+fltk3::FileIcon::add(short d)	// I - Data to add
+{
+  short	*dptr;			// Pointer to new data value
+
+
+  // Allocate/reallocate memory as needed
+  if ((num_data_ + 1) >= alloc_data_)
+  {
+    alloc_data_ += 128;
+
+    if (alloc_data_ == 128)
+      dptr = (short *)malloc(sizeof(short) * alloc_data_);
+    else
+      dptr = (short *)realloc(data_, sizeof(short) * alloc_data_);
+
+    if (dptr == NULL)
+      return (NULL);
+
+    data_ = dptr;
+  }
+
+  // Store the new data value and return
+  data_[num_data_++] = d;
+  data_[num_data_]   = END;
+
+  return (data_ + num_data_ - 1);
+}
+
+
+/**
+  Finds an icon that matches the given filename and file type.
+  \param[in] filename name of file
+  \param[in] filetype enumerated file type
+  \return matching file icon or NULL
+*/
+fltk3::FileIcon *				// O - Matching file icon or NULL
+fltk3::FileIcon::find(const char *filename,// I - Name of file */
+                   int        filetype)	// I - Enumerated file type
+{
+  fltk3::FileIcon	*current;		// Current file in list
+#ifndef WIN32
+  struct stat	fileinfo;		// Information on file
+#endif // !WIN32
+  const char	*name;			// Base name of filename
+
+
+  // Get file information if needed...
+  if (filetype == ANY)
+  {
+#ifdef WIN32
+    if (filename[strlen(filename) - 1] == '/')
+      filetype = DIRECTORY;
+    else if (fltk3::filename_isdir(filename))
+      filetype = DIRECTORY;
+    else
+      filetype = PLAIN;
+#else
+    if (!fltk3::stat(filename, &fileinfo))
+    {
+      if (S_ISDIR(fileinfo.st_mode))
+        filetype = DIRECTORY;
+#  ifdef S_IFIFO
+      else if (S_ISFIFO(fileinfo.st_mode))
+        filetype = FIFO;
+#  endif // S_IFIFO
+#  if defined(S_ICHR) && defined(S_IBLK)
+      else if (S_ISCHR(fileinfo.st_mode) || S_ISBLK(fileinfo.st_mode))
+        filetype = DEVICE;
+#  endif // S_ICHR && S_IBLK
+#  ifdef S_ILNK
+      else if (S_ISLNK(fileinfo.st_mode))
+        filetype = LINK;
+#  endif // S_ILNK
+      else
+        filetype = PLAIN;
+    }
+    else
+      filetype = PLAIN;
+#endif // WIN32
+  }
+
+  // Look at the base name in the filename
+  name = fltk3::filename_name(filename);
+
+  // Loop through the available file types and return any match that
+  // is found...
+  for (current = first_; current != (fltk3::FileIcon *)0; current = current->next_)
+    if ((current->type_ == filetype || current->type_ == ANY) &&
+        (fltk3::filename_match(filename, current->pattern_) ||
+	 fltk3::filename_match(name, current->pattern_)))
+      break;
+
+  // Return the match (if any)...
+  return (current);
+}
+
+/**
+  Draws an icon in the indicated area.
+  \param[in] x, y, w, h position and size
+  \param[in] ic icon color
+  \param[in] active status, default is active [non-zero]
+*/
+void
+fltk3::FileIcon::draw(int      x,		// I - Upper-lefthand X
+        	   int      y,		// I - Upper-lefthand Y
+		   int      w,		// I - Width of bounding box
+		   int      h,		// I - Height of bounding box
+        	   fltk3::Color ic,		// I - Icon color...
+        	   int      active)	// I - Active or inactive?
+{
+  fltk3::Color	c,		// Current color
+		oc;		// Outline color
+  short		*d,		// Pointer to data
+		*dend;		// End of data...
+  short		*prim;		// Pointer to start of primitive...
+  double	scale;		// Scale of icon
+
+
+  // Don't try to draw a NULL array!
+  if (num_data_ == 0)
+    return;
+
+  // Setup the transform matrix as needed...
+  scale = w < h ? w : h;
+
+  fltk3::push_matrix();
+  fltk3::translate((float)x + 0.5 * ((float)w - scale),
+               (float)y + 0.5 * ((float)h + scale));
+  fltk3::scale(scale, -scale);
+
+  // Loop through the array until we see an unmatched END...
+  d    = data_;
+  dend = data_ + num_data_;
+  prim = NULL;
+  c    = ic;
+
+  if (active)
+    fltk3::color(c);
+  else
+    fltk3::color(fltk3::inactive(c));
+
+  while (d < dend)
+    switch (*d)
+    {
+      case END :
+          if (prim)
+            switch (*prim)
+	    {
+	      case LINE :
+		  fltk3::end_line();
+		  break;
+
+	      case CLOSEDLINE :
+		  fltk3::end_loop();
+		  break;
+
+	      case POLYGON :
+		  fltk3::end_complex_polygon();
+		  break;
+
+	      case OUTLINEPOLYGON :
+		  fltk3::end_complex_polygon();
+
+        	  oc = (fltk3::Color)((((unsigned short *)prim)[1] << 16) | 
+	                	  ((unsigned short *)prim)[2]);
+                  if (active)
+		  {
+                    if (oc == fltk3::ICON_COLOR)
+		      fltk3::color(ic);
+		    else
+		      fltk3::color(oc);
+		  }
+		  else
+		  {
+                    if (oc == fltk3::ICON_COLOR)
+		      fltk3::color(fltk3::inactive(ic));
+		    else
+		      fltk3::color(fltk3::inactive(oc));
+		  }
+
+		  fltk3::begin_loop();
+
+		  prim += 3;
+		  while (*prim == VERTEX)
+		  {
+		    fltk3::vertex(prim[1] * 0.0001, prim[2] * 0.0001);
+		    prim += 3;
+		  }
+
+        	  fltk3::end_loop();
+		  fltk3::color(c);
+		  break;
+	    }
+
+          prim = NULL;
+	  d ++;
+	  break;
+
+      case COLOR :
+          c = (fltk3::Color)((((unsigned short *)d)[1] << 16) | 
+	                   ((unsigned short *)d)[2]);
+
+          if (c == fltk3::ICON_COLOR)
+	    c = ic;
+
+          if (!active)
+	    c = fltk3::inactive(c);
+
+          fltk3::color(c);
+	  d += 3;
+	  break;
+
+      case LINE :
+          prim = d;
+	  d ++;
+	  fltk3::begin_line();
+	  break;
+
+      case CLOSEDLINE :
+          prim = d;
+	  d ++;
+	  fltk3::begin_loop();
+	  break;
+
+      case POLYGON :
+          prim = d;
+	  d ++;
+	  fltk3::begin_complex_polygon();
+	  break;
+
+      case OUTLINEPOLYGON :
+          prim = d;
+	  d += 3;
+	  fltk3::begin_complex_polygon();
+	  break;
+
+      case VERTEX :
+          if (prim)
+	    fltk3::vertex(d[1] * 0.0001, d[2] * 0.0001);
+	  d += 3;
+	  break;
+
+      default : // Ignore invalid data...
+          d ++;
+    }
+
+  // If we still have an open primitive, close it...
+  if (prim)
+    switch (*prim)
+    {
+      case LINE :
+	  fltk3::end_line();
+	  break;
+
+      case CLOSEDLINE :
+	  fltk3::end_loop();
+	  break;
+
+      case POLYGON :
+	  fltk3::end_polygon();
+	  break;
+
+      case OUTLINEPOLYGON :
+	  fltk3::end_polygon();
+
+          oc = (fltk3::Color)((((unsigned short *)prim)[1] << 16) | 
+	                  ((unsigned short *)prim)[2]);
+          if (active)
+	  {
+            if (oc == fltk3::ICON_COLOR)
+	      fltk3::color(ic);
+	    else
+	      fltk3::color(oc);
+	  }
+	  else
+	  {
+            if (oc == fltk3::ICON_COLOR)
+	      fltk3::color(fltk3::inactive(ic));
+	    else
+	      fltk3::color(fltk3::inactive(oc));
+	  }
+
+	  fltk3::begin_loop();
+
+	  prim += 3;
+	  while (*prim == VERTEX)
+	  {
+	    fltk3::vertex(prim[1] * 0.0001, prim[2] * 0.0001);
+	    prim += 3;
+	  }
+
+          fltk3::end_loop();
+	  fltk3::color(c);
+	  break;
+    }
+
+  // Restore the transform matrix
+  fltk3::pop_matrix();
+}
+
+/**
+  Applies the icon to the widget, registering the fltk3::FileIcon
+  label type as needed.
+  \param[in] w widget for which this icon will become the label
+*/
+void fltk3::FileIcon::label(fltk3::Widget *w)	// I - Widget to label
+{
+  w->label(fltk3::ICON_LABEL, (const char*)this);
+}
+
+
+/**
+  Draw the icon label.
+  \param[in] o label data
+  \param[in] x, y, w, h position and size of label
+  \param[in] a label alignment [not used]
+*/
+void fl_icon_labeltype(const fltk3::Label *o,	// I - Label data
+                	int            x,	// I - X position of label
+			int            y,	// I - Y position of label
+			int            w,	// I - Width of label
+			int            h,	// I - Height of label
+			fltk3::Align       a)	// I - Label alignment (not used)
+{
+  fltk3::FileIcon *icon;			// Pointer to icon data
+
+
+  (void)a;
+
+  icon = (fltk3::FileIcon *)(o->value);
+  if (icon) icon->draw(x, y, w, h, (fltk3::Color)(o->color));
+}
+
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/FileInput.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_File_Input.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/FileInput.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/FileInput.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,302 @@
+//
+// "$Id$"
+//
+// File_Input header file for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/FileInput.h>
+#include <fltk3/Window.h>
+#include <fltk3/draw.h>
+#include <fltk3/filename.h>
+#include <stdio.h>
+#include "flstring.h"
+
+
+//
+// Height of directory buttons...
+//
+
+#define DIR_HEIGHT	10
+
+
+//
+// Redraw bit for directory bar...
+//
+
+namespace fltk3 {
+  const unsigned int DAMAGE_BAR = 0x10;
+};
+
+
+/**
+  Creates a new fltk3::FileInput widget using the given position,
+  size, and label string. The default boxtype is fltk3::DOWN_BOX.
+  \param[in] X, Y, W, H position and size of the widget
+  \param[in] L widget label, default is no label
+*/
+fltk3::FileInput::FileInput(int X, int Y, int W, int H, const char *L)
+  : fltk3::Input(X, Y, W, H, L) {
+  buttons_[0] = 0;
+  errorcolor_ = fltk3::RED;
+  ok_entry_   = 1;
+  pressed_    = -1;
+
+  down_box(fltk3::UP_BOX);
+}
+
+/**
+  Draw directory buttons.
+*/
+void fltk3::FileInput::draw_buttons() {
+  int	i,					// Looping var
+	X;					// Current X position
+
+
+  if (damage() & (fltk3::DAMAGE_BAR | fltk3::DAMAGE_ALL)) {
+    update_buttons();
+  }
+
+  for (X = 0, i = 0; buttons_[i]; i ++)
+  {
+    if ((X + buttons_[i]) > xscroll()) {
+      if (X < xscroll()) {
+        draw_box(pressed_ == i ? fltk3::down(down_box()) : down_box(),
+                 x(), y(), X + buttons_[i] - xscroll(), DIR_HEIGHT, fltk3::GRAY);
+      } else if ((X + buttons_[i] - xscroll()) > w()) {
+	draw_box(pressed_ == i ? fltk3::down(down_box()) : down_box(),
+        	 x() + X - xscroll(), y(), w() - X + xscroll(), DIR_HEIGHT,
+		 fltk3::GRAY);
+      } else {
+        draw_box(pressed_ == i ? fltk3::down(down_box()) : down_box(),
+	         x() + X - xscroll(), y(), buttons_[i], DIR_HEIGHT, fltk3::GRAY);
+      }
+    }
+
+    X += buttons_[i];
+  }
+
+  if (X < w()) {
+    draw_box(pressed_ == i ? fltk3::down(down_box()) : down_box(),
+             x() + X - xscroll(), y(), w() - X + xscroll(), DIR_HEIGHT, fltk3::GRAY);
+  }
+}
+
+/**
+  Update the sizes of the directory buttons.
+*/
+void fltk3::FileInput::update_buttons() {
+  int		i;				// Looping var
+  const char	*start,				// Start of path component
+		*end;				// End of path component
+
+
+//  puts("update_buttons()");
+
+  // Set the current font & size...
+  fltk3::font(textfont(), textsize());
+
+  // Loop through the value string, setting widths...
+  for (i = 0, start = value();
+       start && i < (int)(sizeof(buttons_) / sizeof(buttons_[0]) - 1);
+       start = end, i ++) {
+//    printf("    start = \"%s\"\n", start);
+    if ((end = strchr(start, '/')) == NULL)
+#if defined(WIN32) || defined(__EMX__)
+      if ((end = strchr(start, '\\')) == NULL)
+#endif // WIN32 || __EMX__
+      break;
+
+    end ++;
+
+    buttons_[i] = (short)fltk3::width(start, end - start);
+    if (!i) buttons_[i] += fltk3::box_dx(box()) + 6;
+  }
+
+//  printf("    found %d components/buttons...\n", i);
+
+  buttons_[i] = 0;
+}
+
+
+/**
+  Sets the value of the widget given a new string value and its length.
+  Returns non 0 on success.
+  \param[in] str new string value
+  \param[in] len lengh of value
+*/
+int						// O - TRUE on success
+fltk3::FileInput::value(const char *str,		// I - New string value
+                     int        len) {		// I - Length of value
+  damage(fltk3::DAMAGE_BAR);
+  return Input::value(str,len);
+}
+
+
+/**
+  Sets the value of the widget given a new string value.
+  Returns non 0 on success.
+  \param[in] str new string value
+*/
+int						// O - TRUE on success
+fltk3::FileInput::value(const char *str) {		// I - New string value
+  damage(fltk3::DAMAGE_BAR);
+  return Input::value(str);
+}
+
+
+/**
+  Draws the file input widget
+*/
+void fltk3::FileInput::draw() {
+  FLTK3_OBJECT_VCALLS_WRAPPER(draw(), Draw)
+  fltk3::Boxtype b = box();
+  if (damage() & (fltk3::DAMAGE_BAR | fltk3::DAMAGE_ALL)) draw_buttons();
+  // this flag keeps fltk3::Input_::drawtext from drawing a bogus box!
+  char must_trick_fl_input_ = 
+    fltk3::focus()!=this && !size() && !(damage()&fltk3::DAMAGE_ALL);
+  if ((damage() & fltk3::DAMAGE_ALL) || must_trick_fl_input_) 
+    draw_box(b,x(),y()+DIR_HEIGHT,w(),h()-DIR_HEIGHT,color());
+  if (!must_trick_fl_input_) 
+    Input_::drawtext(x()+fltk3::box_dx(b)+3, y()+fltk3::box_dy(b)+DIR_HEIGHT,
+		        w()-fltk3::box_dw(b)-6, h()-fltk3::box_dh(b)-DIR_HEIGHT);
+}
+
+
+
+/**
+  Handle events in the widget.
+  Return non zero if event is handled.
+  \param[in] event
+*/
+int						// O - TRUE if we handled event
+fltk3::FileInput::handle(int event) 		// I - Event
+{
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, handle(event), Handle)
+//  printf("handle(event = %d)\n", event);
+  static char inButtonBar = 0;
+
+  switch (event) {
+    case fltk3::MOVE :
+    case fltk3::ENTER :
+      if (active_r()) {
+	if (fltk3::event_y() < (y() + DIR_HEIGHT)) 
+          window()->cursor(fltk3::CURSOR_DEFAULT);
+	else 
+          window()->cursor(fltk3::CURSOR_INSERT);
+      }
+
+      return 1;
+
+    case fltk3::PUSH :
+      inButtonBar = (fltk3::event_y() < (y() + DIR_HEIGHT));
+    case fltk3::RELEASE :
+    case fltk3::DRAG :
+      if (inButtonBar) 
+        return handle_button(event);
+      else
+        return Input::handle(event);
+
+    default :
+      { fltk3::WidgetTracker wp(this);
+	if (Input::handle(event)) {
+	  if (wp.exists())
+	    damage(fltk3::DAMAGE_BAR);
+	  return 1;
+	}
+      }
+      return 0;
+  }
+}
+
+
+
+/**
+  Handles button events in the widget.
+  Return non zero if event is handled.
+  \param[in] event
+*/
+int						// O - TRUE if we handled event
+fltk3::FileInput::handle_button(int event)		// I - Event
+{
+  int		i,				// Looping var
+		X;				// Current X position
+  char		*start,				// Start of path component
+		*end;				// End of path component
+  char		newvalue[FLTK3_PATH_MAX];		// New value
+
+
+  // Figure out which button is being pressed...
+  for (X = 0, i = 0; buttons_[i]; i ++)
+  {
+    X += buttons_[i];
+
+    if (X > xscroll() && fltk3::event_x() < (x() + X - xscroll())) break;
+  }
+
+//  printf("handle_button(event = %d), button = %d\n", event, i);
+
+  // Redraw the directory bar...
+  if (event == fltk3::RELEASE) pressed_ = -1;
+  else pressed_ = (short)i;
+
+  window()->make_current();
+  draw_buttons();
+
+  // Return immediately if the user is clicking on the last button or
+  // has not released the mouse button...
+  if (!buttons_[i] || event != fltk3::RELEASE) return 1;
+
+  // Figure out where to truncate the path...
+  strlcpy(newvalue, value(), sizeof(newvalue));
+
+  for (start = newvalue, end = start; start && i >= 0; start = end, i --) {
+//    printf("    start = \"%s\"\n", start);
+    if ((end = strchr(start, '/')) == NULL)
+#if defined(WIN32) || defined(__EMX__)
+      if ((end = strchr(start, '\\')) == NULL)
+#endif // WIN32 || __EMX__
+      break;
+
+    end ++;
+  }
+
+  if (i < 0) {
+    // Found the end; truncate the value and update the buttons...
+    *start = '\0';
+    value(newvalue, start - newvalue);
+
+    // Then do the callbacks, if necessary...
+    set_changed();
+    if (when() & (fltk3::WHEN_CHANGED|fltk3::WHEN_RELEASE) ) do_callback();
+  }
+
+  return 1;
+}
+
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/GDIPrinter.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_GDI_Printer.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/GDIPrinter.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/GDIPrinter.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,285 @@
+//
+// "$Id$"
+//
+// Support for WIN32 printing for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2010 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
+//
+
+#ifdef WIN32
+#include <fltk3/Printer.h>
+
+
+#include <fltk3/ask.h>
+#include <fltk3/math.h>
+
+extern HWND fl_window;
+
+fltk3::SystemPrinter::SystemPrinter(void) : fltk3::PagedDevice() {
+  hPr = NULL;
+  driver(fltk3::DisplayDevice::display_device()->driver());
+}
+
+fltk3::SystemPrinter::~SystemPrinter(void) {
+  if (hPr) end_job();
+}
+
+static void WIN_SetupPrinterDeviceContext(HDC prHDC)
+{
+  if ( !prHDC ) return;
+  
+  fl_window = 0;
+  fl_gc = prHDC;
+  SetGraphicsMode(prHDC, GM_ADVANCED); // to allow for rotations
+  SetMapMode(prHDC, MM_ANISOTROPIC);
+  SetTextAlign(prHDC, TA_BASELINE|TA_LEFT);
+  SetBkMode(prHDC, TRANSPARENT);	
+  // this matches 720 logical units to the number of device units in 10 inches of paper
+  // thus the logical unit is the point (= 1/72 inch)
+  SetWindowExtEx(prHDC, 720, 720, NULL);
+  SetViewportExtEx(prHDC, 10*GetDeviceCaps(prHDC, LOGPIXELSX), 10*GetDeviceCaps(prHDC, LOGPIXELSY), NULL);
+}
+
+
+int fltk3::SystemPrinter::start_job (int pagecount, int *frompage, int *topage)
+// returns 0 iff OK
+{
+  DWORD       commdlgerr;
+  DOCINFO     di;
+  char        docName [256];
+  int err = 0;
+  
+  abortPrint = FALSE;
+  memset (&pd, 0, sizeof (PRINTDLG));
+  pd.lStructSize = sizeof (PRINTDLG);
+  pd.hwndOwner = GetForegroundWindow();
+  pd.Flags = PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE | PD_NOSELECTION;
+  pd.nMinPage = 1;
+  pd.nMaxPage = pagecount;
+  if (PrintDlg (&pd) != 0) {
+    hPr = pd.hDC;
+    if (hPr != NULL) {
+      strcpy (docName, "FLTK");
+      memset(&di, 0, sizeof(DOCINFO));
+      di.cbSize = sizeof (DOCINFO);
+      di.lpszDocName = (LPCSTR) docName;
+      prerr = StartDoc (hPr, &di);
+      if (prerr < 1) {
+	abortPrint = TRUE;
+	//fltk3::alert ("StartDoc error %d", prerr);
+	err = 1;
+      }
+    } else {
+      commdlgerr = CommDlgExtendedError ();
+      fltk3::alert ("Unable to create print context, error %lu",
+		(unsigned long) commdlgerr);
+      err = 1;
+    }
+  } else {
+    err = 1;
+  }
+  if(!err) {
+    if((pd.Flags & PD_PAGENUMS) != 0 ) {
+      if (frompage) *frompage = pd.nFromPage;
+      if (topage) *topage = pd.nToPage;
+    }
+    else {
+      if (frompage) *frompage = 1;
+      if (topage) *topage = pagecount;
+    }
+    x_offset = 0;
+    y_offset = 0;
+    WIN_SetupPrinterDeviceContext (hPr);
+    gc = (void *)fl_gc;
+    this->set_current();
+  }
+  return err;
+}
+
+void fltk3::SystemPrinter::end_job (void)
+{
+  fltk3::DisplayDevice::display_device()->set_current();
+  if (hPr != NULL) {
+    if (! abortPrint) {
+      prerr = EndDoc (hPr);
+      if (prerr < 0) {
+	fltk3::alert ("EndDoc error %d", prerr);
+      }
+    }
+    DeleteDC (hPr);
+    if (pd.hDevMode != NULL) {
+      GlobalFree (pd.hDevMode);
+    }
+    if (pd.hDevNames != NULL) {
+      GlobalFree (pd.hDevNames);
+    }
+  }
+  hPr = NULL;
+}
+
+void fltk3::SystemPrinter::absolute_printable_rect(int *x, int *y, int *w, int *h)
+{
+  POINT         physPageSize;
+  POINT         pixelsPerInch;
+    
+  if (hPr == NULL) return;
+  SetWindowOrgEx(fl_gc, 0, 0, NULL);
+  
+  physPageSize.x = GetDeviceCaps(hPr, HORZRES);
+  physPageSize.y = GetDeviceCaps(hPr, VERTRES);
+  DPtoLP(hPr, &physPageSize, 1);
+  *w = physPageSize.x + 1;
+  *h = physPageSize.y + 1;
+  pixelsPerInch.x = GetDeviceCaps(hPr, LOGPIXELSX);
+  pixelsPerInch.y = GetDeviceCaps(hPr, LOGPIXELSY);
+  DPtoLP(hPr, &pixelsPerInch, 1);
+  left_margin = (pixelsPerInch.x / 4);
+  *w -= (pixelsPerInch.x / 2);
+  top_margin = (pixelsPerInch.y / 4);
+  *h -= (pixelsPerInch.y / 2);
+  
+  *x = left_margin;
+  *y = top_margin;
+  origin(x_offset, y_offset);
+}
+
+void fltk3::SystemPrinter::margins(int *left, int *top, int *right, int *bottom)
+{
+  int x, y, w, h;
+  absolute_printable_rect(&x, &y, &w, &h);
+  if (left) *left = x;
+  if (top) *top = y;
+  if (right) *right = x;
+  if (bottom) *bottom = y;
+}
+
+int fltk3::SystemPrinter::printable_rect(int *w, int *h)
+{
+  int x, y;
+  absolute_printable_rect(&x, &y, w, h);
+  return 0;
+}
+
+int fltk3::SystemPrinter::start_page (void)
+{
+  int  rsult, w, h;
+  
+  rsult = 0;
+  if (hPr != NULL) {
+    WIN_SetupPrinterDeviceContext (hPr);
+    prerr = StartPage (hPr);
+    if (prerr < 0) {
+      fltk3::alert ("StartPage error %d", prerr);
+      rsult = 1;
+    }
+    printable_rect(&w, &h);
+    origin(0, 0);
+    fltk3::clip_region(0);
+    gc = (void *)fl_gc;
+  }
+  return rsult;
+}
+
+void fltk3::SystemPrinter::origin (int deltax, int deltay)
+{
+  SetWindowOrgEx(fl_gc, - left_margin - deltax, - top_margin - deltay, NULL);
+  x_offset = deltax;
+  y_offset = deltay;
+}
+
+void fltk3::SystemPrinter::scale (float scalex, float scaley)
+{
+  if (scaley == 0.) scaley = scalex;
+  int w, h;
+  SetWindowExtEx(fl_gc, (int)(720 / scalex + 0.5), (int)(720 / scaley + 0.5), NULL);
+  printable_rect(&w, &h);
+  origin(0, 0);
+}
+
+void fltk3::SystemPrinter::rotate (float rot_angle)
+{
+  XFORM mat;
+  float angle;
+  angle = - rot_angle * M_PI / 180.;
+  mat.eM11 = cos(angle);
+  mat.eM12 = sin(angle);
+  mat.eM21 = - mat.eM12;
+  mat.eM22 = mat.eM11;
+  mat.eDx = mat.eDy = 0;
+  SetWorldTransform(fl_gc, &mat);
+}
+
+int fltk3::SystemPrinter::end_page (void)
+{
+  int  rsult;
+  
+  rsult = 0;
+  if (hPr != NULL) {
+    prerr = EndPage (hPr);
+    if (prerr < 0) {
+      abortPrint = TRUE;
+      fltk3::alert ("EndPage error %d", prerr);
+      rsult = 1;
+    }
+  }
+  gc = NULL;
+  return rsult;
+}
+
+static int translate_stack_depth = 0;
+const int translate_stack_max = 5;
+static int translate_stack_x[translate_stack_max];
+static int translate_stack_y[translate_stack_max];
+
+static void do_translate(int x, int y)
+{
+  XFORM tr;
+  tr.eM11 = tr.eM22 = 1;
+  tr.eM12 = tr.eM21 = 0;
+  tr.eDx =  x;
+  tr.eDy =  y;
+  ModifyWorldTransform(fl_gc, &tr, MWT_LEFTMULTIPLY);
+}
+
+void fltk3::SystemPrinter::translate (int x, int y)
+{
+  do_translate(x, y);
+  if (translate_stack_depth < translate_stack_max) {
+    translate_stack_x[translate_stack_depth] = x;
+    translate_stack_y[translate_stack_depth] = y;
+    translate_stack_depth++;
+    }
+}
+
+void fltk3::SystemPrinter::untranslate (void)
+{
+  if (translate_stack_depth > 0) {
+    translate_stack_depth--;
+    do_translate( - translate_stack_x[translate_stack_depth], - translate_stack_y[translate_stack_depth] );
+    }
+}
+
+#endif // WIN32
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Group.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Group.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Group.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Group.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,873 @@
+//
+// "$Id$"
+//
+// Group widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+// The fltk3::Group is the only defined container type in FLTK.
+
+// fltk3::Window itself is a subclass of this, and most of the event
+// handling is designed so windows themselves work correctly.
+
+#include <stdio.h>
+#include <fltk3/run.h>
+#include <fltk3/Group.h>
+#include <fltk3/Window.h>
+#include <fltk3/draw.h>
+#include <stdlib.h>
+
+fltk3::Group* fltk3::Group::current_;
+
+// Hack: A single child is stored in the pointer to the array, while
+// multiple children are stored in an allocated array:
+
+/**
+  Returns a pointer to the array of children. <I>This pointer is only
+  valid until the next time a child is added or removed.</I>
+*/
+fltk3::Widget*const* fltk3::Group::array() const {
+  return children_ <= 1 ? (fltk3::Widget**)(&array_) : array_;
+}
+
+/**
+  Searches the child array for the widget and returns the index. Returns children()
+  if the widget is NULL or not found.
+*/
+int fltk3::Group::find(const fltk3::Widget* o) const {
+  fltk3::Widget*const* a = array();
+  int i; for (i=0; i < children_; i++) if (*a++ == o) break;
+  return i;
+}
+
+// Metrowerks CodeWarrior and others can't export the static
+// class member: current_, so these methods can't be inlined...
+
+/**
+  Sets the current group so you can build the widget
+  tree by just constructing the widgets.
+
+  begin() is automatically called by the constructor for fltk3::Group (and thus for
+  fltk3::Window as well). begin() <I>is exactly the same as</I> current(this).
+  <I>Don't forget to end() the group or window!</I>
+*/
+void fltk3::Group::begin() {current_ = this;}
+
+/**
+  <I>Exactly the same as</I> current(this->parent()). Any new widgets
+  added to the widget tree will be added to the parent of the group.
+*/
+void fltk3::Group::end() {current_ = parent();}
+
+/**
+  Returns the currently active group.
+  
+  The fltk3::Widget constructor automatically does current()->add(widget) if this
+  is not null. To prevent new widgets from being added to a group, call
+  fltk3::Group::current(0).
+*/
+fltk3::Group *fltk3::Group::current() {return current_;}
+
+/**
+  Sets the current group.
+  \see fltk3::Group::current() 
+*/
+void fltk3::Group::current(fltk3::Group *g) {current_ = g;}
+
+extern fltk3::Widget* fl_oldfocus; // set by fltk3::focus
+
+// For back-compatibility, we must adjust all events sent to child
+// windows so they are relative to that window.
+
+static int send(fltk3::Widget* o, int event) {
+  if (o->type() < fltk3::WINDOW) return o->handle(event);
+  switch ( event )
+  {
+  case fltk3::DND_ENTER: /* FALLTHROUGH */
+  case fltk3::DND_DRAG:
+    // figure out correct type of event:
+    event = (o->contains(fltk3::belowmouse())) ? fltk3::DND_DRAG : fltk3::DND_ENTER;
+  }
+  int save_x = fltk3::e_x; fltk3::e_x -= o->x();
+  int save_y = fltk3::e_y; fltk3::e_y -= o->y();
+  int ret = o->handle(event);
+  fltk3::e_y = save_y;
+  fltk3::e_x = save_x;
+  switch ( event )
+  {
+  case fltk3::ENTER: /* FALLTHROUGH */
+  case fltk3::DND_ENTER:
+    // Successful completion of fltk3::ENTER means the widget is now the
+    // belowmouse widget, but only call fltk3::belowmouse if the child
+    // widget did not do so:
+    if (!o->contains(fltk3::belowmouse())) fltk3::belowmouse(o);
+    break;
+  }
+  return ret;
+}
+
+// translate the current keystroke into up/down/left/right for navigation:
+#define ctrl(x) (x^0x40)
+static int navkey() {
+  switch (fltk3::event_key()) {
+  case 0: // not an fltk3::KEYBOARD/fltk3::SHORTCUT event
+    break;
+  case fltk3::TabKey:
+    if (!fltk3::event_state(fltk3::SHIFT)) return fltk3::RightKey;
+    return fltk3::LeftKey;
+  case fltk3::RightKey:
+    return fltk3::RightKey;
+  case fltk3::LeftKey:
+    return fltk3::LeftKey;
+  case fltk3::UpKey:
+    return fltk3::UpKey;
+  case fltk3::DownKey:
+    return fltk3::DownKey;
+  }
+  return 0;
+}
+
+int fltk3::Group::handle(int event) {
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, handle(event), Handle)
+  fltk3::Widget*const* a = array();
+  int i;
+  fltk3::Widget* o;
+
+  switch (event) {
+
+  case fltk3::FOCUS:
+    switch (navkey()) {
+    default:
+      if (savedfocus_ && savedfocus_->take_focus()) return 1;
+    case fltk3::RightKey:
+    case fltk3::DownKey:
+      for (i = children(); i--;) if ((*a++)->take_focus()) return 1;
+      break;
+    case fltk3::LeftKey:
+    case fltk3::UpKey:
+      for (i = children(); i--;) if (a[i]->take_focus()) return 1;
+      break;
+    }
+    return 0;
+
+  case fltk3::UNFOCUS:
+    savedfocus_ = fl_oldfocus;
+    return 0;
+
+  case fltk3::KEYBOARD:
+    return navigation(navkey());
+
+  case fltk3::SHORTCUT:
+    for (i = children(); i--;) {
+      o = a[i];
+      if (o->takesevents() && fltk3::event_inside(o) && send(o,fltk3::SHORTCUT))
+	return 1;
+    }
+    for (i = children(); i--;) {
+      o = a[i];
+      if (o->takesevents() && !fltk3::event_inside(o) && send(o,fltk3::SHORTCUT))
+	return 1;
+    }
+    if ((fltk3::event_key() == fltk3::EnterKey || fltk3::event_key() == fltk3::KPEnterKey)) return navigation(fltk3::DownKey);
+    return 0;
+
+  case fltk3::ENTER:
+  case fltk3::MOVE:
+    for (i = children(); i--;) {
+      o = a[i];
+      if (o->visible() && fltk3::event_inside(o)) {
+	if (o->contains(fltk3::belowmouse())) {
+	  return send(o,fltk3::MOVE);
+	} else {
+	  fltk3::belowmouse(o);
+	  if (send(o,fltk3::ENTER)) return 1;
+	}
+      }
+    }
+    fltk3::belowmouse(this);
+    return 1;
+
+  case fltk3::DND_ENTER:
+  case fltk3::DND_DRAG:
+    for (i = children(); i--;) {
+      o = a[i];
+      if (o->takesevents() && fltk3::event_inside(o)) {
+	if (o->contains(fltk3::belowmouse())) {
+	  return send(o,fltk3::DND_DRAG);
+	} else if (send(o,fltk3::DND_ENTER)) {
+	  if (!o->contains(fltk3::belowmouse())) fltk3::belowmouse(o);
+	  return 1;
+	}
+      }
+    }
+    fltk3::belowmouse(this);
+    return 0;
+
+  case fltk3::PUSH:
+    for (i = children(); i--;) {
+      o = a[i];
+      if (o->takesevents() && fltk3::event_inside(o)) {
+	fltk3::WidgetTracker wp(o);
+	if (send(o,fltk3::PUSH)) {
+	  if (fltk3::pushed() && wp.exists() && !o->contains(fltk3::pushed())) fltk3::pushed(o);
+	  return 1;
+	}
+      }
+    }
+    return 0;
+
+  case fltk3::RELEASE:
+  case fltk3::DRAG:
+    o = fltk3::pushed();
+    if (o == this) return 0;
+    else if (o) send(o,event);
+    else {
+      for (i = children(); i--;) {
+	o = a[i];
+	if (o->takesevents() && fltk3::event_inside(o)) {
+	  if (send(o,event)) return 1;
+	}
+      }
+    }
+    return 0;
+
+  case fltk3::MOUSEWHEEL:
+    for (i = children(); i--;) {
+      o = a[i];
+      if (o->takesevents() && fltk3::event_inside(o) && send(o,fltk3::MOUSEWHEEL))
+	return 1;
+    }
+    for (i = children(); i--;) {
+      o = a[i];
+      if (o->takesevents() && !fltk3::event_inside(o) && send(o,fltk3::MOUSEWHEEL))
+	return 1;
+    }
+    return 0;
+
+  case fltk3::DEACTIVATE:
+  case fltk3::ACTIVATE:
+    for (i = children(); i--;) {
+      o = *a++;
+      if (o->active()) o->handle(event);
+    }
+    return 1;
+
+  case fltk3::SHOW:
+  case fltk3::HIDE:
+    for (i = children(); i--;) {
+      o = *a++;
+      if (event == fltk3::HIDE && o == fltk3::focus()) {
+        // Give up input focus...
+	int old_event = fltk3::e_number;
+        o->handle(fltk3::e_number = fltk3::UNFOCUS);
+	fltk3::e_number = old_event;
+	fltk3::focus(0);
+      }
+      if (o->visible()) o->handle(event);
+    }
+    return 1;
+
+  default:
+    // For all other events, try to give to each child, starting at focus:
+    for (i = 0; i < children(); i ++)
+      if (fltk3::focus_ == a[i]) break;
+
+    if (i >= children()) i = 0;
+
+    if (children()) {
+      for (int j = i;;) {
+        if (a[j]->takesevents()) if (send(a[j], event)) return 1;
+        j++;
+        if (j >= children()) j = 0;
+        if (j == i) break;
+      }
+    }
+
+    return 0;
+  }
+}
+
+//void fltk3::Group::focus(fltk3::Widget *o) {fltk3::focus(o); o->handle(fltk3::FOCUS);}
+
+#if 0
+const char *nameof(fltk3::Widget *o) {
+  if (!o) return "NULL";
+  if (!o->label()) return "<no label>";
+  return o->label();
+}
+#endif
+
+// try to move the focus in response to a keystroke:
+int fltk3::Group::navigation(int key) {
+  if (children() <= 1) return 0;
+  int i;
+  for (i = 0; ; i++) {
+    if (i >= children_) return 0;
+    if (array_[i]->contains(fltk3::focus())) break;
+  }
+  fltk3::Widget *previous = array_[i];
+
+  for (;;) {
+    switch (key) {
+    case fltk3::RightKey:
+    case fltk3::DownKey:
+      i++;
+      if (i >= children_) {
+	if (parent()) return 0;
+	i = 0;
+      }
+      break;
+    case fltk3::LeftKey:
+    case fltk3::UpKey:
+      if (i) i--;
+      else {
+	if (parent()) return 0;
+	i = children_-1;
+      }
+      break;
+    default:
+      return 0;
+    }
+    fltk3::Widget* o = array_[i];
+    if (o == previous) return 0;
+    switch (key) {
+    case fltk3::DownKey:
+    case fltk3::UpKey:
+      // for up/down, the widgets have to overlap horizontally:
+      if (o->x() >= previous->x()+previous->w() ||
+	  o->x()+o->w() <= previous->x()) continue;
+    }
+    if (o->take_focus()) return 1;
+  }
+}
+
+////////////////////////////////////////////////////////////////
+
+fltk3::Group::Group(int X,int Y,int W,int H,const char *l)
+: fltk3::Widget(X,Y,W,H,l) {
+  align(fltk3::ALIGN_TOP);
+  children_ = 0;
+  array_ = 0;
+  savedfocus_ = 0;
+  resizable_ = this;
+  sizes_ = 0; // this is allocated when first resize() is done
+  // Subclasses may want to construct child objects as part of their
+  // constructor, so make sure they are add()'d to this object.
+  // But you must end() the object!
+  begin();
+}
+
+/**
+  Deletes all child widgets from memory recursively.
+
+  This method differs from the remove() method in that it
+  affects all child widgets and deletes them from memory.
+*/
+void fltk3::Group::clear() {
+  savedfocus_ = 0;
+  resizable_ = this;
+  init_sizes();
+
+  // we must change the fltk3::pushed() widget, if it is one of
+  // the group's children. Otherwise fl_fix_focus() would send
+  // lots of events to children that are about to be deleted
+  // anyway.
+
+  fltk3::Widget *pushed = fltk3::pushed();	// save pushed() widget
+  if (contains(pushed)) pushed = this;	// set it to be the group, if it's a child
+  fltk3::pushed(this);			// for fl_fix_focus etc.
+
+  // okay, now it is safe to destroy the children:
+
+#define REVERSE_CHILDREN
+#ifdef  REVERSE_CHILDREN
+  // Reverse the order of the children. Doing this and deleting
+  // always the last child is much faster than the other way around.
+  if (children_ > 1) {
+    fltk3::Widget *temp;
+    fltk3::Widget **a = (fltk3::Widget**)array();
+    for (int i=0,j=children_-1; i<children_/2; i++,j--) {
+      temp = a[i];
+      a[i] = a[j];
+      a[j] = temp;
+    }
+  }
+#endif // REVERSE_CHILDREN
+
+  while (children_) {			// delete all children
+    int idx = children_-1;		// last child's index
+    fltk3::Widget* w = child(idx);		// last child widget
+    if (w->parent()==this) {		// should always be true
+      if (children_>2) {		// optimized removal
+        w->parent_ = 0;			// reset child's parent
+        children_--;			// update counter
+      } else {				// slow removal
+        remove(idx);
+      }
+      delete w;				// delete the child
+    } else {				// should never happen
+      remove(idx);			// remove it anyway
+    }
+  }
+
+  if (pushed != this) fltk3::pushed(pushed); // reset pushed() widget
+
+}
+
+/**
+  The destructor <I>also deletes all the children</I>. This allows a
+  whole tree to be deleted at once, without having to keep a pointer to
+  all the children in the user code.
+  
+  It is allowed that the fltk3::Group and all of its children are automatic
+  (local) variables, but you must declare the fltk3::Group \e first, so that
+  it is destroyed last.
+  
+  If you add static or automatic (local) variables to an fltk3::Group, then it
+  is your responsibility to remove (or delete) all such static or automatic
+  child widgets \e \b before destroying the group - otherwise the child
+  widgets' destructors would be called twice!
+*/
+fltk3::Group::~Group() {
+  clear();
+}
+
+/**
+  The widget is removed from its current group (if any) and then
+  inserted into this group. It is put at index n - or at the end,
+  if n >= children(). This can also be used to rearrange
+  the widgets inside a group.
+*/
+void fltk3::Group::insert(fltk3::Widget &o, int index) {
+  if (o.parent()) {
+    fltk3::Group* g = o.parent();
+    int n = g->find(o);
+    if (g == this) {
+      if (index > n) index--;
+      if (index == n) return;
+    }
+    g->remove(n);
+  }
+  o.parent_ = this;
+  if (children_ == 0) { // use array pointer to point at single child
+    array_ = (fltk3::Widget**)&o;
+  } else if (children_ == 1) { // go from 1 to 2 children
+    fltk3::Widget* t = (fltk3::Widget*)array_;
+    array_ = (fltk3::Widget**)malloc(2*sizeof(fltk3::Widget*));
+    if (index) {array_[0] = t; array_[1] = &o;}
+    else {array_[0] = &o; array_[1] = t;}
+  } else {
+    if (!(children_ & (children_-1))) // double number of children
+      array_ = (fltk3::Widget**)realloc((void*)array_,
+				    2*children_*sizeof(fltk3::Widget*));
+    int j; for (j = children_; j > index; j--) array_[j] = array_[j-1];
+    array_[j] = &o;
+  }
+  children_++;
+  init_sizes();
+}
+
+/**
+  The widget is removed from its current group (if any) and then added
+  to the end of this group.
+*/
+void fltk3::Group::add(fltk3::Widget &o) {insert(o, children_);}
+
+/**
+  Removes the widget at \p index from the group but does not delete it.
+
+  This method does nothing if \p index is out of bounds.
+
+  This method differs from the clear() method in that it only affects
+  a single widget and does not delete it from memory.
+  
+  \since FLTK 1.3.0
+*/
+void fltk3::Group::remove(int index) {
+  if (index < 0 || index >= children_) return;
+  fltk3::Widget &o = *child(index);
+  if (&o == savedfocus_) savedfocus_ = 0;
+  if (o.parent_ == this) {	// this should always be true
+    o.parent_ = 0;
+  } 
+
+  // remove the widget from the group
+
+  children_--;
+  if (children_ == 1) { // go from 2 to 1 child
+    fltk3::Widget *t = array_[!index];
+    free((void*)array_);
+    array_ = (fltk3::Widget**)t;
+  } else if (children_ > 1) { // delete from array
+    for (; index < children_; index++) array_[index] = array_[index+1];
+  }
+  init_sizes();
+}
+
+/**
+  Removes a widget from the group but does not delete it.
+
+  This method does nothing if the widget is not a child of the group.
+
+  This method differs from the clear() method in that it only affects
+  a single widget and does not delete it from memory.
+  
+  \note If you have the child's index anyway, use remove(int index)
+  instead, because this doesn't need a child lookup in the group's
+  table of children. This can be much faster, if there are lots of
+  children.
+*/
+void fltk3::Group::remove(fltk3::Widget &o) {
+  if (!children_) return;
+  int i = find(o);
+  if (i < children_) remove(i);
+}
+
+////////////////////////////////////////////////////////////////
+
+// Rather lame kludge here, I need to detect windows and ignore the
+// changes to X,Y, since all children are relative to X,Y.  That
+// is why I check type():
+
+// sizes array stores the initial positions of widgets as
+// left,right,top,bottom quads.  The first quad is the group, the
+// second is the resizable (clipped to the group), and the
+// rest are the children.  This is a convenient order for the
+// algorithm.  If you change this be sure to fix fltk3::TiledGroup which
+// also uses this array!
+
+/**
+  Resets the internal array of widget sizes and positions.
+
+  The fltk3::Group widget keeps track of the original widget sizes and
+  positions when resizing occurs so that if you resize a window back to its
+  original size the widgets will be in the correct places. If you rearrange
+  the widgets in your group, call this method to register the new arrangement
+  with the fltk3::Group that contains them.
+  
+  If you add or remove widgets, this will be done automatically.
+  
+  \note The internal array of widget sizes and positions will be allocated and
+  filled when the next resize() occurs.
+  
+  \sa sizes()
+*/
+void fltk3::Group::init_sizes() {
+  delete[] sizes_; sizes_ = 0;
+}
+
+/**
+  Returns the internal array of widget sizes and positions.
+
+  If the sizes() array does not exist, it will be allocated and filled
+  with the current widget sizes and positions.
+
+  \note You should never need to use this method directly, unless you have
+  special needs to rearrange the children of a fltk3::Group. fltk3::TiledGroup uses
+  this to rearrange its widget positions.
+  
+  \sa init_sizes()
+
+  \todo Should the internal representation of the sizes() array be documented?
+*/
+int* fltk3::Group::sizes() {
+  if (!sizes_) {
+    int* p = sizes_ = new int[4*(children_+2)];
+    // first thing in sizes array is the group's size:
+    if (type() < fltk3::WINDOW) {p[0] = x(); p[2] = y();} else {p[0] = p[2] = 0;}
+    p[1] = p[0]+w(); p[3] = p[2]+h();
+    // next is the resizable's size:
+    p[4] = p[0]; // init to the group's size
+    p[5] = p[1];
+    p[6] = p[2];
+    p[7] = p[3];
+    fltk3::Widget* r = resizable();
+    if (r && r != this) { // then clip the resizable to it
+      int t;
+      t = r->x(); if (t > p[0]) p[4] = t;
+      t +=r->w(); if (t < p[1]) p[5] = t;
+      t = r->y(); if (t > p[2]) p[6] = t;
+      t +=r->h(); if (t < p[3]) p[7] = t;
+    }
+    // next is all the children's sizes:
+    p += 8;
+    fltk3::Widget*const* a = array();
+    for (int i=children_; i--;) {
+      fltk3::Widget* o = *a++;
+      *p++ = o->x();
+      *p++ = o->x()+o->w();
+      *p++ = o->y();
+      *p++ = o->y()+o->h();
+    }
+  }
+  return sizes_;
+}
+
+/**
+  Resizes the fltk3::Group widget and all of its children.
+
+  The fltk3::Group widget first resizes itself, and then it moves and resizes
+  all its children according to the rules documented for
+  fltk3::Group::resizable(fltk3::Widget*)
+
+  \sa fltk3::Group::resizable(fltk3::Widget*)
+  \sa fltk3::Group::resizable()
+  \sa fltk3::Widget::resize(int,int,int,int)
+*/
+void fltk3::Group::resize(int X, int Y, int W, int H) {
+
+  int dx = X-x();
+  int dy = Y-y();
+  int dw = W-w();
+  int dh = H-h();
+  
+  int *p = sizes(); // save initial sizes and positions
+
+  Widget::resize(X,Y,W,H); // make new xywh values visible for children
+
+  if (!resizable() || (dw==0 && dh==0) ) {
+
+    if (type() < fltk3::WINDOW) {
+      fltk3::Widget*const* a = array();
+      for (int i=children_; i--;) {
+	fltk3::Widget* o = *a++;
+	o->resize(o->x()+dx, o->y()+dy, o->w(), o->h());
+      }
+    }
+
+  } else if (children_) {
+
+    // get changes in size/position from the initial size:
+    dx = X - p[0];
+    dw = W - (p[1]-p[0]);
+    dy = Y - p[2];
+    dh = H - (p[3]-p[2]);
+    if (type() >= fltk3::WINDOW) dx = dy = 0;
+    p += 4;
+
+    // get initial size of resizable():
+    int IX = *p++;
+    int IR = *p++;
+    int IY = *p++;
+    int IB = *p++;
+
+    fltk3::Widget*const* a = array();
+    for (int i=children_; i--;) {
+      fltk3::Widget* o = *a++;
+#if 1
+      int XX = *p++;
+      if (XX >= IR) XX += dw;
+      else if (XX > IX) XX = IX+((XX-IX)*(IR+dw-IX)+(IR-IX)/2)/(IR-IX);
+      int R = *p++;
+      if (R >= IR) R += dw;
+      else if (R > IX) R = IX+((R-IX)*(IR+dw-IX)+(IR-IX)/2)/(IR-IX);
+
+      int YY = *p++;
+      if (YY >= IB) YY += dh;
+      else if (YY > IY) YY = IY+((YY-IY)*(IB+dh-IY)+(IB-IY)/2)/(IB-IY);
+      int B = *p++;
+      if (B >= IB) B += dh;
+      else if (B > IY) B = IY+((B-IY)*(IB+dh-IY)+(IB-IY)/2)/(IB-IY);
+#else // much simpler code from Francois Ostiguy:
+      int XX = *p++;
+      if (XX >= IR) XX += dw;
+      else if (XX > IX) XX += dw * (XX-IX)/(IR-IX);
+      int R = *p++;
+      if (R >= IR) R += dw;
+      else if (R > IX) R = R + dw * (R-IX)/(IR-IX);
+
+      int YY = *p++;
+      if (YY >= IB) YY += dh;
+      else if (YY > IY) YY = YY + dh*(YY-IY)/(IB-IY);
+      int B = *p++;
+      if (B >= IB) B += dh;
+      else if (B > IY) B = B + dh*(B-IY)/(IB-IY);
+#endif
+      o->resize(XX+dx, YY+dy, R-XX, B-YY);
+    }
+  }
+}
+
+/**
+  Draws all children of the group.
+
+  This is useful, if you derived a widget from fltk3::Group and want to draw a special
+  border or background. You can call draw_children() from the derived draw() method
+  after drawing the box, border, or background.
+*/
+void fltk3::Group::draw_children() {
+  fltk3::Widget*const* a = array();
+
+  if (clip_children()) {
+    fltk3::push_clip(x() + fltk3::box_dx(box()),
+                 y() + fltk3::box_dy(box()),
+		 w() - fltk3::box_dw(box()),
+		 h() - fltk3::box_dh(box()));
+  }
+
+  if (damage() & ~fltk3::DAMAGE_CHILD) { // redraw the entire thing:
+    for (int i=children_; i--;) {
+      fltk3::Widget& o = **a++;
+      draw_child(o);
+      draw_outside_label(o);
+    }
+  } else {	// only redraw the children that need it:
+    for (int i=children_; i--;) update_child(**a++);
+  }
+
+  if (clip_children()) fltk3::pop_clip();
+}
+
+void fltk3::Group::draw() {
+  FLTK3_OBJECT_VCALLS_WRAPPER(draw(), Draw)
+  if (damage() & ~fltk3::DAMAGE_CHILD) { // redraw the entire thing:
+    draw_box();
+    draw_label();
+  }
+  draw_children();
+}
+
+/**
+  Draws a child only if it needs it.
+
+  This draws a child widget, if it is not clipped \em and if any damage() bits
+  are set. The damage bits are cleared after drawing.
+
+  \sa fltk3::Group::draw_child(fltk3::Widget& widget) const
+*/
+void fltk3::Group::update_child(fltk3::Widget& widget) const {
+  if (widget.damage() && widget.visible() && widget.type() < fltk3::WINDOW &&
+      fltk3::not_clipped(widget.x(), widget.y(), widget.w(), widget.h())) {
+    widget.draw();	
+    widget.clear_damage();
+  }
+}
+
+/**
+  Forces a child to redraw.
+
+  This draws a child widget, if it is not clipped.
+  The damage bits are cleared after drawing.
+*/
+void fltk3::Group::draw_child(fltk3::Widget& widget) const {
+  if (widget.visible() && widget.type() < fltk3::WINDOW &&
+      fltk3::not_clipped(widget.x(), widget.y(), widget.w(), widget.h())) {
+    widget.clear_damage(fltk3::DAMAGE_ALL);
+    widget.draw();
+    widget.clear_damage();
+  }
+}
+
+extern char fltk3::draw_shortcut;
+
+/** Parents normally call this to draw outside labels of child widgets. */
+void fltk3::Group::draw_outside_label(const fltk3::Widget& widget) const {
+  if (!widget.visible()) return;
+  // skip any labels that are inside the widget:
+  if (!(widget.align()&15) || (widget.align() & fltk3::ALIGN_INSIDE)) return;
+  // invent a box that is outside the widget:
+  fltk3::Align a = widget.align();
+  int X = widget.x();
+  int Y = widget.y();
+  int W = widget.w();
+  int H = widget.h();
+  int wx, wy;
+  if (const_cast<fltk3::Group*>(this)->as_window()) {
+    wx = wy = 0;
+  } else {
+    wx = x(); wy = y();
+  }
+  if ( (a & 0x0f) == fltk3::ALIGN_LEFT_TOP ) {
+    a = (a &~0x0f ) | fltk3::ALIGN_TOP_RIGHT;
+    X = wx;
+    W = widget.x()-X-3;
+  } else if ( (a & 0x0f) == fltk3::ALIGN_LEFT_BOTTOM ) {
+    a = (a &~0x0f ) | fltk3::ALIGN_BOTTOM_RIGHT; 
+    X = wx;
+    W = widget.x()-X-3;
+  } else if ( (a & 0x0f) == fltk3::ALIGN_RIGHT_TOP ) {
+    a = (a &~0x0f ) | fltk3::ALIGN_TOP_LEFT; 
+    X = X+W+3;
+    W = wx+this->w()-X;
+  } else if ( (a & 0x0f) == fltk3::ALIGN_RIGHT_BOTTOM ) {
+    a = (a &~0x0f ) | fltk3::ALIGN_BOTTOM_LEFT; 
+    X = X+W+3;
+    W = wx+this->w()-X;
+  } else if (a & fltk3::ALIGN_TOP) {
+    a ^= (fltk3::ALIGN_BOTTOM|fltk3::ALIGN_TOP);
+    Y = wy;
+    H = widget.y()-Y;
+  } else if (a & fltk3::ALIGN_BOTTOM) {
+    a ^= (fltk3::ALIGN_BOTTOM|fltk3::ALIGN_TOP);
+    Y = Y+H;
+    H = wy+h()-Y;
+  } else if (a & fltk3::ALIGN_LEFT) {
+    a ^= (fltk3::ALIGN_LEFT|fltk3::ALIGN_RIGHT);
+    X = wx;
+    W = widget.x()-X-3;
+  } else if (a & fltk3::ALIGN_RIGHT) {
+    a ^= (fltk3::ALIGN_LEFT|fltk3::ALIGN_RIGHT);
+    X = X+W+3;
+    W = wx+this->w()-X;
+  }
+  widget.draw_label(X,Y,W,H,(fltk3::Align)a);
+}
+
+void fltk3::Group::forms_end() {
+  // set the dimensions of a group to surround contents
+  if (children() && !w()) {
+    fltk3::Widget*const* a = array();
+    fltk3::Widget* o = *a++;
+    int rx = o->x();
+    int ry = o->y();
+    int rw = rx+o->w();
+    int rh = ry+o->h();
+    for (int i=children_-1; i--;) {
+      o = *a++;
+      if (o->x() < rx) rx = o->x();
+      if (o->y() < ry) ry = o->y();
+      if (o->x()+o->w() > rw) rw = o->x()+o->w();
+      if (o->y()+o->h() > rh) rh = o->y()+o->h();
+    }
+    x(rx);
+    y(ry);
+    w(rw-rx);
+    h(rh-ry);
+  }
+  // flip all the children's coordinate systems:
+  //if (fl_flip) {
+    fltk3::Widget* o = (type()>=fltk3::WINDOW) ? this : window();
+    int Y = o->h();
+    fltk3::Widget*const* a = array();
+    for (int i=children(); i--;) {
+      fltk3::Widget* ow = *a++;
+      int newy = Y-ow->y()-ow->h();
+      ow->y(newy);
+    }
+  //}
+  end();
+}
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/HelpView.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Help_View.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/HelpView.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/HelpView.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,3520 @@
+//
+// "$Id$"
+//
+// fltk3::HelpView widget routines.
+//
+// Copyright 1997-2010 by Easy Software Products.
+// Image support by Matthias Melcher, Copyright 2000-2009.
+//
+// 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
+//
+// Contents:
+//
+//   fltk3::HelpView::add_block()       - Add a text block to the list.
+//   fltk3::HelpView::add_link()        - Add a new link to the list.
+//   fltk3::HelpView::add_target()      - Add a new target to the list.
+//   fltk3::HelpView::compare_targets() - Compare two targets.
+//   fltk3::HelpView::do_align()        - Compute the alignment for a line in
+//                                     a block.
+//   fltk3::HelpView::draw()            - Draw the fltk3::HelpView widget.
+//   fltk3::HelpView::format()          - Format the help text.
+//   fltk3::HelpView::format_table()    - Format a table...
+//   fltk3::HelpView::free_data()       - Free memory used for the document.
+//   fltk3::HelpView::get_align()       - Get an alignment attribute.
+//   fltk3::HelpView::get_attr()        - Get an attribute value from the string.
+//   fltk3::HelpView::get_color()       - Get an alignment attribute.
+//   fltk3::HelpView::handle()          - Handle events in the widget.
+//   fltk3::HelpView::fltk3::HelpView()    - Build a fltk3::HelpView widget.
+//   fltk3::HelpView::~Fl_Help_View()   - Destroy a fltk3::HelpView widget.
+//   fltk3::HelpView::load()            - Load the specified file.
+//   fltk3::HelpView::resize()          - Resize the help widget.
+//   fltk3::HelpView::topline()         - Set the top line to the named target.
+//   fltk3::HelpView::topline()         - Set the top line by number.
+//   fltk3::HelpView::value()           - Set the help text directly.
+//   scrollbar_callback()            - A callback for the scrollbar.
+//
+
+//
+// Include necessary header files...
+//
+
+#include <fltk3/HelpView.h>
+#include <fltk3/Window.h>
+#include <fltk3/Pixmap.h>
+#include <fltk3/x.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fltk3/utf8.h>
+#include <fltk3/filename.h>	// fltk3::open_uri()
+#include "flstring.h"
+#include <ctype.h>
+#include <errno.h>
+#include <math.h>
+
+#if defined(WIN32) && ! defined(__CYGWIN__)
+#  include <io.h>
+#  include <direct.h>
+#else
+#  include <unistd.h>
+#endif // WIN32
+
+#define MAX_COLUMNS	200
+
+
+//
+// Typedef the C API sort function type the only way I know how...
+//
+
+extern "C"
+{
+  typedef int (*compare_func_t)(const void *, const void *);
+}
+
+
+//
+// Local functions...
+//
+
+static int	quote_char(const char *);
+static void	scrollbar_callback(fltk3::Widget *s, void *);
+static void	hscrollbar_callback(fltk3::Widget *s, void *);
+
+//
+// global flag for image loading (see get_image).
+//
+
+static char initial_load = 0;
+
+//
+// Broken image...
+//
+
+static const char *broken_xpm[] =
+		{
+		  "16 24 4 1",
+		  "@ c #000000",
+		  "  c #ffffff",
+		  "+ c none",
+		  "x c #ff0000",
+		  // pixels
+		  "@@@@@@@+++++++++",
+		  "@    @++++++++++",
+		  "@   @+++++++++++",
+		  "@   @++@++++++++",
+		  "@    @@+++++++++",
+		  "@     @+++@+++++",
+		  "@     @++@@++++@",
+		  "@ xxx  @@  @++@@",
+		  "@  xxx    xx@@ @",
+		  "@   xxx  xxx   @",
+		  "@    xxxxxx    @",
+		  "@     xxxx     @",
+		  "@    xxxxxx    @",
+		  "@   xxx  xxx   @",
+		  "@  xxx    xxx  @",
+		  "@ xxx      xxx @",
+		  "@              @",
+		  "@              @",
+		  "@              @",
+		  "@              @",
+		  "@              @",
+		  "@              @",
+		  "@              @",
+		  "@@@@@@@@@@@@@@@@",
+		  NULL
+		};
+
+static fltk3::Pixmap broken_image(broken_xpm);
+
+//
+// Simple margin stack for fltk3::HelpView::format()...
+//
+
+struct fl_margins {
+  int depth_;
+  int margins_[100];
+
+  fl_margins() { clear();  }
+
+  int clear() {
+//    puts("fl_margins::clear()");
+
+    depth_ = 0;
+    return margins_[0] = 4;
+  }
+
+  int current() { return margins_[depth_]; }
+
+  int pop() {
+//    printf("fl_margins::pop(): depth_=%d, xx=%d\n", depth_,
+//           depth_ > 0 ? margins_[depth_ - 1] : 4);
+
+    if (depth_ > 0) {
+      depth_ --;
+      return margins_[depth_];
+    } else return 4;
+  }
+
+  int push(int indent) {
+    int xx;
+
+    xx = margins_[depth_] + indent;
+
+//    printf("fl_margins::push(indent=%d): depth_=%d, xx=%d\n", indent,
+//           depth_ + 1, xx);
+
+    if (depth_ < 99) {
+      depth_ ++;
+      margins_[depth_] = xx;
+    }
+
+    return xx;
+  }
+};
+
+//
+// All the stuff needed to implement text selection in fltk3::HelpView
+//
+
+/* matt:
+ * We are trying to keep binary compatibility with previous versions
+ * of FLTK. This means that we are limited to adding static variables
+ * only to not enlarge the fltk3::HelpView class. Lucky for us, only one
+ * text can be selected system wide, so we can remember the selection
+ * in a single set of variables.
+ *
+ * Still to do:
+ * - &word; style characters mess up our count inside a word boundary
+ * - we can only select words, no individual characters
+ * - no dragging of the selection into another widget
+ * - selection must be cleared if another widget get focus!
+ * - write a comment for every new function
+ */
+
+/*
+The following functions are also used to draw stuff and should be replaced with
+local copies that are much faster when merely counting:
+
+fltk3::color(fltk3::Color);
+fltk3::rectf(int, int, int, int);
+fltk3::push_clip(int, int, int, int);
+fltk3::xyline(int, int, int);
+fltk3::rect()
+fltk3::line()
+img->draw()
+*/
+
+// We don't put the offscreen buffer in the help view class because
+// we'd need to include x.h in the header...
+static fltk3::Offscreen fl_help_view_buffer;
+int fltk3::HelpView::selection_first = 0;
+int fltk3::HelpView::selection_last = 0;
+int fltk3::HelpView::selection_push_first = 0;
+int fltk3::HelpView::selection_push_last = 0;
+int fltk3::HelpView::selection_drag_first = 0;
+int fltk3::HelpView::selection_drag_last = 0;
+int fltk3::HelpView::selected = 0;
+int fltk3::HelpView::draw_mode = 0;
+int fltk3::HelpView::mouse_x = 0;
+int fltk3::HelpView::mouse_y = 0;
+int fltk3::HelpView::current_pos = 0;
+fltk3::HelpView *fltk3::HelpView::current_view = 0L;
+fltk3::Color fltk3::HelpView::hv_selection_color;
+fltk3::Color fltk3::HelpView::hv_selection_text_color;
+
+/*
+ * Limitation: if a word contains &code; notations, we will calculate a wrong length.
+ *
+ * This function must be optimized for speed!
+ */
+void fltk3::HelpView::hv_draw(const char *t, int x, int y)
+{
+  if (selected && current_view==this && current_pos<selection_last && current_pos>=selection_first) {
+    fltk3::Color c = fltk3::color();
+    fltk3::color(hv_selection_color);
+    int w = (int)fltk3::width(t);
+    if (current_pos+(int)strlen(t)<selection_last) 
+      w += (int)fltk3::width(' ');
+    fltk3::rectf(x, y+fltk3::descent()-fltk3::height(), w, fltk3::height());
+    fltk3::color(hv_selection_text_color);
+    fltk3::draw(t, x, y);
+    fltk3::color(c);
+  } else {
+    fltk3::draw(t, x, y);
+  }
+  if (draw_mode) {
+    int w = (int)fltk3::width(t);
+    if (mouse_x>=x && mouse_x<x+w) {
+      if (mouse_y>=y-fltk3::height()+fltk3::descent()&&mouse_y<=y+fltk3::descent()) {
+        int f = current_pos;
+        int l = f+strlen(t); // use 'quote_char' to calculate the true length of the HTML string
+        if (draw_mode==1) {
+          selection_push_first = f;
+          selection_push_last = l;
+        } else {
+          selection_drag_first = f;
+          selection_drag_last = l;
+        }
+      }
+    }
+  }
+}
+
+
+/** Adds a text block to the list. */
+fltk3::HelpBlock *					// O - Pointer to new block
+fltk3::HelpView::add_block(const char   *s,	// I - Pointer to start of block text
+                	int           xx,	// I - X position of block
+			int           yy,	// I - Y position of block
+			int           ww,	// I - Right margin of block
+			int           hh,	// I - Height of block
+			unsigned char border)	// I - Draw border?
+{
+  fltk3::HelpBlock	*temp;				// New block
+
+
+//  printf("add_block(s = %p, xx = %d, yy = %d, ww = %d, hh = %d, border = %d)\n",
+//         s, xx, yy, ww, hh, border);
+
+  if (nblocks_ >= ablocks_)
+  {
+    ablocks_ += 16;
+
+    if (ablocks_ == 16)
+      blocks_ = (fltk3::HelpBlock *)malloc(sizeof(fltk3::HelpBlock) * ablocks_);
+    else
+      blocks_ = (fltk3::HelpBlock *)realloc(blocks_, sizeof(fltk3::HelpBlock) * ablocks_);
+  }
+
+  temp = blocks_ + nblocks_;
+  memset(temp, 0, sizeof(fltk3::HelpBlock));
+  temp->start   = s;
+  temp->end     = s;
+  temp->x       = xx;
+  temp->y       = yy;
+  temp->w       = ww;
+  temp->h       = hh;
+  temp->border  = border;
+  temp->bgcolor = bgcolor_;
+  nblocks_ ++;
+
+  return (temp);
+}
+
+
+/** Adds a new link to the list. */
+void fltk3::HelpView::add_link(const char *n,	// I - Name of link
+                      int        xx,	// I - X position of link
+		      int        yy,	// I - Y position of link
+		      int        ww,	// I - Width of link text
+		      int        hh)	// I - Height of link text
+{
+  fltk3::HelpLink	*temp;			// New link
+  char		*target;		// Pointer to target name
+
+
+  if (nlinks_ >= alinks_)
+  {
+    alinks_ += 16;
+
+    if (alinks_ == 16)
+      links_ = (fltk3::HelpLink *)malloc(sizeof(fltk3::HelpLink) * alinks_);
+    else
+      links_ = (fltk3::HelpLink *)realloc(links_, sizeof(fltk3::HelpLink) * alinks_);
+  }
+
+  temp = links_ + nlinks_;
+
+  temp->x       = xx;
+  temp->y       = yy;
+  temp->w       = xx + ww;
+  temp->h       = yy + hh;
+
+  strlcpy(temp->filename, n, sizeof(temp->filename));
+
+  if ((target = strrchr(temp->filename, '#')) != NULL)
+  {
+    *target++ = '\0';
+    strlcpy(temp->name, target, sizeof(temp->name));
+  }
+  else
+    temp->name[0] = '\0';
+
+  nlinks_ ++;
+}
+
+
+/** Adds a new target to the list. */
+void fltk3::HelpView::add_target(const char *n,	// I - Name of target
+			      int        yy)	// I - Y position of target
+{
+  fltk3::HelpTarget	*temp;			// New target
+
+
+  if (ntargets_ >= atargets_)
+  {
+    atargets_ += 16;
+
+    if (atargets_ == 16)
+      targets_ = (fltk3::HelpTarget *)malloc(sizeof(fltk3::HelpTarget) * atargets_);
+    else
+      targets_ = (fltk3::HelpTarget *)realloc(targets_, sizeof(fltk3::HelpTarget) * atargets_);
+  }
+
+  temp = targets_ + ntargets_;
+
+  temp->y = yy;
+  strlcpy(temp->name, n, sizeof(temp->name));
+
+  ntargets_ ++;
+}
+
+/** Compares two targets.*/
+int							// O - Result of comparison
+fltk3::HelpView::compare_targets(const fltk3::HelpTarget *t0,	// I - First target
+                             const fltk3::HelpTarget *t1)	// I - Second target
+{
+  return (strcasecmp(t0->name, t1->name));
+}
+
+/** Computes the alignment for a line in a block.*/
+int						// O - New line
+fltk3::HelpView::do_align(fltk3::HelpBlock *block,	// I - Block to add to
+                      int          line,	// I - Current line
+		      int          xx,		// I - Current X position
+		      int          a,		// I - Current alignment
+		      int          &l)		// IO - Starting link
+{
+  int	offset;					// Alignment offset
+
+
+  switch (a)
+  {
+    case RIGHT :	// Right align
+	offset = block->w - xx;
+	break;
+    case CENTER :	// Center
+	offset = (block->w - xx) / 2;
+	break;
+    default :		// Left align
+	offset = 0;
+	break;
+  }
+
+  block->line[line] = block->x + offset;
+
+  if (line < 31)
+    line ++;
+
+  while (l < nlinks_)
+  {
+    links_[l].x += offset;
+    links_[l].w += offset;
+    l ++;
+  }
+
+  return (line);
+}
+
+/** Draws the fltk3::HelpView widget. */
+void
+fltk3::HelpView::draw()
+{
+  FLTK3_OBJECT_VCALLS_WRAPPER(draw(), Draw)
+  int			i;		// Looping var
+  const fltk3::HelpBlock	*block;		// Pointer to current block
+  const char		*ptr,		// Pointer to text in block
+			*attrs;		// Pointer to start of element attributes
+  char			*s,		// Pointer into buffer
+			buf[1024],	// Text buffer
+			attr[1024];	// Attribute buffer
+  int			xx, yy, ww, hh;	// Current positions and sizes
+  int			line;		// Current line
+  fltk3::Font               font;
+  fltk3::Fontsize           fsize;          // Current font and size
+  fltk3::Color              fcolor;         // current font color 
+  int			head, pre,	// Flags for text
+			needspace;	// Do we need whitespace?
+  fltk3::Boxtype		b = box() ? box() : fltk3::DOWN_BOX;
+					// Box to draw...
+  int			underline,	// Underline text?
+                        xtra_ww;        // Extra width for underlined space between words
+
+  // Draw the scrollbar(s) and box first...
+  ww = w();
+  hh = h();
+  i  = 0;
+
+  draw_box(b, x(), y(), ww, hh, bgcolor_);
+
+  if ( hscrollbar_.visible() || scrollbar_.visible() ) {
+    int scrollsize = scrollbar_size_ ? scrollbar_size_ : fltk3::scrollbar_size();
+    int hor_vis = hscrollbar_.visible();
+    int ver_vis = scrollbar_.visible();
+    // Scrollbar corner
+    int scorn_x = x() + ww - (ver_vis?scrollsize:0) - fltk3::box_dw(b) + fltk3::box_dx(b);
+    int scorn_y = y() + hh - (hor_vis?scrollsize:0) - fltk3::box_dh(b) + fltk3::box_dy(b);
+    if ( hor_vis ) {
+      if ( hscrollbar_.h() != scrollsize ) {		// scrollsize changed?
+	hscrollbar_.resize(x(), scorn_y, scorn_x - x(), scrollsize);
+	init_sizes();
+      }
+      draw_child(hscrollbar_);
+      hh -= scrollsize;
+    }
+    if ( ver_vis ) {
+      if ( scrollbar_.w() != scrollsize ) {		// scrollsize changed?
+	scrollbar_.resize(scorn_x, y(), scrollsize, scorn_y - y());
+	init_sizes();
+      }
+      draw_child(scrollbar_);
+      ww -= scrollsize;
+    }
+    if ( hor_vis && ver_vis ) {
+      // Both scrollbars visible? Draw little gray box in corner
+      fltk3::color(fltk3::GRAY);
+      fltk3::rectf(scorn_x, scorn_y, scrollsize, scrollsize);
+    }
+  }
+
+  if (!value_)
+    return;
+
+  if (current_view == this && selected) {
+    hv_selection_color      = fltk3::SELECTION_COLOR;
+    hv_selection_text_color = fltk3::contrast(textcolor_, fltk3::SELECTION_COLOR);
+  }
+  current_pos = 0;
+
+  // Clip the drawing to the inside of the box...
+  fltk3::push_clip(x() + fltk3::box_dx(b), y() + fltk3::box_dy(b),
+               ww - fltk3::box_dw(b), hh - fltk3::box_dh(b));
+  fltk3::color(textcolor_);
+
+  // Draw all visible blocks...
+  for (i = 0, block = blocks_; i < nblocks_; i ++, block ++)
+    if ((block->y + block->h) >= topline_ && block->y < (topline_ + h()))
+    {
+      line      = 0;
+      xx        = block->line[line];
+      yy        = block->y - topline_;
+      hh        = 0;
+      pre       = 0;
+      head      = 0;
+      needspace = 0;
+      underline = 0;
+
+      initfont(font, fsize, fcolor);
+
+      for (ptr = block->start, s = buf; ptr < block->end;)
+      {
+	if ((*ptr == '<' || isspace((*ptr)&255)) && s > buf)
+	{
+	  if (!head && !pre)
+	  {
+            // Check width...
+            *s = '\0';
+            s  = buf;
+            ww = (int)fltk3::width(buf);
+
+            if (needspace && xx > block->x)
+	      xx += (int)fltk3::width(' ');
+
+            if ((xx + ww) > block->w)
+	    {
+	      if (line < 31)
+	        line ++;
+	      xx = block->line[line];
+	      yy += hh;
+	      hh = 0;
+	    }
+
+            hv_draw(buf, xx + x() - leftline_, yy + y());
+	    if (underline) {
+              xtra_ww = isspace((*ptr)&255)?(int)fltk3::width(' '):0;
+              fltk3::xyline(xx + x() - leftline_, yy + y() + 1,
+	                xx + x() - leftline_ + ww + xtra_ww);
+            }
+            current_pos = ptr-value_;
+
+            xx += ww;
+	    if ((fsize + 2) > hh)
+	      hh = fsize + 2;
+
+	    needspace = 0;
+	  }
+	  else if (pre)
+	  {
+	    while (isspace((*ptr)&255))
+	    {
+	      if (*ptr == '\n')
+	      {
+	        *s = '\0';
+                s = buf;
+
+                hv_draw(buf, xx + x() - leftline_, yy + y());
+		if (underline) fltk3::xyline(xx + x() - leftline_, yy + y() + 1,
+	                        	 xx + x() - leftline_ +
+					     (int)fltk3::width(buf));
+
+                current_pos = ptr-value_;
+		if (line < 31)
+	          line ++;
+		xx = block->line[line];
+		yy += hh;
+		hh = fsize + 2;
+	      }
+	      else if (*ptr == '\t')
+	      {
+		// Do tabs every 8 columns...
+		while (((s - buf) & 7))
+	          *s++ = ' ';
+	      }
+	      else
+	        *s++ = ' ';
+
+              if ((fsize + 2) > hh)
+	        hh = fsize + 2;
+
+              ptr ++;
+	    }
+
+            if (s > buf)
+	    {
+	      *s = '\0';
+	      s = buf;
+
+              hv_draw(buf, xx + x() - leftline_, yy + y());
+	      ww = (int)fltk3::width(buf);
+	      if (underline) fltk3::xyline(xx + x() - leftline_, yy + y() + 1,
+	                               xx + x() - leftline_ + ww);
+              xx += ww;
+              current_pos = ptr-value_;
+	    }
+
+	    needspace = 0;
+	  }
+	  else
+	  {
+            s = buf;
+
+	    while (isspace((*ptr)&255))
+              ptr ++;
+            current_pos = ptr-value_;
+	  }
+	}
+
+	if (*ptr == '<')
+	{
+	  ptr ++;
+
+          if (strncmp(ptr, "!--", 3) == 0)
+	  {
+	    // Comment...
+	    ptr += 3;
+	    if ((ptr = strstr(ptr, "-->")) != NULL)
+	    {
+	      ptr += 3;
+	      continue;
+	    }
+	    else
+	      break;
+	  }
+
+	  while (*ptr && *ptr != '>' && !isspace((*ptr)&255))
+            if (s < (buf + sizeof(buf) - 1))
+	      *s++ = *ptr++;
+	    else
+	      ptr ++;
+
+	  *s = '\0';
+	  s = buf;
+
+	  attrs = ptr;
+	  while (*ptr && *ptr != '>')
+            ptr ++;
+
+	  if (*ptr == '>')
+            ptr ++;
+
+          // end of command reached, set the supposed start of printed eord here
+          current_pos = ptr-value_;
+	  if (strcasecmp(buf, "HEAD") == 0)
+            head = 1;
+	  else if (strcasecmp(buf, "BR") == 0)
+	  {
+	    if (line < 31)
+	      line ++;
+	    xx = block->line[line];
+            yy += hh;
+	    hh = 0;
+	  }
+	  else if (strcasecmp(buf, "HR") == 0)
+	  {
+	    fltk3::line(block->x + x(), yy + y(), block->w + x(),
+	            yy + y());
+
+	    if (line < 31)
+	      line ++;
+	    xx = block->line[line];
+            yy += 2 * hh;
+	    hh = 0;
+	  }
+	  else if (strcasecmp(buf, "CENTER") == 0 ||
+        	   strcasecmp(buf, "P") == 0 ||
+        	   strcasecmp(buf, "H1") == 0 ||
+		   strcasecmp(buf, "H2") == 0 ||
+		   strcasecmp(buf, "H3") == 0 ||
+		   strcasecmp(buf, "H4") == 0 ||
+		   strcasecmp(buf, "H5") == 0 ||
+		   strcasecmp(buf, "H6") == 0 ||
+		   strcasecmp(buf, "UL") == 0 ||
+		   strcasecmp(buf, "OL") == 0 ||
+		   strcasecmp(buf, "DL") == 0 ||
+		   strcasecmp(buf, "LI") == 0 ||
+		   strcasecmp(buf, "DD") == 0 ||
+		   strcasecmp(buf, "DT") == 0 ||
+		   strcasecmp(buf, "PRE") == 0)
+	  {
+            if (tolower(buf[0]) == 'h')
+	    {
+	      font  = fltk3::HELVETICA_BOLD;
+	      fsize = textsize_ + '7' - buf[1];
+	    }
+	    else if (strcasecmp(buf, "DT") == 0)
+	    {
+	      font  = textfont_ | fltk3::ITALIC;
+	      fsize = textsize_;
+	    }
+	    else if (strcasecmp(buf, "PRE") == 0)
+	    {
+	      font  = fltk3::COURIER;
+	      fsize = textsize_;
+	      pre   = 1;
+	    }
+
+            if (strcasecmp(buf, "LI") == 0)
+	    {
+//            fltk3::font(fltk3::SYMBOL, fsize); // The default SYMBOL font on my XP box is not Unicode...
+              char buf[8];
+              wchar_t b[] = {0x2022, 0x0};
+//            buf[fl_unicode2utf(b, 1, buf)] = 0;
+              unsigned dstlen = fltk3::utf8fromwc(buf, 8, b, 1);
+              buf[dstlen] = 0;
+              hv_draw(buf, xx - fsize + x() - leftline_, yy + y());
+	    }
+
+	    pushfont(font, fsize);
+	  }
+	  else if (strcasecmp(buf, "A") == 0 &&
+	           get_attr(attrs, "HREF", attr, sizeof(attr)) != NULL)
+	  {
+	    fltk3::color(linkcolor_);
+	    underline = 1;
+	  }
+	  else if (strcasecmp(buf, "/A") == 0)
+	  {
+	    fltk3::color(textcolor_);
+	    underline = 0;
+	  }
+	  else if (strcasecmp(buf, "FONT") == 0)
+	  {
+	    if (get_attr(attrs, "COLOR", attr, sizeof(attr)) != NULL) {
+	      textcolor_ = get_color(attr, textcolor_);
+	    }
+
+            if (get_attr(attrs, "FACE", attr, sizeof(attr)) != NULL) {
+	      if (!strncasecmp(attr, "helvetica", 9) ||
+	          !strncasecmp(attr, "arial", 5) ||
+		  !strncasecmp(attr, "sans", 4)) font = fltk3::HELVETICA;
+              else if (!strncasecmp(attr, "times", 5) ||
+	               !strncasecmp(attr, "serif", 5)) font = fltk3::TIMES;
+              else if (!strncasecmp(attr, "symbol", 6)) font = fltk3::SYMBOL;
+	      else font = fltk3::COURIER;
+            }
+
+            if (get_attr(attrs, "SIZE", attr, sizeof(attr)) != NULL) {
+              if (isdigit(attr[0] & 255)) {
+	        // Absolute size
+	        fsize = (int)(textsize_ * pow(1.2, atof(attr) - 3.0));
+	      } else {
+	        // Relative size
+	        fsize = (int)(fsize * pow(1.2, atof(attr) - 3.0));
+	      }
+	    }
+
+            pushfont(font, fsize);
+	  }
+	  else if (strcasecmp(buf, "/FONT") == 0)
+	  {
+	    popfont(font, fsize, textcolor_);
+	  }
+	  else if (strcasecmp(buf, "U") == 0)
+	    underline = 1;
+	  else if (strcasecmp(buf, "/U") == 0)
+	    underline = 0;
+	  else if (strcasecmp(buf, "B") == 0 ||
+	           strcasecmp(buf, "STRONG") == 0)
+	    pushfont(font |= fltk3::BOLD, fsize);
+	  else if (strcasecmp(buf, "TD") == 0 ||
+	           strcasecmp(buf, "TH") == 0)
+          {
+	    int tx, ty, tw, th;
+
+	    if (tolower(buf[1]) == 'h')
+	      pushfont(font |= fltk3::BOLD, fsize);
+	    else
+	      pushfont(font = textfont_, fsize);
+
+            tx = block->x - 4 - leftline_;
+	    ty = block->y - topline_ - fsize - 3;
+            tw = block->w - block->x + 7;
+	    th = block->h + fsize - 5;
+
+            if (tx < 0)
+	    {
+	      tw += tx;
+	      tx  = 0;
+	    }
+
+	    if (ty < 0)
+	    {
+	      th += ty;
+	      ty  = 0;
+	    }
+
+            tx += x();
+	    ty += y();
+
+            if (block->bgcolor != bgcolor_)
+	    {
+	      fltk3::color(block->bgcolor);
+              fltk3::rectf(tx, ty, tw, th);
+              fltk3::color(textcolor_);
+	    }
+
+            if (block->border)
+              fltk3::rect(tx, ty, tw, th);
+	  }
+	  else if (strcasecmp(buf, "I") == 0 ||
+                   strcasecmp(buf, "EM") == 0)
+	    pushfont(font |= fltk3::ITALIC, fsize);
+	  else if (strcasecmp(buf, "CODE") == 0 ||
+	           strcasecmp(buf, "TT") == 0)
+	    pushfont(font = fltk3::COURIER, fsize);
+	  else if (strcasecmp(buf, "KBD") == 0)
+	    pushfont(font = fltk3::COURIER_BOLD, fsize);
+	  else if (strcasecmp(buf, "VAR") == 0)
+	    pushfont(font = fltk3::COURIER_ITALIC, fsize);
+	  else if (strcasecmp(buf, "/HEAD") == 0)
+            head = 0;
+	  else if (strcasecmp(buf, "/H1") == 0 ||
+		   strcasecmp(buf, "/H2") == 0 ||
+		   strcasecmp(buf, "/H3") == 0 ||
+		   strcasecmp(buf, "/H4") == 0 ||
+		   strcasecmp(buf, "/H5") == 0 ||
+		   strcasecmp(buf, "/H6") == 0 ||
+		   strcasecmp(buf, "/B") == 0 ||
+		   strcasecmp(buf, "/STRONG") == 0 ||
+		   strcasecmp(buf, "/I") == 0 ||
+		   strcasecmp(buf, "/EM") == 0 ||
+		   strcasecmp(buf, "/CODE") == 0 ||
+		   strcasecmp(buf, "/TT") == 0 ||
+		   strcasecmp(buf, "/KBD") == 0 ||
+		   strcasecmp(buf, "/VAR") == 0)
+	    popfont(font, fsize, fcolor);
+	  else if (strcasecmp(buf, "/PRE") == 0)
+	  {
+	    popfont(font, fsize, fcolor);
+	    pre = 0;
+	  }
+	  else if (strcasecmp(buf, "IMG") == 0)
+	  {
+	    fltk3::SharedImage *img = 0;
+	    int		width, height;
+	    char	wattr[8], hattr[8];
+
+
+            get_attr(attrs, "WIDTH", wattr, sizeof(wattr));
+            get_attr(attrs, "HEIGHT", hattr, sizeof(hattr));
+	    width  = get_length(wattr);
+	    height = get_length(hattr);
+
+	    if (get_attr(attrs, "SRC", attr, sizeof(attr))) {
+	      img = get_image(attr, width, height);
+	      if (!width) width = img->w();
+	      if (!height) height = img->h();
+	    }
+
+	    if (!width || !height) {
+              if (get_attr(attrs, "ALT", attr, sizeof(attr)) == NULL) {
+	        strcpy(attr, "IMG");
+              }
+	    }
+
+	    ww = width;
+
+	    if (needspace && xx > block->x)
+	      xx += (int)fltk3::width(' ');
+
+	    if ((xx + ww) > block->w)
+	    {
+	      if (line < 31)
+		line ++;
+
+	      xx = block->line[line];
+	      yy += hh;
+	      hh = 0;
+	    }
+
+	    if (img) {
+	      img->draw(xx + x() - leftline_,
+	                yy + y() - fltk3::height() + fltk3::descent() + 2);
+	    }
+
+	    xx += ww;
+	    if ((height + 2) > hh)
+	      hh = height + 2;
+
+	    needspace = 0;
+	  }
+	}
+	else if (*ptr == '\n' && pre)
+	{
+	  *s = '\0';
+	  s = buf;
+
+          hv_draw(buf, xx + x() - leftline_, yy + y());
+
+	  if (line < 31)
+	    line ++;
+	  xx = block->line[line];
+	  yy += hh;
+	  hh = fsize + 2;
+	  needspace = 0;
+
+	  ptr ++;
+          current_pos = ptr-value_;
+	}
+	else if (isspace((*ptr)&255))
+	{
+	  if (pre)
+	  {
+	    if (*ptr == ' ')
+	      *s++ = ' ';
+	    else
+	    {
+	      // Do tabs every 8 columns...
+	      while (((s - buf) & 7))
+	        *s++ = ' ';
+            }
+	  }
+
+          ptr ++;
+          if (!pre) current_pos = ptr-value_;
+	  needspace = 1;
+	}
+	else if (*ptr == '&')
+	{
+	  ptr ++;
+
+          int qch = quote_char(ptr);
+
+	  if (qch < 0)
+	    *s++ = '&';
+	  else {
+            int l;
+            l = fltk3::utf8encode((unsigned int) qch, s);
+            if (l < 1) l = 1;
+            s += l;
+	    ptr = strchr(ptr, ';') + 1;
+	  }
+
+          if ((fsize + 2) > hh)
+	    hh = fsize + 2;
+	}
+	else
+	{
+	  *s++ = *ptr++;
+
+          if ((fsize + 2) > hh)
+	    hh = fsize + 2;
+        }
+      }
+
+      *s = '\0';
+
+      if (s > buf && !pre && !head)
+      {
+	ww = (int)fltk3::width(buf);
+
+        if (needspace && xx > block->x)
+	  xx += (int)fltk3::width(' ');
+
+	if ((xx + ww) > block->w)
+	{
+	  if (line < 31)
+	    line ++;
+	  xx = block->line[line];
+	  yy += hh;
+	  hh = 0;
+	}
+      }
+
+      if (s > buf && !head)
+      {
+        hv_draw(buf, xx + x() - leftline_, yy + y());
+	if (underline) fltk3::xyline(xx + x() - leftline_, yy + y() + 1,
+	                         xx + x() - leftline_ + ww);
+        current_pos = ptr-value_;
+      }
+    }
+
+  fltk3::pop_clip();
+}
+
+
+
+/** Finds the specified string \p s at starting position \p p.
+
+    \return the matching position or -1 if not found
+*/
+int						// O - Matching position or -1 if not found
+fltk3::HelpView::find(const char *s,		// I - String to find
+                   int        p)		// I - Starting position
+{
+  int		i,				// Looping var
+		c;				// Current character
+  fltk3::HelpBlock	*b;				// Current block
+  const char	*bp,				// Block matching pointer
+		*bs,				// Start of current comparison
+		*sp;				// Search string pointer
+
+
+  // Range check input and value...
+  if (!s || !value_) return -1;
+
+  if (p < 0 || p >= (int)strlen(value_)) p = 0;
+  else if (p > 0) p ++;
+
+  // Look for the string...
+  for (i = nblocks_, b = blocks_; i > 0; i --, b ++) {
+    if (b->end < (value_ + p))
+      continue;
+
+    if (b->start < (value_ + p)) bp = value_ + p;
+    else bp = b->start;
+
+    for (sp = s, bs = bp; *sp && *bp && bp < b->end; bp ++) {
+      if (*bp == '<') {
+        // skip to end of element...
+	while (*bp && bp < b->end && *bp != '>') bp ++;
+	continue;
+      } else if (*bp == '&') {
+        // decode HTML entity...
+	if ((c = quote_char(bp + 1)) < 0) c = '&';
+	else bp = strchr(bp + 1, ';') + 1;
+      } else c = *bp;
+
+      if (tolower(*sp) == tolower(c)) sp ++;
+      else {
+        // No match, so reset to start of search...
+	sp = s;
+	bs ++;
+	bp = bs;
+      }
+    }
+
+    if (!*sp) {
+      // Found a match!
+      topline(b->y - b->h);
+      return (b->end - value_);
+    }
+  }
+
+  // No match!
+  return (-1);
+}
+
+/** Formats the help text. */
+void fltk3::HelpView::format() {
+  int		i;		// Looping var
+  int		done;		// Are we done yet?
+  fltk3::HelpBlock	*block,		// Current block
+		*cell;		// Current table cell
+  int		cells[MAX_COLUMNS],
+				// Cells in the current row...
+		row;		// Current table row (block number)
+  const char	*ptr,		// Pointer into block
+		*start,		// Pointer to start of element
+		*attrs;		// Pointer to start of element attributes
+  char		*s,		// Pointer into buffer
+		buf[1024],	// Text buffer
+		attr[1024],	// Attribute buffer
+		wattr[1024],	// Width attribute buffer
+		hattr[1024],	// Height attribute buffer
+		linkdest[1024];	// Link destination
+  int		xx, yy, ww, hh;	// Size of current text fragment
+  int		line;		// Current line in block
+  int		links;		// Links for current line
+  fltk3::Font       font;
+  fltk3::Fontsize   fsize;          // Current font and size
+  fltk3::Color      fcolor;         // Current font color
+  unsigned char	border;		// Draw border?
+  int		talign,		// Current alignment
+		newalign,	// New alignment
+		head,		// In the <HEAD> section?
+		pre,		// <PRE> text?
+		needspace;	// Do we need whitespace?
+  int		table_width,	// Width of table
+		table_offset;	// Offset of table
+  int		column,		// Current table column number
+		columns[MAX_COLUMNS];
+				// Column widths
+  fltk3::Color	tc, rc;		// Table/row background color
+  fltk3::Boxtype	b = box() ? box() : fltk3::DOWN_BOX;
+				// Box to draw...
+  fl_margins	margins;	// Left margin stack...
+
+
+  // Reset document width...
+  int scrollsize = scrollbar_size_ ? scrollbar_size_ : fltk3::scrollbar_size();
+  hsize_ = w() - scrollsize - fltk3::box_dw(b);
+
+  done = 0;
+  while (!done)
+  {
+    // Reset state variables...
+    done       = 1;
+    nblocks_   = 0;
+    nlinks_    = 0;
+    ntargets_  = 0;
+    size_      = 0;
+    bgcolor_   = color();
+    textcolor_ = textcolor();
+    linkcolor_ = fltk3::contrast(fltk3::BLUE, color());
+
+    tc = rc = bgcolor_;
+
+    strcpy(title_, "Untitled");
+
+    if (!value_)
+      return;
+
+    // Setup for formatting...
+    initfont(font, fsize, fcolor);
+
+    line         = 0;
+    links        = 0;
+    xx           = margins.clear();
+    yy           = fsize + 2;
+    ww           = 0;
+    column       = 0;
+    border       = 0;
+    hh           = 0;
+    block        = add_block(value_, xx, yy, hsize_, 0);
+    row          = 0;
+    head         = 0;
+    pre          = 0;
+    talign       = LEFT;
+    newalign     = LEFT;
+    needspace    = 0;
+    linkdest[0]  = '\0';
+    table_offset = 0;
+
+    // Html text character loop
+    for (ptr = value_, s = buf; *ptr;)
+    {
+      // End of word?
+      if ((*ptr == '<' || isspace((*ptr)&255)) && s > buf)
+      {
+        // Get width of word parsed so far...
+        *s = '\0';
+        ww = (int)fltk3::width(buf);
+
+	if (!head && !pre)
+	{
+          // Check width...
+          if (ww > hsize_) {
+	    hsize_ = ww;
+	    done   = 0;
+	    break;
+	  }
+
+          if (needspace && xx > block->x)
+	    ww += (int)fltk3::width(' ');
+
+  //        printf("line = %d, xx = %d, ww = %d, block->x = %d, block->w = %d\n",
+  //	       line, xx, ww, block->x, block->w);
+
+          if ((xx + ww) > block->w)
+	  {
+            line     = do_align(block, line, xx, newalign, links);
+	    xx       = block->x;
+	    yy       += hh;
+	    block->h += hh;
+	    hh       = 0;
+	  }
+
+          if (linkdest[0])
+	    add_link(linkdest, xx, yy - fsize, ww, fsize);
+
+	  xx += ww;
+	  if ((fsize + 2) > hh)
+	    hh = fsize + 2;
+
+	  needspace = 0;
+	}
+	else if (pre)
+	{
+          // Add a link as needed...
+          if (linkdest[0])
+	    add_link(linkdest, xx, yy - hh, ww, hh);
+
+	  xx += ww;
+	  if ((fsize + 2) > hh)
+	    hh = fsize + 2;
+
+          // Handle preformatted text...
+	  while (isspace((*ptr)&255))
+	  {
+	    if (*ptr == '\n')
+	    {
+              if (xx > hsize_) break;
+
+              line     = do_align(block, line, xx, newalign, links);
+              xx       = block->x;
+	      yy       += hh;
+	      block->h += hh;
+	      hh       = fsize + 2;
+	    }
+	    else
+              xx += (int)fltk3::width(' ');
+
+            if ((fsize + 2) > hh)
+	      hh = fsize + 2;
+
+            ptr ++;
+	  }
+
+          if (xx > hsize_) {
+	    hsize_ = xx;
+	    done   = 0;
+	    break;
+	  }
+
+	  needspace = 0;
+	}
+	else
+	{
+          // Handle normal text or stuff in the <HEAD> section...
+	  while (isspace((*ptr)&255))
+            ptr ++;
+	}
+
+	s = buf;
+      }
+
+      if (*ptr == '<')
+      {
+	// Handle html tags..
+	start = ptr;
+	ptr ++;
+
+        if (strncmp(ptr, "!--", 3) == 0)
+	{
+	  // Comment...
+	  ptr += 3;
+	  if ((ptr = strstr(ptr, "-->")) != NULL)
+	  {
+	    ptr += 3;
+	    continue;
+	  }
+	  else
+	    break;
+	}
+
+	while (*ptr && *ptr != '>' && !isspace((*ptr)&255))
+          if (s < (buf + sizeof(buf) - 1))
+            *s++ = *ptr++;
+	  else
+	    ptr ++;
+
+	*s = '\0';
+	s = buf;
+
+//        puts(buf);
+
+	attrs = ptr;
+	while (*ptr && *ptr != '>')
+          ptr ++;
+
+	if (*ptr == '>')
+          ptr ++;
+
+	if (strcasecmp(buf, "HEAD") == 0)
+          head = 1;
+	else if (strcasecmp(buf, "/HEAD") == 0)
+          head = 0;
+	else if (strcasecmp(buf, "TITLE") == 0)
+	{
+          // Copy the title in the document...
+          for (s = title_;
+	       *ptr != '<' && *ptr && s < (title_ + sizeof(title_) - 1);
+	       *s++ = *ptr++);
+
+	  *s = '\0';
+	  s = buf;
+	}
+	else if (strcasecmp(buf, "A") == 0)
+	{
+          if (get_attr(attrs, "NAME", attr, sizeof(attr)) != NULL)
+	    add_target(attr, yy - fsize - 2);
+
+	  if (get_attr(attrs, "HREF", attr, sizeof(attr)) != NULL)
+	    strlcpy(linkdest, attr, sizeof(linkdest));
+	}
+	else if (strcasecmp(buf, "/A") == 0)
+          linkdest[0] = '\0';
+	else if (strcasecmp(buf, "BODY") == 0)
+	{
+          bgcolor_   = get_color(get_attr(attrs, "BGCOLOR", attr, sizeof(attr)),
+	                	 color());
+          textcolor_ = get_color(get_attr(attrs, "TEXT", attr, sizeof(attr)),
+	                	 textcolor());
+          linkcolor_ = get_color(get_attr(attrs, "LINK", attr, sizeof(attr)),
+	                	 fltk3::contrast(fltk3::BLUE, color()));
+	}
+	else if (strcasecmp(buf, "BR") == 0)
+	{
+          line     = do_align(block, line, xx, newalign, links);
+          xx       = block->x;
+	  block->h += hh;
+          yy       += hh;
+	  hh       = 0;
+	}
+	else if (strcasecmp(buf, "CENTER") == 0 ||
+        	 strcasecmp(buf, "P") == 0 ||
+        	 strcasecmp(buf, "H1") == 0 ||
+		 strcasecmp(buf, "H2") == 0 ||
+		 strcasecmp(buf, "H3") == 0 ||
+		 strcasecmp(buf, "H4") == 0 ||
+		 strcasecmp(buf, "H5") == 0 ||
+		 strcasecmp(buf, "H6") == 0 ||
+		 strcasecmp(buf, "UL") == 0 ||
+		 strcasecmp(buf, "OL") == 0 ||
+		 strcasecmp(buf, "DL") == 0 ||
+		 strcasecmp(buf, "LI") == 0 ||
+		 strcasecmp(buf, "DD") == 0 ||
+		 strcasecmp(buf, "DT") == 0 ||
+		 strcasecmp(buf, "HR") == 0 ||
+		 strcasecmp(buf, "PRE") == 0 ||
+		 strcasecmp(buf, "TABLE") == 0)
+	{
+          block->end = start;
+          line       = do_align(block, line, xx, newalign, links);
+	  newalign   = strcasecmp(buf, "CENTER") ? LEFT : CENTER;
+          xx         = block->x;
+          block->h   += hh;
+
+          if (strcasecmp(buf, "UL") == 0 ||
+	      strcasecmp(buf, "OL") == 0 ||
+	      strcasecmp(buf, "DL") == 0)
+          {
+	    block->h += fsize + 2;
+	    xx       = margins.push(4 * fsize);
+	  }
+          else if (strcasecmp(buf, "TABLE") == 0)
+	  {
+	    if (get_attr(attrs, "BORDER", attr, sizeof(attr)))
+	      border = (uchar)atoi(attr);
+	    else
+	      border = 0;
+
+            tc = rc = get_color(get_attr(attrs, "BGCOLOR", attr, sizeof(attr)), bgcolor_);
+
+	    block->h += fsize + 2;
+
+            format_table(&table_width, columns, start);
+
+            if ((xx + table_width) > hsize_) {
+#ifdef DEBUG
+              printf("xx=%d, table_width=%d, hsize_=%d\n", xx, table_width,
+	             hsize_);
+#endif // DEBUG
+	      hsize_ = xx + table_width;
+	      done   = 0;
+	      break;
+	    }
+
+            switch (get_align(attrs, talign))
+	    {
+	      default :
+	          table_offset = 0;
+	          break;
+
+	      case CENTER :
+	          table_offset = (hsize_ - table_width) / 2 - textsize_;
+	          break;
+
+	      case RIGHT :
+	          table_offset = hsize_ - table_width - textsize_;
+	          break;
+	    }
+
+	    column = 0;
+	  }
+
+          if (tolower(buf[0]) == 'h' && isdigit(buf[1]))
+	  {
+	    font  = fltk3::HELVETICA_BOLD;
+	    fsize = textsize_ + '7' - buf[1];
+	  }
+	  else if (strcasecmp(buf, "DT") == 0)
+	  {
+	    font  = textfont_ | fltk3::ITALIC;
+	    fsize = textsize_;
+	  }
+	  else if (strcasecmp(buf, "PRE") == 0)
+	  {
+	    font  = fltk3::COURIER;
+	    fsize = textsize_;
+	    pre   = 1;
+	  }
+	  else
+	  {
+	    font  = textfont_;
+	    fsize = textsize_;
+	  }
+
+	  pushfont(font, fsize);
+
+          yy = block->y + block->h;
+          hh = 0;
+
+          if ((tolower(buf[0]) == 'h' && isdigit(buf[1])) ||
+	      strcasecmp(buf, "DD") == 0 ||
+	      strcasecmp(buf, "DT") == 0 ||
+	      strcasecmp(buf, "P") == 0)
+            yy += fsize + 2;
+	  else if (strcasecmp(buf, "HR") == 0)
+	  {
+	    hh += 2 * fsize;
+	    yy += fsize;
+	  }
+
+          if (row)
+	    block = add_block(start, xx, yy, block->w, 0);
+	  else
+	    block = add_block(start, xx, yy, hsize_, 0);
+
+	  needspace = 0;
+	  line      = 0;
+
+	  if (strcasecmp(buf, "CENTER") == 0)
+	    newalign = talign = CENTER;
+	  else
+	    newalign = get_align(attrs, talign);
+	}
+	else if (strcasecmp(buf, "/CENTER") == 0 ||
+		 strcasecmp(buf, "/P") == 0 ||
+		 strcasecmp(buf, "/H1") == 0 ||
+		 strcasecmp(buf, "/H2") == 0 ||
+		 strcasecmp(buf, "/H3") == 0 ||
+		 strcasecmp(buf, "/H4") == 0 ||
+		 strcasecmp(buf, "/H5") == 0 ||
+		 strcasecmp(buf, "/H6") == 0 ||
+		 strcasecmp(buf, "/PRE") == 0 ||
+		 strcasecmp(buf, "/UL") == 0 ||
+		 strcasecmp(buf, "/OL") == 0 ||
+		 strcasecmp(buf, "/DL") == 0 ||
+		 strcasecmp(buf, "/TABLE") == 0)
+	{
+          line       = do_align(block, line, xx, newalign, links);
+          xx         = block->x;
+          block->end = ptr;
+
+          if (strcasecmp(buf, "/UL") == 0 ||
+	      strcasecmp(buf, "/OL") == 0 ||
+	      strcasecmp(buf, "/DL") == 0)
+	  {
+	    xx       = margins.pop();
+	    block->h += fsize + 2;
+	  }
+          else if (strcasecmp(buf, "/TABLE") == 0) 
+          {
+	    block->h += fsize + 2;
+            xx       = margins.current();
+          }
+	  else if (strcasecmp(buf, "/PRE") == 0)
+	  {
+	    pre = 0;
+	    hh  = 0;
+	  }
+	  else if (strcasecmp(buf, "/CENTER") == 0)
+	    talign = LEFT;
+
+          popfont(font, fsize, fcolor);
+
+	  //#if defined(__GNUC__)
+          //#warning FIXME this isspace & 255 test will probably not work on a utf8 stream... And we use it everywhere!
+	  //#endif /*__GNUC__*/
+          while (isspace((*ptr)&255))
+	    ptr ++;
+
+          block->h += hh;
+          yy       += hh;
+
+          if (tolower(buf[2]) == 'l')
+            yy += fsize + 2;
+
+          if (row)
+	    block = add_block(ptr, xx, yy, block->w, 0);
+	  else
+	    block = add_block(ptr, xx, yy, hsize_, 0);
+
+	  needspace = 0;
+	  hh        = 0;
+	  line      = 0;
+	  newalign  = talign;
+	}
+	else if (strcasecmp(buf, "TR") == 0)
+	{
+          block->end = start;
+          line       = do_align(block, line, xx, newalign, links);
+          xx         = block->x;
+          block->h   += hh;
+
+          if (row)
+	  {
+            yy = blocks_[row].y + blocks_[row].h;
+
+	    for (cell = blocks_ + row + 1; cell <= block; cell ++)
+	      if ((cell->y + cell->h) > yy)
+		yy = cell->y + cell->h;
+
+            block = blocks_ + row;
+
+            block->h = yy - block->y + 2;
+
+	    for (i = 0; i < column; i ++)
+	      if (cells[i])
+	      {
+		cell = blocks_ + cells[i];
+		cell->h = block->h;
+	      }
+	  }
+
+          memset(cells, 0, sizeof(cells));
+
+	  yy        = block->y + block->h - 4;
+	  hh        = 0;
+          block     = add_block(start, xx, yy, hsize_, 0);
+	  row       = block - blocks_;
+	  needspace = 0;
+	  column    = 0;
+	  line      = 0;
+
+          rc = get_color(get_attr(attrs, "BGCOLOR", attr, sizeof(attr)), tc);
+	}
+	else if (strcasecmp(buf, "/TR") == 0 && row)
+	{
+          line       = do_align(block, line, xx, newalign, links);
+          block->end = start;
+	  block->h   += hh;
+	  talign     = LEFT;
+
+          xx = blocks_[row].x;
+          yy = blocks_[row].y + blocks_[row].h;
+
+	  for (cell = blocks_ + row + 1; cell <= block; cell ++)
+	    if ((cell->y + cell->h) > yy)
+	      yy = cell->y + cell->h;
+
+          block = blocks_ + row;
+
+          block->h = yy - block->y + 2;
+
+	  for (i = 0; i < column; i ++)
+	    if (cells[i])
+	    {
+	      cell = blocks_ + cells[i];
+	      cell->h = block->h;
+	    }
+
+	  yy        = block->y + block->h /*- 4*/;
+          block     = add_block(start, xx, yy, hsize_, 0);
+	  needspace = 0;
+	  row       = 0;
+	  line      = 0;
+	}
+	else if ((strcasecmp(buf, "TD") == 0 ||
+                  strcasecmp(buf, "TH") == 0) && row)
+	{
+          int	colspan;		// COLSPAN attribute
+
+
+          line       = do_align(block, line, xx, newalign, links);
+          block->end = start;
+	  block->h   += hh;
+
+          if (strcasecmp(buf, "TH") == 0)
+	    font = textfont_ | fltk3::BOLD;
+	  else
+	    font = textfont_;
+
+          fsize = textsize_;
+
+          xx = blocks_[row].x + fsize + 3 + table_offset;
+	  for (i = 0; i < column; i ++)
+	    xx += columns[i] + 6;
+
+          margins.push(xx - margins.current());
+
+          if (get_attr(attrs, "COLSPAN", attr, sizeof(attr)) != NULL)
+	    colspan = atoi(attr);
+	  else
+	    colspan = 1;
+
+          for (i = 0, ww = -6; i < colspan; i ++)
+	    ww += columns[column + i] + 6;
+
+          if (block->end == block->start && nblocks_ > 1)
+	  {
+	    nblocks_ --;
+	    block --;
+	  }
+
+	  pushfont(font, fsize);
+
+	  yy        = blocks_[row].y;
+	  hh        = 0;
+          block     = add_block(start, xx, yy, xx + ww, 0, border);
+	  needspace = 0;
+	  line      = 0;
+	  newalign  = get_align(attrs, tolower(buf[1]) == 'h' ? CENTER : LEFT);
+	  talign    = newalign;
+
+          cells[column] = block - blocks_;
+
+	  column += colspan;
+
+          block->bgcolor = get_color(get_attr(attrs, "BGCOLOR", attr,
+	                                      sizeof(attr)), rc);
+	}
+	else if ((strcasecmp(buf, "/TD") == 0 ||
+                  strcasecmp(buf, "/TH") == 0) && row)
+	{
+          line = do_align(block, line, xx, newalign, links);
+          popfont(font, fsize, fcolor);
+	  xx = margins.pop();
+	  talign = LEFT;
+	}
+	else if (strcasecmp(buf, "FONT") == 0)
+	{
+          if (get_attr(attrs, "FACE", attr, sizeof(attr)) != NULL) {
+	    if (!strncasecmp(attr, "helvetica", 9) ||
+	        !strncasecmp(attr, "arial", 5) ||
+		!strncasecmp(attr, "sans", 4)) font = fltk3::HELVETICA;
+            else if (!strncasecmp(attr, "times", 5) ||
+	             !strncasecmp(attr, "serif", 5)) font = fltk3::TIMES;
+            else if (!strncasecmp(attr, "symbol", 6)) font = fltk3::SYMBOL;
+	    else font = fltk3::COURIER;
+          }
+
+          if (get_attr(attrs, "SIZE", attr, sizeof(attr)) != NULL) {
+            if (isdigit(attr[0] & 255)) {
+	      // Absolute size
+	      fsize = (int)(textsize_ * pow(1.2, atoi(attr) - 3.0));
+	    } else {
+	      // Relative size
+	      fsize = (int)(fsize * pow(1.2, atoi(attr)));
+	    }
+	  }
+
+          pushfont(font, fsize);
+	}
+	else if (strcasecmp(buf, "/FONT") == 0)
+	  popfont(font, fsize, fcolor);
+	else if (strcasecmp(buf, "B") == 0 ||
+        	 strcasecmp(buf, "STRONG") == 0)
+	  pushfont(font |= fltk3::BOLD, fsize);
+	else if (strcasecmp(buf, "I") == 0 ||
+        	 strcasecmp(buf, "EM") == 0)
+	  pushfont(font |= fltk3::ITALIC, fsize);
+	else if (strcasecmp(buf, "CODE") == 0 ||
+	         strcasecmp(buf, "TT") == 0)
+	  pushfont(font = fltk3::COURIER, fsize);
+	else if (strcasecmp(buf, "KBD") == 0)
+	  pushfont(font = fltk3::COURIER_BOLD, fsize);
+	else if (strcasecmp(buf, "VAR") == 0)
+	  pushfont(font = fltk3::COURIER_ITALIC, fsize);
+	else if (strcasecmp(buf, "/B") == 0 ||
+		 strcasecmp(buf, "/STRONG") == 0 ||
+		 strcasecmp(buf, "/I") == 0 ||
+		 strcasecmp(buf, "/EM") == 0 ||
+		 strcasecmp(buf, "/CODE") == 0 ||
+		 strcasecmp(buf, "/TT") == 0 ||
+		 strcasecmp(buf, "/KBD") == 0 ||
+		 strcasecmp(buf, "/VAR") == 0)
+	  popfont(font, fsize, fcolor);
+	else if (strcasecmp(buf, "IMG") == 0)
+	{
+	  fltk3::SharedImage	*img = 0;
+	  int		width;
+	  int		height;
+
+
+          get_attr(attrs, "WIDTH", wattr, sizeof(wattr));
+          get_attr(attrs, "HEIGHT", hattr, sizeof(hattr));
+	  width  = get_length(wattr);
+	  height = get_length(hattr);
+
+	  if (get_attr(attrs, "SRC", attr, sizeof(attr))) {
+	    img    = get_image(attr, width, height);
+	    width  = img->w();
+	    height = img->h();
+	  }
+
+	  ww = width;
+
+          if (ww > hsize_) {
+	    hsize_ = ww;
+	    done   = 0;
+	    break;
+	  }
+
+	  if (needspace && xx > block->x)
+	    ww += (int)fltk3::width(' ');
+
+	  if ((xx + ww) > block->w)
+	  {
+	    line     = do_align(block, line, xx, newalign, links);
+	    xx       = block->x;
+	    yy       += hh;
+	    block->h += hh;
+	    hh       = 0;
+	  }
+
+	  if (linkdest[0])
+	    add_link(linkdest, xx, yy - height, ww, height);
+
+	  xx += ww;
+	  if ((height + 2) > hh)
+	    hh = height + 2;
+
+	  needspace = 0;
+	}
+      }
+      else if (*ptr == '\n' && pre)
+      {
+	if (linkdest[0])
+	  add_link(linkdest, xx, yy - hh, ww, hh);
+
+        if (xx > hsize_) {
+	  hsize_ = xx;
+          done   = 0;
+	  break;
+	}
+
+	line      = do_align(block, line, xx, newalign, links);
+	xx        = block->x;
+	yy        += hh;
+	block->h  += hh;
+	needspace = 0;
+	ptr ++;
+      }
+      else if (isspace((*ptr)&255))
+      {
+	needspace = 1;
+	if ( pre ) {
+	  xx += (int)fltk3::width(' ');
+        }
+	ptr ++;
+      }
+      else if (*ptr == '&' && s < (buf + sizeof(buf) - 1))
+      {
+        // Handle html '&' codes, eg. "&amp;"
+	ptr ++;
+
+        int qch = quote_char(ptr);
+
+	if (qch < 0)
+	  *s++ = '&';
+	else {
+          int l;
+          l = fltk3::utf8encode((unsigned int) qch, s);
+          if (l < 1) l = 1;
+          s += l;
+	  ptr = strchr(ptr, ';') + 1;
+	}
+
+	if ((fsize + 2) > hh)
+          hh = fsize + 2;
+      }
+      else
+      {
+	if (s < (buf + sizeof(buf) - 1))
+          *s++ = *ptr++;
+	else
+          ptr ++;
+
+	if ((fsize + 2) > hh)
+          hh = fsize + 2;
+      }
+    }
+
+    if (s > buf && !head)
+    {
+      *s = '\0';
+      ww = (int)fltk3::width(buf);
+
+  //    printf("line = %d, xx = %d, ww = %d, block->x = %d, block->w = %d\n",
+  //	   line, xx, ww, block->x, block->w);
+
+      if (ww > hsize_) {
+	hsize_ = ww;
+	done   = 0;
+	break;
+      }
+
+      if (needspace && xx > block->x)
+	ww += (int)fltk3::width(' ');
+
+      if ((xx + ww) > block->w)
+      {
+	line     = do_align(block, line, xx, newalign, links);
+	xx       = block->x;
+	yy       += hh;
+	block->h += hh;
+	hh       = 0;
+      }
+
+      if (linkdest[0])
+	add_link(linkdest, xx, yy - fsize, ww, fsize);
+
+      xx += ww;
+    }
+
+    do_align(block, line, xx, newalign, links);
+
+    block->end = ptr;
+    size_      = yy + hh;
+  }
+
+//  printf("margins.depth_=%d\n", margins.depth_);
+
+  if (ntargets_ > 1)
+    qsort(targets_, ntargets_, sizeof(fltk3::HelpTarget),
+          (compare_func_t)compare_targets);
+
+  int dx = fltk3::box_dw(b) - fltk3::box_dx(b);
+  int dy = fltk3::box_dh(b) - fltk3::box_dy(b);
+  int ss = scrollbar_size_ ? scrollbar_size_ : fltk3::scrollbar_size();
+  int dw = fltk3::box_dw(b) + ss;
+  int dh = fltk3::box_dh(b);
+
+  if (hsize_ > (w() - dw)) {
+    hscrollbar_.show();
+
+    dh += ss;
+
+    if (size_ < (h() - dh)) {
+      scrollbar_.hide();
+      hscrollbar_.resize(x() + fltk3::box_dx(b), y() + h() - ss - dy,
+                         w() - fltk3::box_dw(b), ss);
+    } else {
+      scrollbar_.show();
+      scrollbar_.resize(x() + w() - ss - dx, y() + fltk3::box_dy(b),
+                        ss, h() - ss - fltk3::box_dh(b));
+      hscrollbar_.resize(x() + fltk3::box_dx(b), y() + h() - ss - dy,
+                         w() - ss - fltk3::box_dw(b), ss);
+    }
+  } else {
+    hscrollbar_.hide();
+
+    if (size_ < (h() - dh)) scrollbar_.hide();
+    else {
+      scrollbar_.resize(x() + w() - ss - dx, y() + fltk3::box_dy(b),
+                        ss, h() - fltk3::box_dh(b));
+      scrollbar_.show();
+    }
+  }
+
+  // Reset scrolling if it needs to be...
+  if (scrollbar_.visible()) {
+    int temph = h() - fltk3::box_dh(b);
+    if (hscrollbar_.visible()) temph -= ss;
+    if ((topline_ + temph) > size_) topline(size_ - temph);
+    else topline(topline_);
+  } else topline(0);
+
+  if (hscrollbar_.visible()) {
+    int tempw = w() - ss - fltk3::box_dw(b);
+    if ((leftline_ + tempw) > hsize_) leftline(hsize_ - tempw);
+    else leftline(leftline_);
+  } else leftline(0);
+}
+
+
+/** Formats a table */
+void
+fltk3::HelpView::format_table(int        *table_width,	// O - Total table width
+                           int        *columns,		// O - Column widths
+	                   const char *table)		// I - Pointer to start of table
+{
+  int		column,					// Current column
+		num_columns,				// Number of columns
+		colspan,				// COLSPAN attribute
+		width,					// Current width
+		temp_width,				// Temporary width
+		max_width,				// Maximum width
+		incell,					// In a table cell?
+		pre,					// <PRE> text?
+		needspace;				// Need whitespace?
+  char		*s,					// Pointer into buffer
+		buf[1024],				// Text buffer
+		attr[1024],				// Other attribute
+		wattr[1024],				// WIDTH attribute
+		hattr[1024];				// HEIGHT attribute
+  const char	*ptr,					// Pointer into table
+		*attrs,					// Pointer to attributes
+		*start;					// Start of element
+  int		minwidths[MAX_COLUMNS];			// Minimum widths for each column
+  fltk3::Font       font;
+  fltk3::Fontsize   fsize;				        // Current font and size
+  fltk3::Color      fcolor;                                 // Currrent font color
+
+  // Clear widths...
+  *table_width = 0;
+  for (column = 0; column < MAX_COLUMNS; column ++)
+  {
+    columns[column]   = 0;
+    minwidths[column] = 0;
+  }
+
+  num_columns = 0;
+  colspan     = 0;
+  max_width   = 0;
+  pre         = 0;
+  needspace   = 0;
+  fstack_.top(font, fsize, fcolor);
+
+  // Scan the table...
+  for (ptr = table, column = -1, width = 0, s = buf, incell = 0; *ptr;)
+  {
+    if ((*ptr == '<' || isspace((*ptr)&255)) && s > buf && incell)
+    {
+      // Check width...
+      if (needspace)
+      {
+        *s++      = ' ';
+	needspace = 0;
+      }
+
+      *s         = '\0';
+      temp_width = (int)fltk3::width(buf);
+      s          = buf;
+
+      if (temp_width > minwidths[column])
+        minwidths[column] = temp_width;
+
+      width += temp_width;
+
+      if (width > max_width)
+        max_width = width;
+    }
+
+    if (*ptr == '<')
+    {
+      start = ptr;
+
+      for (s = buf, ptr ++; *ptr && *ptr != '>' && !isspace((*ptr)&255);)
+        if (s < (buf + sizeof(buf) - 1))
+          *s++ = *ptr++;
+	else
+	  ptr ++;
+
+      *s = '\0';
+      s = buf;
+
+      attrs = ptr;
+      while (*ptr && *ptr != '>')
+        ptr ++;
+
+      if (*ptr == '>')
+        ptr ++;
+
+      if (strcasecmp(buf, "BR") == 0 ||
+	  strcasecmp(buf, "HR") == 0)
+      {
+        width     = 0;
+	needspace = 0;
+      }
+      else if (strcasecmp(buf, "TABLE") == 0 && start > table)
+        break;
+      else if (strcasecmp(buf, "CENTER") == 0 ||
+               strcasecmp(buf, "P") == 0 ||
+               strcasecmp(buf, "H1") == 0 ||
+	       strcasecmp(buf, "H2") == 0 ||
+	       strcasecmp(buf, "H3") == 0 ||
+	       strcasecmp(buf, "H4") == 0 ||
+	       strcasecmp(buf, "H5") == 0 ||
+	       strcasecmp(buf, "H6") == 0 ||
+	       strcasecmp(buf, "UL") == 0 ||
+	       strcasecmp(buf, "OL") == 0 ||
+	       strcasecmp(buf, "DL") == 0 ||
+	       strcasecmp(buf, "LI") == 0 ||
+	       strcasecmp(buf, "DD") == 0 ||
+	       strcasecmp(buf, "DT") == 0 ||
+	       strcasecmp(buf, "PRE") == 0)
+      {
+        width     = 0;
+	needspace = 0;
+
+        if (tolower(buf[0]) == 'h' && isdigit(buf[1]))
+	{
+	  font  = fltk3::HELVETICA_BOLD;
+	  fsize = textsize_ + '7' - buf[1];
+	}
+	else if (strcasecmp(buf, "DT") == 0)
+	{
+	  font  = textfont_ | fltk3::ITALIC;
+	  fsize = textsize_;
+	}
+	else if (strcasecmp(buf, "PRE") == 0)
+	{
+	  font  = fltk3::COURIER;
+	  fsize = textsize_;
+	  pre   = 1;
+	}
+	else if (strcasecmp(buf, "LI") == 0)
+	{
+	  width  += 4 * fsize;
+	  font   = textfont_;
+	  fsize  = textsize_;
+	}
+	else
+	{
+	  font  = textfont_;
+	  fsize = textsize_;
+	}
+
+	pushfont(font, fsize);
+      }
+      else if (strcasecmp(buf, "/CENTER") == 0 ||
+	       strcasecmp(buf, "/P") == 0 ||
+	       strcasecmp(buf, "/H1") == 0 ||
+	       strcasecmp(buf, "/H2") == 0 ||
+	       strcasecmp(buf, "/H3") == 0 ||
+	       strcasecmp(buf, "/H4") == 0 ||
+	       strcasecmp(buf, "/H5") == 0 ||
+	       strcasecmp(buf, "/H6") == 0 ||
+	       strcasecmp(buf, "/PRE") == 0 ||
+	       strcasecmp(buf, "/UL") == 0 ||
+	       strcasecmp(buf, "/OL") == 0 ||
+	       strcasecmp(buf, "/DL") == 0)
+      {
+        width     = 0;
+	needspace = 0;
+
+        popfont(font, fsize, fcolor);
+      }
+      else if (strcasecmp(buf, "TR") == 0 || strcasecmp(buf, "/TR") == 0 ||
+               strcasecmp(buf, "/TABLE") == 0)
+      {
+//        printf("%s column = %d, colspan = %d, num_columns = %d\n",
+//	       buf, column, colspan, num_columns);
+
+        if (column >= 0)
+	{
+	  // This is a hack to support COLSPAN...
+	  max_width /= colspan;
+
+	  while (colspan > 0)
+	  {
+	    if (max_width > columns[column])
+	      columns[column] = max_width;
+
+	    column ++;
+	    colspan --;
+	  }
+	}
+
+	if (strcasecmp(buf, "/TABLE") == 0)
+	  break;
+
+	needspace = 0;
+	column    = -1;
+	width     = 0;
+	max_width = 0;
+	incell    = 0;
+      }
+      else if (strcasecmp(buf, "TD") == 0 ||
+               strcasecmp(buf, "TH") == 0)
+      {
+//        printf("BEFORE column = %d, colspan = %d, num_columns = %d\n",
+//	       column, colspan, num_columns);
+
+        if (column >= 0)
+	{
+	  // This is a hack to support COLSPAN...
+	  max_width /= colspan;
+
+	  while (colspan > 0)
+	  {
+	    if (max_width > columns[column])
+	      columns[column] = max_width;
+
+	    column ++;
+	    colspan --;
+	  }
+	}
+	else
+	  column ++;
+
+        if (get_attr(attrs, "COLSPAN", attr, sizeof(attr)) != NULL)
+	  colspan = atoi(attr);
+	else
+	  colspan = 1;
+
+//        printf("AFTER column = %d, colspan = %d, num_columns = %d\n",
+//	       column, colspan, num_columns);
+
+        if ((column + colspan) >= num_columns)
+	  num_columns = column + colspan;
+
+	needspace = 0;
+	width     = 0;
+	incell    = 1;
+
+        if (strcasecmp(buf, "TH") == 0)
+	  font = textfont_ | fltk3::BOLD;
+	else
+	  font = textfont_;
+
+        fsize = textsize_;
+
+	pushfont(font, fsize);
+
+        if (get_attr(attrs, "WIDTH", attr, sizeof(attr)) != NULL)
+	  max_width = get_length(attr);
+	else
+	  max_width = 0;
+
+//        printf("max_width = %d\n", max_width);
+      }
+      else if (strcasecmp(buf, "/TD") == 0 ||
+               strcasecmp(buf, "/TH") == 0)
+      {
+	incell = 0;
+        popfont(font, fsize, fcolor);
+      }
+      else if (strcasecmp(buf, "B") == 0 ||
+               strcasecmp(buf, "STRONG") == 0)
+	pushfont(font |= fltk3::BOLD, fsize);
+      else if (strcasecmp(buf, "I") == 0 ||
+               strcasecmp(buf, "EM") == 0)
+	pushfont(font |= fltk3::ITALIC, fsize);
+      else if (strcasecmp(buf, "CODE") == 0 ||
+               strcasecmp(buf, "TT") == 0)
+	pushfont(font = fltk3::COURIER, fsize);
+      else if (strcasecmp(buf, "KBD") == 0)
+	pushfont(font = fltk3::COURIER_BOLD, fsize);
+      else if (strcasecmp(buf, "VAR") == 0)
+	pushfont(font = fltk3::COURIER_ITALIC, fsize);
+      else if (strcasecmp(buf, "/B") == 0 ||
+	       strcasecmp(buf, "/STRONG") == 0 ||
+	       strcasecmp(buf, "/I") == 0 ||
+	       strcasecmp(buf, "/EM") == 0 ||
+	       strcasecmp(buf, "/CODE") == 0 ||
+	       strcasecmp(buf, "/TT") == 0 ||
+	       strcasecmp(buf, "/KBD") == 0 ||
+	       strcasecmp(buf, "/VAR") == 0)
+	popfont(font, fsize, fcolor);
+      else if (strcasecmp(buf, "IMG") == 0 && incell)
+      {
+	fltk3::SharedImage	*img = 0;
+	int		iwidth, iheight;
+
+
+        get_attr(attrs, "WIDTH", wattr, sizeof(wattr));
+        get_attr(attrs, "HEIGHT", hattr, sizeof(hattr));
+	iwidth  = get_length(wattr);
+	iheight = get_length(hattr);
+
+        if (get_attr(attrs, "SRC", attr, sizeof(attr))) {
+	  img     = get_image(attr, iwidth, iheight);
+	  iwidth  = img->w();
+	  iheight = img->h();
+	}
+
+	if (iwidth > minwidths[column])
+          minwidths[column] = iwidth;
+
+        width += iwidth;
+	if (needspace)
+	  width += (int)fltk3::width(' ');
+
+	if (width > max_width)
+          max_width = width;
+
+	needspace = 0;
+      }
+    }
+    else if (*ptr == '\n' && pre)
+    {
+      width     = 0;
+      needspace = 0;
+      ptr ++;
+    }
+    else if (isspace((*ptr)&255))
+    {
+      needspace = 1;
+
+      ptr ++;
+    }
+    else if (*ptr == '&' && s < (buf + sizeof(buf) - 1))
+    {
+      ptr ++;
+
+      int qch = quote_char(ptr);
+
+      if (qch < 0)
+	*s++ = '&';
+      else {
+//        int l;
+//        l = fltk3::utf8encode((unsigned int) qch, s);
+//        if (l < 1) l = 1;
+//        s += l;
+	*s++ = qch;
+	ptr = strchr(ptr, ';') + 1;
+      }
+    }
+    else
+    {
+      if (s < (buf + sizeof(buf) - 1))
+        *s++ = *ptr++;
+      else
+        ptr ++;
+    }
+  }
+
+  // Now that we have scanned the entire table, adjust the table and
+  // cell widths to fit on the screen...
+  if (get_attr(table + 6, "WIDTH", attr, sizeof(attr)))
+    *table_width = get_length(attr);
+  else
+    *table_width = 0;
+
+#ifdef DEBUG
+  printf("num_columns = %d, table_width = %d\n", num_columns, *table_width);
+#endif // DEBUG
+
+  if (num_columns == 0)
+    return;
+
+  // Add up the widths...
+  for (column = 0, width = 0; column < num_columns; column ++)
+    width += columns[column];
+
+#ifdef DEBUG
+  printf("width = %d, w() = %d\n", width, w());
+  for (column = 0; column < num_columns; column ++)
+    printf("    columns[%d] = %d, minwidths[%d] = %d\n", column, columns[column],
+           column, minwidths[column]);
+#endif // DEBUG
+
+  // Adjust the width if needed...
+  int scale_width = *table_width;
+
+  int scrollsize = scrollbar_size_ ? scrollbar_size_ : fltk3::scrollbar_size();
+  if (scale_width == 0) {
+    if (width > (hsize_ - scrollsize)) scale_width = hsize_ - scrollsize;
+    else scale_width = width;
+  }
+
+  if (width < scale_width) {
+#ifdef DEBUG
+    printf("Scaling table up to %d from %d...\n", scale_width, width);
+#endif // DEBUG
+
+    *table_width = 0;
+
+    scale_width = (scale_width - width) / num_columns;
+
+#ifdef DEBUG
+    printf("adjusted scale_width = %d\n", scale_width);
+#endif // DEBUG
+
+    for (column = 0; column < num_columns; column ++) {
+      columns[column] += scale_width;
+
+      (*table_width) += columns[column];
+    }
+  }
+  else if (width > scale_width) {
+#ifdef DEBUG
+    printf("Scaling table down to %d from %d...\n", scale_width, width);
+#endif // DEBUG
+
+    for (column = 0; column < num_columns; column ++) {
+      width       -= minwidths[column];
+      scale_width -= minwidths[column];
+    }
+
+#ifdef DEBUG
+    printf("adjusted width = %d, scale_width = %d\n", width, scale_width);
+#endif // DEBUG
+
+    if (width > 0) {
+      for (column = 0; column < num_columns; column ++) {
+	columns[column] -= minwidths[column];
+	columns[column] = scale_width * columns[column] / width;
+	columns[column] += minwidths[column];
+      }
+    }
+
+    *table_width = 0;
+    for (column = 0; column < num_columns; column ++) {
+      (*table_width) += columns[column];
+    }
+  }
+  else if (*table_width == 0)
+    *table_width = width;
+
+#ifdef DEBUG
+  printf("FINAL table_width = %d\n", *table_width);
+  for (column = 0; column < num_columns; column ++)
+    printf("    columns[%d] = %d\n", column, columns[column]);
+#endif // DEBUG
+}
+
+
+/** Frees memory used for the document. */
+void
+fltk3::HelpView::free_data() {
+  // Release all images...
+  if (value_) {
+    const char	*ptr,		// Pointer into block
+		*attrs;		// Pointer to start of element attributes
+    char	*s,		// Pointer into buffer
+		buf[1024],	// Text buffer
+		attr[1024],	// Attribute buffer
+		wattr[1024],	// Width attribute buffer
+		hattr[1024];	// Height attribute buffer
+
+    for (ptr = value_; *ptr;)
+    {
+      if (*ptr == '<')
+      {
+	ptr ++;
+
+        if (strncmp(ptr, "!--", 3) == 0)
+	{
+	  // Comment...
+	  ptr += 3;
+	  if ((ptr = strstr(ptr, "-->")) != NULL)
+	  {
+	    ptr += 3;
+	    continue;
+	  }
+	  else
+	    break;
+	}
+
+        s = buf;
+
+	while (*ptr && *ptr != '>' && !isspace((*ptr)&255))
+          if (s < (buf + sizeof(buf) - 1))
+            *s++ = *ptr++;
+	  else
+	    ptr ++;
+
+	*s = '\0';
+
+	attrs = ptr;
+	while (*ptr && *ptr != '>')
+          ptr ++;
+
+	if (*ptr == '>')
+          ptr ++;
+
+	if (strcasecmp(buf, "IMG") == 0)
+	{
+	  fltk3::SharedImage	*img;
+	  int		width;
+	  int		height;
+
+          get_attr(attrs, "WIDTH", wattr, sizeof(wattr));
+          get_attr(attrs, "HEIGHT", hattr, sizeof(hattr));
+	  width  = get_length(wattr);
+	  height = get_length(hattr);
+
+	  if (get_attr(attrs, "SRC", attr, sizeof(attr))) {
+	    // Get and release the image to free it from memory...
+	    img = get_image(attr, width, height);
+	    if ((void*)img != &broken_image) {
+	      img->release();
+	    }
+	  }
+	}
+      }
+      else
+        ptr ++;
+    }
+
+    free((void *)value_);
+    value_ = 0;
+  }
+
+  // Free all of the arrays...
+  if (nblocks_) {
+    free(blocks_);
+
+    ablocks_ = 0;
+    nblocks_ = 0;
+    blocks_  = 0;
+  }
+
+  if (nlinks_) {
+    free(links_);
+
+    alinks_ = 0;
+    nlinks_ = 0;
+    links_  = 0;
+  }
+
+  if (ntargets_) {
+    free(targets_);
+
+    atargets_ = 0;
+    ntargets_ = 0;
+    targets_  = 0;
+  }
+}
+
+/** Gets an alignment attribute. */
+int					// O - Alignment
+fltk3::HelpView::get_align(const char *p,	// I - Pointer to start of attrs
+                        int        a)	// I - Default alignment
+{
+  char	buf[255];			// Alignment value
+
+
+  if (get_attr(p, "ALIGN", buf, sizeof(buf)) == NULL)
+    return (a);
+
+  if (strcasecmp(buf, "CENTER") == 0)
+    return (CENTER);
+  else if (strcasecmp(buf, "RIGHT") == 0)
+    return (RIGHT);
+  else
+    return (LEFT);
+}
+
+
+/** Gets an attribute value from the string. */
+const char *					// O - Pointer to buf or NULL
+fltk3::HelpView::get_attr(const char *p,		// I - Pointer to start of attributes
+                      const char *n,		// I - Name of attribute
+		      char       *buf,		// O - Buffer for attribute value
+		      int        bufsize)	// I - Size of buffer
+{
+  char	name[255],				// Name from string
+	*ptr,					// Pointer into name or value
+	quote;					// Quote
+
+
+  buf[0] = '\0';
+
+  while (*p && *p != '>')
+  {
+    while (isspace((*p)&255))
+      p ++;
+
+    if (*p == '>' || !*p)
+      return (NULL);
+
+    for (ptr = name; *p && !isspace((*p)&255) && *p != '=' && *p != '>';)
+      if (ptr < (name + sizeof(name) - 1))
+        *ptr++ = *p++;
+      else
+        p ++;
+
+    *ptr = '\0';
+
+    if (isspace((*p)&255) || !*p || *p == '>')
+      buf[0] = '\0';
+    else
+    {
+      if (*p == '=')
+        p ++;
+
+      for (ptr = buf; *p && !isspace((*p)&255) && *p != '>';)
+        if (*p == '\'' || *p == '\"')
+	{
+	  quote = *p++;
+
+	  while (*p && *p != quote)
+	    if ((ptr - buf + 1) < bufsize)
+	      *ptr++ = *p++;
+	    else
+	      p ++;
+
+          if (*p == quote)
+	    p ++;
+	}
+	else if ((ptr - buf + 1) < bufsize)
+	  *ptr++ = *p++;
+	else
+	  p ++;
+
+      *ptr = '\0';
+    }
+
+    if (strcasecmp(n, name) == 0)
+      return (buf);
+    else
+      buf[0] = '\0';
+
+    if (*p == '>')
+      return (NULL);
+  }
+
+  return (NULL);
+}
+
+
+/** Gets a color attribute. */
+fltk3::Color				// O - Color value
+fltk3::HelpView::get_color(const char *n,	// I - Color name
+                        fltk3::Color   c)	// I - Default color value
+{
+  int	i;				// Looping var
+  int	rgb, r, g, b;			// RGB values
+  static const struct {			// Color name table
+    const char *name;
+    int r, g, b;
+  }	colors[] = {
+    { "black",		0x00, 0x00, 0x00 },
+    { "red",		0xff, 0x00, 0x00 },
+    { "green",		0x00, 0x80, 0x00 },
+    { "yellow",		0xff, 0xff, 0x00 },
+    { "blue",		0x00, 0x00, 0xff },
+    { "magenta",	0xff, 0x00, 0xff },
+    { "fuchsia",	0xff, 0x00, 0xff },
+    { "cyan",		0x00, 0xff, 0xff },
+    { "aqua",		0x00, 0xff, 0xff },
+    { "white",		0xff, 0xff, 0xff },
+    { "gray",		0x80, 0x80, 0x80 },
+    { "grey",		0x80, 0x80, 0x80 },
+    { "lime",		0x00, 0xff, 0x00 },
+    { "maroon",		0x80, 0x00, 0x00 },
+    { "navy",		0x00, 0x00, 0x80 },
+    { "olive",		0x80, 0x80, 0x00 },
+    { "purple",		0x80, 0x00, 0x80 },
+    { "silver",		0xc0, 0xc0, 0xc0 },
+    { "teal",		0x00, 0x80, 0x80 }
+  };
+
+
+  if (!n || !n[0]) return c;
+
+  if (n[0] == '#') {
+    // Do hex color lookup
+    rgb = strtol(n + 1, NULL, 16);
+
+    if (strlen(n) > 4) {
+      r = rgb >> 16;
+      g = (rgb >> 8) & 255;
+      b = rgb & 255;
+    } else {
+      r = (rgb >> 8) * 17;
+      g = ((rgb >> 4) & 15) * 17;
+      b = (rgb & 15) * 17;
+    }
+    return (fltk3::rgb_color((uchar)r, (uchar)g, (uchar)b));
+  } else {
+    for (i = 0; i < (int)(sizeof(colors) / sizeof(colors[0])); i ++)
+      if (!strcasecmp(n, colors[i].name)) {
+        return fltk3::rgb_color(colors[i].r, colors[i].g, colors[i].b);
+      }
+    return c;
+  }
+}
+
+
+/** Gets an inline image.
+
+  The image reference count is maintained accordingly, such that
+  the image can be released exactly once when the document is closed.
+
+  \return a pointer to a cached fltk3::SharedImage, if the image can be loaded,
+  	  otherwise a pointer to an internal fltk3::Pixmap (broken_image).
+
+  \todo fltk3::HelpView::get_image() returns a pointer to the internal
+  fltk3::Pixmap broken_image, but this is _not_ compatible with the
+  return type fltk3::SharedImage (release() must not be called).
+*/
+
+/* Implementation note: (A.S. Apr 05, 2009)
+
+  fltk3::HelpView::get_image() uses a static global flag (initial_load)
+  to determine, if it is called from the initial loading of a document
+  (load() or value()), or from resize() or draw().
+
+  A better solution would be to manage all loaded images in an own
+  structure like fltk3::HelpTarget (Fl_Help_Image ?) to avoid using this
+  global flag, but this would break the ABI !
+
+  This should be fixed in FLTK 1.3 !
+
+
+  If initial_load is true, then fltk3::SharedImage::get() is called to
+  load the image, and the reference count of the shared image is
+  increased by one.
+
+  If initial_load is false, then fltk3::SharedImage::find() is called to
+  load the image, and the image is released immediately. This avoids
+  increasing the reference count when calling get_image() from draw()
+  or resize().
+
+  Calling fltk3::SharedImage::find() instead of fltk3::SharedImage::get() avoids
+  doing unnecessary i/o for "broken images" within each resize/redraw.
+
+  Each image must be released exactly once in the destructor or before
+  a new document is loaded: see free_data().
+*/
+
+fltk3::SharedImage *
+fltk3::HelpView::get_image(const char *name, int W, int H) {
+  const char	*localname;		// Local filename
+  char		dir[FLTK3_PATH_MAX];	// Current directory
+  char		temp[FLTK3_PATH_MAX],	// Temporary filename
+		*tempptr;		// Pointer into temporary name
+  fltk3::SharedImage *ip;			// Image pointer...
+
+  // See if the image can be found...
+  if (strchr(directory_, ':') != NULL && strchr(name, ':') == NULL) {
+    if (name[0] == '/') {
+      strlcpy(temp, directory_, sizeof(temp));
+
+      if ((tempptr = strrchr(strchr(directory_, ':') + 3, '/')) != NULL) {
+        strlcpy(tempptr, name, sizeof(temp) - (tempptr - temp));
+      } else {
+        strlcat(temp, name, sizeof(temp));
+      }
+    } else {
+      snprintf(temp, sizeof(temp), "%s/%s", directory_, name);
+    }
+
+    if (link_) localname = (*link_)(this, temp);
+    else localname = temp;
+  } else if (name[0] != '/' && strchr(name, ':') == NULL) {
+    if (directory_[0]) snprintf(temp, sizeof(temp), "%s/%s", directory_, name);
+    else {
+      fltk3::getcwd(dir, sizeof(dir));
+      snprintf(temp, sizeof(temp), "file:%s/%s", dir, name);
+    }
+
+    if (link_) localname = (*link_)(this, temp);
+    else localname = temp;
+  } else if (link_) localname = (*link_)(this, name);
+  else localname = name;
+
+  if (!localname) return 0;
+
+  if (strncmp(localname, "file:", 5) == 0) localname += 5;
+
+  if (initial_load) {
+    if ((ip = fltk3::SharedImage::get(localname, W, H)) == NULL) {
+      ip = (fltk3::SharedImage *)&broken_image;
+    }
+  } else { // draw or resize
+    if ((ip = fltk3::SharedImage::find(localname, W, H)) == NULL) {
+      ip = (fltk3::SharedImage *)&broken_image;
+    } else {
+      ip->release();
+    }
+  }
+
+  return ip;
+}
+
+
+/** Gets a length value, either absolute or %. */
+int
+fltk3::HelpView::get_length(const char *l) {	// I - Value
+  int	val;					// Integer value
+
+  if (!l[0]) return 0;
+
+  val = atoi(l);
+  if (l[strlen(l) - 1] == '%') {
+    if (val > 100) val = 100;
+    else if (val < 0) val = 0;
+
+    int scrollsize = scrollbar_size_ ? scrollbar_size_ : fltk3::scrollbar_size();
+    val = val * (hsize_ - scrollsize) / 100;
+  }
+
+  return val;
+}
+
+
+fltk3::HelpLink *fltk3::HelpView::find_link(int xx, int yy)
+{
+  int		i;
+  fltk3::HelpLink	*linkp;
+  for (i = nlinks_, linkp = links_; i > 0; i --, linkp ++) {
+    if (xx >= linkp->x && xx < linkp->w &&
+        yy >= linkp->y && yy < linkp->h)
+      break;
+  }
+  return i ? linkp : 0L;
+}
+
+void fltk3::HelpView::follow_link(fltk3::HelpLink *linkp)
+{
+  char		target[32];	// Current target
+
+  clear_selection();
+
+  strlcpy(target, linkp->name, sizeof(target));
+
+  set_changed();
+
+  if (strcmp(linkp->filename, filename_) != 0 && linkp->filename[0])
+  {
+    char	dir[FLTK3_PATH_MAX];	// Current directory
+    char	temp[FLTK3_PATH_MAX],	// Temporary filename
+	      *tempptr;	// Pointer into temporary filename
+
+
+    if (strchr(directory_, ':') != NULL &&
+        strchr(linkp->filename, ':') == NULL)
+    {
+      if (linkp->filename[0] == '/')
+      {
+        strlcpy(temp, directory_, sizeof(temp));
+        if ((tempptr = strrchr(strchr(directory_, ':') + 3, '/')) != NULL)
+	  strlcpy(tempptr, linkp->filename, sizeof(temp));
+	else
+	  strlcat(temp, linkp->filename, sizeof(temp));
+      }
+      else
+	snprintf(temp, sizeof(temp), "%s/%s", directory_, linkp->filename);
+    }
+    else if (linkp->filename[0] != '/' && strchr(linkp->filename, ':') == NULL)
+    {
+      if (directory_[0])
+	snprintf(temp, sizeof(temp), "%s/%s", directory_, linkp->filename);
+      else
+      {
+	  fltk3::getcwd(dir, sizeof(dir));
+	snprintf(temp, sizeof(temp), "file:%s/%s", dir, linkp->filename);
+      }
+    }
+    else
+      strlcpy(temp, linkp->filename, sizeof(temp));
+
+    if (linkp->name[0])
+      snprintf(temp + strlen(temp), sizeof(temp) - strlen(temp), "#%s",
+	       linkp->name);
+
+    load(temp);
+  }
+  else if (target[0])
+    topline(target);
+  else
+    topline(0);
+
+  leftline(0);
+}
+
+/** Removes the current text selection. */
+void fltk3::HelpView::clear_selection()
+{
+  if (current_view==this)
+    clear_global_selection();
+}
+/** Selects all the text in the view. */
+void fltk3::HelpView::select_all()
+{
+  clear_global_selection();
+  if (!value_) return;
+  current_view = this;
+  selection_drag_last = selection_last = strlen(value_);
+  selected = 1;
+}
+
+void fltk3::HelpView::clear_global_selection()
+{
+  if (selected) redraw();
+  selection_push_first = selection_push_last = 0;
+  selection_drag_first = selection_drag_last = 0;
+  selection_first = selection_last = 0;
+  selected = 0;
+}
+
+char fltk3::HelpView::begin_selection()
+{
+  clear_global_selection();
+
+  if (!fl_help_view_buffer) fl_help_view_buffer = fl_create_offscreen(1, 1);
+
+  mouse_x = fltk3::event_x();
+  mouse_y = fltk3::event_y();
+  draw_mode = 1;
+
+    current_view = this;
+    fl_begin_offscreen(fl_help_view_buffer);
+    draw();
+    fl_end_offscreen();
+
+  draw_mode = 0;
+
+  if (selection_push_last) return 1;
+  else return 0;
+}
+
+char fltk3::HelpView::extend_selection()
+{
+  if (fltk3::event_is_click())
+    return 0;
+
+//  printf("old selection_first=%d, selection_last=%d\n",
+//         selection_first, selection_last);
+
+  int sf = selection_first, sl = selection_last;
+
+  selected = 1;
+  mouse_x = fltk3::event_x();
+  mouse_y = fltk3::event_y();
+  draw_mode = 2;
+
+    fl_begin_offscreen(fl_help_view_buffer);
+    draw();
+    fl_end_offscreen();
+
+  draw_mode = 0;
+
+  if (selection_push_first < selection_drag_first) {
+    selection_first = selection_push_first;
+  } else {
+    selection_first = selection_drag_first;
+  }
+
+  if (selection_push_last > selection_drag_last) {
+    selection_last = selection_push_last;
+  } else {
+    selection_last = selection_drag_last;
+  }
+
+//  printf("new selection_first=%d, selection_last=%d\n",
+//         selection_first, selection_last);
+
+  if (sf!=selection_first || sl!=selection_last) {
+//    puts("REDRAW!!!\n");
+    return 1;
+  } else {
+//    puts("");
+    return 0;
+  }
+}
+
+// convert a command with up to four letters into an unsigned int
+static unsigned int command(const char *cmd)
+{
+  unsigned int ret = (tolower(cmd[0])<<24);
+  char c = cmd[1];
+  if (c=='>' || c==' ' || c==0) return ret;
+  ret |= (tolower(c)<<16);
+  c = cmd[2];
+  if (c=='>' || c==' ' || c==0) return ret;
+  ret |= (tolower(c)<<8);
+  c = cmd[3];
+  if (c=='>' || c==' ' || c==0) return ret;
+  ret |= tolower(c);
+  c = cmd[4];
+  if (c=='>' || c==' ' || c==0) return ret;
+  return 0;
+}
+
+#define CMD(a, b, c, d) ((a<<24)|(b<<16)|(c<<8)|d)
+
+void fltk3::HelpView::end_selection(int clipboard) 
+{
+  if (!selected || current_view!=this) 
+    return;
+  // convert the select part of our html text into some kind of somewhat readable ASCII
+  // and store it in the selection buffer
+  char p = 0, pre = 0;;
+  int len = strlen(value_);
+  char *txt = (char*)malloc(len+1), *d = txt;
+  const char *s = value_, *cmd, *src;
+  for (;;) {
+    char c = *s++;
+    if (c==0) break;
+    if (c=='<') { // begin of some html command. Skip until we find a '>'
+      cmd = s;
+      for (;;) {
+        c = *s++;
+        if (c==0 || c=='>') break;
+      }
+      if (c==0) break;
+      // do something with this command... .
+      // the replacement string must not be longer that the command itself plus '<' and '>'
+      src = 0;
+      switch (command(cmd)) {
+        case CMD('p','r','e', 0 ): pre = 1; break;
+        case CMD('/','p','r','e'): pre = 0; break;
+        case CMD('t','d', 0 , 0 ):
+        case CMD('p', 0 , 0 , 0 ):
+        case CMD('/','p', 0 , 0 ):
+        case CMD('b','r', 0 , 0 ): src = "\n"; break;
+        case CMD('l','i', 0 , 0 ): src = "\n * "; break;
+        case CMD('/','h','1', 0 ):
+        case CMD('/','h','2', 0 ):
+        case CMD('/','h','3', 0 ):
+        case CMD('/','h','4', 0 ):
+        case CMD('/','h','5', 0 ):
+        case CMD('/','h','6', 0 ): src = "\n\n"; break;
+        case CMD('t','r', 0 , 0 ):
+        case CMD('h','1', 0 , 0 ):
+        case CMD('h','2', 0 , 0 ):
+        case CMD('h','3', 0 , 0 ):
+        case CMD('h','4', 0 , 0 ):
+        case CMD('h','5', 0 , 0 ):
+        case CMD('h','6', 0 , 0 ): src = "\n\n"; break;
+        case CMD('d','t', 0 , 0 ): src = "\n "; break;
+        case CMD('d','d', 0 , 0 ): src = "\n - "; break;
+      }
+      int n = s-value_;
+      if (src && n>selection_first && n<=selection_last) {
+        while (*src) {
+          *d++ = *src++;
+        }
+        c = src[-1];
+        p = isspace(c&255) ? ' ' : c;
+      }
+      continue;
+    }
+    if (c=='&') { // special characters
+      int xx = quote_char(s);
+      if (xx>=0) {
+        c = (char)xx;
+        for (;;) {
+          char cc = *s++;
+          if (!cc || cc==';') break;
+        }
+      }
+    }
+    int n = s-value_;
+    if (n>selection_first && n<=selection_last) {
+      if (!pre && isspace(c&255)) c = ' ';
+      if (p!=' '||c!=' ')
+        *d++ = c;
+      p = c;
+    }
+  }
+  *d = 0;
+  fltk3::copy(txt, strlen(txt), clipboard);
+  free(txt);
+}
+
+/** Handles events in the widget. */
+int				// O - 1 if we handled it, 0 otherwise
+fltk3::HelpView::handle(int event)	// I - Event to handle
+{
+  FLTK3_OBJECT_VCALLS_WRAPPER_RET(int, handle(event), Handle)
+  static fltk3::HelpLink *linkp;   // currently clicked link
+
+  int xx = fltk3::event_x() - x() + leftline_;
+  int yy = fltk3::event_y() - y() + topline_;
+
+  switch (event)
+  {
+    case fltk3::FOCUS:
+      redraw();
+      return 1;
+    case fltk3::UNFOCUS:
+      clear_selection();
+      redraw();
+      return 1;
+    case fltk3::ENTER :
+      Group::handle(event);
+      return 1;
+    case fltk3::LEAVE :
+      fltk3::cursor(fltk3::CURSOR_DEFAULT);
+      break;
+    case fltk3::MOVE:
+      if (find_link(xx, yy)) fltk3::cursor(fltk3::CURSOR_HAND);
+      else fltk3::cursor(fltk3::CURSOR_DEFAULT);
+      return 1;
+    case fltk3::PUSH:
+      if (Group::handle(event)) return 1;
+      linkp = find_link(xx, yy);
+      if (linkp) {
+        fltk3::cursor(fltk3::CURSOR_HAND);
+        return 1;
+      }
+      if (begin_selection()) {
+        fltk3::cursor(fltk3::CURSOR_INSERT);
+        return 1;
+      }
+      fltk3::cursor(fltk3::CURSOR_DEFAULT);
+      return 1;
+    case fltk3::DRAG:
+      if (linkp) {
+        if (fltk3::event_is_click()) {
+          fltk3::cursor(fltk3::CURSOR_HAND);
+        } else {
+          fltk3::cursor(fltk3::CURSOR_DEFAULT); // should be "fltk3::CURSOR_CANCEL" if we had it
+        }
+        return 1;
+      }
+      if (current_view==this && selection_push_last) {
+        if (extend_selection()) redraw();
+        fltk3::cursor(fltk3::CURSOR_INSERT);
+        return 1;
+      }
+      fltk3::cursor(fltk3::CURSOR_DEFAULT);
+      return 1;
+    case fltk3::RELEASE:
+      if (linkp) {
+        if (fltk3::event_is_click()) {
+          follow_link(linkp);
+        }
+        fltk3::cursor(fltk3::CURSOR_DEFAULT);
+        linkp = 0;
+        return 1;
+      }
+      if (current_view==this && selection_push_last) {
+        end_selection();
+        return 1;
+      }
+      return 1;
+    case fltk3::SHORTCUT: {
+      if (fltk3::event_state() == fltk3::COMMAND) {
+        switch ( fltk3::event_key() ) {
+          case 'a': select_all(); redraw(); return 1;
+          case 'c':
+          case 'x': end_selection(1); return 1;
+        }
+      }
+      break; }
+  }
+  return (Group::handle(event));
+}
+
+/** 
+  The constructor creates the fltk3::HelpView widget at the specified
+  position and size.
+*/
+fltk3::HelpView::HelpView(int        xx,	// I - Left position
+                	   int        yy,	// I - Top position
+			   int        ww,	// I - Width in pixels
+			   int        hh,	// I - Height in pixels
+			   const char *l)
+    : fltk3::Group(xx, yy, ww, hh, l),
+      scrollbar_(xx + ww - fltk3::scrollbar_size(), yy,
+                 fltk3::scrollbar_size(), hh - fltk3::scrollbar_size()),
+      hscrollbar_(xx, yy + hh - fltk3::scrollbar_size(),
+                  ww - fltk3::scrollbar_size(), fltk3::scrollbar_size())
+{
+  color(fltk3::BACKGROUND2_COLOR, fltk3::SELECTION_COLOR);
+
+  title_[0]     = '\0';
+  defcolor_     = fltk3::FOREGROUND_COLOR;
+  bgcolor_      = fltk3::BACKGROUND_COLOR;
+  textcolor_    = fltk3::FOREGROUND_COLOR;
+  linkcolor_    = fltk3::SELECTION_COLOR;
+  textfont_     = fltk3::TIMES;
+  textsize_     = 12;
+  value_        = NULL;
+
+  ablocks_      = 0;
+  nblocks_      = 0;
+  blocks_       = (fltk3::HelpBlock *)0;
+
+  link_         = (fltk3::HelpFunc *)0;
+
+  alinks_       = 0;
+  nlinks_       = 0;
+  links_        = (fltk3::HelpLink *)0;
+
+  atargets_     = 0;
+  ntargets_     = 0;
+  targets_      = (fltk3::HelpTarget *)0;
+
+  directory_[0] = '\0';
+  filename_[0]  = '\0';
+
+  topline_      = 0;
+  leftline_     = 0;
+  size_         = 0;
+  hsize_        = 0;
+  scrollbar_size_ = 0;
+
+  scrollbar_.value(0, hh, 0, 1);
+  scrollbar_.step(8.0);
+  scrollbar_.show();
+  scrollbar_.callback(scrollbar_callback);
+
+  hscrollbar_.value(0, ww, 0, 1);
+  hscrollbar_.step(8.0);
+  hscrollbar_.show();
+  hscrollbar_.callback(hscrollbar_callback);
+  hscrollbar_.type(fltk3::HORIZONTAL);
+  end();
+
+  resize(xx, yy, ww, hh);
+}
+
+
+/** Destroys the fltk3::HelpView widget.
+
+  The destructor destroys the widget and frees all memory that has been
+  allocated for the current document.
+*/
+fltk3::HelpView::~HelpView()
+{
+  clear_selection();
+  free_data();
+}
+
+
+/** Loads the specified file.
+
+  This method loads the specified file or URL.
+*/
+int				// O - 0 on success, -1 on error
+fltk3::HelpView::load(const char *f)// I - Filename to load (may also have target)
+{
+  FILE		*fp;		// File to read from
+  long		len;		// Length of file
+  char		*target;	// Target in file
+  char		*slash;		// Directory separator
+  const char	*localname;	// Local filename
+  char		error[1024];	// Error buffer
+  char		newname[FLTK3_PATH_MAX];	// New filename buffer
+
+  // printf("load(%s)\n",f); fflush(stdout);
+
+  if (strncmp(f, "ftp:", 4) == 0 ||
+      strncmp(f, "http:", 5) == 0 ||
+      strncmp(f, "https:", 6) == 0 ||
+      strncmp(f, "ipp:", 4) == 0 ||
+      strncmp(f, "mailto:";, 7) == 0 ||
+      strncmp(f, "news:";, 5) == 0) {
+    char urimsg[FLTK3_PATH_MAX];
+    if ( fltk3::open_uri(f, urimsg, sizeof(urimsg)) == 0 ) {
+      clear_selection();
+
+      strlcpy(newname, f, sizeof(newname));
+      if ((target = strrchr(newname, '#')) != NULL)
+	*target++ = '\0';
+
+      if (link_)
+	localname = (*link_)(this, newname);
+      else
+	localname = filename_;
+
+      if (!localname)
+	return (0);
+
+      free_data();
+
+      strlcpy(filename_, newname, sizeof(filename_));
+      strlcpy(directory_, newname, sizeof(directory_));
+
+      // Note: We do not support Windows backslashes, since they are illegal
+      //       in URLs...
+      if ((slash = strrchr(directory_, '/')) == NULL)
+	directory_[0] = '\0';
+      else if (slash > directory_ && slash[-1] != '/')
+	*slash = '\0';
+
+      snprintf(error, sizeof(error),
+	       "<HTML><HEAD><TITLE>Error</TITLE></HEAD>"
+	       "<BODY><H1>Error</H1>"
+	       "<P>Unable to follow the link \"%s\" - "
+	       "%s.</P></BODY>",
+	       f, urimsg);
+      value(error);
+      //return(-1);
+    }
+    return(0);
+  }
+
+  clear_selection();
+
+  strlcpy(newname, f, sizeof(newname));
+  if ((target = strrchr(newname, '#')) != NULL)
+    *target++ = '\0';
+
+  if (link_)
+    localname = (*link_)(this, newname);
+  else
+    localname = filename_;
+
+  if (!localname)
+    return (0);
+
+  free_data();
+
+  strlcpy(filename_, newname, sizeof(filename_));
+  strlcpy(directory_, newname, sizeof(directory_));
+
+  // Note: We do not support Windows backslashes, since they are illegal
+  //       in URLs...
+  if ((slash = strrchr(directory_, '/')) == NULL)
+    directory_[0] = '\0';
+  else if (slash > directory_ && slash[-1] != '/')
+    *slash = '\0';
+
+  if (strncmp(localname, "file:", 5) == 0)
+    localname += 5;	// Adjust for local filename...
+
+  if ((fp = fltk3::fopen(localname, "rb")) != NULL)
+  {
+    fseek(fp, 0, SEEK_END);
+    len = ftell(fp);
+    rewind(fp);
+
+    value_ = (const char *)calloc(len + 1, 1);
+    if (fread((void *)value_, 1, len, fp)==0) { /* use default 0 */ }
+    fclose(fp);
+  }
+  else
+  {
+    snprintf(error, sizeof(error),
+	     "<HTML><HEAD><TITLE>Error</TITLE></HEAD>"
+	     "<BODY><H1>Error</H1>"
+	     "<P>Unable to follow the link \"%s\" - "
+	     "%s.</P></BODY>",
+	     localname, strerror(errno));
+    value_ = strdup(error);
+  }
+
+  initial_load = 1;
+  format();
+  initial_load = 0;
+
+  if (target)
+    topline(target);
+  else
+    topline(0);
+
+  return (0);
+}
+
+
+/** Resizes the help widget. */
+
+void
+fltk3::HelpView::resize(int xx,	// I - New left position
+                     int yy,	// I - New top position
+		     int ww,	// I - New width
+		     int hh)	// I - New height
+{
+  fltk3::Boxtype		b = box() ? box() : fltk3::DOWN_BOX;
+					// Box to draw...
+
+
+  Widget::resize(xx, yy, ww, hh);
+
+  int scrollsize = scrollbar_size_ ? scrollbar_size_ : fltk3::scrollbar_size();
+  scrollbar_.resize(x() + w() - scrollsize - fltk3::box_dw(b) + fltk3::box_dx(b),
+                    y() + fltk3::box_dy(b), scrollsize, h() - scrollsize - fltk3::box_dh(b));
+  hscrollbar_.resize(x() + fltk3::box_dx(b),
+                     y() + h() - scrollsize - fltk3::box_dh(b) + fltk3::box_dy(b),
+                     w() - scrollsize - fltk3::box_dw(b), scrollsize);
+
+  format();
+}
+
+
+/** Scrolls the text to the indicated position, given a named destination.
+
+  \param[in] n target name
+*/
+void
+fltk3::HelpView::topline(const char *n)	// I - Target name
+{
+  fltk3::HelpTarget key,			// Target name key
+		*target;		// Pointer to matching target
+
+
+  if (ntargets_ == 0)
+    return;
+
+  strlcpy(key.name, n, sizeof(key.name));
+
+  target = (fltk3::HelpTarget *)bsearch(&key, targets_, ntargets_, sizeof(fltk3::HelpTarget),
+                                 (compare_func_t)compare_targets);
+
+  if (target != NULL)
+    topline(target->y);
+}
+
+
+/** Scrolls the text to the indicated position, given a pixel line.
+
+  If the given pixel value \p top is out of range, then the text is
+  scrolled to the top or bottom of the document, resp.
+
+  \param[in] top top line number in pixels (0 = start of document)
+*/
+void
+fltk3::HelpView::topline(int top)	// I - Top line number
+{
+  if (!value_)
+    return;
+
+  int scrollsize = scrollbar_size_ ? scrollbar_size_ : fltk3::scrollbar_size();
+  if (size_ < (h() - scrollsize) || top < 0)
+    top = 0;
+  else if (top > size_)
+    top = size_;
+
+  topline_ = top;
+
+  scrollbar_.value(topline_, h() - scrollsize, 0, size_);
+
+  do_callback();
+
+  redraw();
+}
+
+
+/** Scrolls the text to the indicated position, given a pixel column.
+
+  If the given pixel value \p left is out of range, then the text is
+  scrolled to the left or right side of the document, resp.
+
+  \param[in] left left column number in pixels (0 = left side)
+*/
+void
+fltk3::HelpView::leftline(int left)	// I - Left position
+{
+  if (!value_)
+    return;
+
+  int scrollsize = scrollbar_size_ ? scrollbar_size_ : fltk3::scrollbar_size();
+  if (hsize_ < (w() - scrollsize) || left < 0)
+    left = 0;
+  else if (left > hsize_)
+    left = hsize_;
+
+  leftline_ = left;
+
+  hscrollbar_.value(leftline_, w() - scrollsize, 0, hsize_);
+
+  redraw();
+}
+
+
+/** Sets the current help text buffer to the string provided and reformats the text.
+
+  The provided character string \p val is copied internally and will be
+  freed when value() is called again, or when the widget is destroyed.
+
+  If \p val is NULL, then the widget is cleared.
+*/
+void
+fltk3::HelpView::value(const char *val)	// I - Text to view
+{
+  clear_selection();
+  free_data();
+  set_changed();
+
+  if (!val)
+    return;
+
+  value_ = strdup(val);
+
+  initial_load = 1;
+  format();
+  initial_load = 0;
+
+  topline(0);
+  leftline(0);
+}
+
+
+#ifdef ENC
+# undef ENC
+#endif
+// part b in the table seems to be mac_roman - beku
+# define ENC(a, b) a
+
+
+/** Returns the character code associated with a quoted char. */
+static int			// O - Code or -1 on error
+quote_char(const char *p) {	// I - Quoted string
+  int	i;			// Looping var
+  static struct {
+    const char	*name;
+    int		namelen;
+    int		code;
+  }	*nameptr,		// Pointer into name array
+	names[] = {		// Quoting names
+    { "Aacute;", 7, ENC(193,231) },
+    { "aacute;", 7, ENC(225,135) },
+    { "Acirc;",  6, ENC(194,229) },
+    { "acirc;",  6, ENC(226,137) },
+    { "acute;",  6, ENC(180,171) },
+    { "AElig;",  6, ENC(198,174) },
+    { "aelig;",  6, ENC(230,190) },
+    { "Agrave;", 7, ENC(192,203) },
+    { "agrave;", 7, ENC(224,136) },
+    { "amp;",    4, ENC('&','&') },
+    { "Aring;",  6, ENC(197,129) },
+    { "aring;",  6, ENC(229,140) },
+    { "Atilde;", 7, ENC(195,204) },
+    { "atilde;", 7, ENC(227,139) },
+    { "Auml;",   5, ENC(196,128) },
+    { "auml;",   5, ENC(228,138) },
+    { "brvbar;", 7, ENC(166, -1) },
+    { "bull;",   5, ENC(149,165) },
+    { "Ccedil;", 7, ENC(199,199) },
+    { "ccedil;", 7, ENC(231,141) },
+    { "cedil;",  6, ENC(184,252) },
+    { "cent;",   5, ENC(162,162) },
+    { "copy;",   5, ENC(169,169) },
+    { "curren;", 7, ENC(164, -1) },
+    { "deg;",    4, ENC(176,161) },
+    { "divide;", 7, ENC(247,214) },
+    { "Eacute;", 7, ENC(201,131) },
+    { "eacute;", 7, ENC(233,142) },
+    { "Ecirc;",  6, ENC(202,230) },
+    { "ecirc;",  6, ENC(234,144) },
+    { "Egrave;", 7, ENC(200,233) },
+    { "egrave;", 7, ENC(232,143) },
+    { "ETH;",    4, ENC(208, -1) },
+    { "eth;",    4, ENC(240, -1) },
+    { "Euml;",   5, ENC(203,232) },
+    { "euml;",   5, ENC(235,145) },
+    { "euro;",   5, ENC(128,219) },
+    { "frac12;", 7, ENC(189, -1) },
+    { "frac14;", 7, ENC(188, -1) },
+    { "frac34;", 7, ENC(190, -1) },
+    { "gt;",     3, ENC('>','>') },
+    { "Iacute;", 7, ENC(205,234) },
+    { "iacute;", 7, ENC(237,146) },
+    { "Icirc;",  6, ENC(206,235) },
+    { "icirc;",  6, ENC(238,148) },
+    { "iexcl;",  6, ENC(161,193) },
+    { "Igrave;", 7, ENC(204,237) },
+    { "igrave;", 7, ENC(236,147) },
+    { "iquest;", 7, ENC(191,192) },
+    { "Iuml;",   5, ENC(207,236) },
+    { "iuml;",   5, ENC(239,149) },
+    { "laquo;",  6, ENC(171,199) },
+    { "lt;",     3, ENC('<','<') },
+    { "macr;",   5, ENC(175,248) },
+    { "micro;",  6, ENC(181,181) },
+    { "middot;", 7, ENC(183,225) },
+    { "nbsp;",   5, ENC(' ',' ') },
+    { "not;",    4, ENC(172,194) },
+    { "Ntilde;", 7, ENC(209,132) },
+    { "ntilde;", 7, ENC(241,150) },
+    { "Oacute;", 7, ENC(211,238) },
+    { "oacute;", 7, ENC(243,151) },
+    { "Ocirc;",  6, ENC(212,239) },
+    { "ocirc;",  6, ENC(244,153) },
+    { "Ograve;", 7, ENC(210,241) },
+    { "ograve;", 7, ENC(242,152) },
+    { "ordf;",   5, ENC(170,187) },
+    { "ordm;",   5, ENC(186,188) },
+    { "Oslash;", 7, ENC(216,175) },
+    { "oslash;", 7, ENC(248,191) },
+    { "Otilde;", 7, ENC(213,205) },
+    { "otilde;", 7, ENC(245,155) },
+    { "Ouml;",   5, ENC(214,133) },
+    { "ouml;",   5, ENC(246,154) },
+    { "para;",   5, ENC(182,166) },
+    { "premil;", 7, ENC(137,228) },
+    { "plusmn;", 7, ENC(177,177) },
+    { "pound;",  6, ENC(163,163) },
+    { "quot;",   5, ENC('\"','\"') },
+    { "raquo;",  6, ENC(187,200) },
+    { "reg;",    4, ENC(174,168) },
+    { "sect;",   5, ENC(167,164) },
+    { "shy;",    4, ENC(173,'-') },
+    { "sup1;",   5, ENC(185, -1) },
+    { "sup2;",   5, ENC(178, -1) },
+    { "sup3;",   5, ENC(179, -1) },
+    { "szlig;",  6, ENC(223,167) },
+    { "THORN;",  6, ENC(222, -1) },
+    { "thorn;",  6, ENC(254, -1) },
+    { "times;",  6, ENC(215,'x') },
+    { "trade;",  6, ENC(153,170) },
+    { "Uacute;", 7, ENC(218,242) },
+    { "uacute;", 7, ENC(250,156) },
+    { "Ucirc;",  6, ENC(219,243) },
+    { "ucirc;",  6, ENC(251,158) },
+    { "Ugrave;", 7, ENC(217,244) },
+    { "ugrave;", 7, ENC(249,157) },
+    { "uml;",    4, ENC(168,172) },
+    { "Uuml;",   5, ENC(220,134) },
+    { "uuml;",   5, ENC(252,159) },
+    { "Yacute;", 7, ENC(221, -1) },
+    { "yacute;", 7, ENC(253, -1) },
+    { "yen;",    4, ENC(165,180) },
+    { "Yuml;",   5, ENC(159,217) },
+    { "yuml;",   5, ENC(255,216) }
+  };
+
+  if (!strchr(p, ';')) return -1;
+  if (*p == '#') {
+    if (*(p+1) == 'x' || *(p+1) == 'X') return strtol(p+2, NULL, 16);
+    else return atoi(p+1);
+  }
+  for (i = (int)(sizeof(names) / sizeof(names[0])), nameptr = names; i > 0; i --, nameptr ++)
+    if (strncmp(p, nameptr->name, nameptr->namelen) == 0)
+      return nameptr->code;
+
+  return -1;
+}
+
+
+/** The vertical scrollbar callback. */
+static void
+scrollbar_callback(fltk3::Widget *s, void *)
+{
+  ((fltk3::HelpView *)(s->parent()))->topline(int(((fltk3::Scrollbar*)s)->value()));
+}
+
+
+/** The horizontal scrollbar callback. */
+static void
+hscrollbar_callback(fltk3::Widget *s, void *)
+{
+  ((fltk3::HelpView *)(s->parent()))->leftline(int(((fltk3::Scrollbar*)s)->value()));
+}
+
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Image.cxx (from rev 9002, branches/branch-3.0/src/core/Fl_Image.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Image.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Image.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,592 @@
+//
+// "$Id$"
+//
+// Image drawing code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 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
+//
+
+#include <fltk3/run.h>
+#include <fltk3/draw.h>
+#include <fltk3/x.h>
+#include <fltk3/Widget.h>
+#include <fltk3/MenuItem.h>
+#include <fltk3/Image.h>
+#include "flstring.h"
+
+#ifdef WIN32
+void fl_release_dc(HWND, HDC); // from Fl_win32.cxx
+#endif
+
+namespace fltk3 {
+  void restore_clip(); // from fltk3::rect.cxx
+}
+
+//
+// Base image class...
+//
+
+/**
+  The destructor is a virtual method that frees all memory used
+  by the image.
+*/
+fltk3::Image::~Image() {
+}
+
+/**
+  If the image has been cached for display, delete the cache
+  data. This allows you to change the data used for the image and
+  then redraw it without recreating an image object.
+*/
+void fltk3::Image::uncache() {
+}
+
+void fltk3::Image::draw(int XP, int YP, int, int, int, int) {
+  draw_empty(XP, YP);
+}
+
+/**
+  The protected method draw_empty() draws a box with
+  an X in it. It can be used to draw any image that lacks image
+  data.
+*/
+void fltk3::Image::draw_empty(int X, int Y) {
+  if (w() > 0 && h() > 0) {
+    fltk3::color(fltk3::FOREGROUND_COLOR);
+    fltk3::rect(X, Y, w(), h());
+    fltk3::line(X, Y, X + w() - 1, Y + h() - 1);
+    fltk3::line(X, Y + h() - 1, X + w() - 1, Y);
+  }
+}
+
+/**
+  The copy() method creates a copy of the specified
+  image. If the width and height are provided, the image is
+  resized to the specified size. The image should be deleted (or in
+  the case of fltk3::SharedImage, released) when you are done
+  with it.
+*/
+fltk3::Image *fltk3::Image::copy(int W, int H) {
+  return new fltk3::Image(W, H, d());
+}
+
+/**
+  The color_average() method averages the colors in
+  the image with the FLTK color value c. The i
+  argument specifies the amount of the original image to combine
+  with the color, so a value of 1.0 results in no color blend, and
+  a value of 0.0 results in a constant image of the specified
+  color. <I>The original image data is not altered by this
+  method.</I>
+*/
+void fltk3::Image::color_average(fltk3::Color, float) {
+}
+
+/**
+  The desaturate() method converts an image to
+  grayscale. If the image contains an alpha channel (depth = 4),
+  the alpha channel is preserved. <I>This method does not alter
+  the original image data.</I>
+*/
+void fltk3::Image::desaturate() {
+}
+
+/**
+  The label() methods are an obsolete way to set the
+  image attribute of a widget or menu item. Use the
+  image() or deimage() methods of the
+  fltk3::Widget and fltk3::MenuItem classes
+  instead.
+*/
+void fltk3::Image::label(fltk3::Widget* widget) {
+  widget->image(this);
+}
+
+/**
+  The label() methods are an obsolete way to set the
+  image attribute of a widget or menu item. Use the
+  image() or deimage() methods of the
+  fltk3::Widget and fltk3::MenuItem classes
+  instead.
+*/
+void fltk3::Image::label(fltk3::MenuItem* m) {
+  fltk3::set_labeltype(fltk3::IMAGE_LABEL, labeltype, measure);
+  m->label(fltk3::IMAGE_LABEL, (const char*)this);
+}
+
+void
+fltk3::Image::labeltype(const fltk3::Label *lo,		// I - Label
+                    int            lx,		// I - X position
+		    int            ly,		// I - Y position
+		    int            lw,		// I - Width of label
+		    int            lh,		// I - Height of label
+		    fltk3::Align       la) {	// I - Alignment
+  fltk3::Image	*img;				// Image pointer
+  int		cx, cy;				// Image position
+
+  img = (fltk3::Image *)(lo->value);
+
+  if (la & fltk3::ALIGN_LEFT) cx = 0;
+  else if (la & fltk3::ALIGN_RIGHT) cx = img->w() - lw;
+  else cx = (img->w() - lw) / 2;
+
+  if (la & fltk3::ALIGN_TOP) cy = 0;
+  else if (la & fltk3::ALIGN_BOTTOM) cy = img->h() - lh;
+  else cy = (img->h() - lh) / 2;
+
+  fltk3::color((fltk3::Color)lo->color);
+
+  img->draw(lx, ly, lw, lh, cx, cy);
+}
+
+void
+fltk3::Image::measure(const fltk3::Label *lo,		// I - Label
+                  int            &lw,		// O - Width of image
+		  int            &lh) {		// O - Height of image
+  fltk3::Image *img;				// Image pointer
+
+  img = (fltk3::Image *)(lo->value);
+
+  lw = img->w();
+  lh = img->h();
+}
+
+
+//
+// RGB image class...
+//
+/**  The destructor free all memory and server resources that are used by  the image. */
+fltk3::RGBImage::~RGBImage() {
+  uncache();
+  if (alloc_array) delete[] (uchar *)array;
+}
+
+void fltk3::RGBImage::uncache() {
+#ifdef __APPLE_QUARTZ__
+  if (id_) {
+    CGImageRelease((CGImageRef)id_);
+    id_ = 0;
+  }
+#else
+  if (id_) {
+    fl_delete_offscreen((fltk3::Offscreen)id_);
+    id_ = 0;
+  }
+
+  if (mask_) {
+    fl_delete_bitmask((fltk3::Bitmask)mask_);
+    mask_ = 0;
+  }
+#endif
+}
+
+fltk3::Image *fltk3::RGBImage::copy(int W, int H) {
+  fltk3::RGBImage	*new_image;	// New RGB image
+  uchar		*new_array;	// New array for image data
+
+  // Optimize the simple copy where the width and height are the same,
+  // or when we are copying an empty image...
+  if ((W == w() && H == h()) ||
+      !w() || !h() || !d() || !array) {
+    if (array) {
+      // Make a copy of the image data and return a new fltk3::RGBImage...
+      new_array = new uchar[w() * h() * d()];
+      if (ld() && ld()!=w()*d()) {
+        const uchar *src = array;
+        uchar *dst = new_array;
+        int dy, dh = h(), wd = w()*d(), wld = ld();
+        for (dy=0; dy<dh; dy++) {
+          memcpy(dst, src, wd);
+          src += wld;
+          dst += wd;
+        }
+      } else {
+        memcpy(new_array, array, w() * h() * d());
+      }
+      new_image = new fltk3::RGBImage(new_array, w(), h(), d());
+      new_image->alloc_array = 1;
+
+      return new_image;
+    } else return new fltk3::RGBImage(array, w(), h(), d(), ld());
+  }
+  if (W <= 0 || H <= 0) return 0;
+
+  // OK, need to resize the image data; allocate memory and 
+  uchar		*new_ptr;	// Pointer into new array
+  const uchar	*old_ptr;	// Pointer into old array
+  int		c,		// Channel number
+		sy,		// Source coordinate
+		dx, dy,		// Destination coordinates
+		xerr, yerr,	// X & Y errors
+		xmod, ymod,	// X & Y moduli
+		xstep, ystep,	// X & Y step increments
+    line_d; // stride from line to line
+
+
+  // Figure out Bresenheim step/modulus values...
+  xmod   = w() % W;
+  xstep  = (w() / W) * d();
+  ymod   = h() % H;
+  ystep  = h() / H;
+  line_d = ld() ? ld() : w() * d();
+
+  // Allocate memory for the new image...
+  new_array = new uchar [W * H * d()];
+  new_image = new fltk3::RGBImage(new_array, W, H, d());
+  new_image->alloc_array = 1;
+
+  // Scale the image using a nearest-neighbor algorithm...
+  for (dy = H, sy = 0, yerr = H, new_ptr = new_array; dy > 0; dy --) {
+    for (dx = W, xerr = W, old_ptr = array + sy * line_d; dx > 0; dx --) {
+      for (c = 0; c < d(); c ++) *new_ptr++ = old_ptr[c];
+
+      old_ptr += xstep;
+      xerr    -= xmod;
+
+      if (xerr <= 0) {
+	xerr    += W;
+	old_ptr += d();
+      }
+    }
+
+    sy   += ystep;
+    yerr -= ymod;
+    if (yerr <= 0) {
+      yerr += H;
+      sy ++;
+    }
+  }
+
+  return new_image;
+}
+
+void fltk3::RGBImage::color_average(fltk3::Color c, float i) {
+  // Don't average an empty image...
+  if (!w() || !h() || !d() || !array) return;
+
+  // Delete any existing pixmap/mask objects...
+  uncache();
+
+  // Allocate memory as needed...
+  uchar		*new_array,
+		*new_ptr;
+
+  if (!alloc_array) new_array = new uchar[h() * w() * d()];
+  else new_array = (uchar *)array;
+
+  // Get the color to blend with...
+  uchar		r, g, b;
+  unsigned	ia, ir, ig, ib;
+
+  fltk3::get_color(c, r, g, b);
+  if (i < 0.0f) i = 0.0f;
+  else if (i > 1.0f) i = 1.0f;
+
+  ia = (unsigned)(256 * i);
+  ir = r * (256 - ia);
+  ig = g * (256 - ia);
+  ib = b * (256 - ia);
+
+  // Update the image data to do the blend...
+  const uchar	*old_ptr;
+  int		x, y;
+  int   line_i = ld() ? ld() - (w()*d()) : 0; // increment from line end to beginning of next line
+
+  if (d() < 3) {
+    ig = (r * 31 + g * 61 + b * 8) / 100 * (256 - ia);
+
+    for (new_ptr = new_array, old_ptr = array, y = 0; y < h(); y ++, old_ptr += line_i)
+      for (x = 0; x < w(); x ++) {
+	*new_ptr++ = (*old_ptr++ * ia + ig) >> 8;
+	if (d() > 1) *new_ptr++ = *old_ptr++;
+      }
+  } else {
+    for (new_ptr = new_array, old_ptr = array, y = 0; y < h(); y ++, old_ptr += line_i)
+      for (x = 0; x < w(); x ++) {
+	*new_ptr++ = (*old_ptr++ * ia + ir) >> 8;
+	*new_ptr++ = (*old_ptr++ * ia + ig) >> 8;
+	*new_ptr++ = (*old_ptr++ * ia + ib) >> 8;
+	if (d() > 3) *new_ptr++ = *old_ptr++;
+      }
+  }
+
+  // Set the new pointers/values as needed...
+  if (!alloc_array) {
+    array       = new_array;
+    alloc_array = 1;
+
+    ld(0);
+  }
+}
+
+void fltk3::RGBImage::desaturate() {
+  // Don't desaturate an empty image...
+  if (!w() || !h() || !d() || !array) return;
+
+  // Can only desaturate color images...
+  if (d() < 3) return;
+
+  // Delete any existing pixmap/mask objects...
+  uncache();
+
+  // Allocate memory for a grayscale image...
+  uchar		*new_array,
+		*new_ptr;
+  int		new_d;
+
+  new_d     = d() - 2;
+  new_array = new uchar[h() * w() * new_d];
+
+  // Copy the image data, converting to grayscale...
+  const uchar	*old_ptr;
+  int		x, y;
+  int   line_i = ld() ? ld() - (w()*d()) : 0; // increment from line end to beginning of next line
+
+  for (new_ptr = new_array, old_ptr = array, y = 0; y < h(); y ++, old_ptr += line_i)
+    for (x = 0; x < w(); x ++, old_ptr += d()) {
+      *new_ptr++ = (uchar)((31 * old_ptr[0] + 61 * old_ptr[1] + 8 * old_ptr[2]) / 100);
+      if (d() > 3) *new_ptr++ = old_ptr[3];
+    }
+
+  // Free the old array as needed, and then set the new pointers/values...
+  if (alloc_array) delete[] (uchar *)array;
+
+  array       = new_array;
+  alloc_array = 1;
+
+  ld(0);
+  d(new_d);
+}
+
+#if !defined(WIN32) && !defined(__APPLE_QUARTZ__)
+// Composite an image with alpha on systems that don't have accelerated
+// alpha compositing...
+static void alpha_blend(fltk3::RGBImage *img, int X, int Y, int W, int H, int cx, int cy) {
+  int ld = img->ld();
+  if (ld == 0) ld = img->w() * img->d();
+  uchar *srcptr = (uchar*)img->array + cy * ld + cx * img->d();
+  int srcskip = ld - img->d() * W;
+
+  uchar *dst = new uchar[W * H * 3];
+  uchar *dstptr = dst;
+
+  fltk3::read_image(dst, X, Y, W, H, 0);
+
+  uchar srcr, srcg, srcb, srca;
+  uchar dstr, dstg, dstb, dsta;
+
+  if (img->d() == 2) {
+    // Composite grayscale + alpha over RGB...
+    for (int y = H; y > 0; y--, srcptr+=srcskip)
+      for (int x = W; x > 0; x--) {
+	srcg = *srcptr++;
+	srca = *srcptr++;
+
+	dstr = dstptr[0];
+	dstg = dstptr[1];
+	dstb = dstptr[2];
+	dsta = 255 - srca;
+
+	*dstptr++ = (srcg * srca + dstr * dsta) >> 8;
+	*dstptr++ = (srcg * srca + dstg * dsta) >> 8;
+	*dstptr++ = (srcg * srca + dstb * dsta) >> 8;
+      }
+  } else {
+    // Composite RGBA over RGB...
+    for (int y = H; y > 0; y--, srcptr+=srcskip)
+      for (int x = W; x > 0; x--) {
+	srcr = *srcptr++;
+	srcg = *srcptr++;
+	srcb = *srcptr++;
+	srca = *srcptr++;
+
+	dstr = dstptr[0];
+	dstg = dstptr[1];
+	dstb = dstptr[2];
+	dsta = 255 - srca;
+
+	*dstptr++ = (srcr * srca + dstr * dsta) >> 8;
+	*dstptr++ = (srcg * srca + dstg * dsta) >> 8;
+	*dstptr++ = (srcb * srca + dstb * dsta) >> 8;
+      }
+  }
+
+  fltk3::draw_image(dst, X, Y, W, H, 3, 0);
+
+  delete[] dst;
+}
+#endif // !WIN32 && !__APPLE_QUARTZ__
+
+void fltk3::RGBImage::draw(int XP, int YP, int WP, int HP, int cx, int cy) {
+  fltk3::graphics_driver->draw(this, XP, YP, WP, HP, cx, cy);
+}
+
+static int start(fltk3::RGBImage *img, int XP, int YP, int WP, int HP, int w, int h, int &cx, int &cy, 
+		 int &X, int &Y, int &W, int &H)
+{
+  // account for current clip region (faster on Irix):
+  fltk3::clip_box(XP,YP,WP,HP,X,Y,W,H);
+  cx += X-XP; cy += Y-YP;
+  // clip the box down to the size of image, quit if empty:
+  if (cx < 0) {W += cx; X -= cx; cx = 0;}
+  if (cx+W > w) W = w-cx;
+  if (W <= 0) return 1;
+  if (cy < 0) {H += cy; Y -= cy; cy = 0;}
+  if (cy+H > h) H = h-cy;
+  if (H <= 0) return 1;
+  return 0;
+}
+
+#ifdef __APPLE__
+void fltk3::QuartzGraphicsDriver::draw(fltk3::RGBImage *img, int XP, int YP, int WP, int HP, int cx, int cy) {
+  int X, Y, W, H;
+  // Don't draw an empty image...
+  if (!img->d() || !img->array) {
+    img->draw_empty(XP, YP);
+    return;
+  }
+  if (start(img, XP, YP, WP, HP, img->w(), img->h(), cx, cy, X, Y, W, H)) {
+    return;
+  }
+  if (!img->id_) {
+    CGColorSpaceRef lut = 0;
+    if (img->d()<=2)
+      lut = CGColorSpaceCreateDeviceGray();
+    else
+      lut = CGColorSpaceCreateDeviceRGB();
+    CGDataProviderRef src = CGDataProviderCreateWithData( 0L, img->array, img->w()*img->h()*img->d(), 0L);
+    img->id_ = CGImageCreate( img->w(), img->h(), 8, img->d()*8, img->ld()?img->ld():img->w()*img->d(),
+			lut, (img->d()&1)?kCGImageAlphaNone:kCGImageAlphaLast,
+			src, 0L, false, kCGRenderingIntentDefault);
+    CGColorSpaceRelease(lut);
+    CGDataProviderRelease(src);
+  }
+  if (img->id_ && fl_gc) {
+    CGRect rect = { { X, Y }, { W, H } };
+    Fl_X::q_begin_image(rect, cx, cy, img->w(), img->h());
+    CGContextDrawImage(fl_gc, rect, (CGImageRef)img->id_);
+    Fl_X::q_end_image();
+  }
+}
+
+#elif defined(WIN32)
+void fltk3::GDIGraphicsDriver::draw(fltk3::RGBImage *img, int XP, int YP, int WP, int HP, int cx, int cy) {
+  int X, Y, W, H;
+  // Don't draw an empty image...
+  if (!img->d() || !img->array) {
+    img->draw_empty(XP, YP);
+    return;
+  }
+  if (start(img, XP, YP, WP, HP, img->w(), img->h(), cx, cy, X, Y, W, H)) {
+    return;
+  }
+  if (!img->id_) {
+    img->id_ = fl_create_offscreen(img->w(), img->h());
+    if ((img->d() == 2 || img->d() == 4) && fltk3::can_do_alpha_blending()) {
+      fl_begin_offscreen((fltk3::Offscreen)img->id_);
+      fltk3::draw_image(img->array, 0, 0, img->w(), img->h(), img->d()|fltk3::IMAGE_WITH_ALPHA, img->ld());
+      fl_end_offscreen();
+    } else {
+      fl_begin_offscreen((fltk3::Offscreen)img->id_);
+      fltk3::draw_image(img->array, 0, 0, img->w(), img->h(), img->d(), img->ld());
+      fl_end_offscreen();
+      if (img->d() == 2 || img->d() == 4) {
+        img->mask_ = fl_create_alphamask(img->w(), img->h(), img->d(), img->ld(), img->array);
+      }
+    }
+  }
+  if (img->mask_) {
+    HDC new_gc = CreateCompatibleDC(fl_gc);
+    int save = SaveDC(new_gc);
+    SelectObject(new_gc, (void*)img->mask_);
+    BitBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, SRCAND);
+    SelectObject(new_gc, (void*)img->id_);
+    BitBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, SRCPAINT);
+    RestoreDC(new_gc,save);
+    DeleteDC(new_gc);
+  } else if (img->d()==2 || img->d()==4) {
+    fl_copy_offscreen_with_alpha(X, Y, W, H, (fltk3::Offscreen)img->id_, cx, cy);
+  } else {
+    fl_copy_offscreen(X, Y, W, H, (fltk3::Offscreen)img->id_, cx, cy);
+  }
+}
+
+#else
+void fltk3::XlibGraphicsDriver::draw(fltk3::RGBImage *img, int XP, int YP, int WP, int HP, int cx, int cy) {
+  int X, Y, W, H;
+  // Don't draw an empty image...
+  if (!img->d() || !img->array) {
+    img->draw_empty(XP, YP);
+    return;
+  }
+  if (start(img, XP, YP, WP, HP, img->w(), img->h(), cx, cy, X, Y, W, H)) {
+    return;
+  }
+  if (!img->id_) {
+    if (img->d() == 1 || img->d() == 3) {
+      img->id_ = fl_create_offscreen(img->w(), img->h());
+      fl_begin_offscreen((fltk3::Offscreen)img->id_);
+      fltk3::draw_image(img->array, 0, 0, img->w(), img->h(), img->d(), img->ld());
+      fl_end_offscreen();
+    }
+  }
+  if (img->id_) {
+    if (img->mask_) {
+      // I can't figure out how to combine a mask with existing region,
+      // so cut the image down to a clipped rectangle:
+      int nx, ny; fltk3::clip_box(X,Y,W,H,nx,ny,W,H);
+      cx += nx-X; X = nx;
+      cy += ny-Y; Y = ny;
+      // make X use the bitmap as a mask:
+      XSetClipMask(fl_display, fl_gc, img->mask_);
+      int ox = X-cx; if (ox < 0) ox += img->w();
+      int oy = Y-cy; if (oy < 0) oy += img->h();
+      XSetClipOrigin(fl_display, fl_gc, X-cx, Y-cy);
+    }
+    
+    fl_copy_offscreen(X, Y, W, H, img->id_, cx, cy);
+    
+    if (img->mask_) {
+      // put the old clip region back
+      XSetClipOrigin(fl_display, fl_gc, 0, 0);
+      fltk3::restore_clip();
+    }
+  } else {
+    // Composite image with alpha manually each time...
+    alpha_blend(img, X, Y, W, H, cx, cy);
+  }
+}
+
+#endif
+
+void fltk3::RGBImage::label(fltk3::Widget* widget) {
+  widget->image(this);
+}
+
+void fltk3::RGBImage::label(fltk3::MenuItem* m) {
+  m->label(fltk3::IMAGE_LABEL, (const char*)this);
+}
+
+
+//
+// End of "$Id$".
+//

Copied: branches/branch-3.0/src/fltk3/Input.cxx (from rev 9004, branches/branch-3.0/src/core/Fl_Input.cxx)
===================================================================
--- branches/branch-3.0/src/fltk3/Input.cxx	                        (rev 0)
+++ branches/branch-3.0/src/fltk3/Input.cxx	2011-08-25 21:50:59 UTC (rev 9011)
@@ -0,0 +1,830 @@
+//
+// "$Id$"
+//
+// Input widget for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2011 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
+//
+
+// This is the "user interface", it decodes user actions into what to
+// do to the text.  See also fltk3::Input_.cxx, where the text is actually
+// manipulated (and some ui, in particular the mouse, is done...).
+// In theory you can replace this code w