Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
362f935086
9
.gitattributes
vendored
9
.gitattributes
vendored
@ -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
17
.gitignore
vendored
@ -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
74
.travis.yml
Normal 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
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
||||
|
478
README.OSX.txt
478
README.OSX.txt
@ -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
516
README.macOS.md
Normal 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 HD ▸ Users ▸ your_name ▸ dev ▸ fltk-1.4.git ▸ build ▸ Xcode ▸ FLTK.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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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() {}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
144
test/sudoku.rc
144
test/sudoku.rc
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user