Merge remote-tracking branch 'origin/master'

This commit is contained in:
ManoloFLTK 2018-12-30 11:04:10 +01:00
commit 362f935086
26 changed files with 932 additions and 754 deletions

9
.gitattributes vendored
View File

@ -20,13 +20,15 @@ makesrcdist export-ignore eol=lf
# fluid files (eol=lf or text?)
#*FIXME* *.fl eol=lf
*.fl eol=lf
# shell scripts etc. with Unix line endings (lf)
*.ac eol=lf
*.in eol=lf
*.desktop eol=lf
*.sh eol=lf
fltk-config.in eol=lf
documentation/make_pdf eol=lf
@ -36,9 +38,10 @@ misc/update_config_scripts eol=lf
# files with Windows line endings (crlf)
#*FIXME* *.rc eol=crlf
*.rc eol=crlf
#*FIXME* ide/AndroidStudio3/gradlew.rename_to_bat eol=crlf
# Android Studio special support file (Windows .bat file)
ide/AndroidStudio3/gradlew.rename_to_bat eol=crlf
# binary files

17
.gitignore vendored
View File

@ -4,6 +4,23 @@
*.o
*.exe
# CMake
bin/
**/cmake_install.cmake
**/CMakeCache.txt
**/CMakeFiles/
etc/UseFLTK.cmake
cmake_uninstall.cmake
UseFLTK.cmake
FLTK.sln
FLTK-Targets.cmake
FLTKConfig.cmake
etc/FLTKConfig.cmake
# MSVC
*.tlog
.vs/
# /
/autom4te*.cache
/build

74
.travis.yml Normal file
View File

@ -0,0 +1,74 @@
sudo: required
dist: trusty
cache: ccache
language:
- c++
# - objective-c
os:
- linux
- osx
compiler:
- gcc
- clang
env:
- |
ANALYZE=false
DOC=false
matrix:
include:
os: linux
compiler: clang
env: ANALYZE=true DOC=true
branches:
only:
- master
- /^feature.*$/
before_script:
- |
if [ $TRAVIS_OS_NAME == linux ]; then
sudo apt-get update -q
sudo apt-get install -y libxinerama-dev libxcursor-dev libasound2-dev
sudo apt-get install -y doxygen
elif [ $TRAVIS_OS_NAME == osx ]; then
brew install ccache # need to install on OSX
export PATH="/usr/local/opt/ccache/libexec:$PATH"
brew install doxygen
fi
script:
- |
if [ $ANALYZE = "false" ]; then
autoconf
./configure
make
mkdir cmake-build
cmake -G "Unix Makefiles" -S . -B"./cmake-build"
cd cmake-build
make
else
scan-build cmake -G "Unix Makefiles"
scan-build --status-bugs -v
make
fi
after_success:
- |
if [ $DOC = "true" ]; then
doxygen --version
cd documentation
make html
cd -
fi
notifications:
email:
recipients:
- fabien@onepost.net
- albrechts.fltk@online.de

View File

@ -142,9 +142,13 @@ option(OPTION_FILESYSTEM_SUPPORT "allow file system support" ON)
if(DOXYGEN_FOUND)
option(OPTION_BUILD_HTML_DOCUMENTATION "build html docs" OFF)
option(OPTION_INSTALL_HTML_DOCUMENTATION "install html docs" OFF)
option(OPTION_INCLUDE_DRIVER_DOCUMENTATION "include driver (developer) docs" OFF)
mark_as_advanced(OPTION_INCLUDE_DRIVER_DOCUMENTATION)
if(LATEX_FOUND)
option(OPTION_BUILD_PDF_DOCUMENTATION "build pdf docs" OFF)
option(OPTION_INSTALL_PDF_DOCUMENTATION "install pdf docs" OFF)
option(OPTION_BUILD_PDF_DOCUMENTATION "build pdf docs" OFF)
option(OPTION_INSTALL_PDF_DOCUMENTATION "install pdf docs" OFF)
endif(LATEX_FOUND)
endif(DOXYGEN_FOUND)
@ -157,27 +161,33 @@ include(FindPkgConfig)
option(OPTION_CAIRO "use lib Cairo" OFF)
option(OPTION_CAIROEXT
"use FLTK code instrumentation for cairo extended use" OFF
"use FLTK code instrumentation for Cairo extended use" OFF
)
if(OPTION_CAIRO OR OPTION_CAIROEXT AND LIB_CAIRO)
if ((OPTION_CAIRO OR OPTION_CAIROEXT) AND LIB_CAIRO)
pkg_search_module(PKG_CAIRO cairo)
endif(OPTION_CAIRO OR OPTION_CAIROEXT AND LIB_CAIRO)
endif ((OPTION_CAIRO OR OPTION_CAIROEXT) AND LIB_CAIRO)
if(PKG_CAIRO_FOUND)
set(FLTK_HAVE_CAIRO 1)
if (PKG_CAIRO_FOUND)
set (FLTK_HAVE_CAIRO 1)
add_subdirectory(cairo)
list(APPEND FLTK_LDLIBS -lcairo -lpixman-1)
include_directories(${PKG_CAIRO_INCLUDE_DIRS})
string(REPLACE ";" " " CAIROFLAGS "${PKG_CAIRO_CFLAGS}")
endif(PKG_CAIRO_FOUND)
if(LIB_CAIRO AND OPTION_CAIROEXT AND PKG_CAIRO_FOUND)
set(FLTK_USE_CAIRO 1)
set(FLTK_CAIRO_FOUND TRUE)
else()
set(FLTK_CAIRO_FOUND FALSE)
endif(LIB_CAIRO AND OPTION_CAIROEXT AND PKG_CAIRO_FOUND)
if (LIB_CAIRO AND OPTION_CAIROEXT)
set(FLTK_USE_CAIRO 1)
set(FLTK_CAIRO_FOUND TRUE)
else ()
set(FLTK_CAIRO_FOUND FALSE)
endif (LIB_CAIRO AND OPTION_CAIROEXT)
else ()
if (OPTION_CAIRO OR OPTION_CAIROEXT)
message(STATUS "*** Cairo was requested but not found - please check your cairo installation")
message(STATUS "*** or disable options OPTION_CAIRO and OPTION_CAIRO_EXT.")
message(FATAL_ERROR "*** Terminating: missing Cairo libs or headers.")
endif (OPTION_CAIRO OR OPTION_CAIROEXT)
endif (PKG_CAIRO_FOUND)
#######################################################################
option(OPTION_USE_NANOSVG "support SVG images" ON)
@ -456,20 +466,20 @@ endif (OPTION_USE_PANGO)
#######################################################################
if(X11_Xft_FOUND AND OPTION_USE_PANGO)
#this covers Debian, Ubuntu, FreeBSD, NetBSD, Darwin
if(APPLE AND OPTION_APPLE_X11)
list(APPEND CMAKE_INCLUDE_PATH /sw/include)
list(APPEND CMAKE_LIBRARY_PATH /sw/lib)
endif(APPLE AND OPTION_APPLE_X11)
find_file(HAVE_PANGO_H pango-1.0/pango/pango.h ${CMAKE_INCLUDE_PATH})
find_file(HAVE_PANGOXFT_H pango-1.0/pango/pangoxft.h ${CMAKE_INCLUDE_PATH})
if(APPLE AND OPTION_APPLE_X11)
list(APPEND CMAKE_INCLUDE_PATH /sw/include)
list(APPEND CMAKE_LIBRARY_PATH /sw/lib)
endif(APPLE AND OPTION_APPLE_X11)
find_file(HAVE_PANGO_H pango-1.0/pango/pango.h ${CMAKE_INCLUDE_PATH})
find_file(HAVE_PANGOXFT_H pango-1.0/pango/pangoxft.h ${CMAKE_INCLUDE_PATH})
if(HAVE_PANGO_H AND HAVE_PANGOXFT_H)
find_library(HAVE_LIB_PANGO pango-1.0 ${CMAKE_LIBRARY_PATH})
find_library(HAVE_LIB_PANGOXFT pangoxft-1.0 ${CMAKE_LIBRARY_PATH})
if(APPLE)
set(HAVE_LIB_GOBJECT TRUE)
set(HAVE_LIB_GOBJECT TRUE)
else()
find_library(HAVE_LIB_GOBJECT gobject-2.0 ${CMAKE_LIBRARY_PATH})
find_library(HAVE_LIB_GOBJECT gobject-2.0 ${CMAKE_LIBRARY_PATH})
endif(APPLE)
endif(HAVE_PANGO_H AND HAVE_PANGOXFT_H)
if(HAVE_LIB_PANGO AND HAVE_LIB_PANGOXFT AND HAVE_LIB_GOBJECT)
@ -553,7 +563,7 @@ endif(OPTION_FILESYSTEM_SUPPORT)
# prior to CMake 3.0 this feature was buggy
if(NOT CMAKE_VERSION VERSION_LESS 3.0.0)
option(CMAKE_SUPPRESS_REGENERATION
"suppress rules to re-run CMake on rebuild" OFF)
"suppress rules to re-run CMake on rebuild" OFF)
mark_as_advanced(CMAKE_SUPPRESS_REGENERATION)
endif(NOT CMAKE_VERSION VERSION_LESS 3.0.0)

View File

@ -212,7 +212,8 @@ public:
and used to modify how the rest of the line is printed:
\li <tt>'\@.'</tt> Print rest of line, don't look for more '\@' signs
\li <tt>'\@\@'</tt> Print rest of line starting with '\@'
\li <tt>'\@\@'</tt> Doubling the format character prints the format
character once, followed by the rest of line
\li <tt>'\@l'</tt> Use a LARGE (24 point) font
\li <tt>'\@m'</tt> Use a medium large (18 point) font
\li <tt>'\@s'</tt> Use a <SMALL>small</SMALL> (11 point) font
@ -222,8 +223,9 @@ public:
font (sets font to FL_COURIER)
\li <tt>'\@c'</tt> Center the line horizontally
\li <tt>'\@r'</tt> Right-justify the text
\li <tt>'\@N'</tt> Use fl_inactive_color() to draw the text
\li <tt>'\@B0', '\@B1', ... '\@B255'</tt> Fill the backgound with
fl_color(n)
fl_color(n)
\li <tt>'\@C0', '\@C1', ... '\@C255'</tt> Use fl_color(n) to draw the text
\li <tt>'\@F0', '\@F1', ...</tt> Use fl_font(n) to draw the text
\li <tt>'\@S1', '\@S2', ...</tt> Use point size n to draw the text

View File

@ -103,11 +103,11 @@ OPTION_ARCHFLAGS - default EMPTY
Extra architecture flags.
OPTION_APPLE_X11 - default OFF
In case you want to use X11 on OSX.
In case you want to use X11 on macOS.
Use this only if you know what you do, and if you have installed X11.
OPTION_USE_POLL - default OFF
Don't use this one either.
Don't use this one either, it is deprecated.
OPTION_BUILD_SHARED_LIBS - default OFF
Normally FLTK is built as static libraries which makes more portable
@ -117,10 +117,10 @@ OPTION_BUILD_EXAMPLES - default ON
Builds the many fine example programs.
OPTION_CAIRO - default OFF
Enables libcairo support - see README.CMake.txt.
Enables libcairo support - see README.Cairo.txt.
OPTION_CAIROEXT - default OFF
Enables extended libcairo support - see README.CMake.txt.
Enables extended libcairo support - see README.Cairo.txt.
OPTION_USE_GL - default ON
Enables OpenGL support.
@ -169,6 +169,28 @@ OPTION_PRINT_SUPPORT - default ON
is somewhat smaller. This option makes sense only on the Unix/Linux
platform or when OPTION_APPLE_X11 is ON.
Documentation options: these options are only available if `doxygen' is
installed and found by CMake. PDF related options require also `latex'.
OPTION_BUILD_HTML_DOCUMENTATION - default OFF
OPTION_BUILD_PDF_DOCUMENTATION - default OFF
These options can be used to switch HTML documentation generation with
doxygen on. The build targets ('html', 'pdf', or 'docs') need still to
be executed explicitly.
OPTION_INCLUDE_DRIVER_DOCUMENTATION - default OFF
This option adds driver documentation to HTML and PDF docs (if ON). This
option is marked as "advanced" since it is only useful for FLTK developers
or advanced users.
OPTION_INSTALL_HTML_DOCUMENTATION - default OFF
OPTION_INSTALL_PDF_DOCUMENTATION - default OFF
If these options are ON then the HTML and/or PDF docs get installed
when the 'install' target is executed, e.g. with `make install'. You
need to select above options OPTION_BUILD_*_DOCUMENTATION as well.
2.3 Building under Linux with Unix Makefiles
-----------------------------------------------
@ -543,3 +565,4 @@ Apr 07 2015 - AlbrechtS: update use example and more docs
Jan 31 2016 - msurette: custom command instead of fltk_wrap_ui
Nov 01 2016 - AlbrechtS: remove deprecated FLTK_USE_FILE, add MinGW build
Jul 05 2017 - matt: added instructions for MacOS and Xcode
Dec 29 2018 - AlbrechtS: add documentation option descriptions

View File

@ -50,7 +50,7 @@ variable OPTION_CAIRO:BOOL=ON is set.
------------------------------
(1) Adding a new Fl_Cairo_Window class permitting transparent and easy
integration of a Cairo draw callback without the need subclass Fl_Window.
integration of a Cairo draw callback without the need to subclass Fl_Window.
(2) Adding a Fl::cairo_make_current(Fl_Window*) function only providing
transparently a cairo context to your custom Fl_Window derived class.
@ -117,7 +117,20 @@ on the various supported operating systems.
3.1 Linux
---------
From Greg (erco@seriss.com):
3.1.1 Debian and derivatives (like Ubuntu)
-----------------------------------------------------
Run from a terminal command line:
sudo apt install libcairo2-dev
Then build fltk using the cairo additional option using:
cmake -G"Unix Makefiles" -DOPTION_CAIRO:BOOL=ON -S <fltk_dir> -B <your_build_dir>
cd <your_build_dir>
make
3.1.2 CentOS from Greg (erco@seriss.com)
---------------------------------------------------
To get FLTK 1.3.x (r9204) to build on Centos 5.5, I found that
I only needed to install the "cairo-devel" package, ie:

View File

@ -1,478 +0,0 @@
README.OSX.txt - Building FLTK under Apple macOS
-------------------------------------------------
CONTENTS
==========
1 INTRODUCTION
2 HOW TO BUILD FLTK USING GCC
2.1 Prerequisites
2.2 Downloading and Unpacking
2.3 Configuring FLTK
2.4 Building FLTK
2.5 Testing FLTK
2.6 Installing FLTK
2.7 Creating new Projects
3 HOW TO BUILD FLTK USING XCODE3
3.1 Prerequisites
3.2 Downloading and Unpacking
3.3 Configuring FLTK
3.4 Building FLTK
3.5 Testing FLTK
3.6 Uninstalling previous versions of FLTK
3.7 Installing FLTK
3.8 Installing Little Helpers
3.9 Creating new Projects
4 HOW TO BUILD FLTK USING XCODE4
4.1 Prerequisites
4.2 Downloading and Unpacking
4.3 Configuring FLTK
4.4 Building FLTK
4.5 Testing FLTK
4.6 Uninstalling previous versions of FLTK
4.7 Installing FLTK
5 MAKE AN APPLICATION LAUNCHABLE BY DROPPING FILES ON ITS ICON
6 DOCUMENT HISTORY
1 INTRODUCTION
=================
FLTK supports all macOS versions above 10.3 (Panther). See below for how to
build FLTK applications that can run on all (old or recent) macOS versions.
FLTK currently supports the following development environments on the macOS
platform:
- gcc command line tools
- Xcode 3.x and higher
CAUTION: gcc command line built libraries and Xcode created Frameworks should
not be mixed!
2 HOW TO BUILD FLTK USING GCC
================================
2.1 Prerequisites
--------------------
In order to build FLTK from the command line, you need to install the Xcode
developer environment. It can be downloaded from the Apple Store for free.
After downloading and installing, you need to launch the Terminal. Terminal.app
is located in the "Utilities" folder inside the "Applications" folder. I like
to keep the Terminal in the Dock.
2.2 Downloading and Unpacking
--------------------------------
Download FLTK from here:
https://www.fltk.org/software.php
If you are familiar with Git and like to stay current with your version,
you will find the Git access parameters at the bottom of that page.
Unpack FLTK into a convenient location. I like to have everything in my
dev directory:
cd
mkdir dev
cd dev
mv ~/Downloads/fltk-1.3.xxxx.tar.gz .
tar xvfz fltk-1.3.xxxx.tar.gz
cd fltk-1.3.xxxx
If you got FLTK via Git then you need one extra step: build the
configure script. Otherwise skip the following part marked ADVANCED:
ADVANCED: (only if you got FLTK via Git)
- The preferred procedure is to build the configure script using tools
called autoconf and automake. If these tools are not both available
on your system, this post
https://www.fltk.org/newsgroups.php?gfltk.coredev+v:15499
details how to get them.
Then, stay in your FLTK source-code directory and type the following:
NOCONFIGURE=1 ./autogen.sh
- Alternatively, copy the configure script from the last FLTK weekly snapshot
to your Git source-code directory.
:END_ADVANCED
2.3 Configuring FLTK
-----------------------
Now configure your FLTK installation: stay in your FLTK source-code directory
and type
./configure
ADVANCED: type "./configure --help" to get a complete list of optional
configurations parameters. These should be pretty self-explanatory. Some
more details can be found in README.
To create multi-architecture binaries, start "configure" with these flags:
./configure --with-archflags="-arch i386 -arch x86_64"
To create applications that can run under macOS 10.4 and above, use these flags:
./configure CXXFLAGS="-mmacosx-version-min=10.4" LDFLAGS="-mmacosx-version-min=10.4"
:END_ADVANCED
The configuration script will check your machine for the required resources
which should all have been part of your Xcode installation. Review the
Configuration Summary, maybe take some notes.
2.4 Building FLTK
--------------------
Now this is easy. Stay in your FLTK source-code directory and type:
make
The entire FLTK toolkit including many test programs will be built for you. No
warnings should appear, but "ranlib" may complain about a few modules having no
symbols. This is normal and can safely be ignored.
2.5 Testing FLTK
-------------------
After a successful build, you can test FLTK's capabilities:
test/demo
2.6 Installing FLTK
----------------------
If you did not change any of the configuration settings, FLTK will be installed
in "/usr/local/include" and "/usr/local/lib" by typing
sudo make install
It is possible to install FLTK without superuser privileges by changing the
installation path to a location within the user account by adding the
"--prefix=PREFIX" parameter to the "./configure" command.
2.7 Creating new Projects
----------------------------
FLTK provides a neat script named "fltk-config" that can provide all the flags
needed to build FLTK applications using the same flags that were used to build
the library itself. Architecture flags (e.g., -arch i386) used to build the
library, though, are not provided by the fltk-config script. This allows to
build universal libraries and to produce applications of any architecture
from them. Running "fltk-config" without arguments will print a list
of options. The easiest call to compile an FLTK application from a single source
file is:
fltk-config --compile myProgram.cxx
"fltk-config" and "fluid" will be installed in "/usr/local/bin/" by default. I
recommend that you add it to the command search path.
3 HOW TO BUILD FLTK USING XCODE3
===================================
3.1 Prerequisites
--------------------
In order to build FLTK from within Xcode 3, you need to have the Xcode 3
developer environment on your computer. If you don't, go to: 'HOW TO BUILD
FLTK USING XCODE4'
3.2 Downloading and Unpacking
--------------------------------
Download FLTK from here:
https://www.fltk.org/software.php
If you are familiar with "Git" and like to stay current with your
version, you will find the Git access parameters at the bottom of that
page. You can use the SCM system that is built into Xcode.
Unpack FLTK by double-clicking it and copy the new folder into a convenient
location. I have set up a "dev" folder in my home folder for all my projects.
3.3 Configuring FLTK
-----------------------
Launch Xcode. Open the project file in
.../fltk-1.3.xxxx/ide/Xcode4/FLTK.xcodeproj
Use the "Project" pulldown menu to change "Active Build Configuration" to
"Release". Change the "Active Architecture" as desired.
3.4 Building FLTK
--------------------
Use the "Project" pulldown menu to set the "Active Target" to "Demo". Select
"Build" from the "Build" menu to create all libraries and test applications.
By default, the Xcode4 project builds applications that run under macOS 10.5
and above. To build applications that also run under older Mac OS versions,
select "Edit Project Settings" of the Project menu, then select the Build panel,
and modify the "macOS Deployment Target" item.
All frameworks and apps will be located in "./ide/Xcode4/build/Release/".
3.5 Testing FLTK
-------------------
Select "Build and Run" from the "Build" menu to run the Demo program. Use "Demo"
to explore all test programs.
3.6 Uninstalling previous versions of FLTK
---------------------------------------------
Remove FLTK frameworks:
sudo rm -r /Library/Frameworks/fltk*.framework
Remove Fluid and possibly other utilities:
sudo rm -r /Developer/Applications/Utilities/FLTK/
3.7 Installing FLTK
----------------------
When distributing FLTK applications, the FLTK frameworks should be made part of
the application package. For development however, it is very convenient to have
the Release-mode Frameworks in a standard location.
For Xcode project template use, all FLTK frameworks should be copied from
"./ide/Xcode4/build/Release/" to "/Library/Frameworks/". The FLTK header files
for all FLTK frameworks will then be at "/Library/Frameworks/fltk.framework/
Headers/". Add this path to the header search path of your projects.
sudo rm -f -r /Library/Frameworks/fltk*
sudo cp -R ide/Xcode4/build/Release/fltk*.framework /Library/Frameworks/
Many FLTK applications will use Fluid, the FLTK User Interface builder, to
generate C++ source code from .fl resource files. Add Fluid to the developer
tools:
sudo mkdir /Developer/Applications/Utilities/FLTK/
sudo rm -f -r /Developer/Applications/Utilities/FLTK/fluid.app
sudo cp -R ide/Xcode4/build/Release/fluid.app /Developer/Applications/Utilities/FLTK/
3.8 Installing Little Helpers
--------------------------------
- Project Templates:
Project Templates are the quickest way to create a new FLTK application from
within Xcode. The included project builds an FLTK based Cocoa application
written in C++ with support for the Fluid UI designer, image reading, and
OpenGL. Unused FLTK sub-Frameworks can simply be removed from the project.
The template assumes that Release versions of the FLTK frameworks are installed
in /Library/Frameworks as described above.
First, we need to create the Template folder:
sudo mkdir -p /Library/Application\ Support/Developer/Shared/Xcode/Project\ Templates/
Next, we copy the project template over:
sudo cp -r ide/Xcode4/Project\ Templates/* /Library/Application\ Support/Developer/Shared/Xcode/Project\ Templates/
After restarting Xcode, the dialog for "File > New Project..." will offer an
FLTK 1.3 user template which is ready to compile.
- Fluid file handling
This section assumes that a Release version of Fluid is installed in
"/Developer/Applications/Utilities/FLTK/" as described above. It will install
a new file type which opens Fluid as an editor for files ending in ".fl".
First, we need to create the spec folder:
sudo mkdir -p /Library/Application\ Support/Developer/Shared/Xcode/Specifications/
Next, we copy the Fluid specification over:
sudo cp ide/Xcode4/fluid.pbfilespec /Library/Application\ Support/Developer/Shared/Xcode/Specifications/
Open Xcode preferences and select the File Types tab. Find the
"sourcecode.fluid" entry in "file > text > sourcecode" and set the external
editor to Fluid. When adding ".fl" files, set the File Type in the Info dialog
to "sourcecode.fluid" and Xcode will edit your file in Fluid when
double-clicking.
- More
TODO: Language Definition
TODO: Build Rules
3.9 Creating new Projects
----------------------------
If the little helpers above were installed, the menu "File > New Project..."
will pop up a dialog that offers a User Template named Fluid. Select it and
follow the instructions.
4 HOW TO BUILD FLTK USING XCODE4
===================================
4.1 Prerequisites
--------------------
In order to build FLTK from within Xcode 4, 5, 6, 7, or 8 you need to install
the Xcode developer environment via the Apple App Store that comes with
Lion and up. If you also want the command line version of gcc, you can use
the Download section in the Preferences dialog.
4.2 Downloading and Unpacking
--------------------------------
Download FLTK from here:
https://www.fltk.org/software.php
If you are familiar with "Git" and like to stay current with your
version, you will find the Git access parameters at the bottom of that
page. You can use the SCM system that is built into Xcode.
Unpack FLTK by double-clicking it and copy the new folder into a convenient
location. I have set up a "dev" folder in my home folder for all my projects.
4.3 Configuring FLTK
-----------------------
Launch Xcode. Open the project file in
.../fltk-1.3.xxxx/ide/Xcode4/FLTK.xcodeproj
There is nothing else to configure.
4.4 Building FLTK
--------------------
Use the "Scheme" pulldown menu to change the active target to "Demo" and
"My Mac 32-bit" or "My Mac 64-bit". Select "Build for" -> "Running"Run" from
the "Product" menu to create all libraries and test applications.
By default, the Xcode4 project builds applications that run under macOS 10.5
and above. To build applications that also run under older Mac OS versions,
modify the "macOS Deployment Target" item of the FLTK project build settings.
All frameworks and apps will be located in a private directory. Use
"Window"->"Organizer" to find the full path.
4.5 Testing FLTK
-------------------
Select "Run" from the "Product" menu to run the Demo program. Use "Demo"
to explore all test programs.
4.6 Uninstalling previous versions of FLTK
---------------------------------------------
Remove FLTK frameworks:
sudo rm -r /Library/Frameworks/fltk*.framework
Remove Fluid and possibly other utilities:
sudo rm -r /Applications/FLTK/
4.7 Installing FLTK
----------------------
When distributing FLTK applications, the FLTK frameworks should be made part of
the application package. For development however, it is very convenient to have
the Release-mode Frameworks in a standard location.
For Xcode project template use, all FLTK frameworks should be built using
"Build for Archiving" and then copied from
"./(Organizer->Derived Data Path)/Release/" to "/Library/Frameworks/".
The FLTK header files for all FLTK frameworks will then be at
"/Library/Frameworks/fltk.framework/Headers/". Add this path to the header
search path of your projects.
sudo rm -f -r /Library/Frameworks/fltk*
sudo cp -R (Organizer->Derived Data Path)/Release/fltk*.framework /Library/Frameworks/
Many FLTK applications will use Fluid, the FLTK User Interface builder, to
generate C++ source code from .fl resource files. Add Fluid to the developer
tools:
sudo mkdir /Applications/FLTK/
sudo rm -f -r /Applications/FLTK/fluid.app
sudo cp -R (Organizer->Derived Data Path)/Release/fluid.app /Applications/FLTK/
(TODO: 4.8 Installing Little Helpers)
(TODO: 4.9 Creating new Projects)
5 MAKE AN APPLICATION LAUNCHABLE BY DROPPING FILES ON ITS ICON
=================================================================
- Prepare an Info.plist file for your application derived from file
test/editor-Info.plist which allows any file to be dropped
on the application icon.
You can edit this file in Xcode and change
Document types/Item 0/CFBundleTypeExtensions/Item 0
from the current "*" to the desired file extension. Use several items to
declare several extensions.
- Call fl_open_callback() at the beginning of your main() function that sets
what function will be called when a file is dropped on the application icon.
- In Xcode, set the "Info.plist File" build setting of your target application
to the Info.plist file you have prepared.
- Rebuild your application.
6 DOCUMENT HISTORY
=====================
Oct 29 2010 - matt: removed warnings
Oct 24 2010 - matt: restructured entire document and verified instructions
Dec 19 2010 - Manolo: corrected typos
Dec 29 2010 - Manolo: removed reference to AudioToolbox.framework that's no longer needed
Feb 24 2011 - Manolo: architecture flags are not propagated to the fltk-config script.
Apr 17 2012 - matt: added Xcode4 documentation
Nov 13 2012 - Manolo: added "MAKE AN APPLICATION LAUNCHABLE BY DROPPING FILES ON ITS ICON"
Apr 28 2014 - Manolo: how to build programs that run on various Mac OS X versions
Mar 18 2015 - Manolo: removed uses of the Xcode3 project
Apr 01 2016 - AlbrechtS: corrected typo, formatted most line breaks < 80 columns
Dec 04 2018 - AlbrechtS: fix typo (lowercase fluid.app) for case sensitive macOS

516
README.macOS.md Normal file
View File

@ -0,0 +1,516 @@
_README.macOS.md - Building FLTK under Apple macOS_
<a name="contents"></a>
## Contents
* [Contents](#contents)
* [Introduction](#introduction)
* [How to Build FLTK using _CMake_ AND _Xcode_](#build_cmake_xcode)
* [Prerequisites](#bcx_prerequisites)
* [Downloading FLTK and Unpacking](#bcx_download)
* [Configuring FLTK](#bcx_config)
* [Building FLTK](#bcx_build)
* [Testing FLTK](#bcx_test)
* [Installing FLTK](#bcx_install)
* [Creating new Projects](#bcx_new_projects)
* [How to Build FLTK using _CMake_ and _make_](#build_cmake_make)
* [Prerequisites](#bcm_prerequisites)
* [Downloading FLTK and Unpacking](#bcm_download)
* [Configuring FLTK](#bcm_config)
* [Building FLTK](#bcm_build)
* [Testing FLTK](#bcm_test)
* [Installing FLTK](#bcm_install)
* [Creating new Projects](#bcm_new_projects)
* [How to Build FLTK Using _autoconf_ and _make_](#build_autoconf_make)
* [Prerequisites](#bam_prerequisites)
* [Downloading FLTK and Unpacking](#bam_download)
* [Configuring FLTK](#bam_config)
* [Building FLTK](#bam_build)
* [Testing FLTK](#bam_test)
* [Installing FLTK](#bam_install)
* [Creating new Projects](#bam_new_projects)
* [Make an Application Launchable by Dropping Files on its Icon](#dropstart)
* [Document History](#doc_history)
<a name="introduction"></a>
## Introduction
FLTK supports macOS version 10.3 Panther and above. At the time of writing (Jan. 2019),
FLTK compiles and runs fine on the most recent macOS 10.14 Mojave.
FLTK 1.4 supports the following build environments on the macOS
platform:
* [_cmake_ and _Xcode_](#build_cmake_xcode), no shell needed
* [_cmake_ and _make_](#build_cmake_make) from the command line
* [_autoconf_ and _make_](#build_autoconf_make) from the command line
All environments will generate Unix style static libraries and macOS style app bundles.
<a name="build_cmake_xcode"></a>
## How to Build FLTK Using _CMake_ and _Xcode_
This option is best for users who like to develop their apps using Apple's Xcode IDE. There
is no need to ever use a command line shell in this configuration.
This option requires an Apple ID and administrator rights.
<a name="bcx_prerequisites"></a>
### Prerequisites (CMake, Xcode)
In order to build FLTK, you need to install _CMake_ and _Xcode_.
"CMake is used to control the software compilation process using simple platform and
compiler independent configuration files, and generate native makefiles and workspaces
that can be used in the compiler environment of your choice."
Please download and install the Mac OS X version of _CMake_ from
[www.cmake.org](https://cmake.org/download/). Download the .dmg file, click it, and when
the Finder window opens, drag the _CMake_ icon into the Applications folder.
_Xcode_ can be downloaded via the
[App Store](https://itunes.apple.com/de/app/xcode/id497799835?l=en&mt=12). You will
need an Apple ID and administrator right for this. Installing _Xcode_ will take well over an hour.
<a name="bcx_download"></a>
### Downloading and Unpacking (CMake, Xcode)
FLTK 1.4 is currently (as of Jan. 2019) only available as a source code repository via GitHub.
You will need to clone the repository to check out the source code onto your machine. This
has the great benefit that the source code can be updated later simply by telling _git_ to
_pull_ the newest release.
If you want to use _Xcode_ to clone the FLTK GitHub repository, you will have to set up a
GitHub Account in the _Xcode_ preferences. If you don't have a GitHub account, or don't
want to create one for _Xcode_, you can use still the command line
`git clone https://github.com/fltk/fltk.git fltk-1.4.git` to ceck out the repo.
Start _Xcode_. Select `Source Control >> Clone...` in the main menu.
A dialog box will open with a search field and a list of repositories. Enter `fltk/fltk` in
the search field. A list of matchin repositories appears. The first one should be named `fltk`
and be owned by `fltk`. Select it and click _Clone_.
A file chooser appears. Navigate to your home directory. The create a new folder named
`dev`. Enter `fltk-1.4.git` in the _Save As:_ field and click _Clone_, then _Done_ in the
previous dialog.
The local copy of your repository can be updated by loading it into _Xcode_ and selecting
`Source Control >> Pull...` in the main menu.
<a name="bcx_config"></a>
### Configuring FLTK (CMake, Xcode)
Launch _CMake_ by pressing Command+Spacebar, the type _CMake_ and press return.
_CMake_ should open with a large dialog box.
The first input field is labeled with _Where is the source code:_ . Click on _Browse Source..._
and navigate to your home folder, then `dev`, then `fltk-1.4.git`. Click _Open_.
The next input field is marked _Where to build the binaries:_. Click _Browse Build..._
and navigate to your home folder, then `dev`, then `fltk-1.4.git`, then use _New Folder_
to create a folder named `build`, and inside that, create a folder named `Xcode`. Click _Open_.
The top two input fields should read
```
/Users/your_name/dev/fltk-1.4.git
```
and
```
/Users/your_name/dev/fltk-1.4.git/build/Xcode
```
Back in the _CMake_ main window, click _Configure_, select _Xcode_ as the generator and
click _Done_. _CMake_ will now analyse your system and find tools and dependencies. When
done, the upper list field in _CMake_ will show CMAKE, FLTK, and OPTION. Open the OPTION
field and find the entries OPTION_USE_SYSTEM_LIBJPEG and OPTION_USE_SYSTEM_LIBPNG,
and disable both for maximum compatibility with other macOS installation.
Finally, click _Generate_ to generate the _Xcode_ IDE file.
You may be wondering why we chose this rather involved way of creating the IDE files instead
of just including the IDEs in the repo. Well, we did for the longest time, but creating new IDEs
for every possible platform is quite involved. IDE file formats change, platforms change, and
FLTK changes as well, and maintenance of the IDEs had become a nightmare. _CMake_ on the
other hand is very smart, knows about platforms and IDEs that we could never support manually,
and usually needs to be run only once. Even when updating the FLTK source code later,
_CMake_ will be smart enough to update the build files as well.
<a name="bcx_build"></a>
### Building FLTK (CMake, Xcode)
Now this is easy if all the previous steps were successful. If you are still in _CMake_, just click
_Open Project_ and _CMake_ will launch _XCode_ for you. If not, just launch _XCode_ and
open `Macintosh HDUsers ▸ your_namedevfltk-1.4.gitbuildXcodeFLTK.xcodeproj`.
_XCode_ may or may not ask to Autocreate Schemes. Click _Automatically Create Schemes_.
In _Xcode_, set the 'active Scheme' to 'hello' or any other test program and press CMD+R
to compile and run that application.
<a name="bcx_test"></a>
### Testing FLTK (CMake, Xcode)
After a successful build, you can test FLTK's capabilities by choosing 'ALL_BUILD' as the
'active Scheme' and pressing CMD+B to build, then choosing 'demo' and pressing CMD+R to
run the demo program.
TODO: as of Jan 2019, compiling 'demo' will not compile any of the other demo programs.
We really have to update the dependencies!
<a name="bcx_install"></a>
### Installing FLTK (CMake, Xcode)
TODO: choosing the target 'INSTALL' will not work at this point because it requires root
permission.
<a name="bcx_new_projects"></a>
### Creating new Projects (CMake, Xcode)
TODO: we still need to write a simple CMake file for creating a minimal cross platform app.
<a name="build_cmake_make"></a>
## How to Build FLTK Using _CMake_ and _make_
This option is best for users who like to develop their apps without using Apple's Xcode IDE,
but like the advantages of _CMake_ over _autoconf_. Users should be comfortable with
using `bash` or `tcsh` in a terminal window.
This option requires neither administrator rights, nor an Apple ID.
<a name="bcm_prerequisites"></a>
### Prerequisites (CMake, make)
In order to build FLTK, you need to install _CMake_ and the _Xcode_ command line tools.
"CMake is used to control the software compilation process using simple platform and
compiler independent configuration files, and generate native makefiles and workspaces
that can be used in the compiler environment of your choice."
Please download and install the Mac OS X version of _CMake_ from
[www.cmake.org](https://cmake.org/download/). Download the .dmg file, click it, and when
the Finder window opens, drag the _CMake_ icon into the Applications folder.
We will be using _CMake_ from the command line. Please launch _CMake_ and choose
`Tools > How to Install for Command Line Use` and follow the instructions
in the dialog box. If you have admin right, you can also use
```bash
sudo ln -s /Applications/CMake.app/Contents/bin/cmake /usr/local/bin/cmake
```
Installing the _Xcode_ command line tools is pretty straight forward. Just enter this
in your shell and follow the dialogs:
```bash
xcode-select --install
```
On older versions of macOS, you will have to install _Xcode_ from the
[App Store](https://itunes.apple.com/de/app/xcode/id497799835?l=en&mt=12)
and then install the command line tools from within _Xcode_.
<a name="bcm_download"></a>
### Downloading and Unpacking (CMake, make)
Downloading FLTK is explained [here](#bam_download).
<a name="bcm_config"></a>
### Configuring FLTK (CMake, make)
Using you shell in the terminal, make sure that you are in the root directory of your
FLTK source code tree.
Create a directory where all FLTK binaries will be built:
```bash
mkdir build
cd build
mkdir Makefile
cd Makefile
```
Now configure your FLTK installation:
```bash
cmake -G "Unix Makefiles" \
-D OPTION_USE_SYSTEM_LIBJPEG=Off \
-D OPTION_USE_SYSTEM_ZLIB=Off \
-D OPTION_USE_SYSTEM_LIBPNG=Off \
../..
```
_CMake_ runs a number of tests to find external headers, libraries, and tools.
The configuration summary should not show any errors. You can now continue to build FLTK.
For the advanced user, there are a few more optinons to the _CMake_ setup. Type
`cmake -L ../..` to get a complete list of options. These should be pretty
self-explanatory. Some more details can be found in
[online documentation](https://www.fltk.org/doc-1.4/intro.html#intro_unix).
<a name="bcm_build"></a>
### Building FLTK (CMake, make)
Now this is easy if all the previous steps were successful. Stay in your `build/Makefiles`
directory and type:
```bash
make
```
The entire FLTK toolkit including many test programs will be built for you. No
warnings should appear, but "ranlib" may complain about a few modules having no
symbols. This is normal and can safely be ignored.
<a name="bcm_test"></a>
### Testing FLTK (CMake, make)
After a successful build, you can test FLTK's capabilities by running
```bash
open bin/examples/demo.app
```
<a name="bcm_install"></a>
### Installing FLTK (CMake, make)
If you did not change any of the configuration settings, FLTK will be installed
in `/usr/local/include`, `/usr/local/lib`, and `/usr/local/bin` by typing
```bash
sudo make install
```
It is possible to install FLTK without superuser privileges by changing the
installation path to a location within the user account by adding the
`--prefix=PREFIX` parameter to the `./configure` command.
<a name="bcm_new_projects"></a>
### Creating new Projects (CMake, make)
FLTK provides a neat script named `fltk-config` that can provide all the flags
needed to build FLTK applications using the same flags that were used to build
the library itself. Running `fltk-config` without arguments will print a list
of options. The easiest call to compile an FLTK application from a single source
file is:
```bash
fltk-config --compile myProgram.cxx
```
`fltk-config` and our user interface designer `fluid` will be installed in
`/usr/local/bin/` by default. I recommend that you add this directory to the shell
`PATH` variable.
<a name="build_autoconf_make"></a>
## How to Build FLTK Using _autoconf_ and _make_
This option is best for users who like to develop their apps without using Apple's Xcode IDE
and prefer minimal dependencies of a _Makefile_ over _CMake_. Users should be comfortable
with using `bash` or `tcsh` in a terminal window.
This option requires administrator rights, but no Apple ID.
<a name="bam_prerequisites"></a>
### Prerequisites (autoconf, make)
In order to build FLTK from the command line, you need to install a C++ compiler
environment, `make` and `autoconf`. Installing the _Xcode_ command line tools is the easiest
way to get all prerequisites in one simple step.
<a name="xcode_command_line_tools"></a>
Launch _Terminal.app_ by pressing Command+Spacebar and typing `Terminal` and pressing _return_.
I like to keep the Terminal in the Dock for future use (launch Terminal, right-click or control-click
on the Terminal icon that is now in the docking bar, and choose _Options_->_Keep in Dock_).
Installing the _Xcode_ command line tools is pretty straight forward. Just enter this
and follow the dialogs:
```bash
xcode-select --install
```
On older versions of macOS, you will have to install _Xcode_ from the
[App Store](https://itunes.apple.com/de/app/xcode/id497799835?l=en&mt=12)
and then install the command line tools from within _Xcode_.
Apple no longer includes _autoconf_ in the _Xcode_ command line tools. To install
_autoconf_, we first need to installe _brew_ by typing this rather cryptic command in the shell
you will need the root password):
```bash
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
After a few minutes, we can now build and install all other tools from one simple command:
```bash
brew install autoconf automake
```
<a name="bam_download"></a>
### Downloading and Unpacking (autoconf, make)
FLTK 1.4 is currently (as of Jan. 2019) only available as a source code repository via GitHub.
You will need to clone the repository to check out the source code onto your machine. This
has the great benefit that the source code can be updated later simply by telling _git_ to
_pull_ the newest release.
Start your terminal. If you have not set up a developer directory yet, I recomment to use
`~/dev` and put all your projects there:
```bash
# make sure we are in the home directory
cd ~
# create our developer directory and go there
mkdir dev
cd dev
```
Now create a copy of the source code archive at Github on your local file system:
```bash
git clone https://github.com/fltk/fltk.git fltk-1.4.git
cd fltk-1.4.git
```
<a name="bam_config"></a>
### Configuring FLTK (autoconf, make)
Using you shell in the terminal, make sure that you are in the root directory of your
FLTK source code tree.
If you are configuring fltk for the first time, you need to instruct FLTK to create some
very basic configuration files. Type:
```bash
NOCONFIGURE=1 ./autogen.sh
```
This script may generate a few error messages which you can sefely ignore.
Now configure your FLTK installation. Stay in your FLTK source-code directory
and type
```bash
./configure
```
The configuration script runs a number of tests to find external headers, libraries, and tools.
The configuration summary should not show any errors. You can now continue to build FLTK.
For the advanced user, there are a few more optinons to the _configure_ script. Type
`./configure --help` to get a complete list of options. These should be pretty
self-explanatory. Some more details can be found in
[online documentation](https://www.fltk.org/doc-1.4/intro.html#intro_unix).
<a name="bam_build"></a>
### Building FLTK (autoconf, make)
Now this is easy if all the previous steps were successful. Stay in your FLTK source-code
directory and type:
```bash
make
```
The entire FLTK toolkit including many test programs will be built for you. No
warnings should appear, but "ranlib" may complain about a few modules having no
symbols. This is normal and can safely be ignored.
<a name="bam_test"></a>
### Testing FLTK (autoconf, make)
After a successful build, you can test FLTK's capabilities by running
```bash
test/demo
```
<a name="bam_install"></a>
### Installing FLTK (autoconf, make)
If you did not change any of the configuration settings, FLTK will be installed
in `/usr/local/include`, `/usr/local/lib`, and `/usr/local/bin` by typing:
```bash
sudo make install
```
It is possible to install FLTK without superuser privileges by changing the
installation path to a location within the user account by adding the
`--prefix=PREFIX` parameter to the `./configure` command.
<a name="bam_new_projects"></a>
### Creating new Projects (autoconf, make)
FLTK provides a neat script named `fltk-config` that can provide all the flags
needed to build FLTK applications using the same flags that were used to build
the library itself. Running `fltk-config` without arguments will print a list
of options. The easiest call to compile an FLTK application from a single source
file is:
```bash
cat << EOF > main.cxx
#include <FL/Fl_Window.H>
int main(int argc, char **argv) {
Fl_Window *win = new Fl_Window(600, 400, "Hello, world!");
win->show(argc, argv);
return Fl::run();
}
EOF
fltk-config --compile main.cxx
./main
```
`fltk-config` and our user interface designer `fluid` will be installed in
`/usr/local/bin/` by default. I recommend that you add this directory to the shell
`PATH` variable.
<a name="dropstart"></a>
### Make an Application Launchable by Dropping Files on its Icon
TODO: update for FLTK 1.4
- Prepare an Info.plist file for your application derived from file
test/editor-Info.plist which allows any file to be dropped
on the application icon.
You can edit this file in Xcode and change
Document types/Item 0/CFBundleTypeExtensions/Item 0
from the current "*" to the desired file extension. Use several items to
declare several extensions.
- Call fl_open_callback() at the beginning of your main() function that sets
what function will be called when a file is dropped on the application icon.
- In Xcode, set the "Info.plist File" build setting of your target application
to the Info.plist file you have prepared.
- Rebuild your application.
<a name="doc_history"></a>
## DOCUMENT HISTORY
- Oct 29 2010 - matt: removed warnings
- Oct 24 2010 - matt: restructured entire document and verified instructions
- Dec 19 2010 - Manolo: corrected typos
- Dec 29 2010 - Manolo: removed reference to AudioToolbox.framework that's no longer needed
- Feb 24 2011 - Manolo: architecture flags are not propagated to the fltk-config script.
- Apr 17 2012 - matt: added Xcode4 documentation
- Nov 13 2012 - Manolo: added "MAKE AN APPLICATION LAUNCHABLE BY DROPPING FILES ON ITS ICON"
- Apr 28 2014 - Manolo: how to build programs that run on various Mac OS X versions
- Mar 18 2015 - Manolo: removed uses of the Xcode3 project
- Apr 01 2016 - AlbrechtS: corrected typo, formatted most line breaks < 80 columns
- Dec 04 2018 - AlbrechtS: fix typo (lowercase fluid.app) for case sensitive macOS
- Dec 28 2018 - Matt: complete rework for FLTK 1.4

View File

@ -18,6 +18,14 @@
set (DOCS)
set (FL_VERSION "${FLTK_VERSION_FULL}")
if (OPTION_INCLUDE_DRIVER_DOCUMENTATION)
set (DRIVER_DOCS "DriverDev")
else ()
set (DRIVER_DOCS "")
endif ()
#--------------------------
# build html documentation
#--------------------------
@ -31,7 +39,6 @@ if(OPTION_BUILD_HTML_DOCUMENTATION)
set(GENERATE_HTML YES)
set(GENERATE_LATEX NO)
set(LATEX_HEADER "")
set(FL_VERSION "${FLTK_VERSION_FULL}")
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
@ -64,7 +71,6 @@ if (OPTION_BUILD_PDF_DOCUMENTATION)
set(GENERATE_HTML NO)
set(GENERATE_LATEX YES)
set(LATEX_HEADER "${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex")
set(FL_VERSION "${FLTK_VERSION_FULL}")
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in

View File

@ -437,8 +437,7 @@ GENERATE_DEPRECATEDLIST= YES
# The ENABLED_SECTIONS tag can be used to enable conditional
# documentation sections, marked by \if sectionname ... \endif.
ENABLED_SECTIONS =
# ENABLED_SECTIONS += DriverDev
ENABLED_SECTIONS = @DRIVER_DOCS@
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
# the initial value of a variable or define consists of for it to appear in

View File

@ -337,30 +337,26 @@ void Fl_Table_Type::move_child(Fl_Type* cc, Fl_Type* before) {
Fl_Widget *Fl_Group_Type::enter_live_mode(int) {
Fl_Group *grp = new Fl_Group(o->x(), o->y(), o->w(), o->h());
live_widget = grp;
if (live_widget) {
copy_properties();
Fl_Type *n;
for (n = next; n && n->level > level; n = n->next) {
if (n->level == level+1)
n->enter_live_mode();
}
grp->end();
copy_properties();
Fl_Type *n;
for (n = next; n && n->level > level; n = n->next) {
if (n->level == level+1)
n->enter_live_mode();
}
grp->end();
return live_widget;
}
Fl_Widget *Fl_Tabs_Type::enter_live_mode(int) {
Fl_Tabs *grp = new Fl_Tabs(o->x(), o->y(), o->w(), o->h());
live_widget = grp;
if (live_widget) {
copy_properties();
Fl_Type *n;
for (n = next; n && n->level > level; n = n->next) {
if (n->level == level+1)
n->enter_live_mode();
}
grp->end();
copy_properties();
Fl_Type *n;
for (n = next; n && n->level > level; n = n->next) {
if (n->level == level+1)
n->enter_live_mode();
}
grp->end();
grp->value(((Fl_Tabs*)o)->value());
return live_widget;
}
@ -368,10 +364,8 @@ Fl_Widget *Fl_Tabs_Type::enter_live_mode(int) {
Fl_Widget *Fl_Table_Type::enter_live_mode(int) {
Fl_Group *grp = new Fluid_Table(o->x(), o->y(), o->w(), o->h());
live_widget = grp;
if (live_widget) {
copy_properties();
grp->end();
}
copy_properties();
grp->end();
return live_widget;
}
@ -396,15 +390,13 @@ Fl_Widget *Fl_Scroll_Type::enter_live_mode(int) {
Fl_Group *grp = new Fl_Scroll(o->x(), o->y(), o->w(), o->h());
grp->show();
live_widget = grp;
if (live_widget) {
copy_properties();
Fl_Type *n;
for (n = next; n && n->level > level; n = n->next) {
if (n->level == level+1)
n->enter_live_mode();
}
grp->end();
copy_properties();
Fl_Type *n;
for (n = next; n && n->level > level; n = n->next) {
if (n->level == level+1)
n->enter_live_mode();
}
grp->end();
return live_widget;
}

View File

@ -360,27 +360,27 @@ void Fl_Menu_Item_Type::write_code1() {
}
}
int init = 0;
int menuItemInitialized = 0;
// if the name is an array variable, assign the value here
if (name() && strchr(name(), '[')) {
write_c("%s%s = &%s[%d];\n", indent(), name(), mname, i);
}
if (image) {
if (!init) {
init = 1;
write_c("%s{ Fl_Menu_Item* o = &%s[%d];\n", indent(), mname, i);
}
menuItemInitialized = 1;
write_c("%s{ Fl_Menu_Item* o = &%s[%d];\n", indent(), mname, i);
image->write_code("o");
}
for (int n=0; n < NUM_EXTRA_CODE; n++)
for (int n=0; n < NUM_EXTRA_CODE; n++) {
if (extra_code(n) && !isdeclare(extra_code(n))) {
if (!init) {
init = 1;
write_c("%s{ Fl_Menu_Item* o = &%s[%d];\n", indent(), mname, i);
if (!menuItemInitialized) {
menuItemInitialized = 1;
write_c("%s{ Fl_Menu_Item* o = &%s[%d];\n", indent(), mname, i);
}
write_c("%s %s\n", indent(), extra_code(n));
}
if (init) write_c("%s}\n",indent());
}
if (menuItemInitialized)
write_c("%s}\n",indent());
}
void Fl_Menu_Item_Type::write_code2() {}

View File

@ -1,90 +1,90 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@ -1306,6 +1306,7 @@ int Fl::handle_(int e, Fl_Window* window)
case FL_UNFOCUS:
window = 0;
// FALLTHROUGH
case FL_FOCUS:
fl_xfocus = window;
fl_fix_focus();

View File

@ -378,8 +378,7 @@ int Fl_Browser::item_height(void *item) const {
Fl_Font font = textfont(); // default font
int tsize = textsize(); // default size
if ( format_char() ) { // can be NULL
while (*str==format_char()) {
str++;
while (*str==format_char() && *str++ && *str!=format_char()) {
switch (*str++) {
case 'l': case 'L': tsize = 24; break;
case 'm': case 'M': tsize = 18; break;
@ -391,7 +390,6 @@ int Fl_Browser::item_height(void *item) const {
case 'C': while (isdigit(*str & 255)) str++; break; // skip a color number
case 'F': font = (Fl_Font)strtol(str,&str,10); break;
case 'S': tsize = strtol(str,&str,10); break;
case 0: case '@': str--;
case '.': goto END_FORMAT;
}
}
@ -458,9 +456,6 @@ int Fl_Browser::item_width(void *item) const {
case '.':
done = 1;
break;
case '@':
str--;
done = 1;
}
if (done)
@ -511,7 +506,7 @@ void Fl_Browser::item_draw(void* item, int X, int Y, int W, int H) const {
char* str = l->txt;
const int* i = column_widths();
bool first = true; // for icon
bool firstLoop = 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
@ -520,8 +515,8 @@ void Fl_Browser::item_draw(void* item, int X, int Y, int W, int H) const {
if (e) {*e = 0; w1 = *i++;}
}
// Icon drawing code
if (first) {
first = false;
if (firstLoop) {
firstLoop = false;
if (l->icon) {
l->icon->draw(X+2,Y+1); // leave 2px left, 1px above
int iconw = l->icon->w()+2;
@ -578,8 +573,6 @@ void Fl_Browser::item_draw(void* item, int X, int Y, int W, int H) const {
break;
case '.':
goto BREAK;
case '@':
str--; goto BREAK;
}
}
}

View File

@ -432,7 +432,8 @@ Fl_File_Chooser::count() {
void
Fl_File_Chooser::directory(const char *d)// I - Directory to change to
{
char *dirptr; // Pointer into directory
char *dirptr; // Pointer into directory
char fixpath[FL_PATH_MAX]; // Path with slashes converted
// printf("Fl_File_Chooser::directory(\"%s\")\n", d == NULL ? "(null)" : d);
@ -444,7 +445,6 @@ Fl_File_Chooser::directory(const char *d)// I - Directory to change to
if (Fl::system_driver()->backslash_as_slash()) {
// See if the filename contains backslashes...
char *slash; // Pointer to slashes
char fixpath[FL_PATH_MAX]; // Path with slashes converted
if (strchr(d, '\\')) {
// Convert backslashes to slashes...
strlcpy(fixpath, d, sizeof(fixpath));

View File

@ -1010,6 +1010,7 @@ int Fl_Input_::handletext(int event, int X, int Y, int W, int H) {
if (!(damage()&FL_DAMAGE_EXPOSE)) {minimal_update(position_); erase_cursor_only = 1;}
} else //if (Fl::selection_owner() != this)
minimal_update(mark_, position_);
// FALLTHROUGH
case FL_HIDE:
fl_reset_spot();
if (!readonly() && (when() & FL_WHEN_RELEASE))

View File

@ -255,9 +255,8 @@ extern "C" {
static void jpeg_mem_src(j_decompress_ptr cinfo, const unsigned char *data)
{
my_src_ptr src;
cinfo->src = (struct jpeg_source_mgr *)malloc(sizeof(my_source_mgr));
src = (my_src_ptr)cinfo->src;
my_src_ptr src = (my_source_mgr*)malloc(sizeof(my_source_mgr));
cinfo->src = &(src->pub);
src->pub.init_source = init_source;
src->pub.fill_input_buffer = fill_input_buffer;
src->pub.skip_input_data = skip_input_data;

View File

@ -533,7 +533,7 @@ int menuwindow::find_selected(int mx, int my) {
if (my < 0 || my >= h()) return -1;
if (!itemheight) { // menubar
int xx = 3; int n = 0;
const Fl_Menu_Item* m = menu ? menu->first() : 0;
const Fl_Menu_Item* m = menu->first();
for (; ; m = m->next(), n++) {
if (!m->text) return -1;
xx += m->measure(0, button) + 16;

View File

@ -176,7 +176,7 @@ int Fl_Menu_Item::insert(
if (m->flags&FL_SUBMENU && !compare(item, m->text)) break;
if (!m->text) { /* create a new menu */
int n = (index==-1) ? (int) (m-array) : index;
int n = (int)(m-array); /* index is not used if label contains a path */
array = array_insert(array, msize, n, item, FL_SUBMENU|flags1);
msize++;
array = array_insert(array, msize, n+1, 0, 0);

View File

@ -1248,7 +1248,7 @@ void Fl_Text_Buffer::remove_(int start, int end)
/* expand the gap to encompass the deleted characters */
mGapEnd += end - mGapStart;
mGapStart -= mGapStart - start;
mGapStart = start;
/* update the length */
mLength -= end - start;

View File

@ -97,26 +97,24 @@ void gl_remove_displaylist_fonts()
for (int j = 0 ; j < FL_FREE_FONT ; ++j)
{
Fl_Font_Descriptor* past = 0;
Fl_Font_Descriptor** s_first = Fl_Gl_Window_Driver::global()->fontnum_to_fontdescriptor(j);
Fl_Font_Descriptor* f = *s_first;
while (f != 0) {
if(f->listbase) {
if(f == *s_first) {
*s_first = f->next;
}
else {
past->next = f->next;
Fl_Font_Descriptor *prevDesc = 0L, *nextDesc = 0L;
Fl_Font_Descriptor *&firstDesc = *Fl_Gl_Window_Driver::global()->fontnum_to_fontdescriptor(j);
for (Fl_Font_Descriptor *desc = firstDesc; desc; desc = nextDesc)
{
nextDesc = desc->next;
if(desc->listbase) {
// remove descriptor from a single-linked list
if(desc == firstDesc) {
firstDesc = desc->next;
} else if (prevDesc) {
// prevDesc should not be NULL, but this test will make static analysis shut up
prevDesc->next = desc->next;
}
// It would be nice if this next line was in a destructor somewhere
glDeleteLists(f->listbase, Fl_Gl_Window_Driver::global()->genlistsize());
Fl_Font_Descriptor* tmp = f;
f = f->next;
delete tmp;
}
else {
past = f;
f = f->next;
glDeleteLists(desc->listbase, Fl_Gl_Window_Driver::global()->genlistsize());
delete desc;
} else {
prevDesc = desc;
}
}
}

View File

@ -771,7 +771,7 @@ int BlockWindow::handle(int event) {
b = 0;
for (j = 0, c = columns_; !count && j < num_columns_; j ++, c ++)
for (k = 0, b = c->blocks; !count && k < c->num_blocks; k ++, b ++)
for (k = 0, b = c->blocks; k < c->num_blocks; k ++, b ++)
if (mx >= c->x && mx < (c->x + BLOCK_SIZE) &&
my >= b->y && my < (b->y + BLOCK_SIZE)) {
if (b->bomb) count = bomb(b->color);

View File

@ -44,6 +44,14 @@ That was a blank line above this.
@C1RED
@C2Green
@C4Blue
@N@.Inactive
@@ start line with '@'
@.@ alternative start line with '@'
@l@@ start tall line with '@'
@s@@ start small line with '@'
#s## start line with '#'
#s#.# alternative start line with '#'
You should try different browser types:
Fl_Browser
@ -164,6 +172,7 @@ int main(int argc, char **argv) {
browser->callback(b_cb);
// browser->scrollbar_right();
//browser->has_scrollbar(Fl_Browser::BOTH_ALWAYS);
//browser->format_char('#');
if (!browser->load(fname)) {
int done = 0;
#ifdef _MSC_VER

View File

@ -1,72 +1,72 @@
//Microsoft Developer Studio generated resource script.
//
#include "sudokurc.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
//#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
//LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"icons.h\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON ICON DISCARDABLE "sudoku.ico"
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
//Microsoft Developer Studio generated resource script.
//
#include "sudokurc.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
//#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
//LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"icons.h\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON ICON DISCARDABLE "sudoku.ico"
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED