Reva GUI Library: Check-in [489d7df1eb]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Baseline code
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 489d7df1ebcd9b63113eb745af1e442c6835a4f7
User & Date: ron 2010-01-07 08:32:22
Context
2010-02-15
08:57
fixed makefile check-in: 9e6b7eff3a user: ron tags: trunk
2010-01-07
08:32
Baseline code check-in: 489d7df1eb user: ron tags: trunk
07:49
initial empty check-in check-in: 9d8611c5a3 user: ron tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Added Makefile.



















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# Note: the fltk library has to be configured with 
os=$(shell uname)

CPP=g++ -O3 -s
OBJDIR=obj
# cross compile for Windows:
CROSS=0

ifeq ($(os),Darwin)
INC=-I`pwd`/fltk-1.3/ -I/usr/include
LIB= `pwd`/fltk-1.3/maclib/libfltk.a -lpthread -framework Carbon -framework ApplicationServices
TARGET=librevagui.dylib
endif
ifeq ($(os),Linux)
INC=-I`pwd`/fltk-1.3/ -I/usr/include
LIB= `pwd`/fltk-1.3/linlib/libfltk.a -lXft -lfontconfig -lpthread -ldl -lm -lXext -lX11
TARGET=librevagui.so
endif
ifeq ($(CROSS),1)
CWD=$(shell pwd)
TARGET=revagui.dll
MING=$(HOME)/mingw/i686-pc-mingw32
CPP=~/mingw/bin/i686-pc-mingw32-g++ -Os -s
OBJDIR=wobj
INC=-I$(CWD)/fltk-1.3 -I$(MING)/include
LIB=-L$(CWD)/fltk-1.3/winlib -L$(MING)/lib   -Wl,--subsystem,windows -mwindows\
	$(CWD)/fltk-1.3/winlib/libfltk.a \
	-lole32 -luuid -lcomctl32 -lwinmm -loleaut32 -lopengl32\
	-lpng -ljpeg  -ltiff -lz -lwsock32 


endif

SRC=src/revagui.cpp 

OBJ1:=$(SRC:.cpp=.o)

OBJ=$(subst src/,$(OBJDIR)/,$(OBJ1))

dummy: $(TARGET)

librevagui.dylib: $(OBJ)
	$(CPP) -dynamiclib -o $@ $(OBJ) $(LIB)
	cp $@ ../bin

librevagui.so: $(OBJ)
	$(CPP) -shared -o $@ $(OBJ) $(LIB)
	cp $@ ../bin

revagui.dll: $(OBJ)
	$(CPP) -shared -o $@ $(OBJ) $(LIB)
	cp $@ ../bin

$(OBJDIR)/revagui.o: src/revagui.cpp
	@echo $(TARGET)
	$(CPP) -c -o $@  $(INC) $<

Added fltk-1.3/ANNOUNCEMENT.





>
>
1
2
The initial FLTK 1.3 is based on the final 1.1.8.

Added fltk-1.3/CHANGES.























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
CHANGES IN FLTK 1.3.0

	- Added template to generate new projects with Xcode.
	- Managing all Widget flags in a single location now (STR #2161)
	- Fixed all color related call to Fl_Color type (STR #2208)
	- File chooser preview now recognizes utf8 encoded 
	  text files (STR #2218)
	- Empty functions in Fluid no longer create an
	  implementation (STR #2259)
	- Fixed Fluid dependency on X11 (STR #2261)
	- Updated the bundled libpng to v1.2.40 (released Sep. 10, 2009)
	- Fixed Fl_Choice contrast with light-on-dark settings (STR #2219)
	- Fixed X server "lock", if a modal dialog window is opened
	  while a menu is active (STR #1986)
	- Updated mirror sites in documentation (STR #2220)
	- Setting a default font for Xft (STR #2216)
	- Temporarily limited builds to 32-bit on OX S to stay
	  compatible to Snow Leopard
	- Fixed Windows compile bug with "#define USE_COLORMAP 0"
	  (STR #2241)
	- Fixed glibc 2.10 compiler problems (Fedora 11 and others)
	  with scandir() and strchr() (STR #2222)
	- Corrected const methods of Fl_Text_{Buffer|Display|Selection}
	  to be declared const, corrected an Fl_Text_Buffer attrib. typo
	- Fixed OpenGL shared context handling (STR #2135)
	- Fixed gray-scale images with alpha channel (STR #2105)
	- Fixed unexpected shortcut behavior for Win32 (STR #2199)
	- Fixed documentation for Fl_Progress (STR #2209)
	- Fluid printing used wrong colors under Windows (STR #2195)
	- Updated documentation for Fl_Input_
	- Fixed fl_draw_image to obey the alpha channel, hoping that 
	  this has no adverse effect on existing software (OS X only)
	- Added OS X cursor control to Fl_Input (STR #2169)
	- Fix for multiple popups, when dragging and calling fl_alert()
	  and friends from the callback (STR #2159)
	- Avoiding crashes for recursive common dialogs (this does not 
	  fix the issue at hand yet) (STR #1986, 2150)
	- Fixed control key keycodes with modifiers on OS X
	- Added menu shortcut alignment for OS X
	- Fixed bad system menu hadling in OS X (STR #2153)
	- Fixed File Input mouse pointer dragging (STR #2181)
	- Added alternative text input awareness on OS X 
	- Fixed 'del' keycode on OS X (must be verified for all keyboards)
	- Fixed OS X support for sending and receiving dnd data as utf8
	- Added drop box to utf8 test that will show the utf8 encoding
	  for the first dropped character
	- Restructured the unittest application
	- Fl_Preferences.H now doesn't include windows.h any more
	  (Windows only, STR #2173).
	- Fl_Window::draw() now doesn't reset its x/y-coordinates to 0
	  anymore before drawing itself and its children.
	- All draw() methods of widgets are now protected (STR #2142).
	- The new configure option --enable-x11 (lowercase 'x') enables
	  Cygwin builds under Windows (with --enable-cygwin) to use X11
	  instead of GDI drawing (STR #2147, #2183) and is ignored otherwise.
	- Added Fl_Scroll::bbox() documentation (STR #1893)
	- Removed an XForms compatibility "feature" that prevented the down
	  array of Fl_Menu_Button from drawing (STR #2141).
	- New class Fl_Widget_Tracker to simplify safe handling of widget
	  deletion in callbacks. This is used in Fl_Widget::do_callback()
	  to prevent accessing widgets after deletion in the callback.
	- Fl_Help_View handles HTML2 font color specification (STR #890) 
	- Copyright dates are now updated to 2009 (STR #2036)
	- Copy/Paste operations should now work as expected, 
          with utf8,16 support and fltk1.1 compatibility. (STR #2104,2121).
	- Widgets now remove themselves from their parent group (if any),
	  when destroyed (STR #1894)
	- Added flexible gap size for text buffer (STR #2046)
	- Fixed static linking of image libraries (STR #1962)
	- Fixed fl_set_spot() for Windows (STR #2101)
	- Added sorting to Fl_Browser_ (STR #2113)
	- Added utf8 support for OS X copy and paste
	- Improved handling of composed keys in OS X 10.5 and up
	- Fixed callback would not be called when shortcut was used with
          radio and toggle buttons in default FL_RELEASE mode.
	- Fixed a problem with TrackMouseEvent() (Windows only) that would
	  generate wrong FL_LEAVE events with subwindows. TrackMouseEvent
	  is now enabled by default (it was disabled for GNU compilers).
	  It can be disabled by defining NO_TRACK_MOUSE.
	  Improved test/subwindow.cxx (STR #2079)
	- Fixed documentation (added missing COMCTRL32.LIB dependency)
	- Fixed menu position close to screen border (STR #2057)
	- Improved stability of fl_read_image (STR #2021)
	- Fixed adding an idle handler during
	  a draw() call (STR #1950)
	- Fl_Group::clip_children() is now public (STR #2017)
	- Added clarification to Fl_GL_Window mode
	  function (STR #1945)
	- Fixed Fluid textcolor output (STR #1992)
	- Fixed wrong default value of Fl_Spinner in
	  Fluid (STR #1991)
	- Fixed first modifier key event (STR #1952)
	- Fl_Group and Fl_Scroll now resize themselves before
	  resizing their children (STR #2032)
	- "fltk-config --post foo" now creates an application
	  bundle rather than attaching a resource fork.
	- Added scroll_to(int,int) to Fl_Scroll, replacing
	  position(int,int) which now behaves as it should (STR #1303)
	- Fixed Fl_Scroll inside Fl_Scroll (STR #265)
	- Hardcoded 1.1 references in src/Makefile to 1.3 (STR #1922)
	- Changed font index to 32 bit
	- Changed font size to 32 bit
        - Changed widget coordinates to 32 bit
        - Added support for shortcuts for Fl_Input_,
	  Fl_Value_Input, and Fl_Text_Display derived
          widgets (STR #1770)
        - Initial setup (STR #1904)
	- winsock dll is dynamically loaded and by default 
	  ws2_32.dll, use of winsock1 is still possible by defining 
	  USE_WSOCK1 at compile time.
	- Cairo support: added --enable-cairo and --enable-cairoext 
          configure options.
	- visualc(6) & vc2005 devenv's are in the ide subdirectory
	- hide() and show() methods are now virtual from Fl_Widget,
	  was only virtual since Fl_Window derived classes before.
	  So now widget->hide() will work if widget is a window.

CHANGES IN FLTK 1.1.9

	- Improved color contrast in secondary selection blocks
	  of Fl_Text_Display (STR #1917)
	- Fixed regression in callback handling (STR #1918)
	- Fixed wrong relative path when absolute path has a 
	  trailing slash in fl_filename_relative (STR #1920)
	- Fixed multiple selction of files and directories in
	  Fl_File_Chooser (STR #1913)
	- Fixed MSWindows crash when selecting umlauts
	  in Fl_Help_View (STR #1912)


CHANGES IN FLTK 1.1.8

	- Documentation fixes  (STR #1454, STR #1455, STR #1456,
	  STR #1457, STR #1458, STR #1460, STR #1481, STR #1578,
	  STR #1639, STR #1645, STR #1644, STR #1792, STR #1793,
	  STR #1742, STR #1777, STR #1794, STR #1827, STR #1843,
	  STR #1796, STR #1815, STR #1726, STR #1753, STR #1855,
	  STR #1862, STR #1867, STR #1874, STR #1888)
	- Fixed library path in Makefile (STR #1885)
	- Fixed image read for partial regions on X11 
	  (STR #1716)
	- Fixed KDE/Gnome icon paths (STR #1795)
	- Fixed Tab key to wrap around menu bars (STR #1877)
	- Fixed possible timer leak in Scrollbar (STR #1880)
	- Added documentation about the potential limitations
	  of Fl::grab on newer operating systems (STR #1747)
	- Fixed lockout when mixing popups and alerts
	  (STR # 1869)
	- Fixed recursion crash in event handling (STR #1873)
	- Fixed missing return code in 'fltk-config' (STR #1875)
	- Fixed inconsistencies with CHANGED flags (STR #1719)
	- Fixed message sent to hidden widgets (STR #1849)
	- Fixed width calculation in Fl_Help_View (STR #1868)
	- Fixed offset bug in OS X pixmap code (STR #1856)
	- Fixed potential buffer overrun 
	  in Fl_Preferences (STR #1853)
	- Fixed method attributes in consecutive class
	  declarations in FLUID (STR #1741)
	- FLUID checks for seperately declared callbacks to 
	  avoid a bogus "extern" declaration (STR #1776)
	- Added "protected" class memebrs in FLUID
	- Double-clicking a widget in a FLUID layout will show 
	  the item in the widget browser
	- Fixed color highlighting in Text_Display
	- Fixed 16 bit PNM image support (STR #1847)
	- Fixed exposure event on zero size windows (STR #1824)
	- Fixed overlay offset for OS X Quartz (STR #1729)
	- gl_font() support for Xft+X11 (STR #1809)
	- Fl_Gl_Window::mode() needed to hide and show the window
	  when toggling stereo mode (STR #1846)
	- Fl_Gl_Window::show() did not work reliably on Mac OS X
	  (STR #1707)
	- Added Fl_Group::clip_children() methods to support
	  automatic clipping of child widget drawing (STR #1844)
	- Fl_Browser_ and friends now support FL_WHEN_ENTER_KEY
	  for both Enter/Return and double-clicks (STR #1818)
	- Fl_Help_View did not release the images it used (STR
	  #1817)
	- Shared libraries would not build on 64-bit Linux
	  systems with an existing non-PIC FLTK installation
	  (STR #1791)
	- Fl_Browser::hide() and Fl_Browser::show() did not
	  correctly update the scrollbar (STR #1724)
	- The configure script now shows a summry of the
	  configuration results (STR #1810)
	- "fltk-config --use-* --libs" did not list all of the
	  dependent libraries (STR #1799)
	- Hiding a nested window on WIN32 caused 100% CPU (STR #1748)
	- Changing the window size in FLUID would not mark the 
	  project as modified (STR #1751)
	- Fixed fl_filename_isdir for "/"-path (STR #1761)
	- Fixed Fl_Chart drawing (STR #1756)
	- Fixed mapping of subwindows with unmapped parent
	  windows (STR #1706)
	- Fixed rendering of grayscale images with alpha
	  channel (STR #1703)
	- Fixed occasional incomplete refresh (STR #1681)
	- Improved fl_down, fl_frame, added fl_box (STR #1678)
	- Fixed selection of submenu items in 
	  input_choice (STR #1676)
	- Fixed calculation of stride for image scaling and
	  color manipulation (STR #1673)
	- Made -O3 the default optimization on Cygwin/Mingw since
	  -Os currently creates bad code (STR #1656)
	- OSF/Tru64 now uses 'install-sh' instead of 'install' to
	  accomodate for a missing '-d' option (STR #1632)
	- New option in Fluid project settings to translate all
	  shortcut modifiers from FL_META or FL_CTRL to FL_COMMAND
	- Made icon size fixed (50x50) in fl_message etc. (STR #1626)
	- Fixed selection of first word in Fl_Help_View
	- Fixed endless loop in Fl_Text_Display (STR #1655)
	- Allowing shortcuts in Tabs (STR #1652)
	- Fixed Makefile "make clean" (STR #1642,
	  STR #1643, STR #1641)
	- The sample RPM spec file now enables large file support
	  and threading support (STR #1603)
	- Changed minimum contrast between background and text to 
	  99 and added more weight to the blue component to improve
	  readability for certain color combinations (STR #1625)
	- Fixed VCNet OpenGL project file (STR #1617)
	- Fixed scrolling of clipped areas in MSWindows (STR
	  #1601)
	- Fixed clipping in OS X Quartz offscreen buffers (STR
	  #1595)
	- Now flush file chooser preferences after every change to
	  avoid data loss (STR #1609)
	- The Fl_File_Chooser constructor now saves and restores the
	  current group (STR #1611)
	- Added Fl::awake(fn*,void*) to set a handler for thread
	  messages (STR #1536)
	- Added "mute sound" option to Sudoku game.
	- Updated the bundled zlib to v1.2.3.
	- Updated the bundled libpng to v1.2.16.
	- "make install" now uses the install command (or the
	  included install-sh script) to copy files to the
	  install directories, to ensure that permissions are
	  correct.
	- Fixed DLL generation via MingW/Cygwin (STR #1546)
	- FLUID incorrectly opened the display when generating
	  source code for Fl_Help_View widgets (STR #1318)
	- Fl_Double_Window did not always show the scheme
	  background image.
	- Fixed first window behavior in OS X (STR #1548)
	- Fixed calculation of character widths for OS X
	  Quartz rendering (no STR)
	- Fixed OS X mouse click handling (STR #1504)
	- Added missing GLUT functions so that FLTK can be used
	  as a fairly complete C++ replacement for the original
	  GLUT library (STR #1522)
	- Fl::awake() could block on X11 and OSX (STR #1537)
	- Updated recursive mutex code to run on platforms other
	  than Linux and to do a run-time check to determine
	  whether they are supported by the kernel (STR #1575)
	- WIN32 did check callbacks after the event processing instead of
	  before as documented (STR #1535)
	- Fl_File_Chooser now hides the window before doing a callback
	  when the user clicks on the OK button (STR #1565)
	- Fixed indentation of nested HTML elements (STR #1549)
	- Made layout of Fl_Help_Dialog consistent with other
	  help windows and web browsers.
	- Improved GTK+ schemed round box (STR #1531)
	- Fluid avoids writing unsupported combinations of the 
	  "when()" flags (STR #1501)
	- Fl_Browser_ would allow keyboard callbacks even though
	  "when()" was set to "never" (STR #1501)
	- Added automated little helpers to Sudoku 
	- Added example code for Wizard with the
	  Tabs demo (STR #1564)
	- Optimized Fl_Tabs drawing for speed (STR #1520)
	- OS X resource fork now obsolete (STR #1453)
	- Added chapter 10 about multithreading (STR #1532, 
	  1533)
	- OS X system menu bar top level attribute support 
	  improved (STR #1505)
	- Fixed Quartz image drawing bug (STR #1438)
	- Fixed Quartz fl_read_image
	- Overlay drawing is now avoiding XOR mode (STR #1438) 
	- Fixed Scroll crash in Fluid Live Mode (STR #1524) 
	- Fixed mousewheel event propagation (STR #1521) 
	- Fixed drawing issues of a tile in a scroll (STR #1507) 
	- Fixed dismissing buttons in menu bars (STR #1494) 
	- Making a child group visible in a Fl_Tabs or Fl_Wizard
	  group now shows that tab or pane.
	- Added fl_open_uri() function as proposed on
	  fltk.development.
	- Added Fl::has_check() which previously was prototyped
	  and documented, but not implemented (STR #1542)
	- Enabled Fl::add_check() on OS X (STR #1534)
	- Documented tooltip inheritance (STR #1467)
	- Better event mouse handling fixing detached menus and
	  sticky tooltips (STR #1463, STR #449)
	- Added Fl::scrollbar_size() methods that are used by all
	  of the scrollbar-using widgets (STR #1500)
	- fl_read_image() was broken on Intel-based Macs (STR
	  #1490)
	- Fl_Progress was using the wrong width to calculate 
	  progress (STR #1492)
	- Fl::x(), Fl::y(), Fl::w(), and Fl::h() did not report
	  the desktop work area on X11 (STR #1482)
	- Shortcut events could be sent to the wrong window (STR
	  #1451)
	- Fl_Spinner did not handle the arrow keys properly (STR
	  #1476)
	- Fl_File_Browser did not calculate the width of
	  directory items correctly (STR #1469, STR #1470)
	- Fl_Pack incorrectly started widgets at an offset of 1/2
	  the spacing value.
	- FLUID did not generate correct window class code if
	  the class name was not a standard FLTK window class.
	- FLUID incorrectly included <FL/Fl_classname.H> for
	  widget classes that were not subclassed from a standard
	  FLTK widget class.
	- The demo master test program now supports scheme
	  selection and all demos use it (STR #1459)
	- fl_arc() and fl_pie() did not draw properly on WIN32
	  when the start and end points were identical (STR
	  #1461)
	- Fl_Input and Fl_Text_Editor now hide the mouse pointer
	  when typing into them (STR #1466)
	- Implemented alpha blending for Quartz, WIN32, and X11
	- Check buttons did not redraw properly with box() set to
	  FL_NO_BOX (STR #1440)
	- Added the Bluecurve-inspired scheme "gtk+".
	- Updated documentation (STR #1420, STR #1421)
	- Fixed font caching issue (STR #1415)
	- Fixed crash in fl_file_chooser (STR #1410)
	- Fixed Fluid hotspot bug (STR #1416)
	- Fixed image copy code (STR #1412)
	- Fixed latin-to-roman text conversion (STR #1411)
	- Fixed Cygwin timeout for "select" calls (STR #1151)
	- Improved Mac OS X subwindow handling (STR #1402)
	- Fixed more inconsistencies between fl_draw and
	  fl_measure (STR #1408)
	- Fixed fl_measure which mistook a trailing '@@' for a
	  symbol (STR #1406)
	- Fixed GLUT behavior on window creation (STR #1403)
	- Fixed OS X bug that would hide tooltips before they
	  were shown (STR #1392)
	- Fixed Fl_Tabs tooltip reappearing (STR #1324)
	- Added a new demo game called "Block Attack!"
	- Updated the Sudoku game to show a notice about Hard and
	  Impossible puzzles having multiple solutions which are
	  not a bug or error (STR #1361)
	- Fixed filechooser to behave as documented when file
	  pattern changes (STR #1359)
	- Completed the global function index and added an
	  alphabetical list of all methods (STR #1319)
	- Avoiding problems with some platforms that don't 
	  implement hypot() (STR #1366)
	- Fixed floating point value formatting for Fl_Spinner
	  (STR #1331)
	- Fixed Fl_Positioner callback when released (STR #1387)
	- Fixed WIN32 zero size window issue (STR #1387)
	- Fixed Sudoku window positioning (STR #1398)
	- Fluid Code Declarations can now handle C++ style
	  comments (STR #1383)
	- Fixed uninitialized data in OS X and WIN32 timeout
	  functions (STR #1374).
	- Fixed speed issues when measuring text on OS X with
	  Quartz (STR #1386).
	- Fixed focus issues on OS X (STR #1377)
	- Optional precision argument when storing floats or 
	  doubles in a Preferences file (STR #1381)
	- Fixed callback not called when using arrow keys in
	  Fl_Slider (STR #1333)
	- Changing the shortcut of a widget in fluid now marks the
	  document as dirty (STR #1382)
	- Fl_Text_Editor now correctly handles middle mouse
	  clicks (STR #1384)
	- Added some GLUT4 functions (STR #1370)
	- Added "context_changed()" function for OpenGL windows
	  which allows efficient texture loading (STR #1372)
	- Added missing "const" to GLUT call (STR #1371)
	- Fixed stray FL_RELEASE events after clicking system
	  areas on OS X (STR #1376)
	- FLUID now only writes definitions of "o" and "w"
	  variables as needed, reducing the number of "variable
	  is shadowed" warnings from GCC.
	- Added access to Xft font pointer (STR #1328)
	- Fixed endianness in OS X mouse cursor graphics (STR
	  #1348)
	- Fixed crash on mixed use of keyboard and mouse for
	  Fl_Menu_Button (STR #1356)
	- Fixed Fl_Window::visible() and shown() for OS X
	  (STR #1341)
	- Fixed Fl_Window::copy_label() losing copy (STR #1332)
	- Documentation fixes (STR #1336, STR #1329, STR #1339,
	  STR #1340)
	- Added support for floating point Fl_Spinner in the
	  API, documentation, and Fluid (STR #1331)
	- Repeat button now cancels timeout if it should get 
	  deactivated during a callback (STR #1330)
	- Added support for assigning Fl_Menu_Items to array 
	  variables in Fluid (STR #1280)
	- Added --with-archflags configure option to allow
	  passing of specific architecture-selection options to
	  the compiler and linker.
	- Fixed WIN32 window stacking bug (STR #1296)
	- Fixed wrong code generated by FLUID for Scrollbars (STR
	  #1287)
	- Loading a file would not update the Widget Properties
	  dialog in FLUID (STR #1326)
	- Fixed key compose sequences for shifted keys (STR
	  #1194)
	- Added text selection and copy to Fl_Help_View.
	- Fixed position of popup menu titles (STR #1322)
	- Showing any window will disable the current tooltip
	  so it won't pop over menus (STR #1321)
	- Updated documentation to reflect limitation of 
	  Fl::delete_widget() (STR #1306)
	- Fixed line wrapping in Fl_Text_Display (STR #1227)
	- New function Fl::event_original_key() returns key code
	  before NumLock handling.
	- Many OS X Quartz fixes (STR #1310, etc.)
	- Fixed shortcut and default focus for message dialogs
	  (STR #1298)
	- Fixed focus issues (STR #1286, STR #1289, STR #1296)
	- Fixed window resizing in OS X (STR #1297)
	- In FLUID, declarations starting with the keyword
	  'typedef', 'class', or 'struct' are now treated
	  correctly if inside a class (STR #1283)
	- Tabs now show the correct tooltip (STR #1282)
	- Included fltk.spec in configure.in (STR #1274)
	- Fixed insufficiently invalidated cache 
	  in Fl_Browser (STR #1265)
	- Attempt to fix multi monitor issues (STR #1153)
	- Fixed warnings when compiling w/Cygwin (STR #1152)
	- Fixed missing reset of flag in FLUID (STR #1187)
	- Fixed maximizing in OS X (STR #1221)
	- Fixed 'make distclean' to remove binaries inside
	  MacOS app packages (STR #1169)
	- FLUID Code Viewer is now truly a viewer, not a text
	  editor because edited text can not be saved.
	- Fl_Spinner is now fully supported by FLUID (STR #1158)
	- Fixed usage of deleted object after menu pulldown
	  (STR #1162)
	- Calling fl_font(0, 0) under Xft would access a NULL
	  pointer (STR #1205)
	- Setting a new value in Fl_Input_ wil now actually move
	  cursor to the end of the input field as documented
	  (STR #1161)
	- FLUID crashed on WIN32 with international characters
	  (STR #1176)
	- Fl_Check_Browser did not allow the user to toggle the
	  check boxes (STR #1232)
	- Fl_Help_View crashed on WIN32 with international
	  characters (STR #1228)
	- Fl::run() no longer clears resources on WIN32 (STR
	  #1231)
	- Fl::add_timeout() leaked resources on OSX (STR #1233)
	- Accented characters could not be entered on OSX (STR
	  #1195)
	- The caret key lookup was missing for OS X
	- FLUID didn't handle loading .fl files with
	  international characters properly with all compilers
	  (STR #1150)
	- Fl_Spinner's minimum() and maximum() "get" methods were
	  misspelled (STR #1146)
	- The largefile support changes in 1.1.7 broke binary
	  compability for fl_filename_list(); you must now use
	  "--enable-largefile" when configuring to get large file
	  support, and the large file support definitions are
	  added to the output of "fltk-config --cflags" (STR
	  #1159)


CHANGES IN FLTK 1.1.7

	- Documentation fixes (STR #571, STR #648, STR #692, STR
	  #730, STR #744, STR #745, STR #931, STR #942, STR #960,
	  STR #969)
	- Various menu widget fixes (STR #1140, STR #1143, STR
	  #1144)
	- The threads demo would display negative prime numbers
	  on MacOS X; this appears to be a MacOS X bug, but we
	  added a workaround to "fix" this (STR #1138)
	- Fl::dnd() now sets the content type of the drag to
	  "text/uri-list" when it sees the dragged text is
	  composed of URIs.
	- Fixed keyboard shortcut handling in FLUID and shortcut
	  labeling in FLTK (STR #1129)
	- Fixed include path for CMake build (STR #1123)
	- Fixed unnecessary delay in WIN32 event handling 
	  (STR #1104)
	- Fixed handling of Ctrl-C in Fl_Text_Display (STR #1122)
	- OS X Quartz version now draw a nice resize control (STR
	  #1099)
	- FLTK now enables large file support when available (STR
	  #1087)
	- Fl_Clock_Output depended on a time value that was the
	  same as an unsigned long, which is incorrect for WIN64
	  and VC++ 2005 (STR #1079)
	- Fl_Text_Display::wrap_mode() would crash if no buffer
	  was associated with the widget (STR #1069)
	- Updated the default label and text colors of all widgets
	  to use FL_FOREGROUND_COLOR instead of FL_BLACK (STR
	  #1052)
	- Fl::set_fonts() now works with Xft (STR #1012)
	- Fl_Value_Input now uses the screen-absolute position
	  instead of the window-relative position when dragging
	  the value; this avoids some jumping conditions (STR
	  #1037)
	- Menus now pop up fully inside the screen if possible
	  (STR #973)
	- Fixed illegal access in Preferences (STR #1025)
	- Fixed x-offset problem in Help_Widget (STR #998)
	- Clipboard will persist if owner window is hidden (STR
	  #1019)
	- Fixed handling of Win32 Device Contexts (STR #1007)
	- Fixed C++ style comments in C files (STR #997)
	- Fixed signedness of scanf() argument (STR #996)
	- Fixed cross-compiling problem (STR #995).
	- FLUID now knows if a static callback is already
	  declared in a class and won't declare it 'extern' (STR
	  #776)
	- Some actions in FLUID would not set the  "changed" flag
	  (STR #984, STR #999)
	- fl_filename_list now always appends a forward slash to
	  directory names (STR #874)
	- Multiline Input will update right if a space character is
	  inserted in word wrap mode (STR #981)
	- FLUID group labels redraw correctly (STR #959)
	- FLUID now updates color of Fl_Tabs children (STR #979)
	- FLUID now supports 'size_range()' (STR #851)
	- FLUID selection boxes now synchronised (STR #964)
	- fl_filename_list() now recognizes pathnames without
	  trailing  slash as directions (STR #854)
	- Fl_Text_Display now auto-scrolls in all 
	  directions (STR #915)
	- Borderless windows will not show in the taskbar anymore
	  on X11 (STR #933)
	- Fixed event_text() field on FL_DND_* event on 
	  OS X and WIN32 (STR #968)
	- The fltk-config utility now supports "--cc" and "--cxx"
	  options to get the C and C++ compilers that were used
	  to compile FLTK (STR #868)
	- Fl_Valuator-derived widgets could show more digits than
	  were necessary (STR #971)
	- Fl_GIF_Image did not handle images with an incorrect
	  number of data bits (STR #914)
	- Fixed some plastic drawing artifacts (STR #906)
	- Fl_Help_View now draws the box outside the scrollbars,
	  like the other scrollable widgets (STR #871)
	- The fltk-config script now handles invocation via a
	  symlink (STR #869)
	- Updated WIN32 cut/paste code to consistently handle DOS
	  text (STR #961)
	- Added shared library support for Cygwin and MingW (STR
	  #893)
	- Fl_File_Chooser did not implement the user_data()
	  methods (STR #970)
	- Compilation could fail if a previous installation of
	  FLTK was in the same (non-standard) directory as an
	  image library (STR #926)
	- Fixed OSX compilation problems with non-HFS filesystems
	  (STR #972)
	- Problems with CMake on MinGW have been solved, thanks
	  to Mr. "fltk.x0", who submitted the patch. (STR #863)
	- Fixed memory leak in Fl_Check_Browser reported by
	  "miguel2i". (STR #967)
	- Fl_File_Input could draw in the wrong window (STR #958)
	- WIN32: Internal WM_PAINT message now ignored (STR #831)
	- Added Windows support for Fl_Window::xclass() (STR #848)
	- Floating point input field allows characters from
	  current locale (STR #903)
	- Fixed integration of Fl_Input_Choice into FLUID (STR
	  #879)
	- New windows touching the right screen border would be 
	  positioned all the way to the left (STR #898)
	- Made pie drawing size for WIN32 and OS X the same as
	  X11 (STR #905)
	- Fixed OS X issue with OpenGL windows inside of Tabs
	  (STR #602)
	- FLUID Code Editor would occasionally not draw the last
	  character in the buffer (STR #798)
	- FLUID Declaration private flag fixed (STR #799)
	- FLUID overlay now shows a seperate bounding box of
	  selected items with correct handles and a dotted
	  boundig box for all  labels (STR #790)
	- Fixed left overhang of large chracters in Fl_Input_
	  (STR #941)
	- Fixed button resizing in File Chooser (STR #884)
	- Fixed FLUID redraw issue (STR #912)
	- Added 32bit BMP Image file format support (STR #918)
	- Value Sliders would not receive focus when clicked on
	  (STR #911)
	- Added redraw of some widgets to show focus change (STR
	  #910)
	- Fl::set_font would not clear 'pretty' name (STR #902)
	- Fixed unescaped '@' in fonts demo (STR #867)
	- FLUID should not open the Display connection anymore if
	  creating code only (STR #904)
	- Improved hidden copy / ctor implementation (STR #860)
	- Increased matrix stack depth and added over/underflow
	  error (STR #924)
	- Reverted Mac Carbon Clipping simplification that broke
	  subwindow clipping (STR #908, SVN r4386)
	- Fixed bitmap scaling code
	- Fixed tiny memory leak (STR #878)
	- Fixed hang on corrupt jpeg (STR #915)
	- Fixed static allocation of font buffer in demo (STR #909)
	- Added symbols 'refresh', 'reload', 'undo', and 'redo'.
	- Fixed focus loss on Fl_Window:resize()
	- Fl::delete_widget would hang fl_wait after deleting the
	  window (STR #679)
	- Fl::paste would sometimes not recoginze external 
	  changes of the clipboard (STR #722)
	- Clipping fixes for OSX
	- Removed attempt to find items via 
	  Fl_Menu_::find_item() in linked submenus
	- FLUID interactive window resizing fixes (STR #873, 791)
	- FLUID panel resize and alignment fixes (STR #891)
	- Fl_Window::show(argc, argv) now sets the scheme before
	  showing the window; this should eliminate any
	  flickering between the standard and plastic schemes on
	  startup (STR #886)
	- Selected tabs are now drawn slightly larger than
	  unselected tabs so they stand out more (STR #882)
	- Round Plastic boxes now draw round (STR #841)
	- FL_PLASTIC_DOWN_BOX drew with artifacts (STR #852)
	- Changed initializations on WIN32 (STR #862)
	- Fl_Preferences::getUserdataPath() didn't work for
	  sub-groups (STR #872)
	- Fixed some redraw issues on Windows XP.
	- FLUID didn't set the initial size of widgets properly
	  (STR #850)
	- Fl_Tabs would steal focus away from its children on a
	  window focus change (STR #870)
	- filename_relative() now converts the current directory
	  to forward slashes as needed on WIN32 (STR #816)
	- Fl_File_Chooser::value() and ::directory() now handle
	  paths with backslashes on WIN32 (STR #811)
	- Added the standard rgb.txt file from X11 to the test
	  directory, allowing all platforms to try the colbrowser
	  demo (STR #843)
	- Resizing of OpenGL subwindows was broken on OSX (STR #804)
	- The fltk-config script now supports running from a
	  source directory (STR #840)
	- Fl_Browser_ didn't update the position properly when an
	  item was deleted (STR #839)
	- fl_contrast() now compares the luminosity of each color
	  (STR #837)
	- Fl_Input_ crashed on some platforms when wrapping
	  international text characters (STR #836)
	- Fixed some BMP images loading bugs (STR #825)
	- Fl_File_Chooser now returns directory names with a
	  trailing slash to avoid problems with relative
	  filenames (STR #819)
	- Fl_Help_View now supports the FONT and U elements (STR
	  #815)
	- OpenGL windows that were completely off-screen caused
	  problems with some graphics cards on WIN32 (STR #831)
	- Multiple screen support didn't work on Windows NT and
	  95 (STR #821)
	- Fl_Scrollbar didn't compute the correct knob size when
	  using the "nice" types (STR #845)
	- fl_draw() would segfault on WIN32 if no font was set;
	  it now uses the default font (STR #828)
	- Fl_Browser_ was calling the callback multiple times for
	  a single selection change with FL_WHEN_CHANGED (STR
	  #834)
	- Added "filenew", "fileopen", "filesave", "filesaveas",
	  and "fileprint" symbols with standard toolbar
	  symbology.
	- Updated Fl_Tabs to check the contrast of the label
	  color against the tab background, and to highlight the
	  top 5 lines of the tab pane with the selection color so
	  that selected tabs stand out more.
	- The example programs can now compile separate from the
	  FLTK source distribution (STR #809)
	- The example programs are now installed with the
	  documentation (STR #809)
	- Fixed the drawing of the Fl_Browser_ selection box (STR
	  #786)
	- Dropped Codewarrier project files and support.
	- The FLTK string functions are now compiled in on all
	  systems (STR #774)
	- Fixed symbol demo label bug (STR #777)
	- Fixed position of menu titles (STR #795)
	- Added missing Fl_Window::copy_label() method.
	- Fixed wrong tooltip in FLUID (STR #784)
	- Added zlib path to FLUID (STR #783)
	- Menus and other pop-up windows now obey screen
	  boundaries on multi-screen displays (STR #781)
	- Fl_Chart would draw outside its bounding box (STR #780)
	- Added Fl::screen_count() and Fl::screen_xywh() APIs to
	  support multi-screen displays.
	- FLUID now supports direct creation of widget classes.
	- Fl_File_Chooser now correctly handles multiple
	  selections that are a mix of files and directories.
	- Fl_File_Chooser no longer resets the type() when
	  choosing a single file, and it now works when selecting
	  multiple directories (STR #747)
	- Fl_File_Icon::load_system_icons() now only loads 16x16
	  and 32x32 icon images to improve startup performance.
	- Pressing Enter in the file chooser when selecting a
	  directory will choose that directory if it is currently
	  shown (STR #746)
	- Added a fl_file_chooser_ok_label() function to set the
	  "OK" button label for the fl_file_chooser() and
	  fl_dir_chooser() functions.
	- Added Fl_File_Chooser::ok_label() methods to set the
	  "OK" button label.
	- The fl_ask() function is now deprecated since it does
	  not conform to the FLTK Human Interface Guidelines.
	- The Fl_File_Chooser window now properly resizes its
	  controls (STR #766)
	- The Fl_Help_Dialog window now properly resizes its
	  controls (STR #768)
	- The Fl_File_Chooser favorites window is now resizable
	  (STR #770)
	- Now provide FL_PLASTIC_ROUND_UP/DOWN_BOX box types
	  which are used by the plastic scheme.
	- FLUID windows that are resized through the widget panel
	  now remain resizable by the window manager.
	- Increased the size of the background image used by
	  the plastic scheme to reduce the CPU load of redraws
	  (STR #769)
	- Fixed a syntax highlighting bug in the editor demo.
	- Fl_Progress now contrasts the label color with the bar
	  color, so labels will be readable at all times.
	- fl_read_image() didn't use the right red, green, and
	  blue masks on XFree86.
	- Fixed Quickdraw drawing of 3 and 4 sided polygons (STR
	  #765)
	- Fixed fl_message() code so that it does not get
	  accidentaly addded to the current group (STR #253)
	- FLUID now highlights code in the widget callback and
	  code editors.
	- FLUID now supports printing of windows.
	- Fixed inactive drawing of border, embossed, and
	  engraved box types.
	- Added Fl_Spinner widget (another combination of
	  existing widgets in a header file)
	- FLUID now provides support for UI templates.
	- fl_not_clipped() incorrectly used the current window
	  dimensions for gross clipping, which interfered with
	  off-screen rendering.
	- Fl_Window::draw() and Fl_Window::iconlabel() could leak
	  memory if copy_label() was used on the window.
	- fl_shortcut_label() now shows letter shortcuts in
	  uppercase, e.g. "Ctrl+N" instead of "Ctrl+n" to be
	  consistent with other toolkits.
	- FLUID now provides unlimited undo/redo support.
	- FLUID now provides an option to choose which scheme
	  (default, none, plastic) to display.
	- Fixed scheme background issue with windows in FLUID.
	- In FLUID, new widgets are now created with the ideal
	  size by default, and menu bars are positioned to use
	  the entire width of the window.
	- Added Layout/Widget Size submenu to select default
	  label and text size (Tiny, Small, and Normal).
	- Added Edit/Duplicate command to FLUID to duplicate the
	  current selection.
	- FLUID now tracks the current state of the widget bin
	  and overlays.
	- Now fill the widget image paths with relative
	  filenames.
	- Fixed frame drawing of Fl_Text_Display (STR #762)
	- Fl_Clock_Output::value() did not return the previously
	  set value (STR #748)
	- Added comment type to FLUID. This is useful for
	  generating copyright notices in the source and header
	  files.
	- Fl_Valuator would not format text output with decimal 
	  point when the step value was fractional, but above 1.
	- fl_filename_relative() didn't compare drive letters in
	  a case-insensitive way (STR #741)
	- Fixed menu item width calculations with symbols (STR
	  #740)
	- The keyboard shortcut handling code did not handle
	  8-bit characters properly (STR #731)
	- Fl_JPEG_Image could still crash an app with a corrupt
	  JPEG file (STR #739)
	- Using the layout alignment controls on a menu widget
	  would cause FLUID to crash (STR #742)
	- Added QNX bug workaround for menu handling (STR #704)
	- Added Greg Ercolano's simple Fl_Input_Choice widget
	  which is a combination of the Fl_Input and
	  Fl_Menu_Button widgets (STR #650)
	- Fl_Multiline_Input now scrolls the full height of the
	  widget instead of 5 lines when the user presses PageUp
	  or PageDown (STR #727)
	- CMake build fixes (STR #724)
	- Fl_Browser::swap() didn't handle redraws properly when
	  the swapped lines had different heights (STR #729)
	- FL_MOUSEWHEEL events are now sent first to the widget
	  under the mouse pointer and then to the first widget
	  which accepts them. This is similar to the way
	  shortcut events are handled and is consistent with the
	  way the mouse wheel is handled by other toolkits.
	- Fl::wait() could block on WIN32 if the window was
	  deleted via Fl::delete_widget() (STR #679)
	- Fl_Preferences::RootNode did not find the user's home
	  directory on some non-US versions of Windows (STR
	  #720)
	- Fl_Window::hide() didn't delete the current clipping
	  region on WIN32, causing a GDI resource leak in some
	  situations (STR #723)
	- Removed a few warnings when compiling on OS X
	- Fl_Menu now draws the arrow more like other toolkits
	  and 2.0 (STR #651)
	- Fixed a VC++ compiler error in Fl_JPEG_Image.cxx (STR
	  #676)
	- FL_SHADOW_BOX/FRAME drew outside of the bounding box
	  (STR #694)
	- Fl_Widget::copy_label(NULL) didn't work (STR #707)
	- Fl_Choice now allows click selection like
	  Fl_Menu_Button and Fl_Menubar (STR #706)
	- Updated cmake support (STR #645)
	- Fl_Check_Browser didn't draw properly when inactive
	  (STR #681)
	- Removed some redundant code in Fl_Group::handle() (STR
	  #669)
	- The file chooser didn't always deactivate the OK
	  button when necessary (STR #653)
	- Image drawing on OSX changed the current drawing
	  colors (STR #662)
	- Fixed some compiler errors on WIN32 (STR #647, STR
	  #726)
	- FLUID didn't update the widget panel X/Y/W/H values
	  when moving the selected window (STR #701)
	- FLUID didn't use the label type constant names for
	  menu items, causing them to be drawn using the normal
	  label type (STR #668)
	- Fl_File_Chooser was slow with large directories (STR
	  #654)
	- FLUID didn't add xclass() calls to windows (STR #718)
	- The X11 DND code did not correctly select a text
	  format for incoming data (STR #711)
	- Fixes to Fl_JPEG_Image error handler.
	- Fl_Menu::popup() and ::pulldown() would crash an
	  application if a callback created widgets before they
	  returned (STR #685)
	- Fl_Double_Window would cause a full redraw, even if
	  only small parts of the UI were changed on Mac OS X.
	- Fl_JPEG_Image did not correctly handle errors reported
	  by the JPEG library (STR #652)
	- Fl_Menu now draws sub-menu arrows like other toolkits
	  and FLTK 2.0 (STR #651)
	- Fixed a compiler warning in Fl_Window.H (STR #641)
	- Tooltips disabled shortcut processing (STR #643)
	- Fl::event_number() didn't always match the value sent
	  to the handle() method (STR #634)
	- Fl_Shared_Image::reload() didn't set the image_
	  pointer properly in all cases (STR #632)
	- Fl_Help_View::topline() incorrectly set the changed()
	  flag (STR #631)
	- Fl_Choice::value() now supports NULL or -1 to deselect
	  the current item (STR #637)
	- More VC++ 6 project file fixes (STR #638)
	- Added missing Watcom makefile in the test directory
	  (STR #636)
	- Fl_Text_Display::word_left would hang if the cursor
	  was at position 0 (STR #635)


CHANGES IN FLTK 1.1.6

	- Documentation updates (STR #552, STR #608)
	- Added the 2.0 Fl_Widget::copy_label() method to
	  allow FLTK 1.x applications to have their label
	  strings managed by FLTK (STR #630)
	- Added Fl::delete_widget() method to safely delete
	  widgets in callback methods (STR #629)
	- Fl_Widget::damage(uchar,int,int,int,int) didn't clip
	  the bounding box properly (STR #626)
	- Windows could appear on the wrong screen on OSX (STR
	  #628)
	- Fl_Double_Window produced an error on resize with X11
	- FLUID didn't display menu items using images properly
	  (STR #564)
	- Fl_Sys_Menu_Bar didn't compile on case-sensitive
	  file-systems (STR #622)
	- FLUID didn't handle default function parameters
	  properly (STR #579)
	- Moving or resizing widgets in FLUID didn't always
	  update the widget panel (STR #600)
	- FLTK windows could appear off-screen on X11 (STR #586)
	- The configure script did not support
	  --disable-localfoo to completely disable image file
	  support (STR #582)
	- The Visual C++ 6.0 project files still listed the old
	  JPEG, PNG, and ZLIB library names (STR #577)
	- Fixed the scandir() conditional code for HP-UX 11i
	  (STR #585)
	- Fl_Text_Display didn't support CTRL/CMD-A/C (STR #601)
	- Watcom fixes (STR #581, STR #584, STR #594, STR #595,
	  STR #623, STR #627)
	- Fixed library include order when building DSOs on
	  MacOS X (STR #596)
	- fl_xid() could cause a WIN32 application to crash (STR
	  #560, STR #576, STR #618)
	- Fl_Browser::remove_() removed the item from the list
	  before computing the item height, which caused
	  problems with some programs (STR #613)


CHANGES IN FLTK 1.1.5

	- Documentation updates (STR #568, STR #570)
	- Shortcuts were incorrectly underlined in multi-line
	  labels (STR #566)
	- More CMake updates (STR #499)
	- The Watcom C++ compiler needed a small change (STR
	  #567)
	- Added DESTDIR support and now remove all man pages for
	  the "uninstall" target (STR #545)
	- Fix PNG drawing on buggy WIN32 graphics cards (STR
	  #548)
	- The configure script didn't propagate the CPPFLAGS
	  environment variable (STR #549)
	- The numpad keys didn't work properly on WIN32 (STR
	  #502)
	- fl_input() and friends now set the input focus to the
	  text field when the dialog is shown (STR #553)
	- Fixed background color mixup when drawing Fl_Choice
	  menus (STR #544)
	- Fixed MingW makefiles (STR #550)
	- More VC++ project file tweaking (STR #559)
	- Fl_PNG_Image didn't use the png_set_trns_to_alpha
	  function when available (STR #547)
	- The FL_UNFOCUS event wasn't always sent when switching
	  tabs (STR #558)


CHANGES IN FLTK 1.1.5rc3

	- Documentation updates (STR #505, STR #513)
	- Updated PNG library source to 1.2.7.
	- Updated ZLIB library source to 1.2.1.
	- Fixed VC++ project file problems (STR #476, STR #478,
	  STR #520, STR #527, STR #537)
	- Now look for 8 bits of alpha when the developer has
	  requested FL_RGB8 (STR #541)
	- The last line in an Fl_Help_View widget was not
	  aligned properly (STR #536)
	- The "search" symbol looked like a Q (STR #536)
	- Changed Fl_Help_View::get_color() to use a lookup
	  table to avoid serious Borland C++ 5.5 compiler bugs
	  (STR #533)
	- Fixed Watcom compiler warnings with FL/Fl_Widget.H
	  (STR #540)
	- The image class copy() methods did not always make a
	  separate copy of the image data (STR #539)
	- Fixed an edge case in fl_old_shortcut() that could
	  cause it to read beyond then end of the shortcut
	  string (used for XForms named shortcuts)
	- Added (unsupported) CMake files (STR #499)
	- Tooltips would not reappear on the same widget, and
	  the initial tooltip delay was not used after a tooltip
	  was shown (STR #465)
	- Fixed a compile problem with the Linux 2.6 threading
	  support (STR #483)
	- Fixed problems with 2-byte Xpm files on 64-bit
	  platforms (STR #525)
	- FLTK didn't handle the ReparentNotify event on X11
	  (STR #524)
	- The old source file "fl_set_gray.cxx" is not needed
	  (STR #516)
	- Fl_Text_Display still called delete[] instead of
	  free() in one place (STR #503)
	- The symbol test program did not handle the @+ symbol
	  properly (STR #490)
	- Fl_File_Chooser didn't correctly call isprint() and
	  isspace() when checking to see if the current file was
	  text that can be previewed (STR #517)
	- FLUID didn't compile with Borland C++ due to a
	  compiler bug (STR #496)
	- Fl_Positioner did not handle reversed min and max
	  values (STR #510)
	- fl_descent(), fl_height(), and fl_width() would crash
	  a program if you didn't call fl_font() first; they now
	  return -1 if no font is set (STR #500)
	- Added test/unittests to verify pixel drawing and 
	  alignment across platforms
	- Fl_Menu_::find_item() didn't determine the menu path
	  properly (STR #481)
	- The build system now installs image library header
	  files in FL/images/filename.h so that FLTK programs
	  will use the same header files as the FLTK image
	  libraries.
	- The build system now creates image libraries named
	  "libfltk_name.a" instead of "libname.a" to avoid
	  clobbering an existing installed library (STR #480)


CHANGES IN FLTK 1.1.5rc2

	- Documentation updates (STR #365, STR #399, STR #407,
	  STR #412, STR #414, STR #452, STR #462)
	- Fl_Text_Display did not handle drawing of overlapping
	  text (italic next to plain, etc.) properly (STR #381)
	- All of the core widgets now consistently set changed()
	  before calling the callback function for a change in
	  value; this allows programs to check the changed()
	  state in a callback to see why they are being called
	  (STR #475)
	- Fl_File_Chooser did not handle some cases for filename
	  completion (STR #376)
	- Fl_Help_View didn't properly compute the default
	  maximum width of the page properly, resulting in
	  non-wrapped text in table cells (STR #464)
	- Fl_Text_Editor no longer tries to emulate the Emacs
	  CTRL-A shortcut to move to the first column, since
	  there is a key for that and the widget does not
	  emulate any other Emacs keys (STR #421)
	- Fl_File_Chooser always disabled the OK button when the
	  user pressed DELETE or BACKSPACE (STR #397)
	- Added Fl_Browser::swap() methods (STR #459)
	- Fl_Counter didn't use a thin down box for the text
	  field if the box type was set to FL_THIN_UP_BOX (STR
	  #467)
	- Fl_Help_View now resets the scrollbars if they go
	  outside the current view (STR #464)
	- fl_dir_chooser() did not show the previous selection
	  as documented (STR #443)
	- Fl_Text_Display used delete[] instead of free() in
	  some places (STR #466)
	- FLTK now includes copies of the PNG, JPEG, and ZLIB
	  libraries for platforms that do not have them (STR
	  #441)
	- The fltk-config script did not include the
	  "-mno-cygwin" option under CygWin (STR #434)
	- Fl_Help_View::find() did not check for a NULL value
	  (STR #442)
	- Added search symbol to the search field of
	  Fl_Help_Dialog (STR #417)
	- Added two new symbols, @search and @FLTK, which can be
	  used in labels.
	- MacOS X: fixed NumLock mixup, added support for
	  FL_Menu and FL_Delete keys on external (PC) keyboards
	  (STR #445)
	- Fl_File_Icon::draw() did not support drawing of complex
	  polygons in icon descriptions (STR #474)
	- The configure script now offers options for JPEG, PNG,
	  and ZLIB libraries (STR #416)
	- The first menu item in a list would not go invisible 
	  (STR #406)
	- Fl_Text_Buffer::replace() now range checks its input
	  (STR #385)
	- FLTK now builds with the current release of MinGW (STR
	  #325, STR #401, STR #402)
	- FLTK now honors the numlock key state (STR #369)
	- The Fl_Text_Display widget did not redraw selections
	  when focus changed (STR #390)
	- The plastic background image is now less contrasty
	  (STR #394)
	- Fl_Scroll now uses a full redraw when the scheme is
	  set to plastic and the box type is a frame (STR #205)
	- Fl_Window::resize() did not work properly with KDE 3.2
	  (STR #356)
	- FLTK didn't delete font bitmaps when the last OpenGL
	  window was deleted, preventing future text from
	  displaying (STR #310)
	- FLUID didn't include a full initialization record for
	  the trailing NULL menu items (STR #375)
	- Fl_Browser::item_width() did not properly handle
	  format modifiers (STR #372)
	- Fl_Browser::item_height() did not handle columns
	  properly (STR #371)
	- Fl_Gl_Window's on WIN32 now prefer accelerated pixel
	  formats over generic formats (STR #382)
	- Fl_Window::resize() did not work on some systems if
	  the window was not shown (STR #373)
	- FLUID did not write the user_data type if the
	  user_data field was empty (STR #374)
	- The value(const Fl_Menu_Item*) method was not
	  implemented for Fl_Choice (STR #366)
        - Fl_Pack didn't draw child widget labels the same way
          as Fl_Group, causing display problems (STR #360)
        - fl_read_image() didn't work when reading from an
          offscreen buffer with some X11 servers (STR #364)


CHANGES IN FLTK 1.1.5rc1

	- Documentation updates (STR #186, STR #245, STR #250,
	  STR #277, STR #281, STR #328, STR #338)
	- fl_scroll() did not handle scrolling from off-screen on
	  WIN32 (STR #315)
	- Fl_File_Chooser did not allow manual entry of a drive
	  letter (STR #339)
	- Fl_Menu now uses the boxtype to redraw the menu
	  background (STR #204)
	- Fl_Scroll now shows the background image when a framed
	  box type is used and the Fl_Scroll is a direct
	  decendent of a window (STR #205)
	- Added a new_directory_tooltip string pointer to allow
	  localization of the file chooser's new directory
	  button (STR #340)
	- Added Fl_Menu_::find_item() method (STR #316)
	- The Fl_Widget copy operator definitions were not
	  conditionally compiled properly (STR #329)
	- FLUID's Layout functionality did not move child
	  widgets when laying out group widgets (STR #319)
	- FLUID's Layout->Center In Group functionality did not
	  properly handle widgets that were children of a
	  Fl_Window widget (STR #318)
	- The Fl_Text_Display destructor did not remove the
	  predelete callback associated with the current buffer
	  (STR #332)
	- Fixed several bugs in the MacOS X Fl::add_fd()
	  handling (STR #333, STR #337)
	- The Fl_Text_Display widget did not display selections
	  set by the application (STR #322)
	- FLUID crashed if you did layout with a window widget
	  (STR #317)
	- Fl_Scroll::clear() didn't remove the child widget from
	  the Fl_Scroll widget (STR #327)
	- Fl_Value_Slider::draw_bg() didn't always apply the
	  clipping rectangle (STR #235)
	- fl_filename_relative() returned the wrong string if
	  the absolute pathname was equal to the current working
	  directory (STR #224)
	- Fl_Help_Dialog didn't correctly restore the scroll
	  position when going forward/back in the link history
	  if the file changed (STR #218)
	- glutGetModifiers() did not mask off extra state bits,
	  confusing some GLUT-based applications (STR #213)
	- Fixed mouse capture problems on MacOS X (STR #209, STR
	  #229)
	- Fl_Sys_Menu_Bar is now built into the library for
	  MacOS X (STR #229)
	- Fl_Menu_ now provides item_pathname() methods to get
	  the "pathname" of a menu item, e.g. "File/Quit" (STR
	  #283)
	- Fl_Text_Display now provides cursor_color() methods to
	  get and set the cursor color (STR #271)
	- Fl_Scroll didn't honor FL_NO_BOX (STR #305)
	- FLUID declaration blocks didn't support public/private
	  definitions (STR #301)
	- Fl_Preferences incorrectly created the preferences
	  directory before necessary (STR #247)
	- The WIN32 project files still defined the (obsolete)
	  FL_STATIC constant (STR #279)
	- Fl_Text_Display::buffer() did not support NULL values,
	  making it impossible to clean up text buffers from a
	  subclass (STR #295)
	- Fl_Text_Display did not support a NULL
	  unfinishedStyleCB function (STR #241)
	- Fl::background2() incorrectly marked the foreground
	  color as initialized (STR #255)
	- Fixed the X11 CTRL + "-" detection code to properly
	  track the state of the CTRL key (STR #264)
	- Fl_File_Icon::load_system_icons() didn't support KDE
	  3.x (STR #299)
	- WIN32's scandir() emulation did not allocate enough
	  memory for directory names (STR #263)
	- Fl::compose() did not handle special keys like
	  backspace properly (STR #293)
	- Fl_Choice did not clip its text when drawing using the
	  plastic scheme (STR #287)
	- Fl_Group incorrectly mapped the emacs CTRL keys to
	  keyboard navigation (STR #228)
	- Fl_File_Browser::load() didn't handle a NULL directory
	  name (STR #266)
	- 64-bit library fixes (STR #261)
	- The Fl_Valuator::format() function did not limit the
	  size of the number buffer (STR #268)
	- The keypad Enter key works as the normal Enter/Return
	  key in common widgets (STR #191)
	- Fixed some OS/2-specific build problems (STR #185, STR
	  #197)
	- Calling Fl_Text_Display::buffer() with the same buffer
	  would cause an application to lockup (STR #196)
	- Some of the widgets could crash an application if the
	  cursor was changed after a window was deleted (STR
	  #181)
	- The Fl_Gl_Window WIN32 pixel format code did not
	  choose the pixel format with the largest depth buffer
	  (STR #175)
	- The configure script didn't leave space between the
	  CFLAGS/CXXFLAGS and X_CFLAGS variables (STR #174)
	- The Fl_JPEG_Image and Fl_PNG_Image classes did not
	  trap errors from the corresponding image libraries
	  (STR #168)
	- Added "--with-links" configure option to control
	  whether symlinks are created for the FLTK header files
	  (STR #164)
	- Added new hoverdelay() to Fl_Tooltip to control how
	  quickly recent tooltips appear (STR #126)
	- FLUID now sets the size range when a window is shown.
	  This seems to be necessary with some window managers
	  (STR #166)


CHANGES IN FLTK 1.1.4

	- The fl_read_image() function was not implemented on
	  OSX (STR #161)
	- VC++ 7.1 didn't like how the copy operators were
	  disabled for the Fl_Widget class; now include inline
	  code which will never be used but makes VC++ happy
	  (STR #156)
	- Fixed an IRIX compile problem caused by a missing
	  #include (STR #157)
	- FLUID didn't write color/selection_color() calls using
	  the symbolic names when possible, nor did it cast
	  integer colors to Fl_Color (STR #146)
	- Fl_File_Chooser was very close for multiple file
	  selection in large directories (STR #140)
	- Fl_Text_Display/Editor did not disable the current
	  selection when focus was shifted to another widget
	  (STR #131)
	- Fl_Choice didn't use the normal focus box when the
	  plastic scheme was in use (STR #129)
	- Fl_Text_Editor didn't use selection_color()
	  consistently (STR #130)
	- The fltk_forms, fltk_gl, and fltk_images DSO's and
	  HP-UX shared libraries are now linked against the fltk
	  shared library to provide complete dependency
	  resolution (STR #118)
	- The configure.in file did not work with autoconf 2.57.
	- FLUID didn't redraw widgets when changing the X, Y, W,
	  or H values in the widget panel (STR #120)
	- Fl_Window::show(argc, argv) wasn't calling
	  Fl::get_system_colors() as documented (STR #119)
	- DSO (shared library) building wasn't quite right for
	  some platforms (STR #118)
	- OSX: some changes to make ProjectBuilder compiles
	  possible.
	- OSX: FLTK would not know where a window was positioned
	  by the OS. As a result, popup menus could open at 
	  wrong positions.


CHANGES IN FLTK 1.1.4rc2

	- Fl_Window::show(argc,argv) incorrectly opened the
	  display prior to parsing the arguments; this prevented
	  the "-display foo" option from working (STR #111)
	- Images were not clipped properly on MacOS X (STR #114)
	- Fl::reload_scheme() and Fl::scheme("foo") incorrectly
	  called Fl::get_system_colors().  This prevented an
	  application from setting its own color preferences
	  (STR #115)
	- The 'Enter' key event on OS X would not set
	  Fl::e_text.
	- Changed behaviour of FLUID to always paste into
	  a selected group (STR #88)
	- Menuitem now changes font, even if fontsize
	  is not set (STR #110)
	- Swapped shortcut labels in OS X (STR #86)
	- Non-square Fl_Dial would calculate angle from user
	  input wrong (STR #101)
	- Updated documentatiopn of fl_draw (STR #94)
	  and Fl_Menu_::add() (STR #99)
	- FLUID collapse triangle events were not offset by
          horizontal scroll (STR #106)
	- QuitAppleEvent now correctly returns from Fl::run()
          instead of just exiting (STR #87)
	- Hiding the first created OpenGL context was not
	  possible. FLTK now manages a list of contexts (STR #77)
	- FLUID didn't keep the double/single buffer type for
	  windows.
	- FLTK didn't work with Xft2.
	- OSX window resizing didn't work (STR #64)
	- Fixed MacOS X shared library generation (STR #51)
	- Several widgets defined their own size() method but
	  didn't provide an inline method that mapped to the
	  Fl_Widget::size() method (STR #62)
	- Fl_Scroll didn't provide its own clear() method, so
	  calling clear() on a Fl_Scroll widget would also
	  destroy the scrollbars (STR #75)
	- Fl::event_text() was sometimes initialized to NULL
	  instead of an empty string (STR #70)
	- fl_draw() didn't properly handle a trailing escaped
	  "@" character (STR #84)
	- Added documentation for all forms of
	  Fl_Widget::damage() (STR #61)
	- Fl_Double_Window now has a type() value of
	  FL_DOUBLE_WINDOW, to allow double-buffered windows to
	  process redraws properly on WIN32 (STR #46)
	- Added FL_DAMAGE_USER1 and FL_DAMAGE_USER2 damage bits
	  for use by widget developers (STR #57)
	- Fl_Help_View didn't support numeric character entities
	  (STR #66)
	- Menu shortcuts didn't use the Mac key names under
	  MacOS X (STR #71)
	- CodeWarrior Mac OS X updated to work with current
	  CW8.3 (STR #34)
	- Apple-C/X/V/Z didn't work in the Fl_Input widget due
	  to a bad mapping to control keys (STR #79)
	- Added the OSX-specific fl_open_callback() function to
	  handle Open Documents messages from the Finder (STR
	  #80)
	- The configure script contained erroneous whitespace in
	  various tests which caused errors on some platforms
	  (STR #60)
	- The fltk-config script still supported the deprecated
	  --prefix and --exec-prefix options; dropped them since
	  they serve no useful purpose and would never have
	  worked for the intended purpose anyways... (STR #56)
	- fl_filename_list returned 0 on Win32 if no directory
	  existed (STR #54)
	- Pressing 'home' after the last letter in a Text_Editor
	  would move the cursor to pos 0 (STR #39)
	- Fl::get_key(x) would mix up Ctrl and Meta on OS X (STR
	  #55)
	- The configure script used the wrong dynamic library
	  linking command for OSX (STR #51)
	- The Fl_Text_Editor widget did not set changed() nor
	  did it call the widget's callback function for
	  FL_WHEN_CHANGED when processing characters that
	  Fl::compose() handles (STR #52)


CHANGES IN FLTK 1.1.4rc1

	- The file chooser did not reset the click count when
	  changing directories; if you clicked on a file in the
	  same position after changing directories with a
	  double-click, the chooser treated it as a triple
	  click (STR #27)
	- Symbols with outlines did not get drawn inactive.
	- The Fl_Help_View widget now provides a find() method
	  to search for text within the page.
	- The Fl_Help_Dialog widget now provides a search box
	  for entering text to search for.
	- The default font encoding on OSX did not match the
	  default on WIN32 or X11.
	- Menu items were not drawn using the font specified in
	  the Fl_Menu_Item structure (STR #30)
	- Long menus that were aligned such that the top of an
	  item was exactly at the top of the screen would not
	  scroll (STR #33)
	- The OS issues appendix incorrectly stated that MacOS
	  8.6 and 9 were supported; they are not (STR #28)
	- Fixed handling of nested double-buffered windows (STR
	  #1)
	- Showing a subwindow inside a hidden window would crash
	  the application (STR #23)
	- OSX users couldn't enter some special chars when using
	  some foreign key layouts (STR #32)
	- Hiding subwindows on OSX would hide the parent window
	  (STR #22)
	- Added thin plastic box types.
	- Fl_Pack ignored the box() setting and cleared any
	  unused areas to the widget color; it now only does so
	  if the box() is set to something other than FL_NO_BOX.
	- Updated the Fl_Tabs widget to offset the first tab by
	  the box dx value to avoid visual errors.
	- Updated the plastic up box to draw only a single
	  border frame instead of the old double one for
	  improved appearance.
	- Updated the default background color on OSX to provide
	  better contrast.
	- Fl_Text_Display and friends now look for the next
	  non-punctuation/space character for word boundaries
	  (STR #26)
	- gl_font() didn't work properly for X11 when Xft was
	  used (STR #12)
	- Fl_File_Browser incorrectly included "." on WIN32 (STR
	  #9)
	- Include shellapi.h instead of ShellAPI.h in the WIN32
	  drag-n-drop code in order to work with the MingW cross
	  compiler (STR #6)
	- The cursor was not properly restored when doing
	  drag-n-drop on X11 (STR #4)
	- Fl::remove_fd() didn't recalculate the highest file
	  descriptor properly (STR #20)
	- Fl_Preferences::deleteGroup() didn't work properly
	  (STR #13)
	- Fixed the fl_show_file_selector() function - it was
	  copying using the wrong string size (STR #14)
	- fl_font() and fl_size() were not implemented on MacOS
	  X.
	- Sorted the icon menu bar in FLUID.
	- Fixed minor memory access complaints from Valgrind
	- Compiling src/flstring.h on OS X with BSD header would
	  fail.
	- Fl_Text_Editor didn't scroll the buffer when the user
	  pressed Ctrl+End or Ctrl+Home.
	- Fl_Text_Editor didn't show its cursor when the mouse
	  was moved inside the window.
	- FLUID now uses an Fl_Text_Display widget for command
	  output, which allows you to copy and paste text from
	  command output into other windows.
	- Fl_Gl_Window could cause a bus error on MacOS X if the
	  parent window was not yet shown.
	- FLUID could crash after displaying a syntax error
	  dialog for the callback code.
	- FLUID would reset the callback code if you opened the
	  widget panel for multiple widgets.
	- Added a NULL check to Fl_Text_Display (SF Bug #706921).
	- The fltk-config script placed the LDFLAGS at the wrong
	  place in the linker options.
	- Fl_Text_Display didn't draw the outer box in the right
	  dimensions, so it was invisible.
	- Fl_Help_Dialog used the same color for links as for
	  the background, causing links to be invisible on pages
	  without a background color set.


CHANGES IN FLTK 1.1.3

	- Documentation updates.
	- FLTK now ignores KeyRelease events when X11 sends them
	  for repeating keys.
	- FLUID now supports up to two additional qualifiers
	  before a class name (FL_EXPORT, etc.) to aide in
	  developing DLL interfaces for WIN32.
	- Additional NULL checks in Fl_Button,
	  fl_draw_boxtype(), Fl_File_Chooser, and
	  Fl_Window::hotspot().
	- The Fl_Preferences header file needed to FL_EXPORT all
	  of the nested classes for WIN32.
	- Fl_Double_Window couldn't be nested on WIN32. [SF Bug
	  #658219]
	- Fl_Slider didn't call the callback function when the
	  user changed the value using the keyboard and the
	  "when" condition was FL_WHEN_RELEASE. [SF Bug #647072]
	- Lines with less than 2 unique vertices and polygons
	  with less the 3 unique vertices were not drawn
	  properly. [SF Bug #647067]
	- The size_range() values were not honored under MacOS
	  X. [SF Bug #647074]
	- OpenGL windows didn't resize correctly on MacOS X.
          [SF Bug #667855]
	- The menus incorrectly used the overlay visual when one
	  or more menu items contained an image. [SF Bug #653846]
	- Changed some error messages to use Fl::error() instead
	  of fprintf()...
	- Fl_Text_Buffer and Fl_Text_Display used free to free
	  memory that was allocated using the new operator.
	- Tweeked the plastic scheme under MacOSX to better
	  match the colors.
	- The Fl_Image.H always included the x.H header file,
	  which included many system headers that could
	  interfere with normal GUI applications.  It now uses
	  the corresponding based types for the image id and
	  mask to avoid this.
	- The FLUID widget panel wasn't sorted, so keyboard
	  navigation was strange. [SF Bug #647069]
	- Fl_Scroll didn't compute the location of labels to the
	  right or below when determining the area to erase.
	- Added backward-compatibility macro for
	  filename_setext().
	- Fl_Bitmap::copy(), Fl_Pixmap::copy(), and
	  Fl_RGB_Image::copy() all could overflow the source
	  image when scaling the image.
	- Double/triple clicks in Fl_Input fields didn't copy
	  the expanded selection to the clipboard.
	- Fl_Glut_Window and Fl_Gl_Window didn't always initialize
	  the OpenGL context on MacOS.


CHANGES IN FLTK 1.1.2

	- Fl_Menu_Bar now supports drawing vertical dividers
	  between menu items and submenus in the menu bar.
	- Fl_File_Chooser::value() didn't return NULL when the
	  user clicked Cancel while selecting a directory.  This
	  bug also affected fl_dir_chooser().
	- Fl_Menu_::add(const char *) used too small a menu item
	  label buffer and didn't do bounds checking.
	- Eliminate some compiler warnings with CodeWarrier
	  under WIN32 (Paul Chambers)
	- Fl_Gl_Window widgets did not resize properly under
	  MacOS X.
	- The cursor could be set for the wrong window in the
	  text widgets.
	- Fl_Check_Browser didn't provide const char * add
	  methods as documented.
	- Fl_Check_Browser didn't draw the same style of check
	  marks at the other widgets.
	- Fl_Button, Fl_Choice, and Fl_Menu_Button incorrectly
	  activated the button/menu when the spacebar was
	  pressed in conjunction with shift, control, alt, or
	  meta.
	- FLTK should now compile with Xft 2.0.
	- Some versions of Tru64 4.0 have snprintf and
	  vnsprintf, but don't have the prototypes for those
	  functions.
	- FLTK had trouble doing character composition with some
	  keyboard layouts under X11 (in particular, Belgian).
	- Fl_Text_Editor would cause a segfault if the user
	  pressed CTRL-V (paste) without having any data in the
	  clipboard...
	- The tab key moved backwards in menus instead of
	  forwards.  Shift-tab still moves backwards.
	- The redraw_label() method didn't damage the parent
	  window when the label was outside the widget's
	  bounding box.
	- Added a "draw_children()" method to Fl_Group to make
	  subclassing Fl_Group with a custom draw() function
	  easier.
	- Fl_Text_Editor now supports basic undo functionality.
	- FLUID now uses Fl_Text_Editor widgets for all
	  multi-line code fields.
	- Added new widget bin and icons to FLUID.
	- FLUID would try running multiple commands in parallel,
	  even though it wasn't capable of handling it.
	- FLUID didn't generate code for some attributes when
	  using custom/named widget classes.
	- Added a new FL_COMMAND state bit which maps to FL_CTRL
	  on X11 and WIN32 and FL_META on MacOS.
	- MacOS keyboard modifiers mapping corrections. Cmd and
	  Control are no longer swapped, event_key and event_text
	  return (mostly) the same values as on other platforms.
	- The Fl_Tabs widget should no longer be a focus hog;
	  previously it would take focus from child widgets.
	- The file chooser now activates the OK button when
	  opening a directory in directory selection mode.
	- Fixed a bug in the file chooser when entering an
	  absolute path.
	- Back-ported some FLTK 2.0 tooltip changes to eliminate
	  erroneous tooltip display.
	- MacOS windows were resizable, even when size_range
	  would not allow for resizing.
	- Fl_Text_Editor now supports Shift+Delete, Ctrl+Insert,
	  and Shift+Insert for cut, copy, and paste,
	  respectively.
	- Fl_Text_Display didn't restore the mouse pointer when
	  hidden.
	- Fl::arg() now ignores the MacOS X -psn_N_NNNNN option.
	- Added another change to the WIN32 redraw handling for
	  the MingW compilers.
	- Fl_File_Chooser didn't handle WIN32 home directories
	  that used backslashes instead of forward slashes.
	- Fl_Text_Display didn't limit the resize height to 1
	  line.
	- Fl_Scrollbar widgets incorrectly took keyboard focus
	  when clicked on. This caused widgets such as
	  Fl_Text_Display to hide the cursor when you scrolled
	  the text.


CHANGES IN FLTK 1.1.1

	- Fl_Text_Display didn't always show the cursor.
	- Fl_Tabs now only redraws the tabs themselves when
	  making focus changes.  This reduces flicker in tabbed
	  interfaces.
	- The WIN32 redraw handler now correctly merges the FLTK
	  and Windows redraw regions.
	- The Fl_Text_* widgets use the C++ bool type, which is
	  not supported by older C++ compilers.  Added a
	  configure check and workaround code for this.
	- Fl_X::set_xid() didn't initialize the backbuffer_bad
	  element that was used with XDBE.
	- Fl_Shared_Image::uncache() was not implemented.
	- Fl::set_font() didn't 0-initialize all font descriptor
	  data.
	- Some OpenGL implementations don't support single-
	  buffered visuals. The Fl_Gl_Window class now emulates
	  single-buffered windows using double-buffered
	  windows.
	- Added a workaround for a compiler bug in Borland C++
	  that prevented Fl_Help_View.cxx from compiling.
	- Checkmarks didn't scale properly; copied the 2.0 check
	  mark code over.
	- Replaced several memcpy's with memmove's for
	  portability (memmove allows for overlapping copies,
	  memcpy does not)
	- Bug #621737: Fl_Bitmap::copy(), Fl_Pixmap::copy(), and
	  Fl_RGB_Image::copy() now range-check the new width and
	  height to make sure they are positive integers.
	- Bug #621740: the WIN32 port needed to handle WM_MOUSELEAVE events
	  in order to avoid problems with tooltips.
	- Fl_PNM_Image didn't set the "alloc" flag for the data,
	  which could lead to a memory leak.
	- fl_filename_match() was inconsistently doing case-
	  insensitive matching.
	- Fl_Button redraw fix for bug #620979 (focus boxes and
	  check buttons).
	- Fl_Text_Display fix for bug #620633 (crash on
	  redisplay).
	- Fl_Output now calls its callback when the user clicks
	  or drags in the widget.
	- Shortcuts now cause buttons to take focus when visible
	  focus is enabled.
	- fl_filename_relative() didn't check that the path was
	  absolute under WIN32.
	- fl_filename_relative() didn't check that the path was
	  on the current drive under WIN32.
	- The Fl_BMP_Image class now handles 16-bit BMP files
	  and BMP files with a transparency mask.
	- The fltk-config script didn't add the required include
	  path, if any, when compiling a program.
	- Added a license clarification that the FLTK manual is
	  covered by the same license as FLTK itself.
	- Fl_Check_Browser wasn't documented.
	- Fl_Preferences::Node::addChild(), deleteEntry(), and
	  remove() didn't set the "dirty" flag.
	- The "no change" button didn't work in the FLUID widget
	  panel.
	- Vertical scrollbars did not draw the arrows inactive
	  when the scrollbar was inactive.


CHANGES IN FLTK 1.1.0

	- Documentation updates.
	- Added a Fl_Widget::redraw_label() method which flags a
	  redraw of the appropriate area.  This helps to
	  eliminate flicker when updating the value of a widget.
	- Fl_Wizard::value() now resets the mouse cursor to the
	  window's default cursor.
	- Fl_File_Chooser::type() didn't enable/disable the new
	  directory button correctly.
	- Fl_Preferences::entryExists() did not work properly.
	- FLUID's image file chooser pattern was incorrect.
	- Fl_File_Icon::load_system_icons() now detects KDE
	  icons in /opt/kde, /usr/local, and /usr automatically,
	  and supports the KDEDIR environment variable as well.
	- Submenus now display to the left of the parent menu if
	  they won't fit to the right.  Previously they would
	  display right on top of the parent menu...
	- Fl_Menu_:add() didn't handle a trailing "\" character
	  gracefully.
	- Clicking/dragging the middle mouse button in a
	  scrollbar now moves directly to that scroll position,
	  matching the behavior of other toolkits.
	- Added some more range checking to the Fl_Text_Display
	  widget.
	- The editor demo did not correctly update the style
	  (syntax highlighting) information.


CHANGES IN FLTK 1.1.0rc7

	- Updated the Fl_Text_Buffer and Fl_Text_Display classes
	  to be based on NEdit 5.3 (patch from George Garvey).
	- Fixed a problem with Fl::wait(0.0) on MacOS X 10.2;
	  this affected the fractals demo and other OpenGL
	  applications.
	- Fl_Glut_Window now takes keyboard focus and handles
	  shortcut events.
	- The MacOS X implementation of fl_ready() now checks
	  the event queue for events.
	- Fl_PNM_Image now supports the XV/GIMP thumbnail format
	  (P7).
	- Fl_Preferences would not find groups inside the root 
	  group.
	- Small bug fixes for Fl_Chart, Fl_Scrollbar, Fl_Tabs,
	  and FLUID from Matthew Morrise.
	- Fl_Chart didn't have its own destructor, so data in
	  the chart wasn't freed.
	- Fl_Menu_Button no longer responds to focus or keyboard
	  events when box() is FL_NO_BOX.
	- FLTK convenience dialogs put the buttons in the wrong
	  order.
	- Fl_BMP_Image didn't load 4-bit BMP files properly.
	- Minor tweeks to the WIN32 DLL support.
	- Fl_Text_Display::resize() could go into an infinite
	  loop if the buffer is emptied.
	- Fl::handle() didn't pass FL_RELEASE events to the
	  grab() widget if pushed() was set (for proper menu
	  handling...)
	- DND events were being sent to the target window
	  instead of the target widget under WIN32.
	- The newest Cygwin needs the same scandir() handling as
	  HP-UX.
	- FLUID didn't register the image formats in the
	  fltk_images library, and had some other image
	  management problems.
	- Fixed one more redraw bug in Fl_Browser_ where we
	  weren't using the box function to erase empty space in
	  the list.
	- Fl_Text_Display::buffer() now calls resize() to show
	  the buffer.
	- Fl_Help_View didn't support HTML comments.
	- Fl_Help_View didn't include the extra cellpadding when
	  handling colspan attributes in cells.
	- Fl_Help_View didn't support table alignment.


CHANGES IN FLTK 1.1.0rc6

	- Documentation updates.
	- Fl::handle() didn't apply the modal tests for
	  FL_RELEASE events, which caused Fl_Tabs to allow users
	  to change tabs even when a modal window was open.
	- Fl_Browser_, Fl_Input_, Fl_Slider now use the box
	  function to erase the background.  This fixes some
	  long-standing redraw problems.
	- More snprintf/strlcpy/strlcat changes where needed.
	- Fl::get_font_name() would leak 128 bytes.
	- Eliminated most of the "shadowed" variables to avoid
	  potential problems with using the wrong copy of "foo"
	  in a class method.
	- Moved Fl_BMP_Image, Fl_GIF_Image, and Fl_PNM_Image to
	  the fltk_images library, so the only image formats
	  that are supported by the core library are XBM and XPM
	  files.  This reduces the size of the FLTK core library
	  by about 16k...
	- The Fl_Text_Display::resize() method was incorrectly
	  flagged as protected.
	- Fixed some memory/initialization bugs in
	  Fl_File_Chooser that valgrind caught.
	- The PNG library png_read_destroy() is deprecated and
	  does not free all of the memory allocated by
	  png_create_read_struct(). This caused a memory leak in
	  FLTK apps that loaded PNG images.
	- Added uncache() method to Fl_Image and friends.
	- Added image() methods to Fl_Menu_Item.
	- Added default_cursor() method and data to Fl_Window.
	- Fl_Group would send FL_ENTER events before FL_LEAVE
	  events, causing problems with adjacent widgets.
	- Fixed filename problems with Fl_File_Chooser -
	  changing the filename field directly or choosing files
	  from the root directory could yield interesting
	  filenames.
	- Fl_Input_ could crash if it received an empty paste
	  event.
	- The mouse pointer now changes to the I beam
	  (FL_CURSOR_INSERT) when moved over an input field or
	  text widget.
	- "make install" didn't automatically (re)compile the
	  FLUID executable.
	- Added an Fl::get_boxtype() method to get the current
	  drawing function for a specific box type.
	- Fl_Output and Fl_Multiline_Output didn't prevent
	  middle-mouse pastes.
	- Fl_JPEG_Image didn't compile out-of-the-box with Cygwin
	  due to a bug in the Cygwin JPEG library headers.
	- Fl_BMP_Image still didn't work with some old BMP files.
	- "make distclean" didn't really clean out everything.
	- Tweeked the look of the check button with a patch from
	  Albrecht Schlosser.


CHANGES IN FLTK 1.1.0rc5

	- Added "wrap" type bit to Fl_Input_, so you can now
	  have a multiline text field that wraps text.
	- Setting the value() of an output text field no longer
	  selects the text in it.
	- Output text fields now show a caret for the cursor
	  instead of the vertical bar.
	- The newButton and previewButton widgets are now public
	  members of the Fl_File_Chooser class.  This allows
	  developers to disable or hide the "new directory" and
	  "preview" buttons as desired.
	- Added new visible focus flag bit and methods to
	  Fl_Widget, so it is now possible to do both global and
	  per-widget keyboard focus control.
	- Removed extra 3 pixel border around input fields.
	- No longer quote characters from 0x80 to 0x9f in input
	  fields.
	- Improved speed of Fl_Browser_::display() method with
	  large lists (patch from Stephen Davies.)
	- Fl_Help_View didn't properly handle NULL from the link
	  callback (the original filename/directory name were
	  not preserved...)
	- Fl_Help_View didn't use the boxtype border values when
	  clipping the page that was displayed.
	- Added first steps to CodeWarrior/OS_X support (see
	  fltk-1.1.x/CodeWarrior/OS_X.sit)
	- Cleaned up the WIN32 export definitions for some of
	  the widget classes.
	- Fixed a filename completion bug when changing
	  directories.
	- Fl_File_Chooser::value() would return directories with
	  a trailing slash, but would not accept a directory
	  without a trailing slash.
	- When installing shared libraries, FLUID is now linked
	  against the shared libraries.
	- MacOS: missing compile rule for .dylib files.
	- Fl_Group::current(), Fl_Group::begin(), and
	  Fl_Group::end() are no longer inlined so that they are
	  properly exported in DLLs under WIN32.  Similar
	  changes for all static inline methods in other
	  classes.
	- MacOS: support for Mac system menu (Fl_Sys_Menu_Bar)
	- MacOS: wait(0) would not handle all pending events
	- Added new makeinclude file for MingW using GCC 3.1.x.
	- Fl_Choice::value(n) didn't range check "n".
	- The MingW and OS/2 makeinclude files didn't have the
	  new fltk_images library definitions.
	- Fl_Text_Editor didn't scroll the text in the widget
	  when dragging text.
	- Config header file changes for Borland C++.
	- FLTK didn't provide a Fl::remove_handler() method.


CHANGES IN FLTK 1.1.0rc4

	- Added new filter_value() methods to Fl_File_Chooser to
	  get and set the current file filters.
	- Added support for custom filters to Fl_File_Chooser.
	- Added Borland C++ Builder IDE project files from
	  Alexey Parshin.
	- Resource leak fixes under WIN32 from Ori Berger.
	- Now register a WIN32 message for thread messages.
	- Fl_Window didn't initialize the min and max window
	  size fields.
	- The JPEG and PNG image classes have been moved to the
	  fltk_images library, a la FLTK 2.0.  You can register
	  all image file formats provided in fltk_images using
	  the new fl_register_images() function.
	- Fl_XBM_Image didn't correctly load XBM files.
	- MacOS: Added Greg Ercolano's file descriptor support.
	- MacOS: Fixed text width bug.
	- A change in fl_fix_focus() broken click-focus in FLWM.
	- Cygwin with -mnocygwin didn't like the FL/math.h
	  header file.
	- Fl_Browser_ cleared the click count unnecessarily.
	- MacOS: Pixmap draw fix, gl_font implemented
	  FL_FOCUS fix, window type fix for modal and nonmodal
	  windows, glut uninitialised 'display' proc fix
	- Now support FLTK_1_0_COMPAT symbol to define
	  compatibility macros for the old FLTK 1.0.x function
	  names to the 1.1.x names.
	- Now translate the window coordinates when a window is
	  shown, moved, or resized.  This should fix the "menus
	  showing up at the wrong position" bug under XFree86.
	- Fixed some more problems with the Fl_BMP_Image file
	  loader.
	- BC++ fixes.
	- The pixmap_browser demo didn't check for a NULL image
	  pointer.
	- Fl_File_Icon::find() now uses fl_filename_isdir()
	  under WIN32 to check for directories.
	- Fl_File_Chooser's preview code called refcount()
	  on the deleted image's object.
	- Fixed another problem with the Fl_BMP_Image loader.
	- The fl_file_chooser() callback was being called with a
	  NULL filename.
	- Documented that fl_push_clip() is preferred over
	  fl_clip(), with a corresponding source change.
	- Minor changes to the MacOS X event handling code.
	- Added syntax highlighting example code to the editor
	  test program.
	- Fl_Text_Display didn't range check style buffer
	  values.
	- Added "dark" color constants (FL_DARK_RED, etc.)
	- The MacOS font code was missing definitions for
	  fl_font_ and fl_size_.


CHANGES IN FLTK 1.1.0rc3

	- Documentation updates.
	- New file chooser from design contest.
	- Did some testing with Valgrind and fixed some memory
	  problems in Fl_Help_View::Fl_HelpView,
	  Fl_Menu_::remove(), Fl_Text_Display::draw_vline(), and
	  resizeform() (convenience dialogs).
	- Fixed some redraw() bugs, and now redraw portions of
	  the parent widget when the label appears outside the
	  widget.
	- The boolean (char) value methods in Fl_Preferences
	  have been removed since some C++ compilers can't
	  handle char and int value methods with the same name.
	- Added fl_read_image() function.
	- Fixed Fl_Valuator::format() so that the correct format
	  type is used when step == 1.0.
	- Fl_Help_View didn't support the TT markup.
	- Fl_Shared_Image used a double-pointer to the image
	  handler functions, which was unnecessary and
	  unintuitive.
	- Fl_PNM_Image didn't load the height of the image
	  properly.
	- Fl_BMP_Image, Fl_JPEG_Image, Fl_PNG_Image, and
	  Fl_Shared_Image didn't delete image data that was
	  allocated.
	- Enabled the OpenGL and threads demos when compiling
	  for MingW.
	- Fl_File_Input didn't update the directory buttons if a
	  callback was registered with the widget.
	- The file chooser would return the last selected
	  file(s) when cancel was pressed.
	- The file chooser limited the resizing of the chooser
	  window unnecessarily.
	- Fixed WM_PAINT handling under WIN32.
	- Minor tweeks to MingW and OS/2 config headers.
	- Fl_Value_Input now correctly determines if step()
	  specifies an integer value.
	- Fl_Help_View didn't add links inside PRE elements.
	- OS/2 build fixes from Alexander Mai.
	- Now use strlcat() instead of strncat() which could
	  cause buffer overflows.
	- Now use of strlcpy() instead of strncpy() to simplify
	  the code.
	- Drag-n-drop under WIN32 now shows a [+] cursor instead
	  of the link cursor.
	- Fixed widget width tooltip and default argument
	  handling code in FLUID.
	- Fixed colors used when drawing antialiased text using
	  Xft.
	- Fl_Preferences::makePath() now uses access() instead
	  of stat() when checking to see if the destination
	  directory already exists.
	- Fl_BMP_Image now supports older BMP files with the 12
	  byte header.
	- Optimized the redrawing of tabs and radio/check
	  buttons when the keyboard focus changes.
	- More tooltip fixes.
	- DND text operations would loop under X11.


CHANGES IN FLTK 1.1.0rc2

	- Portability fixes.
	- Backported 2.0 tooltip changes.
	- Several of the valuators did not support tooltips.
	- The last menu item in a menu didn't pick up on font
	  changes.
	- FLUID now properly handles default argument parameters
	  properly.
	- Fixed WM_PAINT handling under WIN32 - didn't validate
	  the correct region that was drawn.
	- Fl_Multiline_Output would insert the enter key.
	- Fl_File_Browser didn't clip items to the column width.
	- Fl_Window::draw() cleared the window label but didn't
	  restore it, so windows could lose their titles.
	- Eliminated multiple definitions of dirent structure
	  when compiling under WIN32.
	- Adjusted the size of the circle that is drawn inside
	  radio buttons to scale better for larger labels.
	- FLUID was opening the display when it shouldn't have.
	- Fl_File_Chooser.cxx defined the file chooser functions
	  again; they should only be defined in the header file.
	- Wide arcs would draw with "teeth".
	- The preferences demo included Fl/Fl_Preferences.H
	  instead of FL/Fl_Preferences.H.


CHANGES IN FLTK 1.1.0rc1

	- The fl_file_chooser() and fl_dir_chooser() functions
	  now support an optional "relative" argument to get
	  relative pathnames; the default is to return absolute
	  pathnames.
	- The backspace and delete keys now work as expected in
	  the file chooser when doing filename completion.
	- FLUID now supports running shell commands.
	- New Fl_File_Input widget that shows directory
	  separators with filename in input field.
	- The Fl_File_Chooser dialog now shows the absolute path
	  in the filename field using the Fl_File_Input widget.
	- FLUID now keeps track of grid, tooltip, and other
	  GUI options, along with the last 10 files opened.
	- Tooltip windows would show up in the task bar under
	  WIN32.
	- Now append trailing slash to directory names in names
	  in WIN32 version of scandir().  This takes care of a
	  file chooser performance problem with large
	  directories.
	- Added Fl_Preferences class from Matthias Melcher,
	  including binary data support.
	- FLUID now recognizes the "using" keyword in
	  declarations.
	- fl_file_chooser() didn't highlight the requested file
	  the second time the file chooser dialog was shown.
	- Fixed rendering of Fl_Light_Button with the plastic
	  scheme.
	- Fixed a bug in the MacOS font enumeration code.
	- Now show a "locked" icon next to static/private
	  elements in FLUID, and "unlocked" icon next to
	  global/public elements.
	- Implemented Fl_Menu_Item image labels using older
	  1.0.x labeltype method.
	- Updated the PNG library check to support both png.h
	  and libpng/png.h.
	- Fixed a recursion bug in tooltips that was causing
	  random crashes.
	- fl_file_chooser() could cause a segfault when passed a
	  NULL filename parameter in some situations.
	- Added a "-g" option to fltk-config to support quick
	  compiling with debugging enabled.
	- Fixed redraw problem with Fl_Input and anti-aliased
	  text.
	- Added threading support for MacOS X and Darwin.
	- The filesystem list in the file chooser now works under
	  MacOS X and Darwin.
	- The fl_msg structure now contains all data passed to
	  the WndProc function under WIN32.
	- Fixed some window focus/positioning problems under
	  MacOS X.
	- Added fl_create_alphamask() function to create an alpha
	  mask from 8-bit data; currently this always generates a
	  1-bit screen-door bitmask, however in the future it will
	  allow us to generate N-bit masks as needed by various
	  OS's.
	- Fl_File_Browser::load() didn't properly show drives
	  when compiled in Cygwin mode.
	- Now pass correctly pass keyboard and mouse events to
	  widget under tooltip as needed...
	- Added new Fl::dnd_text_ops() methods to enable/disable
	  drag-and-drop text operations.
	- Fl_Input now supports clicking inside a selection to
	  set the new text position when drag-and-drop is
	  enabled.
	- Added support of X resources for scheme, dnd_text_ops,
	  tooltips, and visible_focus...
	- Fixed some case problems in includes for the MacOS X
	  code.
	- Fl_Widget::handle() returned 1 for FL_ENTER and
	  FL_LEAVE events, which caused some compatibility
	  problems with 1.0 code.
	- Fl_Box::handle() now returns 1 for FL_ENTER and
	  FL_LEAVE events so that tooltips will work with Fl_Box
	  widgets.
	- Some source files still defined strcasecmp and
	  strncasecmp under WIN32.
	- Some source files still used the "false" and "true"
	  C++ keywords, even though several of our "supported"
	  C++ compilers don't support them.  Using 0 and 1 until
	  FLTK 2.0 (which uses the bool type instead of int for
	  any boolean values...)
	- Minor Fl_Color revamping, so that color constants map
	  to the color cube and FL_FOREGROUND_COLOR,
	  FL_BACKGROUND_COLOR, FL_BACKGROUND2_COLOR,
	  FL_INACTIVE_COLOR, and FL_SELECTION_COLOR map to the
	  user-defined colors.


CHANGES IN FLTK 1.1.0b13

	- Fixed a bug in the Xft support in Fl_Window::hide()
	  (the config header wasn't included, so the Xft code
	  wasn't getting called)
	- Xdbe support must now be enabled explicitly using
	  --enable-xdbe due to inconsistent bugs in XFree86 and
	  others.
	- Windows resized by a program would revert to their
	  original size when moved under WIN32.
	- Cygwin can only compile the new WIN32 drag-n-drop code
	  using GCC 3.x.
	- Tooltips now appear for inactive and output widgets.
	- Tooltips no longer steal keyboard events other than
	  ESCape.
	- Tooltips are no longer delayed when moving between
	  adjacent widgets.
	- fl_beep(FL_BEEP_DEFAULT) now uses the PC speaker under
	  Windows (0xFFFFFFFF) rather than an event sound.
	- The configure script didn't include the -mwindows or
	  -DWIN32 compiler options in the output of fltk-config
	  when using the Cygwin tools.
	- Fl_Output didn't take input focus when needed, so it
	  was unable to support CTRL-C for copying text in the
	  field and did not unhighlight selections when the
	  widget lost focus.
	- The fl_filename_name() function didn't handle a NULL
	  input string.
	- The input field used by the fl_input() and
	  fl_password() functions was resized too small in
	  1.1.0b12.
	- Added casts in fl_set_fonts_win32.cxx for VC++ 5.0.
	- Fl_File_Icon::find() did not check the basename of a
	  filename for a match; this caused matches for a
	  specific filename (e.g. "fluid") to fail.
	- The Fl_Shared_Image class now supports additional
	  image handling functions - this allows you to support
	  additional image file formats transparently.


CHANGES IN FLTK 1.1.0b12

	- Documentation updates.
	- Fl_Choice didn't clip the current value properly - it
	  wasn't accounting for the box border width.
	- The forms compatibility functions are now placed in a
	  "fltk_forms" library to match FLTK 2.0.
	- Renamed down() and frame() to fl_down() and
	  fl_frame(), filename_xyz() to fl_filename_xyz(), and
	  all of the define_FL_FOO() functions for the custom
	  boxtypes to fl_define_FL_FOO() to avoid namespace
	  clashes.
	- Stereo OpenGL support (patch from Stuart Levy)
	- All of the convenience functions defined in fl_ask.H
	  now resize the widgets and dialog window as needed for
	  the labels and prompt.
	- Backported FLTK 2.0 dual cut/paste buffer code.
	- Added support for Xft library to provide anti-aliased
	  text on X11.
	- Fl_Help_View didn't keep track of the background color
	  of cells properly.
	- Fl_Browser::item_width() didn't compute the width of
	  the item properly when column_widths() was set.
	- Fl_Button didn't check to see if the widget could
	  accept focus before taking input focus.
	- Fl_Help_View didn't preserve target names (e.g.
	  "filename.html#target") when following links.
	- Drag-and-drop support for MacOS.
	- Updated MacOS issues documentation.


CHANGES IN FLTK 1.1.0b11

	- Now conditionally use the WIN32 TrackMouseEvent API
	  (default is no...)
	- Fixed a table rendering bug in the Fl_Help_View
	  widget.
	- The fltk-config script now recognizes all common C++
	  extensions.
	- The menu code was using overlay visuals when the
	  scheme was set to "plastic".
	- Fixed some drawing problems with Fl_Light_Button and
	  its subclasses.
	- Fixed a minor event propagation bug in Fl_Group that
	  caused mousewheel events to be passed to scrollbars
	  that were not visible.
	- The fl_file_chooser() function did not preserve the
	  old file/directory like the old file chooser did.
	- The prototypes for fl_input() and fl_password() did
	  not default the "default value" to NULL.
	- Fl_Tabs now draws tabs using the selection_color() of
	  the child groups; this allows the tabs to be colored
	  separately from the body.  Selected tabs are a mix of
	  the Fl_Tabs selection_color() and the child group's
	  selection_color().
	- Fl_Tabs didn't include images in the measurement of
	  the tabs if no label text was defined.
	- The WIN32 code didn't return 0 from the window
	  procedure after handling WM_PAINT messages.
	- fl_draw() would incorrectly test the clipping of
	  labels the lay outside the bounding box.
	- filename_relative() didn't always return the correct
	  relative path.
	- Updated the test makefile to work with more versions
	  of "make".
	- Added new "--with-optim" configure option to set the
	  optimization flags to use when compiling FLTK.
	- The fltk-config script no longer reports the
	  optimization flags that were used to compile FLTK.
	- Initial port of FLTK 2.0 drag-and-drop support.


CHANGES IN FLTK 1.1.0b10

	- Fixed the new WIN32 TrackMouseEvent code.
	- Fixed the VC++ project files to link against
	  comctl32.lib.


CHANGES IN FLTK 1.1.0b9

	- Better FL_LEAVE event handling for WIN32.
	- The alpha mask was bit-reversed.
	- Fl::scheme() applied the scheme tile image to overlay
	  and menu windows, which caused problems when the
	  overlay planes were in use.
	- Fixed Fl::event_button() value when hiding tooltip on
	  some systems.
	- Added Fl_BMP_Image class to support loading of Windows
	  bitmap (BMP) files.
	- The shiny demo didn't work on some systems (no
	  single-buffered OpenGL visual), and the new box types
	  were reset when show(argc, argv) was called.
	- Fl::scheme() didn't update windows that were not
	  shown.
	- The fractals demo would get far ahead of the UI with
	  some Linux OpenGL drivers.  Now use glFinish() instead
	  of glFlush() so we are at most 1 frame ahead.
	- The fractals demo Y axis controls were backwards for
	  the "flying" mode.
	- MacOS: cleaned up src/Fl_mac.cxx
	- MacOS: fixed Fl::wait(0.0), fixed Cmd-Q handling
	- Update CygWin support for Fl::add_fd().
	- Update the plastic scheme to not override the default
	  colors - move the color code to the MacOS-specific
	  code.  Also updates the tile image colormap to match
	  the current background color.
	- Add fl_parse_color() to X11 as well, removing a bunch
	  of conditional code and providing a common interface
	  for looking up color values.
	- Fixed the make problems in the test directory - some
	  make programs had trouble handling the recursive
	  dependencies on the FLUID files...
	- Now use rint() to round floating-point coordinates.
	- Demo cleanup - made sure they all worked with schemes.
	- Fl_Tabs no longer clears the unused area of the tab
	  bar.
	- Added show(argc, argv) method to Fl_Help_Dialog.
	- MacOS: implemented cut/copy/paste.
	- MacOS: improved keyboard handling, fixed keyboard
	  focus handling, fixed get_key, modified 'keyboard'
	  demo to show second mouse wheel and additional keys
	  'help' and FL_NK+'='


CHANGES IN FLTK 1.1.0b8

	- OS/2 build fixes.
	- fl_draw() didn't ignore symbol escapes properly for
	  the browsers...
	- New Fl::scheme() methods from FLTK 2.0; currently only
	  the standard ("") and plastic ("plastic") methods are
	  supported.  Schemes can be set on the command-line
	  ("-scheme plastic") or using the FLTK_SCHEME
	  environment variable.
	- MacOS: fixed iBook keyboard handling, moved 
	  remaining message handling to Carbon, added mouse
	  capture support, added timer support, added overlay
	  support, fixed double-buffering side effects.
	- The configure script wasn't using the -fpermissive or
	  -fno-exceptions options with GCC.
	- Fl_JPEG_Image and friends didn't set the depth if the
	  image file couldn't be loaded; since Fl_RGB_Image
	  didn't check for this, it could fail when displaying
	  or copying these images.
	- filename_absolute() did not always free its temporary
	  buffer.
	- filename_relative() did not do a case-insensitive
	  comparison under MacOS, OS/2, and Windows.
	- filename_isdir() didn't properly handle "D:L" under
	  WIN32.
	- Fl_Shared_Image::get() did not check to see if the
	  image could not be loaded.
	- Fl_Help_View didn't clear the line array in the
	  Fl_Help_Block structure; this causes erratic
	  formatting for some pages.
	- The font and size members of Fl_Help_Block were never
	  used.
	- The threading functions (Fl::lock() and friends) were
	  not exported under WIN32.
	- The Fl_Text_Display destructor deleted the scrollbars
	  twice...
	- Fl_Help_View didn't reset the horizontal scroll
	  position when showing a new page.
	- Fl_Pack now allows any child widget to be the
	  resizable() widget, not just the last one.
	- MacOS: opaque window resizing, all events except 
	  Mac menus are now handled using Carbon, window 
	  activation fixed, GL_SWAP_TYPE default changed to 
	  make gl_overlay work.
	- Fl_Help_View::resize() didn't resize the horizontal
	  scrollbar.
	- MacOS: list all fonts, fixed clipping and mouse
	  pointer bugs.
	- The Fl_File_Chooser widget now uses hotspot() to
	  position the dialog under the mouse pointer prior to
	  showing it.
	- Added a configure check for *BSD - use -pthread option
	  instead of -lpthread.
	- Fl_Text_Display could get in an infinite loop when
	  redrawing a portion of the screen.  Added a check for
	  the return value from fl_clip_box() so that the
	  correct bounding box is used.
	- Removed the Fl_Mutex and Fl_Signal_Mutex classes from
	  the threads example, since they weren't being used
	  and apparently are not very portable.
	- Fl_Help_View now ignores links when the link callback
	  returns NULL, and displays a sensible error message
	  when an unhandled URI scheme is used (e.g. http:,
	  ftp:)
	- Fl_File_Icon::load_system_icons() no longer complains
	  about missing icon files, just files that exist but
	  can't be loaded.
	- FLUID didn't list the plastic box and frame types.
	- Now hide the tooltip window whenever a window is
	  hidden.  Otherwise a tooltip window could keep an
	  application running.
	- Updated FLUID to only append a trailing semicolon to
	  code lines in a callback (so "#include" and friends
	  will work...)
	- The Fl_Color_Chooser widget now supports keyboard
	  navigation.
	- Fixed button and valuator widgets to call Fl::focus()
	  instead of take_focus().
	- Tweeked the radio button drawing code for better
	  circles with different boxtypes.
	- The Fl_File_Chooser widget did not provide a shown()
	  method, and fl_file_chooser() and fl_dir_chooser() did
	  not wait on shown(); this would cause them to return
	  prematurely if you switched desktops/workspaces.
	- Cosmetic changes to plastic boxtypes.  Now look much
	  better for large areas and the buttons now have a much
	  greater "3D" feeling to them.
	- Added new Fl::draw_box_active() method so that
	  boxtypes can find out if the widget they are drawing
	  for is active or not.
	- Fl_Button and its subclasses did not redraw the parent
	  when the boxtype was FL_NO_BOX and they lost keyboard
	  focus (the parent redraw clears the focus box.)
	- Fixed the example program makefile - wasn't building
	  the mandelbrot and shiny demos right.
	- Fl::set_font(Fl_Font, Fl_Font) was not implemented.
	- Fixed the documentation Makefile commands; was not
	  using the fltk.book file for some reason...


CHANGES IN FLTK 1.1.0b7

	- More documentation updates...
	- Mac OS X support works 95%
	- The Fl_Window::hotspot() off-screen avoidance code was
	  commented out.
	- Mac OS X uses mostly Carbon event handling to support
	  Mousewheel, three buttons, all modifier keys, etc.
	- Updated paragraph 4 of the FLTK license exceptions;
	  there was some question about the requirement to show
	  that a program uses FLTK, which is required by section
	  6 of the LGPL. The new exemption specifies that
	  inclusion of the FLTK license is not required, just a
	  statement that the program uses FLTK.
	- Fl_Button::handle() was calling take_focus() for both
	  FL_PUSH and FL_DRAG.
	- File and memory fixes for Fl_GIF_Image, Fl_PNG_Image,
	  Fl_PNM_Image, Fl_Shared_Image, Fl_Tiled_Image, and
	  Fl_XBM_Image.
	- filename_match() didn't handle backslashes properly
	  under WIN32, and didn't use a case-insensitive
	  comparison under MacOS X.
	- The Fl class was missing access methods for the
	  FL_MOUSEWHEEL event values - Fl::event_dx() and
	  Fl::event_dy().
	- The default help string didn't include the -nokbd
	  option.
	- "make uninstall" didn't uninstall the static OpenGL
	  widget library.
	- Mac cursor shapes added...
	- Fl_Text_Display would lockup when all text was
	  deleted; for example, when running the editor
	  demo, you couldn't load a second file.
	- Added Fl::lock() and friends from FLTK 2.0 to
	  support multi-threaded applications; see the
	  "threads" demo for an example of this.
	- Fl_Check_Button and Fl_Round_Button now use the
	  FL_NO_BOX box type to show the background of the
	  parent widget.
	- Tweeked the plastic boxtype code to draw with the
	  right shading for narrow, but horizontal buttons.
	- Fl_Progress now shades the bounding box instead of
	  drawing a polygon inside it.
	- Fl::warning() under WIN32 defaults to no action. This
	  avoids warning dialogs when an image file cannot be
	  loaded.
	- Some Win32 drivers would draw into wrong buffers
	  after OpenGL mode change
	- The file chooser would cause a segfault if you
	  clicked in an empty area of the file list.
	- Fl_File_Icon::labeltype() would cause a segfault
	  if the value pointer was NULL.
	- Fl_File_Icon::load_image() could cause segfaults
	  (NULL data and incrementing the data pointer too
	  often.)
	- Fl_File_Icon::load_image() now handles 2-byte
	  per color XPM files.
	- Some Win32 drivers would draw into wrong buffers
	  after OpenGL mode change.
	- Message handling and Resources for MacOS port.
	- Fl_Help_View could get in an infinitely loop when
	  determining the maximum width of the page; this
	  was due to a bug in the get_length() method with
	  percentages (100% width would cause the bug.)
	- Don't need -lgdi32 for CygWin, since -mwindows
	  does this for us.
	- The WIN32 event handler did not properly handle
	  WM_SYNCPAINT messages.
	- Fl_Tabs now uses the boxtype exclusively to draw
	  both the tabs and surrounding box, so alternate
	  box types actually work and the look is a little
	  nicer.
	- Fixed the drawing of large areas with the new
	  plastic boxtypes.
	- Updated the Visual C++ demo projects to use FLUID
	  to generate the GUI files as needed.
	- The demo program didn't load the right menu file
	  when compiled for debugging under WIN32.
	- Added plastic box types to forms demo.
	- Added mousewheel to keyboard demo.
	- The Fl_Text_Editor widget caused an infinite loop
	  when it received keyboard focus.
	- filename_isdir() didn't properly handle drive letters
	  properly; WIN32 needs a trailing slash for drive
	  letters by themselves, but cannot have a trailing
	  slash for directory names, go figure...
	- The Fl_Text_Buffer and Fl_Text_Display classes did not
	  initialize all of their members.
	- fl_normal_label() had a totally redundant set of
	  if/else tests, which the new code handles all from
	  fl_draw().
	- The Fl_File_Chooser dialog contained two hotspots.
	- The fl_draw_pixmap() function didn't free the 2-byte
	  color lookup table properly (delete instead of
	  delete[]).
	- fl_draw() reset the text color under WIN32, causing
	  bitmaps to draw incorrectly.
	- Fl::get_font_sizes() is now implemented under WIN32.
	- Fl_Text_Display now uses the same default colors for
	  selection and text as Fl_Input_ and friends.
	- Changed the default line scrolling in Fl_Text_Display
	  to 3 lines for the mouse wheel and scrollbar arrows.


CHANGES IN FLTK 1.1.0b6

	- Documentation updates...
	- The configure script now works within the CygWin
	  environment.
	- Tooltips are now enabled by default, but are not
	  re-enabled when calling the Fl_Widget::tooltip()
	  method.
	- Added new Fl::version() method to get the current
	  FLTK library version (for shared libraries/DLLs)
	- Added new Fl::event() method to get the current
	  event that is being processed.
	- Added new fl_beep() function to do audible
	  notifications of various types.
	- Added new Fl_GIF_Image, Fl_JPEG_Image, Fl_PNG_Image,
	  Fl_PNM_Image, Fl_XBM_Image, and Fl_XPM_Image classes.
	- Added new Fl_Shared_Image class, a la FLTK 2.0.
	- Added new Fl_Tiled_Image class for tiled backgrounds.
	- Added new copy(), desaturate(), inactive(), and
	  color_average() methods to the Fl_Image classes.
	- Added a horizontal scrollbar to the Fl_Help_View
	  widget.
	- Added new FL_PLASTIC_{UP/DOWN}_{BOX/FRAME} boxtypes
	  for a more "modern" look (sort of a cross between KDE
	  2.2 and Aqua.)
	- Fl_Float_Input and Fl_Int_Input no longer accept
	  pasted text that is not a floating point or integer
	  value.  Pasted numbers now replace text in these
	  widgets.
	- Implemented the Fl_File_Icon::load_png() method.
	- The Fl_File_Icon::load_system_icons() method now
	  supports KDE 2.x icons.
	- Fixed PNG support in Fl_Help_View.
	- Removed the "Microsoft" mode button from the menubar
	  demo.
	- The browser demo now makes sure that the input field
	  contains a number.
	- The Fl_Browser::make_visible() method now range checks
	  the input.
	- Updated the fl_draw() and fl_measure() methods to
	  accept an optional draw_symbols argument, which
	  controls whether symbols are drawn in the text.
	- Added new Fl::visible_focus() methods to control
	  whether the focus box is drawn.
	- The focus box is now drawn using the contrast color.
	- Fl_Repeat_Button didn't accept keyboard focus.
	- Added new Fl::visible_focus() method and standard
	  "-kbd" and "-nokbd" options in Fl::args() processing
	  to control whether keyboard focus is shown and handled
	  by non-text widgets.
	- The wrong tooltip could be shown if the user moved the
	  mouse over adjacent widgets with tooltips.
	- The drop-down button on Fl_Choice widgets was not
	  limited in width.
	- Tooltips could appear off the screen.
	- Mouse wheel events are now sent to the focus widget
	  first, then to any other interested widget.
	- The Fl_RGB_Image class now supports images with an
	  alpha channel.  Images are currently drawn using
	  "screen door" transparency...  See the "image" demo
	  for an example.
	- Added new fl_create_bitmask() and fl_delete_bitmask()
	  functions that create bitmap objects for masking and
	  bitmap drawing.
	- Was sending FL_RELEASE events for buttons 4 and 5
	  under X11, which are only for FL_MOUSEWHEEL.
	- Fl_Help_View now supports the EM and STRONG elements.
	- Didn't do callbacks when changing tabs via keyboard.
	- FLUID didn't write tooltip strings to the message
	  catalog file.
	- Fl_File_Icon now uses Fl_Shared_Image to load icon
	  images; the load_png() and load_xpm() methods have
	  been replaced by a single load_image() method.
	- Fl_File_Icon::load_system_icons() now does a better
	  job of finding KDE icons.
	- Now use Fl::warning() and Fl::error() in place of
	  printf's in some of the newer widgets.
	- The default behavior of Fl::error() is now to display
	  an error but not to exit; Fl::fatal() still exits.
	- FLUID now uses the Fl_Shared_Image class, so FLUID-
	  generated GUIs can embed any of the supported image
	  file formats.
	- New filename_relative() function to convert an
	  absolute filename to a relative one.
	- Updated the filename_absolute(), filename_expand(),
	  and filename_setext() functions to take the
	  destination string size, with inline functions for the
	  old FL_PATH_MAX size.
	- fl_file_chooser() and fl_dir_chooser() now return a
	  relative path.
	- Fl_Help_View now supports all ampersand escapes.


CHANGES IN FLTK 1.1.0b5

	**** NOTE: DUE TO CHANGES IN THE WIDGET CLASSES,  ****
	****       YOU MUST RECOMPILE ALL SOURCE FILES    ****
	****       THAT USE FLTK!!!                       ****

	- All FLTK color values are now 32-bits and support
	  both the legacy 8-bit color values as well as 24-bit
	  RGB values (0xRRGGBB00 for 24-bit RGB, 0x000000II
	  for indexed color).
	- Fl::set_boxtype() and fl_internal_boxtype() now keep
	  track of when a boxtype is changed; this allows you to
	  override the "special" boxtypes without references to
	  those boxtypes causing them to be reset.
	- Fl_Help_Func now takes a Fl_Widget pointer as well as
	  a pathname.
	- Added code to support FL_KEYUP events.
	- Focus did not return to the Fl_Text_Display and Editor
	  widgets when scrolling and then clicking inside the
	  editor window.
	- Now set the line size of the vertical scrollbar in the
	  text editor to 1.
	- The symbols demo didn't show the strings needed to
	  show the corresponding symbol (the label string was
	  not quoted...)
	- FLTK should now compile with Cygwin cleanly.
	- Shortcut changes were not being saved by FLUID.
	- FLUID didn't write the deimage() static data.


CHANGES IN FLTK 1.1.0b4

	**** NOTE: DUE TO CHANGES IN THE FL_WIDGET CLASS, ****
	****       YOU MUST RECOMPILE ALL SOURCE FILES    ****
	****       THAT USE FLTK!!!                       ****

	- Updated the flags_ member of Fl_Widget to be an
	  integer instead of uchar, to support the new
	  FL_OVERRIDE flag for Fl_Window.

	- The parent() method of Fl_Widget now uses pointers to
	  Fl_Group instead of Fl_Widget.

	- Fl_Window now provides the FLTK 2.0 "override()" and
	  "set_override()" methods for windows.

	- Added a configure check (and warning) for GCC 3.0.x.

	- Updated the configure script to check for the
	  png_set_tRNS_to_alpha() function.

	- Updated the config.h files for all platforms for the
	  image and FLTK documentation defines.

	- Updated the makeinclude files for all platforms to
	  match the current makeinclude.in file.

	- FLUID would crash if you cleared an image for a
	  widget.

	- Fl_Help_View::add_image() did not initialize the image
	  member of the base (unscaled) image.

	- Fl_Help_View didn't support A elements with both a
	  NAME and HREF attribute - the HREF was ignored.

	- Miscellaneous compile warning fixes.

	- Tooltips were being reset by Fl::belowmouse(), which
	  caused problems with the FLUID main window (flashing
	  tooltip windows and serious problems with KDE 2.2)

	- The editor demo had the save and discard button
	  actions reversed.

	- The Fl_Help_View widget now uses
	  png_destroy_read_struct() if the older
	  png_read_destroy() function is not available.

	- The WIN32 DLL library now includes the OpenGL widgets.
	  This is a simpler solution for the export/import
	  dillemma under WIN32, as OpenGL and non-OpenGL symbols
	  need to be exported at different times with the
	  separate library scheme.  Since OpenGL is standard
	  under Windows, this is less of a problem than under
	  UNIX...


CHANGES IN FLTK 1.1.0b3

	- The top-level makefile did not include the makeinclude
	  file, causing the fltk-config installation commands to
	  fail.

	- The fl_file_chooser.cxx source file conflicted with
	  Fl_File_Chooser.cxx under Windows.  Similarly, the
	  fl_file_chooser.H header file conflicts with the
	  Fl_File_Chooser.H header file.

	- Now save and restore the GDI pen object when
	  responding to WIN32 paint messages.

	- Documentation updates from A. Suatoni.


CHANGES IN FLTK 1.1.0b2

	- New fltk-config script.

	- Fixed image/text label handling; in b1 the label
	  needed a non-blank text string to display the image. 
	  This bug also caused all sorts of crashes and display
	  problems.

	- Added new filetype() method to Fl_FileBrowser to allow
	  for file or directory browsing.

	- Fixed the drawing of the focus box around
	  Fl_Return_Button.

	- Fixed menu item measurement bug (wasn't initializing
	  image pointers to 0...)

	- Radio and checkbox menu items now draw with the new
	  style (round radio buttons with dots and square check
	  buttons with check marks.)

	- Improved the appearance of Fl_Check_Button.

	- Improved the Fl_HelpView table formatting code; now
	  dynamically sizes the table columns, and supports
	  COLSPAN.

	- The FLUID keyboard shortcuts now work as expected
	  (CTRL-C copies, SHIFT-CTRL-C writes code, etc.)

	- The FLTK_DOCDIR environment variable can now be
	  used to tell FLUID where to find the on-line
	  documentation files.

	- FLUID now supports image labels in addition to text
	  labels + text over image alignment.

	- FLUID now supports tooltips.

	- The widget panel in FLUID is now tabbed, a la FLTK
	  2.0.

	- The FLUID pixmap destructor tried to free 1 too many
	  lines of image data.

	- FLUID now provides on-line help.

	- Changed Fl_FileXYZ to Fl_File_XYZ.

	- Changed Fl_HelpXYZ to Fl_Help_XYZ.

	- Tooltip fixes for Fl_Browser_, Fl_Choice, and Fl_Input_.

	- Added tooltips to FLUID, help dialog, and file chooser.

	- Now load system icons in FLUID.


CHANGES IN FLTK 1.1.0b1

	- Added new image() and deimage() methods to support
	  image + text labels more easily.

	- Added new alignment bit FL_ALIGN_TEXT_OVER_IMAGE.

	- Added tooltip support using Jacques Tremblay's tooltip
	  patch.

	- Added keyboard navigation to all widgets.

	- Added support for mouse wheels using the new
	  FL_MOUSEWHEEL event type.  Get the mouse wheel
	  movement values from Fl::e_dx (horizontal) and
	  Fl::e_dy (vertical).

	- Added the Fl_Check_Browser, Fl_FileBrowser,
	  Fl_FileChooser, Fl_FileIcon, Fl_HelpDialog,
	  Fl_HelpView, Fl_Progress, and Fl_Wizard widgets from
	  the bazaar.

	- Added 2.0 Fl_Text_Display and Fl_Text_Editor widgets
	  based on NEdit.

	- The Fl_Choice widget now looks more line a combo box
	  than a Motif option menu.

	- Moved the OpenGL widgets into a separate library
	  called fltkgl - this eliminates shared library
	  dependencies on OpenGL when no OpenGL functionality is
	  used/required.

	- FLUID now supports the new Fl_CheckBrowser,
	  Fl_FileBrowser, Fl_FileIcon, Fl_HelpView,
	  Fl_Text_Display, Fl_Text_Editor, and Fl_Wizard
	  widgets.

	- Updated configure stuff to support shared libraries
	  under AIX (link to -lfltk_s)

	- Symbol labels can now contain regular text.

	- FLUID now supports relative filenames for the source
	  and header files you generate.

	- Fl_Menu_Item::add() didn't use the flags that were
	  passed in.

	- Fixed a bug in Fl_Scrollbar - clicking in the "trough"
	  of the scrollbar would move the scroller in the wrong
	  direction.

	- Made the Forms pixmap parameter const to match the
	  Fl_Pixmap.H definitions.

	- Changed the Fl_Pixmap constructor to use the explicit
	  keyword which should work for all C++ compilers.

	- Fl_Menu_add of a menu item with the same name as an
	  existing submenu title would mess up by replacing that
	  menu title, it now adds a new item.

	- Fl_Menu::add() of text starting with '/' to a menu is
	  assummed to be a filename. So "/foo/bar" creates a
	  single menu item. You can also put filenames into
	  submenus by doing "submenu//foo/bar", this will create
	  a submenu called "submenu" with an item "/foo/bar".
	  Menu items starting with "\_" will insert an item
	  starting with '_' rather than a divider line. These
	  changes make the menus compatable with fltk 2.0.

	- Another little fix for the BoXX OpenGL overlays.

	- Fl_Gl_Window no longer blanks the mouse pointer on
	  WIN32 unless an OpenGL overlay is being used.  This
	  should make non-overlay displays faster when a cursor
	  is set.


CHANGES SINCE FLTK 1.0.10

	- CHANGED THE DEFAULT RUN-TIME LINKING TO "MULTITHREADED
	  DLL". You'll need to change your project settings to
	  use this as well or you'll get errors.

	- Added new --disable-gl option to configure script.

	- Added new const const pointer versions of pixmap
	  functions to eliminate an annoying pointer warning
	  message that was generated by the Sun and other C++
	  compilers.

	- Eliminated all "var hides class::var" warnings.

	- Eliminated all "string literal converted to char *"
	  warnings.

	- OS/2 updates from Alexander Mai.

	- Tidied up the HTML documentation to be more standards
	  compliant.

	- Compiling with -DBOXX_BUGS will work around some
	  problems with the newest X drivers that BoXX delivers,
	  the problems all affect use of Overlays for normal X
	  drawing and OpenGL drawing. Normal compilation is
	  unchanged.

	- The file chooser buttons use user_data() rather than
	  the label to decide what to do, allowing the label to
	  be somewhat cleaner.

	- Selection color on X changed to blue, to match what
	  happens on Windows now.

	- Added support for AIX (static library only).

	- Added support for SunOS 4.x

	- Now process WIN32 WM_ACTIVATEAPP message to reset the
	  key and button states in Fl::e_state.

	- Fl_has_idle only tested N-1 callbacks and missed one.

	- Restored WM_SYNCPAINT handling under WIN32; this fixed
	  a refresh bug under some versions of Windows.

	- Check for OpenGL headers before checking to see if
	  OpenGL is supported.  This should eliminate compile
	  errors due to missing non-FLTK header files...

	- Add -D_INCLUDE_POSIX_SOURCE option when compiling with
	  the HP compilers.

	- Replaced remaining _WIN32 symbols with WIN32

	- Removed reference to unused GL/glu.h header file, which is missing on
	  some Linux systems.

	- Fl_Gl_Window has a new method to allow you to get and set the context:

	      void Fl_Gl_Window::context(void*, int destroy = 0)
	      void* Fl_Gl_Window::context() const;

	  Return or set a pointer to the GLContext that this window is
	  using. This is a system-dependent structure, but it is portable to
	  copy the context from one window to another. You can also set it to
	  NULL, which will force FLTK to recreate the context the next time
	  make_current() is called, this is useful for getting around bugs in
	  OpenGL implementations.

	  If destroy_flag is true the context will be destroyed by fltk when
	  the window is destroyed, or when the mode() is changed, or the next
	  time context(x) is called.

	- Some cleanup of Fl_Gl_Choice to move most of the system dependent
	  #ifdefs into Fl_Gl_Choice.cxx.

	- Fl_Gl_Window does not set drawbuffer(BACKBUFFER) for
	  single-buffered windows.

	- Fl_Input::replace(...) correctly updates the display
	  if the replaced region does not include the mark,
	  point, or selected region.

	- Added Fl::add_check(...), Fl::remove_check, and
	  Fl::has_check. These are similar to idle callbacks but
	  are only called just before it waits for new events.
	  They can be used to watch for changes in global state
	  and respond to them.

	- "accu-timer": some changes to repeat_timeout that seem
	  to make it accurate on Unix and WIN32 at speeds up to
	  500000 timeouts/second (and 700000 on Linux), and
	  within about .001% as accurate as the system clock.

	- Fix to Fl_Valuator::step() by Guillermo Andrade.

	- Fixed the FLUID write-menu bug introduced in 1.0.10

	- Fl::flush() now calls GdiFlush() under WIN32 to
	  ensure that all graphics are drawn.

	- fl_curve() now uses a much better algorithim to figure
	  out how many pieces to cut the curve into.

	- FLUID now uses GetTempPath() under WIN32 to determine
	  where to store the clipboard.

	- Right-ctrl does not delete selected text in Fl_Input,
	  until you type a composed character.

	- Added simple FLTK and FLUID manual pages.

	- Fl_Gl_Window leaked memory under WIN32.

	- The colbrowser demo was missing an include file when
	  compiled under OS/2.


CHANGES SINCE FLTK 1.0.9

	- Added a strcasecmp() function to FLUID; AIX doesn't
	  have it.

	- Bug #115509: Fl_Scroll not repainting background.

	- Updated the configure script and makeinclude.in file
	  to work with the Sun PRO compilers.

	- Disabled the WIN32 async socket select code by default:
	  it doesn't seem to work anymore...

	- Fl::below_mouse() was incorrectly clearing e_is_click;
	  this prevented any double-clicks from getting
	  through...

	- No longer clear Fl::keysym on every event, this makes
	  better back compatability and fixes Win2000

	- FLUID now restores which tab in an Fl_Tabs was
	  selected when loads .fl files.

	- Hack to fix the annoying "raise another application
	  when a modal window is closed" problem on WIN32.

	- Fl_Tabs now draws the background behind the tabs.

	- Fl::set_fonts() on WIN32 fixed to work before the
	  first window is shown.

	- CUA function keys, code submitted by George Yohng
	  <yohng@drivex.dosware.8m.com>

	- Another attempt to get glut.h to work on WIN32.

	- Fl_Menu_::add() ignores '&' signs when comparing menu
	  items, so you don't have to make the shortcuts the
	  same all the time.

	- Fixed bit-flipping patterns in WIN32 bitmap code.

	- Fixed size of data written by gif images to .C files

	- Menu titles and buttons in the menubar can be images
	  (allows it to be used as a toolbar)

	- Reads selectBackground from the xrdb database to set
	  the selection color. Adding this to your .Xdefaults
	  will make fltk and Motif programs look much more
	  Windoze-like:

	      *selectForeground: white
	      *selectBackground: #000080

	- FL_WHEN_RELEASE on Fl_Input will now do the callback
	  when the input field is hidden, for instance when it
	  is on a tab and the user switches to another tab.

	- Fl_Gl_Window with an overlay on X always resized any
	  child windows even if you turned resizable() off
	  because it turned it back on to resize the overlay
	  window. This patch avoids changing resizable().

	- Fix so multiple Fl::add_idle() calls works

	- The input focus got messed up if you called
	  Fl_Tabs::value(x) and there was something that took
	  focus on an earlier tab.

	- Removed some (not all) of the warnings when compiled
	  with -Wwrite-strings, this should also get similar
	  warnings Solaris produces.

	- Made Fl_Browser not hide the Fl_Widget::show() method

	- Changes & additions for OS/2 from Alexander Mai

	- Patch from Mike Lindner to make the turning on/off of
	  scrollbars on Fl_Scroll smarter.

	- Added missing FL_EXPORT for Fl_Valuator::format()

	- Shortcuts for "buttons" in a Fl_Menu_Bar work again.

	- Fix for cut/paste support and Xdnd.

	- Shortcuts for submenu titles in a menubar pop up the
	  submenu (rather than calling the callback)

	- Added documentation for GL_SWAP_TYPE

	- Buttons with box(FL_NO_BOX) did not draw.  Apparently
	  they did in older versions of fltk, I restored this.
	  (bug 108771)

	- Removed 8-bit colormap drawing code that was not doing
	  anything in fl_draw_image due to the colormap
	  allocation changes.  I also made fl_color(r,g,b)
	  actually allocate the requested color rather than the
	  nearest fltk color-cube color (this is only done for
	  the first color that maps to a given entry in the fltk
	  color cube), the result is that pixmaps with a small
	  number of colors are drawn much more accurately. The
	  resulting code seems to produce better images and is a
	  good deal smaller!

	- Fixed makeinclude.in so CFLAGS are used for c source
	  code instead of CXXFLAGS. (bug 108694)

	- Better fix for gif files suggested by pauly (bug
	  108770)

	- Performance of Fl_Gl_Window may be improved on some
	  types of OpenGL implementations, in particular MESA
	  or other software emulators, by setting the
	  GL_SWAP_TYPE environment variable.  This variable
	  declares what is in the back buffer after you do a
	  swapbuffers:

	      setenv GL_SWAP_TYPE COPY

	      This indicates that the back buffer is copied to
	      the front buffer, and still contains it's old
	      data. This is true of many hardware
	      implementations.  Setting this will speed up
	      emulation of overlays, and widgets that can do
	      partial update can take advantage of this as
	      damage() will not be cleared to -1.

	      setenv GL_SWAP_TYPE NODAMAGE

	      This indicates that nothing changes the back
	      buffer except drawing into it.  This is true of
	      MESA and Win32 software emulation and perhaps some
	      hardware emulation on systems with lots of memory.

	  All other values for GL_SWAP_TYPE, and not setting
	  the variable, cause fltk to assumme that the back
	  buffer must be completely redrawn after a swap.

	  This is easily tested by running the gl_overlay demo
	  program and seeing if the display is correct when
	  you drag another window over it or if you drag the
	  window off the screen and back on. You have to exit
	  and run the program again for it to see any changes
	  to the environment variable.

	- Optimized colormap usage on 8-bit displays with
	  images. New code only allocates colors as they are
	  needed (still converts indexed images to full RGB and
	  dithers, tho...)

	- Fixed .gif files in FLUID, they were broken by the fix
	  for large .xpm files in version 1.0.9.

	- Fix for OpenGL hardware overlays with the transparent
	  index != 0. Tested on the brand new HP Linux
	  Workstations, this is the only bug encountered.  Both
	  X and OpenGL hardware overlay works perfectly on
	  these, though configue may not enable it by
	  default...)

	- Fl_Choice and all other Fl_Menu_ subclasses draw the
	  items using textcolor() as the default color of the
	  text.

	- Fix suggested by Stuart Levy to fix scrolling when
	  deleting items from the browser.

	- Replaced the -$(MAKEFLAGS) with $(MFLAGS) as per the
	  gmake documenation.  Apperntly this works with other
	  make programs and MAKEFLAGS is passed invisibly by
	  gmake, though the documenation is not too clear...


CHANGES SINCE FLTK 1.0.8

	- More documentation fixes.
	- GLUT_STROKE_*_ROMAN in glut.h are defined as 0,1 on
	  WIN32 to match the glut header files there.
	- Added Fl::has_timeout() and Fl::has_idle() functions.
	- Added new Fl::repeat_timeout() method that
	  measures time from when the last timeout was called. 
	  This has slightly less overhead and allows accurate
	  spacing of timeouts.
	- More Cygwin changes
	- FLUID could crash with identifiers with trailing
	  whitespace.
	- Fixed the XPM loading code in FLUID to handle files
	  longer than 2048 lines.
	- Added a bunch of missing FL_EXTERN's to glut.h to
	  eliminate GLUT linking errors under WIN32.
	- Fix for sliders so that clicking on one with a small
	  (or zero) slider_size will not move the slider.
	- fl_shortcut.cxx didn't export fl_old_shortcut() in the
	  WIN32 DLL.
	- Fixed xpaint link in the documentation.
	- Included Fl_Input word-wrap fixes from Alexander Rabi
	  Beels. This will not affect things much because
	  word-wrap is normally disabled.
	- Patch from Stuart Levy so the *last* widget in an
	  Fl_Pack may be resizable.  This should be compatable
	  because resizable didn't do anything before so there
	  was no reason to set it.
	- Cleaned up the timeout and Fl::wait() code.  The new
	  code calls the clock function less than half as much,
	  which results in a noticable performance improvement
	  in some apps.
	- Fl::wait(time) with a time greater than the system can
	  handle (24.855 days on NT, the same on some Unix
	  systems) will now act as though the time is infinity. 
	  Before it would do unpredictable things.
	- "USE_POLL" now compiles and works, although it is
	  disabled by default. poll() is an alternative to the
	  UNIX select() call which is available on some version
	  of UNIX and may be faster depending on the platform;
	  try it by editing config.h.
	- The WIN32 USE_ASYNC_SELECT code now does translation
	  and dispatching of the select events; this makes
	  Windows a lot happier.
	- Added a check for an open display in Fl::wait() so
	  that you don't need an open window under X to call it.

	  [changes in snapshot 2]

	- fl_old_shortcut() wasn't being exported in the WIN32 DLL
	  project.
	- Updated Cygwin and Mingw makefiles.
	- Updated the BC++ project file.
	- You can no longer insert control chars into Fl_Int/Float_Input.
	- Fl_Multiline_Input now resets the horizontal position when
	  focus is changed; this caused problems when multiple multiline
	  widgets were used in an application.
	- All handle() methods are now public, and all draw() methods are
	  now protected in FLTK widgets.
	- More fixes to the OpenGL overlay code on win32.  This now
	  seems to work quite reliably on several different pieces of
	  hardware. Apparently doing SetLayerPaletteEntries with a
	  palette larger than the overlay size caused the drivers to
	  screw up in unpredictable ways. Also SwapBuffers swapped both
	  the overlay and main window, which is not what fltk's
	  interface wanted, this was easy to fix however.
	- Patch for full scrollbars so that clicking on them does not
	  move anything.
	- Documentation fixes.
	- Better horizontal scrolling of Fl_Input when cursor is near
	  the end of the line.
	- Fl_Input::value(x) selects all text.
	- Fl_Output and Fl_Multiline_Output would scroll to the end
	  of the text.
	- filename_isdir() now drops any trailing slash from the
	  filename (needed for Windows)
	- Added return type for main() function in line_style demo.
	- Running FLUID with the "-cs" option writes the I18N message
	  file.
	- The WIN32 version of XParseGeometry() didn't initialize some
	  variables.  This caused a compiler warning but did not affect
	  the actual code.

	  [changes in snapshot 1]

	- EMail changes - fltk-bugs@easysw.com now officially
	  fltk-bugs@fltk.org.
	- The FLTK DLL project file didn't include fl_compose.cxx
	- Dropped the GCC -fno-rtti option since it caused problems
	  with existing programs.
	- Moved the .fl rules back to the test directory.
	- Fixed some makefile and spec file problems.
	- Fixed hardware overlays.  The problem was the new
	  fl_clipped() code, which tests against the current window
	  size.  The hardware overlay code did not set the current
	  window when drawing the overlay.  I needed hardware overlay
	  for DD's code, I'm not sure if these fixes are good enough to
	  enable this in our general release.  Hardware overlay still
	  only works on SGI Irix.
	- Some patches to turn off the MSVC++ -Oa (assumme no aliasing)
	  optimization flag.  Suprisingly this only broke a few parts
	  of fltk, or at least these are the only ones I found.
	- Does not unmap child windows when the main window is
	  iconized.  This reduces flashing when the window is
	  deiconized.
	- Fl::key() is set to zero by all events except key down/up. 
	  This will allow you to reliably test if an event or callback
	  was produced by a keystroke.  Fixes the bug posted about
	  stopping Escape from closing the window.
	- User defined cursors on OpenGL windows slowed down NT a
	  *LOT*.  Some attempts to fix this by turning off the cursor
	  while drawing the window.
	- Filename completion in the file chooser works better on NT. 
	  Typing TAB fixes the case of everything you typed to match
	  the shortest name that can be completed.


CHANGES SINCE FLTK 1.0.7

	- Many documentation changes/fixes/improvements.
	- FLUID didn't save Fl_Double_Window's as
	  double-buffered windows.
	- Fl_Menu_ text color is used if Fl_Menu_Item text color
	  is not set.
	- Added Fl::first_window(window) method to change the
	  "top" window that is used when showing modal windows.
	  By default it is the window the user last
	  clicked/typed in.
	- The Fl_Menu::global() handler now uses the current top
	  window instead of the menu bar for modal stuff.
	- Added fl_line_style() function to set the line style. 
	  Note that user-defined line styles ONLY WORK UNDER X11
	  and Windows NT/2000. Windows 95/98 do, however,
	  support the "standard" line styles.
	- Fl::wait() does not return immediately when no windows
	- XForms keyboard shortcuts using hex keycode constants
	  now work.
	- Updated the configure script for *BSD and to turn off
	  exceptions and RTTI in the FLTK library itself (does
	  not affect applications which use these things)
	- FLUID now supports I18N using the POSIX or GNU
	  mechanisms.
	- Fixed definition of glutBitmapWidth to match header
	  file.
	- Does not turn visible() on when a window is iconized()
	  or if a modal window is shown and it's parent is
	  iconized.  This allows the code "while (w->visible()
	  && w->damage()) Fl::check();" to reliably wait for the
	  window to be mapped and drawn the first time.
	- Setting box(FL_NO_BOX) on a button makes it an
	  invisible overlay
	- FL_NORMAL_SIZE is now a global variable so you can
	  change the default text size prior to creating your
	  widgets.
	- Menus now draw properly with a box type of
	  FL_FLAT_BOX.
	- Cygwin fixes to compile in POSIX mode.
	- Fl_Value_Input callback can call value() or
	  destructor.
	- OpenGL overlays now work under Windows NT!
	- Fl_Slider and Fl_Scrollbar could cause a divide by
	  zero.
	- Clicking in an Fl_Input field no longer selects the
	  whole field, it just moves the text cursor.
	- Tru64 UNIX fixes for filename_list()
	- Fl_Browser now draws itself properly when deactivated.
	- FLUID GUIs now use Courier font for all code input.
	- The FLUID OK and Cancel buttons are now all shown in
	  the same order in all windows.
	- Fixes to compile under GCC 2.95.2
	- Fixed the BC5 project files.
	- FL_LEFT_MOUSE and friends are now in
	  <FL/Enumerations.H>
	- Fixes for fake OpenGL overlay code under WIN32.
	- Message windows are now resizeable.
	- On WIN32 non_modal (but not modal) windows have the
	  close and size boxes.
	- Fl_Button and friends didn't honor the
	  FL_WHEN_NOT_CHANGED condition.
	- Disabled XDBE on all platforms.
	- XGetDefault patch from James Roth
	- New fl_open_display(Display *) function to allow FLTK
	  to share a display connection with another toolkit
	  (like Xt, GTK, etc.)
	- Shortcut labels for special keys should now display
	  properly under WIN32.
	- fl_set_fonts() did not reuse fonts.
	- Fixed shortcut problem under WIN32 when the focus
	  window changes.
	- "dead" keys should now work under X11.
	- Fixes to make FLTK compile with GCC 2.95.2
	- FL_SHORTCUT fix for I18N.
	- Fixed cut/paste problems under WIN32
	- FLUID now produces correct code for nested class
	  destructors.
	- Nested windows should now redraw properly under WIN32.
	- "table" is now static in fl_cursor.cxx
	- Fl_Chart used the textcolor() and not the color() for
	  horizontal bar charts.
	- Now set the input hint for TWM and TWM-derived window
	  managers.
	- Now look for TrueColor visual if FLTK is compiled with
	  USE_COLORMAP == 0.
	- Fl_Scrollbar could generate a divide-by-0 error if the
	  min and max values were the same.
	- Fl_Menu_::remove() now removes whole submenus if
	  needed.
	- Scrollbar buttons now draw themselves pushed in as
	  needed.
	- Fixed the gl_overlay demo (and gl overlays in general)
	  when they are faked with no hardware and the window is
	  resized.
	- Selections weren't shown in Fl_Browser widgets when an
	  item used the @B (background) format.
	- Windows can now be resized by the program under X11
	  for more window managers.
	- OS/2 makeinclude updates.
	- Added Fl.H required by an inline function in
	  Fl_Repeat_Button.H
	- Fl_add_idle adds new functions to the end of the queue
	  ring, rather than the start, so they are executed in
	  the order added, and a callback that adds itself does
	  not prevent others from being called.
	- FLUID lets you type in code that starts with '#' for
	  cpp directives.
	- XBell() could be called before the X11 display was
	  opened, causing a segfault.
	- Fixed Fl_Gl_Window::ortho() - Borland C++ doesn't
	  define GLint to "int", but instead to "long"...
	- Fixed Fl_Browser scrollbars within an Fl_Scroll
	  widget.
	- Fl_Output (and non-focused Fl_Input) now scroll in
	  response to position()
	- Fl_Input now does not scroll horizontally if the
	  entire string will fit in the widget.
	- Fl_Scrollbar didn't push the right arrow buttons when
	  you clicked outside the scroller.
	- Now use WSAAsyncSelect() for better socket performance
	  with Fl::add_fd()


CHANGES SINCE FLTK 1.0.6

	- Fixed Fl_Input_ bug under WIN32 - no longer stop accepting input
	  when one of the "Windows" keys is pressed.
	- Now call TranslateEvent for all events under WIN32.
	- Fixes for OpenBSD and NetBSD
	- The FL_CURSOR_HAND cursor now uses the IDC_HAND cursor instead of
	  IDC_UPARROW under Windows 98 and 2000.
	- Fl_Scrollbar now does a page-up/down when you click outside the
	  scroller.
	- Fl_Window::show(0, NULL) causes core dump
	- Fixed a compile-time error in fl_call_main.c for Borland C++.
	- "fluid -c filename.fl" would try to open an X display if the
	  FLUID file contained an Fl_Browser widget.
	- Fl_Browser now correctly measures items with @C or @B color
	  formatting commands.
	- Fixed a bitmap drawing bug for WIN32 (bit reversal table was wrong)
	- fl_xyz() dialogs now set a title in the title bar.
	- fl_alert() sounds the bell under X11.
	- fl_xyz() dialogs now call MessageBeep() under WIN32.
	- Fl_Browser_ didn't draw the selection box with the inactive color
	  when the browser wasn't activated.
	- Fl_Browser now responds to FL_KEYBOARD as well as FL_SHORTCUT.  If
	  you subclass it to accept focus then keyboard navigation will work.
	- Fl_Tile and Fl_Tabs do their callback when the user changes their
	  display.
	- Made some of the private methods of Fl_Browser protected.
	- Now set win_gravity correctly, this helps some X
	  window managers that use it position the window where
	  FLTK wants it to be.
	- 0-width browsers crashed.
	- Minor change: if the X window manager does not do
	  anything else with windows that don't have their
	  position specified, the windows appear centered in the
	  screen, rather than in the top-left corner.  This
	  happened with modal windows under Irix 4Dwm.  This
	  also causes windows to be centered when no window
	  manager is running, which might be useful for
	  installation gui programs?
	- Clicking in an Fl_Input field the first time selects the entire
	  field.
	- Clicking the middle mouse button in an Fl_Input field now inserts
	  the text at the indicated position instead of the cursor position.
	- Drag-selecting text in an Fl_Input field now copies the text
	  automatically.
	- Fl::flush() no longer calls the draw() method for invisible windows.
	- Calling deactivate() on an invisible widget could cause an
	  infinite loop in some obscure cases.
	- Added #pragma's for SGI C++ compilers - the 6.{23} X headers had
	  errors in them.
	- Fl_Gl_Window::ortho() changed so that text and images
	  are not erased if the origin is off the left/bottom of the
	  window.
	- Small change to Fl_Input so that a click that gives it
	  the focus also selects all the text.
	- Fixed a slider drawing problem.
	- You can now add/delete children of Fl_Tabs widgets whether or
	  not they are visible.
	- Now embed woff options for SGI C++ compilers (gets rid of X11
	  header warnings)
	- draw_pixmap used a cast that the Digital UNIX C++ compiler didn't
	  like.
	- The GLUT function key constants were off by one.
	- The XPM reading code didn't handle RGB colors other than #rrggbb.


CHANGES SINCE FLTK 1.0.5

    - Fl_win32.cxx defined WM_MOUSE_LEAVE instead of WM_MOUSELEAVE.
    - Fl_get_key_win32.cxx needed to include <ctype.h>
    - gl_draw_pixmap.cxx needed a pointer cast for ANSI C++.
    - Fl_Repeat_Button didn't always delete its timeout.
    - Now keep track of the current OpenGL context; this provides
      significant performance improvements for OpenGL applications
      with a single context.


CHANGES SINCE FLTK 1.0.4

    - Fl_Roller didn't handle a width and height of 0.
    - filename_list() fix for FreeBSD.
    - Fixed RPM install docos - needed "--install" option...
    - Fl_Browser_ wouldn't draw the vertical scrollbar right away if it
      added a horizontal one which covered the last line.
    - Fl_Tabs problems - single-character labels don't show up (problem in
      measure_tabs() or measure_label() methods?), and doesn't clear top
      tab area before drawing tabs.
    - Fl_Browser needs a destructor.
    - fl_draw_label() quoted characters between 0x80 and 0xa0, which
      caused problems for some programs using the WinANSI character set.
    - FLUID didn't handle declared class destructors.
    - Fixed another WIN32 cut/paste bug.
    - Fl_Tabs didn't work properly when there was only 1 tab.
    - Fl_Menu::add() didn't delete the old array.
    - Fl_Repeat_Button didn't delete its timeout when disabled.
    - fl_draw() would crash if no font was set (now defaults to
      a 14-pixel Helvetica font)
    - Can't forward declare classes; need to check for "class ", "struct ",
      "union ", etc.  See Bill's message
    - Added #pragma around xlib.h for IRIX
    - FL_KEYBOARD events have the correct x/y when sent to child X
      windows. Note that if you worked around this bug by adjusting the
      x/y yourself you will have to change your code. In addition all
      events have the correct x/y when sent to the grab() widget.  And
      the code to do all this was simplified a lot.
    - The XPM code didn't handle named colors with spaces in the names.
    - Pressing ESCape closed the window with pointer focus, even if there
      was a modal window open (now closes the modal window).
    - FLUID no longer produces trigraphs accidentally in the image data.
    - FLUID uses string constant concatenation to produce shorter image
      data.
    - The Fl_Group deletion code crashed if there was exactly one child
      widget.
    - Simulated overlays in single-buffered Fl_Gl_Windows now draw
      correctly (though very slowly as it requires the entire window to
      be redrawn to erase the overlay).  This fix ported our Digital
      Domain programs better to systems with no overlay hardware.
    - Added support for extern "C" declarations in FLUID.
    - Added Fl_Pack support to FLUID.
    - Fixed the order of #include's in FLUID generated header files.
    - Fixed detection of vsnprintf and snprintf under HP-UX 10.20 once
      and for all.
    - The checkers demo did not compile with GCC 2.95
    - FLUID didn't output virtual destructors properly.
    - Added inline "make_visible()" method to Fl_Browser.
    - Fl::wait() now returns immediately if any timeouts are
      called.
    - 16-bit XPM files are now properly handled.
    - Fl_Window::resize() was missing FL_EXPORT (caused problems
      with Windows DLLs)
    - FLUID was writing extern declarations twice.
    - New FLUID arrow key functionality: arrows move by one pixel, shift+arrow
      resizes, ctrl+arrow steps by grid


CHANGES SINCE FLTK 1.0.3

    - Documentation updates
    - Fl_Browser::bottomline(size) didn't scroll to the bottom
      if the second-to-last line was visible.
    - fl_wait() didn't poll FDs properly for WIN32.
    - Fixed DLL definitions for BC++.
    - FLUID now handles nested classes properly.
    - The "connect" demo now does a wait() for the PPP process
      so that you aren't left with a lot of zombie processes.
    - Fixed the FLTK colormap to use FF instead of F4 for full
      intensity values.
    - Minor change to scrollbar drawing code to match other
      toolkits.
    - New selections would cancel themselves out in WIN32.
    - The header file links were broken in the IRIX
      distributions.
    - fl_elapsed() now always uses GetClockTick() for WIN32.
    - fl_display is now initialized to GetModuleHandle(NULL) -
      this fixes problems people had with Cygwin and MingW32.
    - WinMain() is no longer compiled in with Cygwin and
      MingW32; it wasn't being used for those compilers anyways.
    - Added Solaris compiler options to configure script.
    - Fl_Value_Input wouldn't update properly if you set the
      value from a callback.
    - Fl_Tile wouldn't resize if the resizeable widget was the
      last child.
    - Was missing #include <ctype.h> and #include <stdlib.h> in
      several files, which caused problems on some platforms.
    - Fixed another case where Fl_Browser_ could get in an
      infinite resizing loop.
    - Fl_win32.cxx now includes <FL/filename.H> to export missing
      DLL symbols.
    - FLUID didn't handle member functions that include the
      scope operator.
    - Fl_Chart was dividing by 0 if there were no data samples
      or if they were all the same (min == max).


CHANGES SINCE FLTK 1.0.2

    - XDBE is now enabled for IRIX 6.[234] as well as 6.5.
    - FLUID didn't write the when() condition properly.
    - Tab/space/backtab/backspace can be used to navigate
      through menus.
    - Changed $(DSONAME) in the src/Makefile to "libfltk.so.1
      libfltk.sl.1".
    - Fl_Browser could read past the end of the string when
      computing the item height.
    - Fl_Browser could get in an infinite loop when checking to
      see if scrollbars needed to be displayed.
    - FLUID now honors the return type of the outermost widget. 
      This was a problem when substituting Fl_Group in an
      Fl_Window widget.
    - Fl_Menu_::copy() wasn't allocating a power of 2 for the
      array size.
    - FLWM would crash if fl_xmousewin was deleted.
    - The fast_slow demo now uses output widgets.
    - Timers under WIN32 were unreliable.


CHANGES SINCE FLTK 1.0.1

    - Documentation updates
    - The Visual C++ project files didn't include fl_add_idle.cxx.
    - LIBRARY/DSO name inconsistencies in src/Makefile.
    - src/Makefile didn't clean the DSO.
    - The valuator demo now has only a single callback.
    - The code looked for HAVE_SYS_SELECT_H, but the
      config file uses HAVE_SYS_SELECT.
    - Fl_Image redraw not quite right under X11 or WIN32
    - Problems with timeouts & cube demo under WIN32
    - FLUID problems with inline functions.
    - Documentation fixes...
    - Fl_Browser::item_height() didn't handle blank lines or
      non-default fonts properly.
    - FL/math.h didn't have #ifndef...#define...#endif guards
      against multiple inclusion...
    - Fl_Menu_::copy() fix - didn't allocate power of 2...
    - Fl::damage() now remains true until all windows are actually
      redrawn.
    - Fl_Widget destructor, hide(), and deactivate() methods no longer
      send FL_LEAVE, FL_RELEASE, or FL_UNFOCUS events to the widget
      (which could cause applications to crash).
    - FLUID now outputs symbolic names for align() and when().
    - Fixed select() to use maxfd + 1 instead of maxfd.
    - Added "Fl::remove_fd(fd, when)" function so you can remove the
      read and write callbacks separately.
    - The Fl::add_fd() and Fl::add_timeout() arrays are now dynamically
      allocated.
    - FLUID didn't always turn the FL_SUBMENU flag on for submenu titles.
    - The "extra code" in FLUID now is placed before the "o->end()" call
      for Fl_Group and its derived classes.
    - You can now set a FL_Window widget's class in FLUID to Fl_Group to
      generate a function or class that builds part of a GUI (i.e. no window).
    - FLUID now displays "Save file before exiting?" with the standard yes,
      no, and cancel buttons rather than "Discard changes?".
    - Fl_Menu_::add() now works with any type of menu, even one set with
      the menu() method.
    - The keypad keys were not always decoded properly under X11.
    - Some pointers were not being turned off when widgets were deleted,
      which caused some applications (like FLWM) to crash.


CHANGES SINCE FLTK 1.0

    - Documentation fixes.
    - Fl::check() didn't return the correct value, breaking a number
      of applications.
    - Fixed FLUID bug that caused styles patch to crash when you delete
      a menu item.
    - Updated valuators demo to put the values in the gui box.
    - Fl_Browser_::item_height() didn't always compute the correct
      value.
    - Fixed the alignment of Fl_Choice text.
    - Fixes for OS/2.
    - Fl_Menu_Item::clear() didn't clear value.
    - Added some changes to make FLTK work with Borland C++.
    - ANSI C++ fixes.
    - Plugged a memory leak in the fractal demo.
    - Fl::add_timeout() didn't work under WIN32 with small values.
    - The configure script and makefiles now define DSONAME and
      use the static library for all example programs.    

Added fltk-1.3/CMake/CheckFunctionWithHeaderExists.cmake.













































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#
# Check if the symbol exists in include files
#
# CHECK_FUNCTIONWITHHEADER_EXISTS - macro which checks the symbol exists in include files.
# SYMBOL - symbol
# FILES  - include files to check
# VARIABLE - variable to return result
#

MACRO(CHECK_FUNCTIONWITHHEADER_EXISTS SYMBOL FILES VARIABLE)
  IF("${VARIABLE}" MATCHES "^${VARIABLE}$")
    SET(CHECK_SYMBOL_EXISTS_CONTENT "/* */\n")
    SET(MACRO_CHECK_SYMBOL_EXISTS_FLAGS ${CMAKE_REQUIRED_FLAGS})
    IF(CMAKE_REQUIRED_LIBRARIES)
      SET(CHECK_SYMBOL_EXISTS_LIBS 
        "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
    ENDIF(CMAKE_REQUIRED_LIBRARIES)
    FOREACH(FILE ${FILES})
      SET(CHECK_SYMBOL_EXISTS_CONTENT
        "${CHECK_SYMBOL_EXISTS_CONTENT}#include <${FILE}>\n")
    ENDFOREACH(FILE)
    SET(CHECK_SYMBOL_EXISTS_CONTENT
      "${CHECK_SYMBOL_EXISTS_CONTENT}\nint main()\n{\n${SYMBOL};return 0;\n}\n")

    FILE(WRITE ${CMAKE_BINARY_DIR}/CMakeTmp/CheckSymbolExists.c 
      "${CHECK_SYMBOL_EXISTS_CONTENT}")

    MESSAGE(STATUS "Looking for ${SYMBOL}")
    TRY_COMPILE(${VARIABLE}
      ${CMAKE_BINARY_DIR}
      ${CMAKE_BINARY_DIR}/CMakeTmp/CheckSymbolExists.c
      CMAKE_FLAGS 
      -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS}
      "${CHECK_SYMBOL_EXISTS_LIBS}"
      OUTPUT_VARIABLE OUTPUT)
    IF(${VARIABLE})
      MESSAGE(STATUS "Looking for ${SYMBOL} - found")
      SET(${VARIABLE} 1 CACHE INTERNAL "Have symbol ${SYMBOL}")
      FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeOutput.log 
        "Determining if the ${SYMBOL} "
        "exist passed with the following output:\n"
        "${OUTPUT}\nFile ${CMAKE_BINARY_DIR}/CMakeTmp/CheckSymbolExists.c:\n"
        "${CHECK_SYMBOL_EXISTS_CONTENT}\n")
    ELSE(${VARIABLE})
      MESSAGE(STATUS "Looking for ${SYMBOL} - not found.")
      SET(${VARIABLE} "" CACHE INTERNAL "Have symbol ${SYMBOL}")
      FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeError.log 
        "Determining if the ${SYMBOL} "
        "exist failed with the following output:\n"
        "${OUTPUT}\nFile ${CMAKE_BINARY_DIR}/CMakeTmp/CheckSymbolExists.c:\n"
        "${CHECK_SYMBOL_EXISTS_CONTENT}\n")
    ENDIF(${VARIABLE})
  ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$")
ENDMACRO(CHECK_FUNCTIONWITHHEADER_EXISTS)

Added fltk-1.3/CMake/FLTKConfig.cmake.in.











































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#-----------------------------------------------------------------------------
#
# FLTKConfig.cmake - FLTK CMake configuration file for external projects.
#
# This file is configured by FLTK and used by the UseFLTK.cmake module
# to load FLTK's settings for an external project.

# The FLTK source tree.
SET(FLTK_SOURCE_DIR "@FLTK_SOURCE_DIR@")

# The FLTK include file directories.
SET(FLUID_COMMAND "@FLTK_FLUID_COMMAND@")
SET(FLTK_EXECUTABLE_DIRS "@FLTK_EXECUTABLE_DIRS@")
SET(FLTK_LIBRARY_DIRS "@FLTK_LIBRARY_DIRS@")
SET(FLTK_LIBRARIES "@FLTK_LIBRARIES@")
SET(FLTK_INCLUDE_DIRS "@FLTK_INCLUDE_DIRS@")

# The C and C++ flags added by FLTK to the cmake-configured flags.
SET(FLTK_REQUIRED_C_FLAGS "@FLTK_REQUIRED_C_FLAGS@")
SET(FLTK_REQUIRED_CXX_FLAGS "@FLTK_REQUIRED_CXX_FLAGS@")

# The FLTK version number
SET(FLTK_VERSION_MAJOR "@FLTK_VERSION_MAJOR@")
SET(FLTK_VERSION_MINOR "@FLTK_VERSION_MINOR@")
SET(FLTK_VERSION_PATCH "@FLTK_VERSION_PATCH@")

# Is FLTK using shared libraries?
SET(FLTK_BUILD_SHARED_LIBS "@BUILD_SHARED_LIBS@")
SET(FLTK_BUILD_SETTINGS_FILE "@FLTK_BUILD_SETTINGS_FILE@")

# The location of the UseFLTK.cmake file.
SET(FLTK11_USE_FILE "@FLTK_USE_FILE@")

# The ExodusII library dependencies.
IF(NOT FLTK_NO_LIBRARY_DEPENDS)
  INCLUDE("@FLTK_LIBRARY_DEPENDS_FILE@")
ENDIF(NOT FLTK_NO_LIBRARY_DEPENDS)

Added fltk-1.3/CMake/FLTKUse.cmake.









































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
IF(NOT FLTK11_FOUND)
  MESSAGE(FATAL_ERROR "Something went wrong. You are including FLTKUse.cmake but FLTK was not found")
ENDIF(NOT FLTK11_FOUND)

# -------------------------------------------------------------
# This macro automates wrapping of Fluid files
# Specify the output variable name and the list of sources
# The output variable can be directly added to the target.
#
# For example:
#   FLTK_WRAP_FLUID(CubeView_SRCS CubeViewUI.fl)
#   ADD_EXECUTABLE(CubeView CubeMain.cxx CubeView.cxx CubeView.h ${CubeView_SRCS})
# -------------------------------------------------------------
MACRO(FLTK_WRAP_FLUID VARIABLE)
  FOREACH(src ${ARGN})
    IF("${src}" MATCHES ".fl$")
      GET_FILENAME_COMPONENT(fname ${src} NAME_WE)
      GET_FILENAME_COMPONENT(fpath ${src} PATH)
      GET_SOURCE_FILE_PROPERTY(gen ${src} GENERATED)
      IF(gen)
        SET(fluid_name "${src}")
      ELSE(gen)
        SET(fluid_name "${CMAKE_CURRENT_SOURCE_DIR}/${fpath}/${fname}.fl")
        IF(NOT EXISTS "${fluid_name}")
          SET(fluid_name "${CMAKE_CURRENT_BINARY_DIR}/${fpath}/${fname}.fl")
          IF(NOT EXISTS "${fluid_name}")
            SET(fluid_name "${fpath}/${fname}.fl")
            IF(NOT EXISTS "${fluid_name}")
              MESSAGE(SEND_ERROR "Cannot find Fluid source file: ${fpath}/${fname}.fl")
            ENDIF(NOT EXISTS "${fluid_name}")
          ENDIF(NOT EXISTS "${fluid_name}")
        ENDIF(NOT EXISTS "${fluid_name}")
      ENDIF(gen)
      SET(cxx_name "${CMAKE_CURRENT_BINARY_DIR}/${fname}.cxx")
      SET(h_name "${CMAKE_CURRENT_BINARY_DIR}/${fname}.h")
      SET(${VARIABLE} "${${VARIABLE}};${cxx_name}")
      ADD_CUSTOM_COMMAND(
        OUTPUT ${cxx_name}
        DEPENDS "${fluid_name}" "${FLUID_COMMAND}"
        COMMAND ${FLUID_COMMAND}
        ARGS -c ${fluid_name})
      ADD_CUSTOM_COMMAND(
        OUTPUT ${h_name}
        DEPENDS "${fluid_name}" "${FLUID_COMMAND}"
        COMMAND ${FLUID_COMMAND}
        ARGS -c ${fluid_name})
    ENDIF("${src}" MATCHES ".fl$")
  ENDFOREACH(src)
ENDMACRO(FLTK_WRAP_FLUID VARIABLE)


# Make FLTK easier to use
INCLUDE_DIRECTORIES(${FLTK_INCLUDE_DIRS})
LINK_DIRECTORIES(${FLTK_LIBRARY_DIRS})

# Load the compiler settings used for FLTK.
IF(FLTK_BUILD_SETTINGS_FILE)
  INCLUDE(CMakeImportBuildSettings)
  CMAKE_IMPORT_BUILD_SETTINGS(${FLTK_BUILD_SETTINGS_FILE})
ENDIF(FLTK_BUILD_SETTINGS_FILE)

# Add compiler flags needed to use FLTK.
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLTK_REQUIRED_C_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLTK_REQUIRED_CXX_FLAGS}")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLTK_REQUIRED_EXE_LINKER_FLAGS}")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${FLTK_REQUIRED_SHARED_LINKER_FLAGS}")
SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${FLTK_REQUIRED_MODULE_LINKER_FLAGS}")

Added fltk-1.3/CMake/PlatformTests.cxx.



































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#ifdef HAVE_LIBZ

#include <zlib.h>

int main()
{
	unsigned long compressedSize = 0;
	unsigned char cd[100];
	const unsigned char ud[100] = "";
	unsigned long uncompressedSize = 0;

	// Call zlib's compress function.
	if(compress(cd, &compressedSize, ud, uncompressedSize) != Z_OK)
		{
		return 0;
		}
	return 1;
}


#endif

#ifdef HAVE_LIBJPEG

#include <stdio.h>
#include <jpeglib.h>

int main()
{
	struct jpeg_decompress_struct cinfo;
	jpeg_create_decompress(&cinfo);
	jpeg_read_header(&cinfo, TRUE);
	return 1;
}

#endif

#ifdef HAVE_LIBPNG
#include <png.h>
int main()
{
	png_structp png_ptr = png_create_read_struct
		(PNG_LIBPNG_VER_STRING, (png_voidp)NULL,
		 NULL, NULL);
	png_infop info_ptr = png_create_info_struct(png_ptr);
	png_set_sig_bytes(png_ptr, 8);
	png_read_info(png_ptr, info_ptr);

	return 0;
}
#endif

#ifdef HAVE_PNG_H
#include <png.h>
int main() { retunr 0;}
#endif

#ifdef HAVE_PNG_GET_VALID
#include <png.h>
int main()
{
	png_structp png_ptr = png_create_read_struct
		(PNG_LIBPNG_VER_STRING, (png_voidp)NULL,
		 NULL, NULL);
	png_infop info_ptr = png_create_info_struct(png_ptr);
	png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS);
	return 0;
}
#endif

#ifdef HAVE_PNG_SET_TRNS_TO_ALPHA
#include <png.h>
int main()
{
	png_structp png_ptr = png_create_read_struct
		(PNG_LIBPNG_VER_STRING, (png_voidp)NULL,
		 NULL, NULL);
	png_set_tRNS_to_alpha(png_ptr);
	return 0;
}
#endif

Added fltk-1.3/CMakeLists.txt.

























































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
# Written by Andy Cedilnik and Julien Jomier

PROJECT(FLTK)
CMAKE_MINIMUM_REQUIRED(VERSION 2.0)

# The FLTK version
SET(FLTK_VERSION_MAJOR "1")
SET(FLTK_VERSION_MINOR "3")
SET(FLTK_VERSION_PATCH "0")
SET(FLTK_VERSION "${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}")
SET(FLTK_VERSION_FULL "${FLTK_VERSION}.${FLTK_VERSION_PATCH}")

SET(FLTK_LIBRARIES "fltk_images;fltk;fltk_gl;fltk_forms")

# Executables and libraries should just go to bin
SET(EXECUTABLE_OUTPUT_PATH "${FLTK_BINARY_DIR}/bin" CACHE INTERNAL 
  "Where to put the executables for FLTK"
  )
SET(LIBRARY_OUTPUT_PATH "${FLTK_BINARY_DIR}/bin" CACHE INTERNAL 
  "Where to put the libraries for FLTK"
  )

# Allow building shared libraries
OPTION(BUILD_SHARED_LIBS "Build FLTK as a shared library" OFF)

# Search for modules in the FLTK source dir first
SET(CMAKE_MODULE_PATH "${FLTK_SOURCE_DIR}/CMake")

#-----------------------------------------------------------------------------
# Test for some required system information.
FIND_PACKAGE(Threads)
SET (CMAKE_USE_PTHREADS 
  "${CMAKE_USE_PTHREADS_INIT}" CACHE BOOL "Use the pthreads library.")

# We need ansi c-flags, especially on HP
SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
SET(CMAKE_REQUIRED_FLAGS ${CMAKE_ANSI_CFLAGS})
 
IF(WIN32)
  IF(NOT CYGWIN)
    IF(BORLAND)
      SET( FLTK_PLATFORM_DEPENDENT_LIBS import32 )
    ELSE(BORLAND)
      SET( FLTK_PLATFORM_DEPENDENT_LIBS comctl32 )
    ENDIF(BORLAND)
  ENDIF(NOT CYGWIN)
ENDIF(WIN32)

# OS X with X11 is not currently supported!
SET(FLTK_X11 1)
SET(FLTK_APPLE 0)
IF(APPLE)
  OPTION(FLTK_APPLE_X11 "Use X11 on Mac instead of Carbon" OFF)
  MARK_AS_ADVANCED(FLTK_APPLE_X11)
  IF(NOT FLTK_APPLE_X11)
    SET(FLTK_APPLE 1)
    SET(FLTK_X11 0)
    OPTION(FLTK_QUARTZ "Use Quartz instead of Quickdraw" OFF)
  ENDIF(NOT FLTK_APPLE_X11)
ENDIF(APPLE)

IF(UNIX AND NOT APPLE)
  FIND_PACKAGE(X11)
  ADD_DEFINITIONS(-DUSE_X11)
  SET( FLTK_PLATFORM_DEPENDENT_LIBS ${X11_LIBRARIES} -lm)
ENDIF(UNIX)

IF(APPLE AND NOT FLTK_APPLE_X11)
  SET( FLTK_PLATFORM_DEPENDENT_LIBS
    "-framework Carbon -framework Cocoa -framework ApplicationServices -lz")
ENDIF(APPLE AND NOT FLTK_APPLE_X11)

IF(CYGWIN)
  ADD_DEFINITIONS(-DWIN32)  
  SET( FLTK_PLATFORM_DEPENDENT_LIBS ole32 uuid comctl32 supc++ -lm -lgdi32)
ENDIF(CYGWIN)

IF(MINGW)
  ADD_DEFINITIONS(-DWIN32)
  SET( FLTK_PLATFORM_DEPENDENT_LIBS ole32 uuid comctl32 gdi32 comdlg32)
ENDIF(MINGW)

INCLUDE(CheckIncludeFiles)
# Check if header file exists and add it to the list.
MACRO(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
  CHECK_INCLUDE_FILES("${PROJECT_INCLUDES};${FILE}" ${VARIABLE})
  IF(${VARIABLE})
    SET(PROJECT_INCLUDES ${PROJECT_INCLUDES} ${FILE})
  ENDIF(${VARIABLE})
ENDMACRO(CHECK_INCLUDE_FILE_CONCAT)
CHECK_INCLUDE_FILE_CONCAT("GL/glu.h"       HAVE_GL_GLU_H)
CHECK_INCLUDE_FILE_CONCAT("OpenGL/glu.h"   HAVE_OPENGL_GLU_H)
CHECK_INCLUDE_FILE_CONCAT("dirent.h"       HAVE_DIRENT_H)
CHECK_INCLUDE_FILE_CONCAT("stdio.h"        HAVE_STDIO_H)
CHECK_INCLUDE_FILE_CONCAT("strings.h"      HAVE_STRINGS_H)
CHECK_INCLUDE_FILE_CONCAT("sys/dir.h"      HAVE_SYS_DIR_H)
CHECK_INCLUDE_FILE_CONCAT("sys/ndir.h"     HAVE_SYS_NDIR_H)
CHECK_INCLUDE_FILE_CONCAT("sys/select.h"   HAVE_SYS_SELECT_H)
CHECK_INCLUDE_FILE_CONCAT("sys/stdtypes.h" HAVE_SYS_STDTYPES_H)
CHECK_INCLUDE_FILE("pthread.h"      CMAKE_HAVE_PTHREAD_H)

FIND_PACKAGE(ZLIB)
FIND_PACKAGE(PNG)
FIND_PACKAGE(JPEG)

INCLUDE(CheckSymbolExists)
INCLUDE(CheckFunctionWithHeaderExists)

CHECK_FUNCTIONWITHHEADER_EXISTS("int strcasecmp()"  "${PROJECT_INCLUDES}" HAVE_STRCASECMP)

CHECK_SYMBOL_EXISTS(strlcat       "${PROJECT_INCLUDES}" HAVE_STRLCAT)
CHECK_SYMBOL_EXISTS(strlcpy       "${PROJECT_INCLUDES}" HAVE_STRLCPY)
CHECK_SYMBOL_EXISTS(vsnprintf     "${PROJECT_INCLUDES}" HAVE_VSNPRINTF)
CHECK_SYMBOL_EXISTS(snprintf      "${PROJECT_INCLUDES}" HAVE_SNPRINTF)
CHECK_SYMBOL_EXISTS(scandir       "${PROJECT_INCLUDES}" HAVE_SCANDIR)

INCLUDE(CheckTypeSize)

CHECK_TYPE_SIZE(short SIZEOF_SHORT)
CHECK_TYPE_SIZE(int   SIZEOF_INT)
CHECK_TYPE_SIZE(long  SIZEOF_LONG)

IF(${SIZEOF_SHORT} MATCHES "^2$")
  SET(U16 "unsigned short")
ENDIF(${SIZEOF_SHORT} MATCHES "^2$")

IF(${SIZEOF_INT} MATCHES "^4$")
  SET(U32 "unsigned")
ELSE(${SIZEOF_INT} MATCHES "^4$")
  IF(${SIZEOF_LONG} MATCHES "^4$")
    SET(U32 "unsigned long")
  ENDIF(${SIZEOF_LONG} MATCHES "^4$")
ENDIF(${SIZEOF_INT} MATCHES "^4$")

IF(${SIZEOF_INT} MATCHES "^8$")
  SET(U64 "unsigned")
ELSE(${SIZEOF_INT} MATCHES "^8$")
  IF(${SIZEOF_LONG} MATCHES "^8$")
    SET(U64 "unsigned long")
  ENDIF(${SIZEOF_LONG} MATCHES "^8$")
ENDIF(${SIZEOF_INT} MATCHES "^8$")

# Set an option to build FLTK with OpenGL support
SET(HAVE_GL 0)
OPTION(USE_OPENGL "OpenGL Support" ON)
IF(USE_OPENGL)
  FIND_PACKAGE(OpenGL)
  IF(OPENGL_FOUND)
    SET(HAVE_GL 1)
    INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
  ENDIF(OPENGL_FOUND)
ENDIF(USE_OPENGL)

#
# Perform the FLTK specific test with status output
#
MACRO(PERFORM_CMAKE_TEST FILE TEST)
  IF("${TEST}" MATCHES "^${TEST}$")
    # Perform test
    SET(MACRO_CHECK_FUNCTION_DEFINITIONS 
      "-D${TEST} ${CMAKE_REQUIRED_FLAGS}")
    IF(CMAKE_REQUIRED_LIBRARIES)
      SET(TEST_ADD_LIBRARIES
        "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
    ENDIF(CMAKE_REQUIRED_LIBRARIES)
    MESSAGE(STATUS "Performing Test ${TEST}")

    TRY_COMPILE(${TEST}
      ${CMAKE_BINARY_DIR}
      ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}
      CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
      -DLINK_LIBRARIES:STRING=${CMAKE_TEST_SPECIAL_LIBRARIES}
      "${TEST_ADD_LIBRARIES}"
      OUTPUT_VARIABLE OUTPUT)
    IF(${TEST})
      SET(${TEST} 1 CACHE INTERNAL "CMake test ${FUNCTION}")
      MESSAGE(STATUS "Performing Test ${TEST} - Success")
    ELSE(${TEST})
      MESSAGE(STATUS "Performing Test ${TEST} - Failed")
      SET(${TEST} 0 CACHE INTERNAL "Test ${FUNCTION}")
      WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeError.log 
        "Performing Test ${TEST} failed with the following output:\n"
        "${OUTPUT}\n" APPEND)
    ENDIF(${TEST})
  ENDIF("${TEST}" MATCHES "^${TEST}$")
ENDMACRO(PERFORM_CMAKE_TEST FILE TEST)

# Set an option to build the zlib library or not
OPTION(FLTK_USE_SYSTEM_ZLIB "Use's system zlib" OFF)
IF(FLTK_USE_SYSTEM_ZLIB)
  IF(ZLIB_FOUND)
    SET(CMAKE_TEST_SPECIAL_LIBRARIES ${ZLIB_LIBRARIES})
    SET(FLTK_ZLIB_LIBRARIES ${ZLIB_LIBRARIES})
    PERFORM_CMAKE_TEST(CMake/PlatformTests.cxx HAVE_LIBZ)
  ENDIF(ZLIB_FOUND)
  # We build the fltk zlib
ELSE(FLTK_USE_SYSTEM_ZLIB)
  MARK_AS_ADVANCED(ZLIB_INCLUDE_DIR)
  MARK_AS_ADVANCED(ZLIB_LIBRARY)
  SUBDIRS(zlib)
  SET(HAVE_LIBZ 1)
  SET(FLTK_ZLIB_LIBRARIES fltk_zlib)
  SET(FLTK_LIBRARIES "${FLTK_LIBRARIES};fltk_zlib")
  INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/zlib")
ENDIF(FLTK_USE_SYSTEM_ZLIB)

# Set an option to build the jpeg library or not
OPTION(FLTK_USE_SYSTEM_JPEG "Use's system jpeg" OFF)
IF(FLTK_USE_SYSTEM_JPEG)
  IF(JPEG_FOUND)
    SET(CMAKE_TEST_SPECIAL_LIBRARIES ${JPEG_LIBRARIES})
    SET(FLTK_JPEG_LIBRARIES ${JPEG_LIBRARIES})
    PERFORM_CMAKE_TEST(CMake/PlatformTests.cxx HAVE_LIBJPEG)
  ENDIF(JPEG_FOUND)
  # We build the fltk png
ELSE(FLTK_USE_SYSTEM_JPEG)
  MARK_AS_ADVANCED(JPEG_INCLUDE_DIR)
  MARK_AS_ADVANCED(JPEG_LIBRARY)
  SUBDIRS(jpeg)
  SET(HAVE_LIBJPEG 1)
  SET(FLTK_JPEG_LIBRARIES fltk_jpeg)
  SET(FLTK_LIBRARIES "${FLTK_LIBRARIES};fltk_jpeg")
  INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/jpeg")
ENDIF(FLTK_USE_SYSTEM_JPEG)

# Set an option to build the png library or not
OPTION(FLTK_USE_SYSTEM_PNG "Use's system png" OFF)
IF(FLTK_USE_SYSTEM_PNG)
  IF(PNG_FOUND)
    SET(CMAKE_TEST_SPECIAL_LIBRARIES ${PNG_LIBRARIES})
    SET(FLTK_PNG_LIBRARIES ${PNG_LIBRARIES})
    PERFORM_CMAKE_TEST(CMake/PlatformTests.cxx HAVE_LIBPNG)
    PERFORM_CMAKE_TEST(CMake/PlatformTests.cxx HAVE_PNG_GET_VALID)
    PERFORM_CMAKE_TEST(CMake/PlatformTests.cxx HAVE_PNG_SET_TRNS_TO_ALPHA)
    SET(HAVE_PNG_H 1)
  ENDIF(PNG_FOUND)
  # We build the fltk png
ELSE(FLTK_USE_SYSTEM_PNG)
  MARK_AS_ADVANCED(PNG_INCLUDE_DIR)
  MARK_AS_ADVANCED(PNG_LIBRARY)
  SUBDIRS(png)
  SET(HAVE_LIBPNG 1)
  SET(HAVE_PNG_H 1)
  SET(FLTK_PNG_LIBRARIES fltk_png)
  SET(FLTK_LIBRARIES "${FLTK_LIBRARIES};fltk_png")
  INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/png")
ENDIF(FLTK_USE_SYSTEM_PNG)

SET(FLTK_DATADIR "${CMAKE_INSTALL_PREFIX}/share/FLTK")
SET(FLTK_DOCDIR  "${CMAKE_INSTALL_PREFIX}/share/doc/FLTK")

# Write out configuration header file
CONFIGURE_FILE(${FLTK_SOURCE_DIR}/configh.cmake.in
  ${FLTK_BINARY_DIR}/config.h)

# On unix create symlinks for backward compatibility
SET(FLTK_CREATE_SYMLINKS 1)
IF(WIN32)
  IF(NOT UNIX)
    SET(FLTK_CREATE_SYMLINKS 0)
  ENDIF(NOT UNIX)
ENDIF(WIN32)

MACRO(SAFE_CREATE_SYMLINK SOURCE DESTINATION)
  IF(EXISTS "${DESTINATION}")
  ELSE(EXISTS "${DESTINATION}")
    MESSAGE(STATUS "Create symlink from: \"${SOURCE}\" to \"${DESTINATION}\"")
    # The quoting here does seems unnatural, but this is to prevent bug in CMake
    EXEC_PROGRAM(ln ARGS 
      "-s \"${SOURCE}\" \"${DESTINATION}\"" OUTPUT_VARIABLE ln_output
      RETURN_VALUE ln_retval)
    IF("${ln_retval}" GREATER 0)
      MESSAGE(FATAL_ERROR "Problem creatin symlink from \"${SOURCE}\" to \"${DESTINATION}\":\n${ln_output}")
    ENDIF("${ln_retval}" GREATER 0)
  ENDIF(EXISTS "${DESTINATION}")
ENDMACRO(SAFE_CREATE_SYMLINK SOURCE DESTINATION)

# If this is out-of-source build, then copy FL directory
FILE(GLOB FLTK_HEADER_FILES "${FLTK_SOURCE_DIR}/FL/*.[hHr]")
FOREACH(file ${FLTK_HEADER_FILES})
  GET_FILENAME_COMPONENT(ext "${file}" EXT)
  GET_FILENAME_COMPONENT(namewe "${file}" NAME_WE)
  GET_FILENAME_COMPONENT(name "${file}" NAME)
  STRING(COMPARE EQUAL "${ext}" ".h" lower_case_h)
  STRING(COMPARE EQUAL "${ext}" ".H" upper_case_h)
  IF(lower_case_h OR upper_case_h)
    SET(outfile_h "${FLTK_BINARY_DIR}/FL/${namewe}.h")
    SET(outfile_H "${FLTK_BINARY_DIR}/FL/${namewe}.H")
    CONFIGURE_FILE("${file}" "${outfile_H}" COPYONLY IMMEDIATE)
    CONFIGURE_FILE("${file}" "${outfile_h}" COPYONLY IMMEDIATE)
#    IF(FLTK_CREATE_SYMLINKS)
#      SAFE_CREATE_SYMLINK("${outfile_H}" "${outfile_h}")
#    ENDIF(FLTK_CREATE_SYMLINKS)
  ELSE(lower_case_h OR upper_case_h)
    STRING(COMPARE EQUAL "${ext}" ".r" mac_resource_file)
    IF(mac_resource_file)
      SET(outfile "${FLTK_BINARY_DIR}/FL/${name}")
      CONFIGURE_FILE("${file}" "${outfile}" COPYONLY IMMEDIATE)
    ENDIF(mac_resource_file)
  ENDIF(lower_case_h OR upper_case_h)
ENDFOREACH(file)

IF(FLTK_CREATE_SYMLINKS)
  SAFE_CREATE_SYMLINK(
    "${FLTK_BINARY_DIR}/FL"
    "${FLTK_BINARY_DIR}/Fl")

  SAFE_CREATE_SYMLINK(
    "${FLTK_BINARY_DIR}/FL/gl.H"
    "${FLTK_BINARY_DIR}/FL/gl.h")

  # Create the symlinks
  FILE(READ ${FLTK_SOURCE_DIR}/fltk.list.in SYMLINKSFILE)
  STRING(REGEX MATCHALL "(l 0000 root sys .includedir/)([^(\n)])+"
  SYMLINKS ${SYMLINKSFILE})
  FOREACH(var ${SYMLINKS} )
    IF("${var}" MATCHES ".H")
      STRING(REGEX MATCH "(/F)([^(\n)])+" tmp ${var})
      STRING(REGEX MATCH "(/F)([^( )])+" in ${tmp})
      STRING(REGEX MATCH "( )([^(\n)])+" out ${tmp}) 
      STRING(REGEX REPLACE "( )" "" out ${out})
      SAFE_CREATE_SYMLINK("${FLTK_BINARY_DIR}/FL/${out}" "${FLTK_BINARY_DIR}/${in}")
    ENDIF("${var}" MATCHES ".H")
  ENDFOREACH(var)
ENDIF(FLTK_CREATE_SYMLINKS)

# Set the fluid executable path
UTILITY_SOURCE(FLUID_COMMAND fluid fluid fluid.cxx)
SET(FLUID_COMMAND "${FLUID_COMMAND}" CACHE INTERNAL "" FORCE)

# Include header files in fltk binary tree
INCLUDE_DIRECTORIES(${FLTK_BINARY_DIR})

# Do the build of fltk libraries and fluid
SUBDIRS(src)
SUBDIRS(fluid)


# Set an option to build the examples and testing
OPTION(BUILD_EXAMPLES "Build the tests" ON)
IF(BUILD_EXAMPLES)
  SUBDIRS(test)
ENDIF(BUILD_EXAMPLES)

OPTION(BUILD_TESTING "Build testing of FLTK" ON)
IF(BUILD_TESTING)
  ENABLE_TESTING()
  INCLUDE(Dart)
ENDIF(BUILD_TESTING)

#-----------------------------------------------------------------------------
# Help outside projects build FLTK projects.
INCLUDE(CMakeExportBuildSettings)
EXPORT_LIBRARY_DEPENDENCIES(${FLTK_BINARY_DIR}/FLTKLibraryDepends.cmake)
CMAKE_EXPORT_BUILD_SETTINGS(${FLTK_BINARY_DIR}/FLTKBuildSettings.cmake)
SET(FL_MAJOR_VERSION "${FLTK_VERSION_MAJOR}")
SET(FL_MINOR_VERSION "${FLTK_VERSION_MINOR}")
SET(FL_PATCH_VERSION "${FLTK_VERSION_PATCH}")

SET(CFLAGS "${CMAKE_C_FLAGS}")
SET(CXXFLAGS "${CMAKE_CXX_FLAGS}")
SET(CC "${CMAKE_C_COMPILER}")
SET(CXX "${CMAKE_CXX_COMPILER}")

# For build tree usage
SET(FLTK_FLUID_COMMAND "${FLUID_COMMAND}")
SET(FLTK_LIBRARY_DEPENDS_FILE ${FLTK_BINARY_DIR}/FLTKLibraryDepends.cmake)
SET(FLTK_EXECUTABLE_DIRS ${EXECUTABLE_OUTPUT_PATH})
SET(FLTK_LIBRARY_DIRS ${LIBRARY_OUTPUT_PATH})
SET(FLTK_USE_FILE ${FLTK_SOURCE_DIR}/CMake/FLTKUse.cmake)
SET(FLTK_INCLUDE_DIRS "${FLTK_BINARY_DIR}/")
SET(FLTK_BUILD_SETTINGS_FILE ${FLTK_BINARY_DIR}/FLTKBuildSettings.cmake)
SET(prefix "${FLTK_BINARY_DIR}")
SET(exec_prefix "${prefix}")
SET(exec_prefix_set "no")
SET(bindir "${prefix}/bin")
SET(includedir "${prefix}")
SET(libdir "${prefix}/bin")
SET(srcdir "${FLTK_SOURCE_DIR}")

CONFIGURE_FILE("${FLTK_SOURCE_DIR}/CMake/FLTKConfig.cmake.in"
  "${FLTK_BINARY_DIR}/FLTKConfig.cmake" @ONLY IMMEDIATE)
CONFIGURE_FILE("${FLTK_SOURCE_DIR}/fltk-config.in"
  "${FLTK_BINARY_DIR}/fltk-config" @ONLY IMMEDIATE)

# For installed tree usage
SET(FLTK_FLUID_COMMAND "${CMAKE_INSTALL_PREFIX}/bin/fluid")
SET(FLTK_LIBRARY_DEPENDS_FILE ${CMAKE_INSTALL_PREFIX}/lib/FLTK-${FLTK_VERSION}/FLTKLibraryDepends.cmake)
SET(FLTK_EXECUTABLE_DIRS "${CMAKE_INSTALL_PREFIX}/bin")
SET(FLTK_LIBRARY_DIRS "${CMAKE_INSTALL_PREFIX}/lib")
SET(FLTK_USE_FILE "${CMAKE_INSTALL_PREFIX}/lib/FLTK-${FLTK_VERSION}/FLTKUse.cmake")
SET(FLTK_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/")
SET(FLTK_BUILD_SETTINGS_FILE ${CMAKE_INSTALL_PREFIX}/lib/FLTK-${FLTK_VERSION}/FLTKBuildSettings.cmake)
SET(prefix "${CMAKE_INSTALL_PREFIX}")
SET(exec_prefix "${prefix}")
SET(exec_prefix_set "no")
SET(bindir "${prefix}/bin")
SET(includedir "${prefix}")
SET(libdir "${prefix}/lib")
SET(srcdir ".")

CONFIGURE_FILE("${FLTK_SOURCE_DIR}/CMake/FLTKConfig.cmake.in"
  "${FLTK_BINARY_DIR}/CMake/FLTKConfig.cmake" @ONLY IMMEDIATE)
CONFIGURE_FILE("${FLTK_SOURCE_DIR}/fltk-config.in"
  "${FLTK_BINARY_DIR}/CMake/fltk-config" @ONLY IMMEDIATE)

INSTALL_FILES(/include/FL FILES ${FLTK_HEADER_FILES})
INSTALL_FILES(/lib/FLTK-${FLTK_VERSION} FILES "${FLTK_SOURCE_DIR}/CMake/FLTKUse.cmake")
INSTALL_FILES(/lib/FLTK-${FLTK_VERSION} FILES "${FLTK_BINARY_DIR}/FLTKBuildSettings.cmake")
INSTALL_FILES(/lib/FLTK-${FLTK_VERSION} FILES "${FLTK_BINARY_DIR}/FLTKLibraryDepends.cmake")
INSTALL_FILES(/lib/FLTK-${FLTK_VERSION} FILES "${FLTK_BINARY_DIR}/CMake/FLTKConfig.cmake")

Added fltk-1.3/COPYING.

































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
                             FLTK License
                           December 11, 2001

The FLTK library and included programs are provided under the terms
of the GNU Library General Public License (LGPL) with the following
exceptions:

    1. Modifications to the FLTK configure script, config
       header file, and makefiles by themselves to support
       a specific platform do not constitute a modified or
       derivative work.

       The authors do request that such modifications be
       contributed to the FLTK project - send all
       contributions to "fltk-bugs@fltk.org".

    2. Widgets that are subclassed from FLTK widgets do not
       constitute a derivative work.

    3. Static linking of applications and widgets to the
       FLTK library does not constitute a derivative work
       and does not require the author to provide source
       code for the application or widget, use the shared
       FLTK libraries, or link their applications or
       widgets against a user-supplied version of FLTK.

       If you link the application or widget to a modified
       version of FLTK, then the changes to FLTK must be
       provided under the terms of the LGPL in sections
       1, 2, and 4.

    4. You do not have to provide a copy of the FLTK license
       with programs that are linked to the FLTK library, nor
       do you have to identify the FLTK license in your
       program or documentation as required by section 6
       of the LGPL.

       However, programs must still identify their use of FLTK.
       The following example statement can be included in user
       documentation to satisfy this requirement:

           [program/widget] is based in part on the work of
           the FLTK project (http://www.fltk.org).

-----------------------------------------------------------------------

		  GNU LIBRARY GENERAL PUBLIC LICENSE
			 Version 2, June 1991

	  Copyright (C) 1991 Free Software Foundation, Inc.
       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

     Everyone is permitted to copy and distribute verbatim copies
      of this license document, but changing it is not allowed.

    [This is the first released version of the library GPL.  It is
   numbered 2 because it goes with version 2 of the ordinary GPL.]

			       Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Library General Public License, applies to some
specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it.  You can use it for
your libraries, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if
you distribute copies of the library, or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link a program with the library, you must provide
complete object files to the recipients so that they can relink them
with the library, after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.

  Also, for each distributor's protection, we want to make certain
that everyone understands that there is no warranty for this free
library.  If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, so that any problems introduced by others will not reflect on
the original authors' reputations.
 
  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software.  To prevent this,
we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.

  Most GNU software, including some libraries, is covered by the ordinary
GNU General Public License, which was designed for utility programs.  This
license, the GNU Library General Public License, applies to certain
designated libraries.  This license is quite different from the ordinary
one; be sure to read it in full, and don't assume that anything in it is
the same as in the ordinary license.

  The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it.  Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program.  However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.

  Because of this blurred distinction, using the ordinary General
Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries.  We
concluded that weaker conditions might promote sharing better.

  However, unrestricted linking of non-free programs would deprive the
users of those programs of all benefit from the free status of the
libraries themselves.  This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them.  (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.)  The hope is that this
will lead to faster development of free libraries.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, while the latter only
works together with the library.

  Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.
 
		  GNU LIBRARY GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called "this License").  Each licensee is
addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
 
  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.
 
  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
 
  6. As an exception to the Sections above, you may also compile or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    c) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    d) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the source code distributed need not include anything that is normally
distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
 
  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
 
  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Library General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
 
  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS
 
     Appendix: How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free
    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

Added fltk-1.3/CREDITS.

















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
CREDITS - Fast Light Tool Kit (FLTK) Version 1.3.0
--------------------------------------------------

    This file lists the people responsible for the toolkit you
    are now using.  If you've looking for your name in lights
    but we've forgotten you here, please send an email to
    "fltk-bugs@fltk.org" and we'll update this file accordingly.


CORE DEVELOPERS

    The following people do the day-to-day development of FLTK:

	Fabien Costantini (fabien67@users.sf.net)
	Craig P. Earls
	Curtis Edwards (trilec@users.sourceforge.net)
	Gustavo Hime (hime@users.sourceforge.net)
	Talbot Hughes
	Robert Kesterson (robertk@users.sourceforge.net)
	Matthias Melcher (mm@robowerk.com)
	James Dean Palmer (jamespalmer@users.sourceforge.net)
	Vincent Penne (vincentp@users.sourceforge.net)
	Bill Spitzak (spitzak@users.sourceforge.net)
	Michael Sweet (easysw@users.sourceforge.net)
	Carl Thompson (clip@users.sourceforge.net)
	Nafees Bin Zafar (nafees@users.sourceforge.net)


OTHER CONTRIBUTORS

    The following people have contributed fixes or enhancements
    for FLTK:

	Teun Burgers
	Paul Chambers
	Stephen Davies
	Yuri D'Elia
	Greg Ercolano
	Yuri Fedorchenko
	George Garvey
	Duncan Gibson
	Mikael Hultgren
	Stuart Levy
	Howard Lightstone
	Mike Lindner
	Alexander Mai
	Alexander Rabi
	James Roth
	Albrecht Schlosser
	Andrea Suatoni
	Paul Sydney
	Aaron Ucko
	Emanuele Vicentini
	Josef Vitu
	Jim Wilson
	Ken Yarnall

Added fltk-1.3/DartConfig.cmake.













































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# Dashboard is opened for submissions for a 24 hour period starting at
# the specified NIGHLY_START_TIME. Time is specified in 24 hour format.
SET (NIGHTLY_START_TIME "21:00:00 EDT")

# Dart server to submit results (used by client)
SET (DROP_METHOD "http")
SET (DROP_SITE "public.kitware.com")
SET (DROP_LOCATION "/cgi-bin/HTTPUploadDartFile.cgi")
SET (TRIGGER_SITE "http://${DROP_SITE}/cgi-bin/Submit-Fltk-TestingResults.pl")

# Project Home Page
SET (PROJECT_URL "http://www.fltk.org")

# Dart server configuration 
SET (ROLLUP_URL "http://${DROP_SITE}/cgi-bin/fltk-rollup-dashboard.sh")
SET (CVS_WEB_URL "http://cvs.sourceforge.net/viewcvs.py/fltk/fltk/")
SET (CVS_WEB_CVSROOT "fltk")

SET (USE_GNATS "On")
SET (GNATS_WEB_URL "http://www.fltk.org/str.php")

# Continuous email delivery variables
SET (CONTINUOUS_FROM "fltk-dashboard@public.kitware.com")
SET (SMTP_MAILHOST "public.kitware.com")
SET (CONTINUOUS_MONITOR_LIST "fltk-dashboard@public.kitware.com")
SET (CONTINUOUS_BASE_URL "http://public.kitware.com/Fltk/Testing")

SET (DELIVER_BROKEN_BUILD_EMAIL_WITH_TEST_FAILURES ON)
SET (DELIVER_BROKEN_BUILD_EMAIL "Continuous Nightly")
SET (EMAIL_FROM "fltk-dashboard@public.kitware.com")
SET (DARTBOARD_BASE_URL "http://public.kitware.com/Fltk/Testing")

SET (DELIVER_BROKEN_BUILD_EMAIL_WITH_CONFIGURE_FAILURES 1)
SET (DELIVER_BROKEN_BUILD_EMAIL_WITH_BUILD_ERRORS 1)
SET (DELIVER_BROKEN_BUILD_EMAIL_WITH_BUILD_WARNINGS 1)
SET (DELIVER_BROKEN_BUILD_EMAIL_WITH_TEST_NOT_RUNS 1)
SET (DELIVER_BROKEN_BUILD_EMAIL_WITH_TEST_FAILURES 1)

Added fltk-1.3/FL/Enumerations.H.





















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
//
// "$Id: Enumerations.H 6902 2009-09-27 11:06:56Z matt $"
//
// Enumerations for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/** \file
 *  This file contains type definitions and general enumerations.
 */

#ifndef Fl_Enumerations_H
#define Fl_Enumerations_H

#  include "Fl_Export.H"
#  include "fl_types.h"

/** \name Version Numbers

    FLTK defines some constants to help the programmer to
    find out, for which FLTK version a program is compiled.
    
    The following constants are defined:
 */
/*@{*/

/**
 * The major release version of this FLTK library.
   \sa FL_VERSION
 */
#define FL_MAJOR_VERSION	1

/**
 * The minor release version for this library.
 *
 * FLTK remains mostly source-code compatible between minor version changes.
 */
#define FL_MINOR_VERSION	3

/**
 * The patch version for this library.
 *
 * FLTK remains binary compatible between patches.
 */
#define FL_PATCH_VERSION	0

/**
 *  The FLTK version number as a \em double.
 *
 *  This is changed slightly from the beta versions
 *  because the old "const double" definition would not allow for conditional
 *  compilation...
 *
 *  FL_VERSION is a double that describes the major and minor version numbers.
 *  Version 1.1 is actually stored as 1.01 to allow for more than 9 minor
 *  releases.
 *
 *  The FL_MAJOR_VERSION, FL_MINOR_VERSION, and FL_PATCH_VERSION constants
 *  give the integral values for the major, minor, and patch releases
 *  respectively.
 */
#define FL_VERSION		((double)FL_MAJOR_VERSION + \
				 (double)FL_MINOR_VERSION * 0.01 + \
				 (double)FL_PATCH_VERSION * 0.0001)

/*@}*/	// group: Version Numbers

/**
 *  Every time a user moves the mouse pointer, clicks a button,
 *  or presses a key, an event is generated and sent to your
 *  application. Events can also come from other programs like the
 *  window manager.
 * 
 *  Events are identified by the integer argument passed to the 
 *  Fl_Widget::handle() virtual method. Other information about the 
 *  most recent event is stored in static locations and acquired  by 
 *  calling the Fl::event_*() methods. This static information remains 
 *  valid until the next event is read from the window system, so it 
 *  is ok to look at it outside of the handle() method.
 *
 *  \sa Fl::event_text(), Fl::event_key(), class Fl::
 */
enum Fl_Event {	// events
  /** No event. */
  FL_NO_EVENT		= 0,

  /** A mouse button has gone down with the mouse pointing at this
   *  widget. You can find out what button by calling Fl::event_button(). 
   *  You find out the mouse position by calling Fl::event_x() and
   *  Fl::event_y().
   *
   *  A widget indicates that it "wants" the mouse click by returning non-zero 
   *  from its Fl_Widget::handle() method. It will then become the 
   *  Fl::pushed() widget and will get FL_DRAG and the matching FL_RELEASE events.  
   *  If Fl_Widget::handle() returns zero then FLTK will try sending the FL_PUSH 
   *  to another widget. 
   */
  FL_PUSH		= 1,

  /** A mouse button has been released. You can find out what button by 
   *  calling Fl::event_button().
   *
   *  In order to receive the FL_RELEASE event, the widget must return 
   *  non-zero when handling FL_PUSH.
   */
  FL_RELEASE		= 2,

  /** The mouse has been moved to point at this widget.  This can
   *  be used for highlighting feedback.  If a widget wants to
   *  highlight or otherwise track the mouse, it indicates this by
   *  returning non-zero from its handle() method. It then
   *  becomes the Fl::belowmouse() widget and will receive 
   *  FL_MOVE and FL_LEAVE events.
   */
  FL_ENTER		= 3,

  /** The mouse has moved out of the widget.
   *  In order to receive the FL_LEAVE event, the widget must 
   *  return non-zero when handling FL_ENTER.
   */
  FL_LEAVE		= 4,

  /** The mouse has moved with a button held down. The current button state 
   *  is in Fl::event_state(). The mouse position is in Fl::event_x() and 
   *  Fl::event_y().
   *
   *  In order to receive FL_DRAG events, the widget must return non-zero 
   *  when handling FL_PUSH.
   */
  FL_DRAG		= 5,

  /** This indicates an <I>attempt</I> to give a widget the keyboard focus.
   *
   *  If a widget wants the focus, it should change itself to display the 
   *  fact that it has the focus, and return non-zero from its handle() method.
   *  It then becomes the Fl::focus() widget and gets FL_KEYDOWN, FL_KEYUP, 
   *  and FL_UNFOCUS events.
   *
   *  The focus will change either because the window manager changed which 
   *  window gets the focus, or because the user tried to navigate using tab, 
   *  arrows, or other keys. You can check Fl::event_key() to figure out why 
   *  it moved. For navigation it will be the key pressed and interaction 
   *  with the window manager it will be zero.
   */
  FL_FOCUS		= 6,
  
  /** This event is sent to the previous Fl::focus() widget when another 
   *  widget gets the focus or the window loses focus.
   */
  FL_UNFOCUS		= 7,

  /** A key was pressed or released. The key can be found in Fl::event_key().
   *  The text that the key should insert can be found with Fl::event_text() 
   *  and its length is in Fl::event_length(). If you use the key handle()
   *  should return 1. If you return zero then FLTK assumes you ignored the 
   *  key and will then attempt to send it to a parent widget. If none of 
   *  them want it, it will change the event into a FL_SHORTCUT event.
   *
   *  To receive FL_KEYBOARD events you must also respond to the FL_FOCUS
   *  and FL_UNFOCUS events.
   *
   *  If you are writing a text-editing widget you may also want to call 
   *  the Fl::compose() function to translate individual keystrokes into 
   *  foreign characters.
   *
   *  FL_KEYUP events are sent to the widget that currently has focus. This 
   *  is not necessarily the same widget that received the corresponding 
   *  FL_KEYDOWN event because focus may have changed between events.
   */
  FL_KEYDOWN		= 8,

  /** Equvalent to FL_KEYDOWN.
   *  \see FL_KEYDOWN
   */
  FL_KEYBOARD		= 8,
 
  /** Key release event.
   *  \see FL_KEYDOWN
   */
  FL_KEYUP		= 9,

  /** The user clicked the close button of a window.
   *  This event is used internally only to trigger the callback of
   *  Fl_Window derived classed. The default callback closes the 
   *  window calling Fl_Window::hide().
   */
  FL_CLOSE		= 10,

  /** The mouse has moved without any mouse buttons held down. 
   *  This event is sent to the Fl::belowmouse() widget.
   *
   *  In order to receive FL_MOVE events, the widget must return 
   *  non-zero when handling FL_ENTER.
   */
  FL_MOVE		= 11,

  /** If the Fl::focus() widget is zero or ignores an FL_KEYBOARD
   *  event then FLTK tries sending this event to every widget it 
   *  can, until one of them returns non-zero. FL_SHORTCUT is first 
   *  sent to the Fl::belowmouse() widget, then its parents and siblings, 
   *  and eventually to every widget in the window, trying to find an 
   *  object that returns non-zero. FLTK tries really hard to not to ignore 
   *  any keystrokes!
   *
   *  You can also make "global" shortcuts by using Fl::add_handler(). A 
   *  global shortcut will work no matter what windows are displayed or 
   *  which one has the focus.
   */
  FL_SHORTCUT		= 12,

  /** This widget is no longer active, due to Fl_Widget::deactivate() 
   *  being called on it or one of its parents. Fl_Widget::active() may 
   *  still be true after this, the widget is only active if Fl_Widget::active()
   *  is true on it and all its parents (use Fl_Widget::active_r() to check this).
   */
  FL_DEACTIVATE		= 13,

  /** This widget is now active, due to Fl_Widget::activate() being 
   *  called on it or one of its parents.
   */
  FL_ACTIVATE		= 14,

  /** This widget is no longer visible, due to Fl_Widget::hide() being 
   *  called on it or one of its parents, or due to a parent window being 
   *  minimized.  Fl_Widget::visible() may still be true after this, but the 
   *  widget is visible only if visible() is true for it and all its 
   *  parents (use Fl_Widget::visible_r() to check this).
   */
  FL_HIDE		= 15,

  /** This widget is visible again, due to Fl_Widget::show() being called on 
   *  it or one of its parents, or due to a parent window being restored. 
   *  Child Fl_Windows respond to this by actually creating the window if not 
   *  done already, so if you subclass a window, be sure to pass FL_SHOW 
   *  to the base class Fl_Widget::handle() method!
   */
  FL_SHOW		= 16,

  /** You should get this event some time after you call Fl::paste(). 
   *  The contents of Fl::event_text() is the text to insert and the number 
   *  of characters is in Fl::event_length().
   */
  FL_PASTE		= 17,

  /** The Fl::selection_owner() will get this event before the selection is 
   *  moved to another widget. This indicates that some other widget or program 
   *  has claimed the selection. Motif programs used this to clear the selection 
   *  indication. Most modern programs ignore this.
   */
  FL_SELECTIONCLEAR	= 18,

  /** The user has moved the mouse wheel. The Fl::event_dx() and Fl::event_dy()
   *  methods can be used to find the amount to scroll horizontally and vertically.
   */
  FL_MOUSEWHEEL		= 19,

  /** The mouse has been moved to point at this widget. A widget that is 
   *  interested in receiving drag'n'drop data must return 1 to receive 
   *  FL_DND_DRAG, FL_DND_LEAVE and FL_DND_RELEASE events.
   */
  FL_DND_ENTER		= 20,

  /** The mouse has been moved inside a widget while dragging data.  A 
   *  widget that is interested in receiving drag'n'drop data should 
   *  indicate the possible drop position.
   */
  FL_DND_DRAG		= 21,

  /** The mouse has moved out of the widget.
   */
  FL_DND_LEAVE		= 22,

  /** The user has released the mouse button dropping data into the widget. 
   *  If the widget returns 1, it will receive the data in the immediately 
   *  following FL_PASTE event.
   */
  FL_DND_RELEASE	= 23
};

/** \name When Conditions */
/*@{*/
/** These constants determine when a callback is performed.
 *
 *  \sa Fl_Widget::when();
 *  \todo doxygen comments for values are incomplete and maybe wrong or unclear
 */
enum Fl_When { // Fl_Widget::when():
  FL_WHEN_NEVER		= 0,	///< Never call the callback
  FL_WHEN_CHANGED	= 1,	///< Do the callback only when the widget value changes
  FL_WHEN_NOT_CHANGED	= 2,	///< Do the callback whenever the user interacts with the widget
  FL_WHEN_RELEASE	= 4,	///< Do the callback when the button or key is released and the value changes
  FL_WHEN_RELEASE_ALWAYS= 6,	///< Do the callback when the button or key is released, even if the value doesn't change
  FL_WHEN_ENTER_KEY	= 8,	///< Do the callback when the user presses the ENTER key and the value changes
  FL_WHEN_ENTER_KEY_ALWAYS=10,	///< Do the callback when the user presses the ENTER key, even if the value doesn't change
  FL_WHEN_ENTER_KEY_CHANGED=11	///< ?
};

/*@}*/		// group: When Conditions

/** \name Mouse and Keyboard Events

	This and the following constants define the non-ASCII keys on the
	keyboard for FL_KEYBOARD and FL_SHORTCUT events.

	\todo	FL_Button and FL_key... constants could be structured better
		(use an enum or some doxygen grouping ?)
  
	\sa	Fl::event_key() and Fl::get_key(int) (use ascii letters for all other keys):
 */

/*@{*/

// FIXME: These codes collide with valid Unicode keys

#define FL_Button	0xfee8	///< A mouse button; use Fl_Button + n for mouse button n.
#define FL_BackSpace	0xff08	///< The backspace key.
#define FL_Tab		0xff09	///< The tab key.
#define FL_Enter	0xff0d	///< The enter key. 
#define FL_Pause	0xff13	///< The pause key.
#define FL_Scroll_Lock	0xff14	///< The scroll lock key.
#define FL_Escape	0xff1b	///< The escape key.
#define FL_Home		0xff50	///< The home key.
#define FL_Left		0xff51	///< The left arrow key.
#define FL_Up		0xff52	///< The up arrow key.
#define FL_Right	0xff53	///< The right arrow key.
#define FL_Down		0xff54	///< The down arrow key.
#define FL_Page_Up	0xff55	///< The page-up key.
#define FL_Page_Down	0xff56	///< The page-down key.
#define FL_End		0xff57	///< The end key.
#define FL_Print	0xff61	///< The print (or print-screen) key.
#define FL_Insert	0xff63	///< The insert key. 
#define FL_Menu		0xff67	///< The menu key.
#define FL_Help		0xff68	///< The 'help' key on Mac keyboards
#define FL_Num_Lock	0xff7f	///< The num lock key.
#define FL_KP		0xff80	///< One of the keypad numbers; use FL_KP + n for number n.
#define FL_KP_Enter	0xff8d	///< The enter key on the keypad, same as Fl_KP+'\\r'.
#define FL_KP_Last	0xffbd	///< The last keypad key; use to range-check keypad.
#define FL_F		0xffbd	///< One of the function keys; use FL_F + n for function key n.
#define FL_F_Last	0xffe0	///< The last function key; use to range-check function keys.
#define FL_Shift_L	0xffe1	///< The lefthand shift key.
#define FL_Shift_R	0xffe2	///< The righthand shift key.
#define FL_Control_L	0xffe3	///< The lefthand control key.
#define FL_Control_R	0xffe4	///< The righthand control key.
#define FL_Caps_Lock	0xffe5	///< The caps lock key.
#define FL_Meta_L	0xffe7	///< The left meta/Windows key.
#define FL_Meta_R	0xffe8	///< The right meta/Windows key.
#define FL_Alt_L	0xffe9	///< The left alt key.
#define FL_Alt_R	0xffea	///< The right alt key. 
#define FL_Delete	0xffff	///< The delete key.

/*@}*/	// group: Mouse and Keyboard Events

/** \name Mouse Buttons

	These constants define the button numbers for FL_PUSH and FL_RELEASE events.
	
	\sa Fl::event_button()
*/

/*@{*/

#define FL_LEFT_MOUSE	1	///< The left mouse button
#define FL_MIDDLE_MOUSE	2	///< The middle mouse button
#define FL_RIGHT_MOUSE	3	///< The right mouse button

/*@}*/		// group: Mouse Buttons


/** \name	Event States

	The following constants define bits in the Fl::event_state() value.
*/

/*@{*/		// group: Event States

// FIXME: it would be nice to have the modifiers in the upper 8 bit so that
//        a unicode ke (24bit) can be sent as an unsigned with the modifiers.

#define FL_SHIFT	0x00010000	///< One of the shift keys is down
#define FL_CAPS_LOCK	0x00020000	///< The caps lock is on
#define FL_CTRL		0x00040000	///< One of the ctrl keys is down
#define FL_ALT		0x00080000	///< One of the alt keys is down
#define FL_NUM_LOCK	0x00100000	///< The num lock is on
					// most X servers do this?
#define FL_META		0x00400000	///< One of the meta/Windows keys is down
					// correct for XFree86
#define FL_SCROLL_LOCK	0x00800000	///< The scroll lock is on
					// correct for XFree86
#define FL_BUTTON1	0x01000000	///< Mouse button 1 is pushed
#define FL_BUTTON2	0x02000000	///< Mouse button 2 is pushed
#define FL_BUTTON3	0x04000000	///< Mouse button 3 is pushed
#define FL_BUTTONS	0x7f000000	///< Any mouse button is pushed
#define FL_BUTTON(n)	(0x00800000<<(n)) ///< Mouse button n (n > 0) is pushed

#define FL_KEY_MASK 0x0000ffff  ///< All keys are 16 bit for now 
                                //   FIXME: Unicode needs 24 bits!

#ifdef __APPLE__
#  define FL_COMMAND	FL_META   ///< An alias for FL_CTRL on WIN32 and X11, or FL_META on MacOS X
#  define FL_CONTROL  FL_CTRL   ///< An alias for FL_META on WIN32 and X11, or FL_META on MacOS X
#else
#  define FL_COMMAND	FL_CTRL		///< An alias for FL_CTRL on WIN32 and X11, or FL_META on MacOS X
#  define FL_CONTROL  FL_META   ///< An alias for FL_META on WIN32 and X11, or FL_META on MacOS X
#endif // __APPLE__

/*@}*/		// group: Event States

/** \name Box Types
    \brief FLTK standard box types
    
    This enum defines the standard box types included with FLTK.
    
    FL_NO_BOX means nothing is drawn at all, so whatever is already 
    on the screen remains. The FL_..._FRAME types only draw their edges, 
    leaving the interior unchanged. The blue color in Figure 1 
    is the area that is not drawn by the frame types.
    
    \image html boxtypes.gif "Figure 1: FLTK standard box types"
    \image latex boxtypes.eps "FLTK standard box types" width=10cm
    \todo	Description of boxtypes is incomplete.
    		See below for the defined enum Fl_Boxtype.
		\see src/Fl_get_system_colors.cxx
*/
/*@{*/
enum Fl_Boxtype { // boxtypes (if you change these you must fix fl_boxtype.C):

  FL_NO_BOX = 0,		///< nothing is drawn at all, this box is invisible
  FL_FLAT_BOX,			///< a flat box
  FL_UP_BOX,			///< see figure 1
  FL_DOWN_BOX,			///< see figure 1
  FL_UP_FRAME,			///< see figure 1
  FL_DOWN_FRAME,		///< see figure 1
  FL_THIN_UP_BOX,		///< see figure 1
  FL_THIN_DOWN_BOX,		///< see figure 1
  FL_THIN_UP_FRAME,		///< see figure 1
  FL_THIN_DOWN_FRAME,		///< see figure 1
  FL_ENGRAVED_BOX,		///< see figure 1
  FL_EMBOSSED_BOX,		///< see figure 1
  FL_ENGRAVED_FRAME,		///< see figure 1
  FL_EMBOSSED_FRAME,		///< see figure 1
  FL_BORDER_BOX,		///< see figure 1
  _FL_SHADOW_BOX,		///< see figure 1
  FL_BORDER_FRAME,		///< see figure 1
  _FL_SHADOW_FRAME,		///< see figure 1
  _FL_ROUNDED_BOX,		///< see figure 1
  _FL_RSHADOW_BOX,		///< see figure 1
  _FL_ROUNDED_FRAME,		///< see figure 1
  _FL_RFLAT_BOX,		///< see figure 1
  _FL_ROUND_UP_BOX,		///< see figure 1
  _FL_ROUND_DOWN_BOX,		///< see figure 1
  _FL_DIAMOND_UP_BOX,		///< see figure 1
  _FL_DIAMOND_DOWN_BOX,		///< see figure 1
  _FL_OVAL_BOX,			///< see figure 1
  _FL_OSHADOW_BOX,		///< see figure 1
  _FL_OVAL_FRAME,		///< see figure 1
  _FL_OFLAT_BOX,		///< see figure 1
  _FL_PLASTIC_UP_BOX,		///< plastic version of FL_UP_BOX
  _FL_PLASTIC_DOWN_BOX,		///< plastic version of FL_DOWN_BOX
  _FL_PLASTIC_UP_FRAME,		///< plastic version of FL_UP_FRAME
  _FL_PLASTIC_DOWN_FRAME,	///< plastic version of FL_DOWN_FRAME
  _FL_PLASTIC_THIN_UP_BOX,	///< plastic version of FL_THIN_UP_BOX
  _FL_PLASTIC_THIN_DOWN_BOX,	///< plastic version of FL_THIN_DOWN_BOX
  _FL_PLASTIC_ROUND_UP_BOX,	///< plastic version of FL_ROUND_UP_BOX
  _FL_PLASTIC_ROUND_DOWN_BOX,	///< plastic version of FL_ROUND_DOWN_BOX
  _FL_GTK_UP_BOX,		///< gtk+ version of FL_UP_BOX
  _FL_GTK_DOWN_BOX,		///< gtk+ version of FL_DOWN_BOX
  _FL_GTK_UP_FRAME,		///< gtk+ version of FL_UP_FRAME
  _FL_GTK_DOWN_FRAME,		///< gtk+ version of FL_DOWN_RAME
  _FL_GTK_THIN_UP_BOX,		///< gtk+ version of FL_THIN_UP_BOX
  _FL_GTK_THIN_DOWN_BOX,	///< gtk+ version of FL_THIN_DOWN_BOX
  _FL_GTK_THIN_UP_FRAME,	///< gtk+ version of FL_UP_FRAME
  _FL_GTK_THIN_DOWN_FRAME,	///< gtk+ version of FL_THIN_DOWN_FRAME
  _FL_GTK_ROUND_UP_BOX,		///< gtk+ version of FL_ROUND_UP_BOX
  _FL_GTK_ROUND_DOWN_BOX,	///< gtk+ version of FL_ROUND_DOWN_BOX
  FL_FREE_BOXTYPE		///< the first free box type for creation of new box types
};
extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUND_UP_BOX();
#define FL_ROUND_UP_BOX fl_define_FL_ROUND_UP_BOX()
#define FL_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_ROUND_UP_BOX()+1)
extern FL_EXPORT Fl_Boxtype fl_define_FL_SHADOW_BOX();
#define FL_SHADOW_BOX fl_define_FL_SHADOW_BOX()
#define FL_SHADOW_FRAME (Fl_Boxtype)(fl_define_FL_SHADOW_BOX()+2)
extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUNDED_BOX();
#define FL_ROUNDED_BOX fl_define_FL_ROUNDED_BOX()
#define FL_ROUNDED_FRAME (Fl_Boxtype)(fl_define_FL_ROUNDED_BOX()+2)
extern FL_EXPORT Fl_Boxtype fl_define_FL_RFLAT_BOX();
#define FL_RFLAT_BOX fl_define_FL_RFLAT_BOX()
extern FL_EXPORT Fl_Boxtype fl_define_FL_RSHADOW_BOX();
#define FL_RSHADOW_BOX fl_define_FL_RSHADOW_BOX()
extern FL_EXPORT Fl_Boxtype fl_define_FL_DIAMOND_BOX();
#define FL_DIAMOND_UP_BOX fl_define_FL_DIAMOND_BOX()
#define FL_DIAMOND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_DIAMOND_BOX()+1)
extern FL_EXPORT Fl_Boxtype fl_define_FL_OVAL_BOX();
#define FL_OVAL_BOX fl_define_FL_OVAL_BOX()
#define FL_OSHADOW_BOX (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+1)
#define FL_OVAL_FRAME (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+2)
#define FL_OFLAT_BOX (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+3)

extern FL_EXPORT Fl_Boxtype fl_define_FL_PLASTIC_UP_BOX();
#define FL_PLASTIC_UP_BOX fl_define_FL_PLASTIC_UP_BOX()
#define FL_PLASTIC_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+1)
#define FL_PLASTIC_UP_FRAME (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+2)
#define FL_PLASTIC_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+3)
#define FL_PLASTIC_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+4)
#define FL_PLASTIC_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+5)
#define FL_PLASTIC_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+6)
#define FL_PLASTIC_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+7)

extern FL_EXPORT Fl_Boxtype fl_define_FL_GTK_UP_BOX();
#define FL_GTK_UP_BOX fl_define_FL_GTK_UP_BOX()
#define FL_GTK_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+1)
#define FL_GTK_UP_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+2)
#define FL_GTK_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+3)
#define FL_GTK_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+4)
#define FL_GTK_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+5)
#define FL_GTK_THIN_UP_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+6)
#define FL_GTK_THIN_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+7)
#define FL_GTK_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+8)
#define FL_GTK_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+9)

// conversions of box types to other boxtypes:
/**
  Get the filled version of a frame.
  If no filled version of a given frame exists, the behavior of this function
  is undefined and some random box or frame is returned,
  */
inline Fl_Boxtype fl_box(Fl_Boxtype b) {
  return (Fl_Boxtype)((b<FL_UP_BOX||b%4>1)?b:(b-2));
}
/**
  Get the "pressed" or "down" version of a box.
  If no "down" version of a given box exists, the behavior of this function
  is undefined and some random box or frame is returned,
  */
inline Fl_Boxtype fl_down(Fl_Boxtype b) {
  return (Fl_Boxtype)((b<FL_UP_BOX)?b:(b|1));
}
/**
  Get the unfilled, frame only version of a box.
  If no frame version of a given box exists, the behavior of this function
  is undefined and some random box or frame is returned,
  */
inline Fl_Boxtype fl_frame(Fl_Boxtype b) {
  return (Fl_Boxtype)((b%4<2)?b:(b+2));
}

// back-compatibility box types:
#define FL_FRAME FL_ENGRAVED_FRAME
#define FL_FRAME_BOX FL_ENGRAVED_BOX
#define FL_CIRCLE_BOX FL_ROUND_DOWN_BOX
#define FL_DIAMOND_BOX FL_DIAMOND_DOWN_BOX

/*@}*/	// group: Box Types

/**
   The labeltype() method sets the type of the label.
   
   The following standard label types are included:
   
   \todo	The doxygen comments are incomplete, and some labeltypes
   		are starting with an underscore. Also, there are three
		external functions undocumented (yet):
		  - fl_define_FL_SHADOW_LABEL()
		  - fl_define_FL_ENGRAVED_LABEL()
		  - fl_define_FL_EMBOSSED_LABEL()
*/
enum Fl_Labeltype {	// labeltypes:
  FL_NORMAL_LABEL	= 0,	///< draws the text (0)
  FL_NO_LABEL,			///< does nothing
  _FL_SHADOW_LABEL,		///< draws a drop shadow under the text
  _FL_ENGRAVED_LABEL,		///< draws edges as though the text is engraved
  _FL_EMBOSSED_LABEL,		///< draws edges as thought the text is raised
  _FL_MULTI_LABEL,		///< ?
  _FL_ICON_LABEL,		///< draws the icon associated with the text
  _FL_IMAGE_LABEL,		///< ?

  FL_FREE_LABELTYPE		///< first free labeltype to use for creating own labeltypes
};

/** 
  Sets the current  label type end return its corresponding Fl_Labeltype value. 
  @{
*/
#define FL_SYMBOL_LABEL FL_NORMAL_LABEL
extern Fl_Labeltype FL_EXPORT fl_define_FL_SHADOW_LABEL();
#define FL_SHADOW_LABEL fl_define_FL_SHADOW_LABEL()
extern Fl_Labeltype FL_EXPORT fl_define_FL_ENGRAVED_LABEL();
#define FL_ENGRAVED_LABEL fl_define_FL_ENGRAVED_LABEL()
extern Fl_Labeltype FL_EXPORT fl_define_FL_EMBOSSED_LABEL();
#define FL_EMBOSSED_LABEL fl_define_FL_EMBOSSED_LABEL()
/** @} */

/** \name Alignment Flags */
/*@{*/
/** Flags to control the label alignment. 
 *  This controls how the label is displayed next to or inside the widget. 
 *  The default value is FL_ALIGN_CENTER for most widgets, which centers the label
 *  inside the widget.
 *
 *  Flags can be or'd to achieve a combination of alignments.
 *  \see #FL_ALIGN_CENTER, etc.
 */
typedef unsigned Fl_Align;
  /** Align the label horizontally in the middle. */
const Fl_Align FL_ALIGN_CENTER		= (Fl_Align)0;
  /** Align the label at the top of the widget. Inside labels appear below the top,
   *  outside labels are drawn on top of the widget. */
const Fl_Align FL_ALIGN_TOP		= (Fl_Align)1;
  /** Align the label at the bottom of the widget. */
const Fl_Align FL_ALIGN_BOTTOM		= (Fl_Align)2;
  /** Align the label at the left of the widget. Inside labels appear left-justified
   *  starting at the left side of the widget, outside labels are right-justified and
   *  drawn to the left of the widget. */
const Fl_Align FL_ALIGN_LEFT		= (Fl_Align)4;
  /** Align the label to the right of the widget. */
const Fl_Align FL_ALIGN_RIGHT		= (Fl_Align)8;
  /** Draw the label inside of the widget. */
const Fl_Align FL_ALIGN_INSIDE		= (Fl_Align)16;
  /** If the label contains an image, draw the text on top of the image. */
const Fl_Align FL_ALIGN_TEXT_OVER_IMAGE	= (Fl_Align)32;
  /** If the label contains an image, draw the text below the image. */
const Fl_Align FL_ALIGN_IMAGE_OVER_TEXT	= (Fl_Align)0;
  /** All parts of the label that are lager than the widget will not be drawn . */
const Fl_Align FL_ALIGN_CLIP		= (Fl_Align)64;
  /** Wrap text that does not fit the width of the widget. */
const Fl_Align FL_ALIGN_WRAP		= (Fl_Align)128;
const Fl_Align FL_ALIGN_TOP_LEFT	= FL_ALIGN_TOP | FL_ALIGN_LEFT;
const Fl_Align FL_ALIGN_TOP_RIGHT	= FL_ALIGN_TOP | FL_ALIGN_RIGHT;
const Fl_Align FL_ALIGN_BOTTOM_LEFT	= FL_ALIGN_BOTTOM | FL_ALIGN_LEFT;
const Fl_Align FL_ALIGN_BOTTOM_RIGHT	= FL_ALIGN_BOTTOM | FL_ALIGN_RIGHT;
const Fl_Align FL_ALIGN_LEFT_TOP	= FL_ALIGN_TOP_LEFT;
const Fl_Align FL_ALIGN_RIGHT_TOP	= FL_ALIGN_TOP_RIGHT;
const Fl_Align FL_ALIGN_LEFT_BOTTOM	= FL_ALIGN_BOTTOM_LEFT;
const Fl_Align FL_ALIGN_RIGHT_BOTTOM	= FL_ALIGN_BOTTOM_RIGHT;
const Fl_Align FL_ALIGN_NOWRAP		= (Fl_Align)0; // for back compatability
/*@}*/

/** \name Font Numbers */
/*@{*/
/** A font number is an index into the internal font table.

    The following constants define the standard FLTK fonts:

 */
typedef int Fl_Font;

// standard fonts

const Fl_Font FL_HELVETICA              = 0;	///< Helvetica (or Arial) normal (0)
const Fl_Font FL_HELVETICA_BOLD         = 1;	///< Helvetica (or Arial) bold
const Fl_Font FL_HELVETICA_ITALIC       = 2;	///< Helvetica (or Arial) oblique
const Fl_Font FL_HELVETICA_BOLD_ITALIC  = 3;	///< Helvetica (or Arial) bold-oblique
const Fl_Font FL_COURIER                = 4;	///< Courier normal
const Fl_Font FL_COURIER_BOLD           = 5;	///< Courier bold 
const Fl_Font FL_COURIER_ITALIC         = 6;	///< Courier italic
const Fl_Font FL_COURIER_BOLD_ITALIC    = 7;	///< Courier bold-italic
const Fl_Font FL_TIMES                  = 8;	///< Times roman
const Fl_Font FL_TIMES_BOLD             = 9;	///< Times roman bold
const Fl_Font FL_TIMES_ITALIC           = 10;	///< Times roman italic
const Fl_Font FL_TIMES_BOLD_ITALIC      = 11;	///< Times roman bold-italic
const Fl_Font FL_SYMBOL                 = 12;	///< Standard symbol font
const Fl_Font FL_SCREEN                 = 13;	///< Default monospaced screen font
const Fl_Font FL_SCREEN_BOLD            = 14;	///< Default monospaced bold screen font
const Fl_Font FL_ZAPF_DINGBATS          = 15;	///< Zapf-dingbats font

const Fl_Font FL_FREE_FONT              = 16;	///< first one to allocate
const Fl_Font FL_BOLD                   = 1;	///< add this to helvetica, courier, or times
const Fl_Font FL_ITALIC                 = 2;	///< add this to helvetica, courier, or times
const Fl_Font FL_BOLD_ITALIC            = 3;	///< add this to helvetica, courier, or times

/*@}*/

/** Size of a font in pixels.
 *  This is the approximate height of a font in pixels.
 */
typedef int Fl_Fontsize;

extern FL_EXPORT Fl_Fontsize FL_NORMAL_SIZE;	///< normal font size

/** \name Colors */
/*@{*/
/** The Fl_Color type holds an FLTK color value.

    Colors are either 8-bit indexes into a virtual colormap
    or 24-bit RGB color values.
    
    Color indices occupy the lower 8 bits of the value, while
    RGB colors occupy the upper 24 bits, for a byte organization of RGBI.
    
<pre>
 Fl_Color => 0xrrggbbii
                | | | |
                | | | +--- index between 0 and 255
                | | +----- blue color component (8 bit)
                | +------- green component (8 bit)
                +--------- red component (8 bit)
 </pre>
 
    A color can have either an index or an rgb value. Colors with rgb set 
    and an index >0 are reserved for special use.
 
 */

typedef unsigned int Fl_Color;

// Standard colors. These are used as default colors in widgets and altered as necessary
const Fl_Color FL_FOREGROUND_COLOR  = 0;	///< the default foreground color (0) used for labels and text
const Fl_Color FL_BACKGROUND2_COLOR = 7;	///< the default background color for text, list, and valuator widgets
const Fl_Color FL_INACTIVE_COLOR    = 8;	///< the inactive foreground color
const Fl_Color FL_SELECTION_COLOR   = 15;	///< the default selection/highlight color

  // boxtypes generally limit themselves to these colors so
  // the whole ramp is not allocated:

const Fl_Color FL_GRAY0   = 32;	// 'A'
const Fl_Color FL_DARK3   = 39;	// 'H'
const Fl_Color FL_DARK2   = 45; // 'N'
const Fl_Color FL_DARK1   = 47;	// 'P'
const Fl_Color FL_BACKGROUND_COLOR  = 49;	// 'R' default background color
const Fl_Color FL_LIGHT1  = 50;	// 'S'
const Fl_Color FL_LIGHT2  = 52;	// 'U'
const Fl_Color FL_LIGHT3  = 54;	// 'W'

  // FLTK provides a 5x8x5 color cube that is used with colormap visuals

const Fl_Color FL_BLACK   = 56;
const Fl_Color FL_RED     = 88;
const Fl_Color FL_GREEN   = 63;
const Fl_Color FL_YELLOW  = 95;
const Fl_Color FL_BLUE    = 216;
const Fl_Color FL_MAGENTA = 248;
const Fl_Color FL_CYAN    = 223;
const Fl_Color FL_DARK_RED = 72;

const Fl_Color FL_DARK_GREEN    = 60;
const Fl_Color FL_DARK_YELLOW   = 76;
const Fl_Color FL_DARK_BLUE     = 136;
const Fl_Color FL_DARK_MAGENTA  = 152;
const Fl_Color FL_DARK_CYAN     = 140;

const Fl_Color FL_WHITE         = 255;


#define FL_FREE_COLOR     (Fl_Color)16
#define FL_NUM_FREE_COLOR 16
#define FL_GRAY_RAMP      (Fl_Color)32
#define FL_NUM_GRAY       24
#define FL_GRAY           FL_BACKGROUND_COLOR
#define FL_COLOR_CUBE     (Fl_Color)56
#define FL_NUM_RED        5
#define FL_NUM_GREEN      8
#define FL_NUM_BLUE       5

FL_EXPORT Fl_Color fl_inactive(Fl_Color c);

FL_EXPORT Fl_Color fl_contrast(Fl_Color fg, Fl_Color bg);

FL_EXPORT Fl_Color fl_color_average(Fl_Color c1, Fl_Color c2, float weight);

inline Fl_Color fl_lighter(Fl_Color c) { return fl_color_average(c, FL_WHITE, .67f); }

inline Fl_Color fl_darker(Fl_Color c) { return fl_color_average(c, FL_BLACK, .67f); }

/** return 24-bit color value closest to \p r, \p g, \p b. */
inline Fl_Color fl_rgb_color(uchar r, uchar g, uchar b) {
  if (!r && !g && !b) return FL_BLACK;
  else return (Fl_Color)(((((r << 8) | g) << 8) | b) << 8);
}

/** return 24-bit color value closest to \p grayscale */
inline Fl_Color fl_rgb_color(uchar g) {
  if (!g) return FL_BLACK;
  else return (Fl_Color)(((((g << 8) | g) << 8) | g) << 8);
}

inline Fl_Color fl_gray_ramp(int i) {return (Fl_Color)(i+FL_GRAY_RAMP);}

inline Fl_Color fl_color_cube(int r, int g, int b) {
  return (Fl_Color)((b*FL_NUM_RED + r) * FL_NUM_GREEN + g + FL_COLOR_CUBE);}

//*@}*/		// group: Colors

/** \name Cursors

    The following constants define the mouse cursors that are available in FLTK.
    
    The double-headed arrows are bitmaps provided by FLTK on X, the others
    are provided by system-defined cursors.
    
    \todo	enum Fl_Cursor needs some more comments for values
    		(and maybe an image), see Fl/Enumerations.H
*/
enum Fl_Cursor {	// standard cursors
  FL_CURSOR_DEFAULT	= 0,
  FL_CURSOR_ARROW	= 35,
  FL_CURSOR_CROSS	= 66,
  FL_CURSOR_WAIT	= 76,
  FL_CURSOR_INSERT	= 77,
  FL_CURSOR_HAND	= 31,
  FL_CURSOR_HELP	= 47,
  FL_CURSOR_MOVE	= 27,
  // fltk provides bitmaps for these:
  FL_CURSOR_NS		= 78,
  FL_CURSOR_WE		= 79,
  FL_CURSOR_NWSE	= 80,
  FL_CURSOR_NESW	= 81,
  FL_CURSOR_NONE	= 255,
  // for back compatability (non MSWindows ones):
  FL_CURSOR_N		= 70,
  FL_CURSOR_NE		= 69,
  FL_CURSOR_E		= 49,
  FL_CURSOR_SE		= 8,
  FL_CURSOR_S		= 9,
  FL_CURSOR_SW		= 7,
  FL_CURSOR_W		= 36,
  FL_CURSOR_NW		= 68
  //FL_CURSOR_NS	= 22,
  //FL_CURSOR_WE	= 55,
};

enum { // values for "when" passed to Fl::add_fd()
  FL_READ = 1,
  FL_WRITE = 4,
  FL_EXCEPT = 8
};

enum Fl_Mode { // visual types and Fl_Gl_Window::mode() (values match Glut)
  FL_RGB	= 0,
  FL_INDEX	= 1,
  FL_SINGLE	= 0,
  FL_DOUBLE	= 2,
  FL_ACCUM	= 4,
  FL_ALPHA	= 8,
  FL_DEPTH	= 16,
  FL_STENCIL	= 32,
  FL_RGB8	= 64,
  FL_MULTISAMPLE= 128,
  FL_STEREO     = 256,
  FL_FAKE_SINGLE = 512	// Fake single buffered windows using double-buffer
};

// image alpha blending

#define FL_IMAGE_WITH_ALPHA 0x40000000

// damage masks

enum Fl_Damage {
  FL_DAMAGE_CHILD    = 0x01,
  FL_DAMAGE_EXPOSE   = 0x02,
  FL_DAMAGE_SCROLL   = 0x04,
  FL_DAMAGE_OVERLAY  = 0x08,
  FL_DAMAGE_USER1    = 0x10,
  FL_DAMAGE_USER2    = 0x20,
  FL_DAMAGE_ALL      = 0x80
};

// FLTK 1.0.x compatibility definitions...
#  ifdef FLTK_1_0_COMPAT
#    define contrast	fl_contrast
#    define down	fl_down
#    define frame	fl_frame
#    define inactive	fl_inactive
#  endif // FLTK_1_0_COMPAT

#endif

//
// End of "$Id: Enumerations.H 6902 2009-09-27 11:06:56Z matt $".
//

Added fltk-1.3/FL/Fl.H.













































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
//
// "$Id: Fl.H 6903 2009-09-27 11:09:03Z matt $"
//
// Main header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
    Fl static class.
 */

#ifndef Fl_H
#  define Fl_H

#ifdef HAVE_CAIRO
# include <FL/Fl_Cairo.H>
#endif

#  include "fl_utf8.h"
#  include "Enumerations.H"
#  ifndef Fl_Object
#    define Fl_Object Fl_Widget	/**< for back compatibility - use Fl_Widget! */
#  endif

#  ifdef check
#    undef check
#  endif


class Fl_Widget;
class Fl_Window;
class Fl_Image;
struct Fl_Label;

/** signature of some label drawing functions passed as parameters */
typedef void (Fl_Label_Draw_F)(const Fl_Label*, int,int,int,int, Fl_Align);

/** signature of some label measurement functions passed as parameters */
typedef void (Fl_Label_Measure_F)(const Fl_Label*, int&, int&);

/** signature of some box drawing functions passed as parameters */
typedef void (Fl_Box_Draw_F)(int,int,int,int, Fl_Color);

/** signature of some timeout callback functions passed as parameters */
typedef void (*Fl_Timeout_Handler)(void*);

/** signature of some wakeup callback functions passed as parameters */
typedef void (*Fl_Awake_Handler)(void*);

/**
  The Fl is the FLTK global (static) containing
  state information and global methods for the current application.
*/
class FL_EXPORT Fl {
  Fl() {}; // no constructor!

public: // should be private!
#ifndef FL_DOXYGEN
  static int e_number;
  static int e_x;
  static int e_y;
  static int e_x_root;
  static int e_y_root;
  static int e_dx;
  static int e_dy;
  static int e_state;
  static int e_clicks;
  static int e_is_click;
  static int e_keysym;
  static char* e_text;
  static int e_length;
  static Fl_Widget* belowmouse_;
  static Fl_Widget* pushed_;
  static Fl_Widget* focus_;
  static int damage_;
  static Fl_Widget* selection_owner_;
  static Fl_Window* modal_;
  static Fl_Window* grab_;
  static int compose_state;
  static int visible_focus_;
  static int dnd_text_ops_;
#endif
  /**
    If true then flush() will do something.
  */
  static void damage(int d) {damage_ = d;}

  /**
    The currently executing idle callback function: DO NOT USE THIS DIRECTLY!
    
    This is now used as part of a higher level system allowing multiple
    idle callback functions to be called.
    \see add_idle(), remove_idle()
  */
  static void (*idle)();

#ifndef FL_DOXYGEN
  static Fl_Awake_Handler *awake_ring_;
  static void **awake_data_;
  static int awake_ring_size_;
  static int awake_ring_head_;
  static int awake_ring_tail_;
  static const char* scheme_;
  static Fl_Image* scheme_bg_;

  static int e_original_keysym; // late addition
  static int scrollbar_size_;
#endif


  static int add_awake_handler_(Fl_Awake_Handler, void*);
  static int get_awake_handler_(Fl_Awake_Handler&, void*&);

public:

  // API version number
  static double version();

  // argument parsers:
  static int arg(int, char**, int&);
  static int args(int, char**, int&, int (*)(int,char**,int&) = 0);
  static void args(int, char**);
  /**
    Usage string displayed if Fl::args() detects an invalid argument.
    This may be changed to point to customized text at run-time.
  */
  static const char* const help;

  // things called by initialization:
  static void display(const char*);
  static int visual(int);
  /**
    This does the same thing as Fl::visual(int) but also requires OpenGL
    drawing to work. This <I>must</I> be done if you want to draw in
    normal windows with OpenGL with gl_start() and gl_end().
    It may be useful to call this so your X windows use the same visual
    as an Fl_Gl_Window, which on some servers will reduce colormap flashing.

    See Fl_Gl_Window for a list of additional values for the argument.
  */
  static int gl_visual(int, int *alist=0); // platform dependent
  static void own_colormap();
  static void get_system_colors();
  static void foreground(uchar, uchar, uchar);
  static void background(uchar, uchar, uchar);
  static void background2(uchar, uchar, uchar);

  // schemes:
  static int scheme(const char*);
  /** See void scheme(const char *name) */
  static const char* scheme() {return scheme_;}
  /** 
    Called by scheme according to scheme name. 
    Loads or reloads the current scheme selection. 
    See void scheme(const char *name) 
  */
  static int reload_scheme(); // platform dependent
  static int scrollbar_size();
  static void scrollbar_size(int W);

  // execution:
  static int wait();
  static double wait(double time);
  static int check();
  static int ready();
  static int run();
  static Fl_Widget* readqueue();
  /**
  Adds a one-shot timeout callback.  The function will be called by
  Fl::wait() at <i>t</i> seconds after this function is called.
  The optional void* argument is passed to the callback.
  
  You can have multiple timeout callbacks. To remove a timeout
  callback use Fl::remove_timeout().
  
  If you need more accurate, repeated timeouts, use Fl::repeat_timeout() to
  reschedule the subsequent timeouts.
  
  The following code will print "TICK" each second on
  stdout with a fair degree of accuracy:
  
  \code
     void callback(void*) {
       puts("TICK");
       Fl::repeat_timeout(1.0, callback);
     }
  
     int main() {
       Fl::add_timeout(1.0, callback);
       return Fl::run();
     }
  \endcode
  */
  static void add_timeout(double t, Fl_Timeout_Handler,void* = 0); // platform dependent
  /**
  Repeats a timeout callback from the expiration of the
  previous timeout, allowing for more accurate timing. You may only call
  this method inside a timeout callback.
  
  The following code will print "TICK" each second on
  stdout with a fair degree of accuracy:
  
  \code
     void callback(void*) {
       puts("TICK");
       Fl::repeat_timeout(1.0, callback);
     }
  
     int main() {
       Fl::add_timeout(1.0, callback);
       return Fl::run();
     }
  \endcode
  */
  static void repeat_timeout(double t, Fl_Timeout_Handler,void* = 0); // platform dependent
  static int  has_timeout(Fl_Timeout_Handler, void* = 0);
  static void remove_timeout(Fl_Timeout_Handler, void* = 0);
  static void add_check(Fl_Timeout_Handler, void* = 0);
  static int  has_check(Fl_Timeout_Handler, void* = 0);
  static void remove_check(Fl_Timeout_Handler, void* = 0);
  /**
    Adds file descriptor fd to listen to.
    
    When the fd becomes ready for reading Fl::wait() will call the
    callback and then return. The callback is passed the fd and the
    arbitrary void* argument.
    
    The second version takes a when bitfield, with the bits
    FL_READ, FL_WRITE, and FL_EXCEPT defined,
    to indicate when the callback should be done.
    
    There can only be one callback of each type for a file descriptor. 
    Fl::remove_fd() gets rid of <I>all</I> the callbacks for a given
    file descriptor.
    
    Under UNIX <I>any</I> file descriptor can be monitored (files,
    devices, pipes, sockets, etc.). Due to limitations in Microsoft Windows,
    WIN32 applications can only monitor sockets.
  */
  static void add_fd(int fd, int when, void (*cb)(int,void*),void* =0); // platform dependent
  /** See void add_fd(int fd, int when, void (*cb)(int,void*),void* =0) */
  static void add_fd(int fd, void (*cb)(int, void*), void* = 0); // platform dependent
  /** Removes a file descriptor handler. */
  static void remove_fd(int, int when); // platform dependent
  /** Removes a file descriptor handler. */
  static void remove_fd(int); // platform dependent

  static void add_idle(void (*cb)(void*), void* data = 0);
  static int  has_idle(void (*cb)(void*), void* data = 0);
  static void remove_idle(void (*cb)(void*), void* data = 0);
  /** If true then flush() will do something. */
  static int damage() {return damage_;}
  static void redraw();
  static void flush();
  /** \addtogroup group_comdlg
    @{ */
  /**
  FLTK calls Fl::warning() to output a warning message.
  
  The default version on Windows returns \e without printing a warning
  message, because Windows programs normally don't have stderr (a console
  window) enabled.

  The default version on all other platforms prints the warning message to stderr.

  You can override the behavior by setting the function pointer to your
  own routine.

  Fl::warning() means that there was a recoverable problem, the display may
  be messed up, but the user can probably keep working - all X protocol
  errors call this, for example. The default implementation returns after
  displaying the message.
  */
  static void (*warning)(const char*, ...);
  /**
  FLTK calls Fl::error() to output a normal error message.
  
  The default version on Windows displays the error message in a MessageBox window.

  The default version on all other platforms prints the error message to stderr.

  You can override the behavior by setting the function pointer to your
  own routine.

  Fl::error() means there is a recoverable error such as the inability to read
  an image file. The default implementation returns after displaying the message.
  */
  static void (*error)(const char*, ...);
  /**
  FLTK calls Fl::fatal() to output a fatal error message.
  
  The default version on Windows displays the error message in a MessageBox window.

  The default version on all other platforms prints the error message to stderr.
  
  You can override the behavior by setting the function pointer to your
  own routine.

  Fl::fatal() must not return, as FLTK is in an unusable state, however your
  version may be able to use longjmp or an exception to continue, as long as
  it does not call FLTK again. The default implementation exits with status 1
  after displaying the message.
  */
  static void (*fatal)(const char*, ...);
  /** @} */

  /** \defgroup  fl_windows Windows handling functions
      Windows and standard dialogs handling
    @{ */
  static Fl_Window* first_window();
  static void first_window(Fl_Window*);
  static Fl_Window* next_window(const Fl_Window*);

  /**
    Returns the top-most modal() window currently shown.

    This is the most recently shown() window with modal() true, or NULL
    if there are no modal() windows shown().
    The modal() window has its handle() method called
    for all events, and no other windows will have handle()
    called (grab() overrides this).
  */
  static Fl_Window* modal() {return modal_;}
  /**
    This is used when pop-up menu systems are active.
    
    Send all events to the passed window no matter where the pointer or
    focus is (including in other programs). The window <I>does not have
    to be shown()</I> , this lets the handle() method of a
    "dummy" window override all event handling and allows you to
    map and unmap a complex set of windows (under both X and WIN32
    <I>some</I> window must be mapped because the system interface needs a
    window id).
    
    If grab() is on it will also affect show() of windows by doing
    system-specific operations (on X it turns on override-redirect).
    These are designed to make menus popup reliably
    and faster on the system.
    
    To turn off grabbing do Fl::grab(0).
    
    <I>Be careful that your program does not enter an infinite loop
    while grab() is on.  On X this will lock up your screen!</I>
    To avoid this potential lockup, all newer operating systems seem to 
    limit mouse pointer grabbing to the time during which a mouse button 
    is held down. Some OS's may not support grabbing at all.
  */
  static Fl_Window* grab() {return grab_;}
  /** Selects the window to grab. See Fl_Window* Fl::grab() */
  static void grab(Fl_Window*); // platform dependent
  /** @} */

  /** \defgroup fl_events Events handling functions
	Fl class events handling API
	@{
  */
  // event information:
  /**
    Returns the last event that was processed. This can be used
    to determine if a callback is being done in response to a
    keypress, mouse click, etc.
  */
  static int event()		{return e_number;}
  /**
    Returns the mouse position of the event relative to the Fl_Window
    it was passed to.
  */
  static int event_x()	{return e_x;}
  /**
    Returns the mouse position of the event relative to the Fl_Window
    it was passed to.
  */
  static int event_y()	{return e_y;}
  /**
    Returns the mouse position on the screen of the event.  To find the
    absolute position of an Fl_Window on the screen, use the
    difference between event_x_root(),event_y_root() and 
    event_x(),event_y().
  */
  static int event_x_root()	{return e_x_root;}
  /**
    Returns the mouse position on the screen of the event.  To find the
    absolute position of an Fl_Window on the screen, use the
    difference between event_x_root(),event_y_root() and 
    event_x(),event_y().
  */
  static int event_y_root()	{return e_y_root;}
  /**
    Returns the current horizontal mouse scrolling associated with the
    FL_MOUSEWHEEL event. Right is positive.
  */
  static int event_dx()	{return e_dx;}
  /**
    Returns the current vertical mouse scrolling associated with the
    FL_MOUSEWHEEL event. Down is positive.
  */
  static int event_dy()	{return e_dy;}
  /**
    Return where the mouse is on the screen by doing a round-trip query to
    the server.  You should use Fl::event_x_root() and 
    Fl::event_y_root() if possible, but this is necessary if you are
    not sure if a mouse event has been processed recently (such as to
    position your first window).  If the display is not open, this will
    open it.
  */
  static void get_mouse(int &,int &); // platform dependent
  /**
    Returns non zero if we had a double click event.
    \retval Non-zero if the most recent FL_PUSH or FL_KEYBOARD was a "double click".  
    \retval  N-1 for  N clicks. 
    A double click is counted if the same button is pressed
    again while event_is_click() is true.
    
   */
  static int event_clicks()	{return e_clicks;}
  /**
    Manually sets the number returned by Fl::event_clicks().  
    This can be used to set it to zero so that
    later code does not think an item was double-clicked.
    \param[in] i corresponds to no double-click if 0, i+1 mouse clicks otherwise
    \see int event_clicks()
  */
  static void event_clicks(int i) {e_clicks = i;}
  /**
    The first form returns non-zero if the mouse has not moved far enough
    and not enough time has passed since the last FL_PUSH or 
    FL_KEYBOARD event for it to be considered a "drag" rather than a
    "click".  You can test this on FL_DRAG, FL_RELEASE,
    and FL_MOVE events.  The second form clears the value returned
    by Fl::event_is_click().  Useful to prevent the <I>next</I>
    click from being counted as a double-click or to make a popup menu
    pick an item with a single click.  Don't pass non-zero to this.
  */
  static int event_is_click()	{return e_is_click;}
  /**
    Only i=0 works! See int event_is_click(). 
  */
  static void event_is_click(int i) {e_is_click = i;}
  /**
    Gets which particular mouse button caused the current event. 
    This returns garbage if the most recent event was not a FL_PUSH or FL_RELEASE event.
    \retval FL_LEFT_MOUSE \retval FL_MIDDLE_MOUSE \retval FL_RIGHT_MOUSE.
    \see Fl::event_buttons()
  */
  static int event_button()	{return e_keysym-FL_Button;}
  /**
    This is a bitfield of what shift states were on and what mouse buttons
    were held down during the most recent event. The second version
    returns non-zero if any of the passed bits are turned on.
    The legal bits are:
    
    \li FL_SHIFT
    \li FL_CAPS_LOCK
    \li FL_CTRL
    \li FL_ALT
    \li FL_NUM_LOCK
    \li FL_META
    \li FL_SCROLL_LOCK
    \li FL_BUTTON1
    \li FL_BUTTON2
    \li FL_BUTTON3
    
    X servers do not agree on shift states, and FL_NUM_LOCK, FL_META, and
    FL_SCROLL_LOCK may not work. The values were selected to match the
    XFree86 server on Linux. In addition there is a bug in the way X works
    so that the shift state is not correctly reported until the first event
    <I>after</I> the shift key is pressed or released.
  */
  static int event_state()	{return e_state;}
  /** See int event_state() */
  static int event_state(int i) {return e_state&i;}
  /**
    Gets which key on the keyboard was last pushed.

    The returned integer 'key code' is not necessarily a text
    equivalent for the keystroke. For instance: if someone presses '5' on the 
    numeric keypad with numlock on, Fl::event_key() may return the 'key code'
    for this key, and NOT the character '5'. To always get the '5', use Fl::event_text() instead.
    
    \returns an integer 'key code', or 0 if the last event was not a key press or release.
    \see int event_key(int), event_text(), compose(int&).
  */
  static int event_key()	{return e_keysym;}
  /**
    Returns the keycode of the last key event, regardless of the NumLock state.
      
    If NumLock is deactivated, FLTK translates events from the 
    numeric keypad into the corresponding arrow key events. 
    event_key() returns the translated key code, whereas
    event_original_key() returns the keycode before NumLock translation.
  */
  static int event_original_key(){return e_original_keysym;}
  /** 
    Returns true if the given \p key was held
    down (or pressed) <I>during</I> the last event.  This is constant until
    the next event is read from the server.
    
    Fl::get_key(int) returns true if the given key is held down <I>now</I>.
    Under X this requires a round-trip to the server and is <I>much</I>
    slower than Fl::event_key(int).
    
    Keys are identified by the <I>unshifted</I> values. FLTK defines a
    set of symbols that should work on most modern machines for every key
    on the keyboard:
    
    \li All keys on the main keyboard producing a printable ASCII
	character use the value of that ASCII character (as though shift,
	ctrl, and caps lock were not on). The space bar is 32.
    \li All keys on the numeric keypad producing a printable ASCII
	character use the value of that ASCII character plus FL_KP.
	The highest possible value is FL_KP_Last so you can
	range-check to see if something is  on the keypad.
    \li All numbered function keys use the number on the function key plus 
	FL_F.  The highest possible number is FL_F_Last, so you
	can range-check a value.
    \li Buttons on the mouse are considered keys, and use the button
	number (where the left button is 1) plus FL_Button.
    \li All other keys on the keypad have a symbol: FL_Escape,
	FL_BackSpace, FL_Tab, FL_Enter, FL_Print, FL_Scroll_Lock, FL_Pause,
	FL_Insert, FL_Home, FL_Page_Up, FL_Delete, FL_End, FL_Page_Down,
	FL_Left, FL_Up, FL_Right, FL_Down, FL_Shift_L, FL_Shift_R,
	FL_Control_L, FL_Control_R, FL_Caps_Lock, FL_Alt_L, FL_Alt_R,
	FL_Meta_L, FL_Meta_R, FL_Menu, FL_Num_Lock, FL_KP_Enter.  Be
	careful not to confuse these with the very similar, but all-caps,
	symbols used by Fl::event_state().

    On X Fl::get_key(FL_Button+n) does not work.
    
    On WIN32 Fl::get_key(FL_KP_Enter) and Fl::event_key(FL_KP_Enter) do not work.
  */
  static int event_key(int key);
  /** 
    Returns true if the given \p key is held down <I>now</I>.  
    Under X this requires a round-trip to the server and is <I>much</I>
    slower than Fl::event_key(int). \see event_key(int)
  */
  static int get_key(int key); // platform dependent
  /** 
    Returns the text associated with the current event, including FL_PASTE or FL_DND_RELEASE events.
    This can be used in response to FL_KEYUP, FL_KEYDOWN, FL_PASTE, FL_DND_RELEASE.

    When responding to FL_KEYUP/FL_KEYDOWN, use this function instead of Fl::event_key()
    to get the text equivalent of keystrokes suitable for inserting into strings 
    and text widgets.

    The returned string is guaranteed to be be NULL terminated.
    However, see Fl::event_length() for the actual length of the string,
    in case the string itself contains NULLs that are part of the text data.

    \returns A NULL terminated text string equivalent of the last keystroke.
   */
  static const char* event_text() {return e_text;}
  /**
    Returns the length of the text in Fl::event_text(). There
    will always be a nul at this position in the text. However there may
    be a nul before that if the keystroke translates to a nul character or
    you paste a nul character.
  */
  static int event_length() {return e_length;}

  static int compose(int &del);
  /**
    If the user moves the cursor, be sure to call Fl::compose_reset().
    The next call to Fl::compose() will start out in an initial state. In
    particular it will not set "del" to non-zero. This call is very fast
    so it is ok to call it many times and in many places.
  */
  static void compose_reset() {compose_state = 0;}
  static int event_inside(int,int,int,int);
  static int event_inside(const Fl_Widget*);
  static int test_shortcut(Fl_Shortcut);

  // event destinations:
  static int handle(int, Fl_Window*);
  /**  Gets the widget that is below the mouse. 
       \see  belowmouse(Fl_Widget*) */
  static Fl_Widget* belowmouse() {return belowmouse_;}
  static void belowmouse(Fl_Widget*);
  /** Gets the widget that is being pushed.
      \see void pushed(Fl_Widget*) */
  static Fl_Widget* pushed()	{return pushed_;}
  static void pushed(Fl_Widget*);
  /** Gets the current Fl::focus() widget. \sa Fl::focus(Fl_Widget*) */
  static Fl_Widget* focus()	{return focus_;}
  static void focus(Fl_Widget*);
  static void add_handler(int (*h)(int));
  static void remove_handler(int (*h)(int));
  /** @} */

  /** \defgroup  fl_clipboard  Selection & Clipboard functions
	fl global copy/cut/paste functions
   @{ */
  // cut/paste:
  /**
    Copies the data pointed to by \p stuff to the selection (0) or
    primary (1) clipboard. The selection clipboard is used for
    middle-mouse pastes and for drag-and-drop selections. The primary
    clipboard is used for traditional copy/cut/paste operations.
  */
  static void copy(const char* stuff, int len, int clipboard = 0); // platform dependent
  /**
    Pastes the data from the selection (0) or primary (1) clipboard into receiver.  
    The selection clipboard is used for middle-mouse pastes and for 
    drag-and-drop selections. The primary clipboard is used for 
    traditional copy/cut/paste operations.
  */
  static void paste(Fl_Widget &receiver, int clipboard /*=0*/); // platform dependent
  /**
    Initiate a Drag And Drop operation. The clipboard should be
    filled with relevant data before calling this method. FLTK will
    then initiate the system wide drag and drop handling. Dropped data
    will be marked as <i>text</i>.
  */
  static int dnd(); // platform dependent

  // These are for back-compatibility only:
  /**  back-compatibility only: Gets the widget owning the current selection  
       \see Fl_Widget* selection_owner(Fl_Widget*) */
  static Fl_Widget* selection_owner() {return selection_owner_;}
  static void selection_owner(Fl_Widget*);
  static void selection(Fl_Widget &owner, const char*, int len);
  static void paste(Fl_Widget &receiver);
/** @} */
/** \defgroup  fl_screen  Screen functions
	fl global screen functions
     @{ */
  // screen size:
  /** Returns the origin of the current screen, where 0 indicates the left side of the screen. */
  static int x(); // platform dependent
  /** Returns the origin of the current screen, where 0 indicates the top edge of the screen. */
  static int y(); // platform dependent
  /** Returns the width of the screen in pixels. */
  static int w(); // platform dependent
  /** Returns the height of the screen in pixels. */
  static int h(); // platform dependent

  // multi-head support:
  static int screen_count();
  /** 
      Gets the bounding box of a screen that contains the mouse pointer.
      \param[out]  X,Y,W,H the corresponding screen bounding box
      \see void screen_xywh(int &x, int &y, int &w, int &h, int mx, int my) 
  */
  static void screen_xywh(int &X, int &Y, int &W, int &H) {
    screen_xywh(X, Y, W, H, e_x_root, e_y_root);
  }
  static void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my);
  static void screen_xywh(int &X, int &Y, int &W, int &H, int n);

  /**   @} */

  /** \defgroup  fl_attributes  Color & Font functions
	fl global color, font functions
     @{ */
 
  // color map:
  static void	set_color(Fl_Color, uchar, uchar, uchar);
  /**
    Sets an entry in the fl_color index table. You can set it to any
    8-bit RGB color. The color is not allocated until fl_color(i) is used.
  */
  static void	set_color(Fl_Color, unsigned); // platform dependent
  static Fl_Color get_color(Fl_Color);
  static void	get_color(Fl_Color, uchar&, uchar&, uchar&);
  /**
    Frees the specified color from the colormap, if applicable.
    If overlay is non-zero then the color is freed from the
    overlay colormap.
  */
  static void	free_color(Fl_Color, int overlay = 0); // platform dependent

  // fonts:
  static const char* get_font(Fl_Font);
  /**
    Get a human-readable string describing the family of this face.  This
    is useful if you are presenting a choice to the user.  There is no
    guarantee that each face has a different name.  The return value points
    to a static buffer that is overwritten each call.
    
    The integer pointed to by \p attributes (if the pointer is not
    zero) is set to zero, FL_BOLD or FL_ITALIC or 
    FL_BOLD | FL_ITALIC.  To locate a "family" of fonts, search
    forward and back for a set with non-zero attributes, these faces along
    with the face with a zero attribute before them constitute a family.
  */
  static const char* get_font_name(Fl_Font, int* attributes = 0);
  /**
    Return an array of sizes in \p sizep.  The return value is the
    length of this array.  The sizes are sorted from smallest to largest
    and indicate what sizes can be given to fl_font() that will
    be matched exactly (fl_font() will pick the closest size for
    other sizes).  A zero in the first location of the array indicates a
    scalable font, where any size works, although the array may list sizes
    that work "better" than others.  Warning: the returned array
    points at a static buffer that is overwritten each call.  Under X this
    will open the display.
  */
  static int get_font_sizes(Fl_Font, int*& sizep);
  static void set_font(Fl_Font, const char*);
  static void set_font(Fl_Font, Fl_Font);
  /**
    FLTK will open the display, and add every fonts on the server to the
    face table.  It will attempt to put "families" of faces together, so
    that the normal one is first, followed by bold, italic, and bold
    italic.
    
    The optional argument is a string to describe the set of fonts to
    add.  Passing NULL will select only fonts that have the
    ISO8859-1 character set (and are thus usable by normal text).  Passing
    "-*" will select all fonts with any encoding as long as they have
    normal X font names with dashes in them.  Passing "*" will list every
    font that exists (on X this may produce some strange output).  Other
    values may be useful but are system dependent.  With WIN32 NULL
    selects fonts with ISO8859-1 encoding and non-NULL selects
    all fonts.
    
    The return value is how many faces are in the table after this is done.
  */
  static Fl_Font set_fonts(const char* = 0); // platform dependent

  /**   @} */
 /** \defgroup  fl_drawings  Drawing functions
	fl global graphics and gui drawing functions
     @{ */
  // <Hack to re-order the 'Drawing functions' group>
 /** @} */

  // labeltypes:
  static void set_labeltype(Fl_Labeltype,Fl_Label_Draw_F*,Fl_Label_Measure_F*);
  /** Sets the functions to call to draw and measure a specific labeltype. */
  static void set_labeltype(Fl_Labeltype, Fl_Labeltype from); // is it defined ?

  // boxtypes:
  static Fl_Box_Draw_F *get_boxtype(Fl_Boxtype);
  static void set_boxtype(Fl_Boxtype, Fl_Box_Draw_F*,uchar,uchar,uchar,uchar);
  static void set_boxtype(Fl_Boxtype, Fl_Boxtype from);
  static int box_dx(Fl_Boxtype);
  static int box_dy(Fl_Boxtype);
  static int box_dw(Fl_Boxtype);
  static int box_dh(Fl_Boxtype);
  static int draw_box_active();

  // back compatibility:
  /** \addtogroup fl_windows 
    @{ */
  /** For back compatibility, sets the void Fl::fatal handler callback */
  static void set_abort(void (*f)(const char*,...)) {fatal = f;}
  static void (*atclose)(Fl_Window*,void*);
  static void default_atclose(Fl_Window*,void*);
  /** For back compatibility, sets the Fl::atclose handler callback. You
      can now simply change the callback for the window instead.
      \see Fl_Window::callback(Fl_Callback*) */
  static void set_atclose(void (*f)(Fl_Window*,void*)) {atclose = f;}
  /**   @} */

  /** \addtogroup fl_events 
    @{ */
  /** Returns non-zero if the Shift key is pressed. */
  static int event_shift() {return e_state&FL_SHIFT;}
  /** Returns non-zero if the Control key is pressed. */
  static int event_ctrl() {return e_state&FL_CTRL;}
  /** Returns non-zero if the Alt key is pressed. */
  static int event_alt() {return e_state&FL_ALT;}
  /**
    Returns the mouse buttons state bits; if non-zero, then at least one
    button is pressed now.  This function returns the button state at the 
    time of the event. During an FL_RELEASE event, the state 
    of the released button will be 0. To find out, which button 
    caused an FL_RELEASE event, you can use Fl::event_button() instead.
    \return a bit mask value like { [FL_BUTTON1] | [FL_BUTTON2] | [FL_BUTTON3] }
  */
  static int event_buttons() {return e_state&0x7f000000;}
  /**
    Returns non-zero if mouse button 1 is currently held down.
    For more details, see Fl::event_buttons().
  */
  static int event_button1() {return e_state&FL_BUTTON1;}
  /**
    Returns non-zero if button 2 is currently held down.
    For more details, see Fl::event_buttons().
  */
  static int event_button2() {return e_state&FL_BUTTON2;}
  /**
    Returns non-zero if button 3 is currently held down.
    For more details, see Fl::event_buttons().
  */
  static int event_button3() {return e_state&FL_BUTTON3;}
  /**   @} */

  /**
    Sets an idle callback.

    \deprecated This method is obsolete - use the add_idle() method instead.
  */
  static void set_idle(void (*cb)()) {idle = cb;}
  /** See Fl_Window* grab() */
  static void grab(Fl_Window&win) {grab(&win);}
  /** Releases the current grabbed window, equals grab(0).
  \deprecated Use Fl::grab(0) instead.
  \see Fl_Window* grab() */
  static void release() {grab(0);}

  // Visible focus methods...
  /**
    Gets or sets the visible keyboard focus on buttons and other
    non-text widgets. The default mode is to enable keyboard focus
    for all widgets.
  */
  static void visible_focus(int v) { visible_focus_ = v; }
  /**
    Gets or sets the visible keyboard focus on buttons and other
    non-text widgets. The default mode is to enable keyboard focus
    for all widgets.
  */
  static int  visible_focus() { return visible_focus_; }

  // Drag-n-drop text operation methods...
  /**
    Gets or sets whether drag and drop text operations are supported.
    This specifically affects whether selected text can
    be dragged from text fields or dragged within a text field as a
    cut/paste shortcut.
  */
  static void dnd_text_ops(int v) { dnd_text_ops_ = v; }
  /**
    Gets or sets whether drag and drop text operations are
    supported. This specifically affects whether selected text can
    be dragged from text fields or dragged within a text field as a
    cut/paste shortcut.
  */
  static int  dnd_text_ops() { return dnd_text_ops_; }
  /** \defgroup fl_multithread Multithreading support functions
	fl multithreading support functions
   @{ */

  // Multithreading support:
  static void lock();
  static void unlock();
  static void awake(void* message = 0);
  /** See void awake(void* message=0). */
  static int awake(Fl_Awake_Handler cb, void* message = 0);
  /**
    The thread_message() method returns the last message
    that was sent from a child by the awake() method.
    
    See also: multithreading
  */
  static void* thread_message(); // platform dependent
  /** @} */

  /** \defgroup fl_del_widget Safe widget deletion support functions

    These functions support deletion of widgets inside callbacks.

    Fl::delete_widget() should be called when deleting widgets
    or complete widget trees (Fl_Group, Fl_Window, ...) inside
    callbacks.

    The other functions are intended for internal use. The preferred
    way to use them is by using the helper class Fl_Widget_Tracker.

    The following is to show how it works ...

    There are three groups of related methods:

      -# scheduled widget deletion
	- Fl::delete_widget() schedules widgets for deletion
	- Fl::do_widget_deletion() deletes all scheduled widgets
      -# widget watch list ("smart pointers")
	- Fl::watch_widget_pointer() adds a widget pointer to the watch list
	- Fl::release_widget_pointer() removes a widget pointer from the watch list
	- Fl::clear_widget_pointer() clears a widget pointer \e in the watch list
      -# the class Fl_Widget_Tracker:
	- the constructor calls Fl::watch_widget_pointer()
	- the destructor calls Fl::release_widget_pointer()
	- the access methods can be used to test, if a widget has been deleted
	  \see Fl_Widget_Tracker.

   @{ */
  // Widget deletion:
  static void delete_widget(Fl_Widget *w);
  static void do_widget_deletion();
  static void watch_widget_pointer(Fl_Widget *&w);
  static void release_widget_pointer(Fl_Widget *&w);
  static void clear_widget_pointer(Fl_Widget const *w);
  /** @} */

#ifdef HAVE_CAIRO
  /** \defgroup group_cairo Cairo support functions and classes 
      @{ 
  */
public:
  // Cairo support API
  static cairo_t * cairo_make_current(Fl_Window* w);
   /** when HAVE_CAIRO is defined and cairo_autolink_context() is true, 
      any current window dc is linked to a current context.
      This is not the default, because it may not be necessary
      to add cairo support to all fltk supported windows.
      When you wish to associate a cairo context in this mode,
      you need to call explicitly in your draw() overridden method,
      FL::cairo_make_current(Fl_Window*). This will create a cairo context
      but only for this Window. 
      Still in custom cairo application it is possible to handle 
      completely this process automatically by setting \p alink to true.
      In this last case, you don't need anymore to call Fl::cairo_make_current().
      You can use Fl::cairo_cc() to get the current cairo context anytime.
     \note Only available when configure has the --enable-cairo option
  */
  static void cairo_autolink_context(bool alink) {cairo_state_.autolink(alink);}
  /** 
    Gets the current autolink mode for cairo support.
    \retval false if no cairo context autolink is made for each window. 
    \retval true if any fltk window is attached a cairo context when it 
    is current. \see void cairo_autolink_context(bool alink) 
    \note Only available when configure has the --enable-cairo option
 */
  static bool cairo_autolink_context() {return cairo_state_.autolink();}
  /** Gets the current cairo context linked with a fltk window. */
  static cairo_t * cairo_cc() { return cairo_state_.cc(); }
  /** Sets the current cairo context to \p c.
      Set \p own to true if you want fltk to handle this cc deletion.
     \note Only available when configure has the --enable-cairo option
*/
  static void cairo_cc(cairo_t * c, bool own=false){ cairo_state_.cc(c, own); } 

private:
  static cairo_t * cairo_make_current(void* gc);
  static cairo_t * cairo_make_current(void* gc, int W, int H);
  static Fl_Cairo_State cairo_state_;
public:
  /** @} */ 

#endif // HAVE_CAIRO

};

/**
  This class should be used to control safe widget deletion.

  You can use an Fl_Widget_Tracker object to watch another widget, if you
  need to know, if this widget has been deleted during a callback.

  This simplifies the use of the "safe widget deletion" methods
  Fl::watch_widget_pointer() and Fl::release_widget_pointer() and
  makes their use more reliable, because the destructor autmatically
  releases the widget pointer from the widget watch list.

  It is intended to be used as an automatic (local/stack) variable,
  such that the automatic destructor is called when the object's
  scope is left. This ensures that no stale widget pointers are
  left in the widget watch list (see example below).
  
  You can also create Fl_Widget_Tracker objects with \c new, but then it
  is your responsibility to delete the object (and thus remove the
  widget pointer from the watch list) when it is not needed any more.

  Example:

  \code
    int MyClass::handle (int event) {

      if (...) {
	Fl_Widget_Tracker wp(this);	// watch myself
	do_callback();			// call the callback

	if (wp.deleted()) return 1;	// exit, if deleted

	// Now we are sure that the widget has not been deleted.
	// It is safe to access the widget

	clear_changed();		// access the widget
      }
    }
  \endcode

*/
class FL_EXPORT Fl_Widget_Tracker {

  Fl_Widget* wp_;

public:

  Fl_Widget_Tracker(Fl_Widget *wi);
  ~Fl_Widget_Tracker();

  /**
    Returns a pointer to the watched widget.

    This pointer is \c NULL, if the widget has been deleted.
  */
  Fl_Widget *widget() {return wp_;}

  /**
    Returns 1, if the watched widget has been deleted.

    This is a convenience method. You can also use something like

    <tt>  if (wp.widget() == 0) // ...</tt>

    where \p wp is an Fl_Widget_Tracker object.
  */
  int deleted() {return wp_ == 0;}

  /**
    Returns 1, if the watched widget exists (has not been deleted).

    This is a convenience method. You can also use something like

    <tt>  if (wp.widget() != 0) // ...</tt>

    where \p wp is an Fl_Widget_Tracker object.
  */
  int exists()  {return wp_ != 0;}

};

 /** \defgroup  fl_unicode  Unicode and UTF-8 functions
	fl global Unicode and UTF-8 handling functions
     @{ */
 /** @} */

#endif // !Fl_H

//
// End of "$Id: Fl.H 6903 2009-09-27 11:09:03Z matt $".
//

Added fltk-1.3/FL/Fl_Adjuster.H.





































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//
// "$Id: Fl_Adjuster.H 6614 2009-01-01 16:11:32Z matt $"
//
// Adjuster widget header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Adjuster widget . */

// 3-button "slider", made for Nuke

#ifndef Fl_Adjuster_H
#define Fl_Adjuster_H

#ifndef Fl_Valuator_H
#include "Fl_Valuator.H"
#endif

/**
  The Fl_Adjuster widget was stolen from Prisms, and has proven
  to be very useful for values that need a large dynamic range.
  \image html adjuster1.gif 
  \image latex adjuster1.eps "Fl_Adjuster" width=4cm
  <P>When you  press a button and drag to the right the value increases.
  When you drag  to the left it decreases.  The largest button adjusts by
  100 *  step(), the next by 10 * step() and that
  smallest button  by step().  Clicking on the buttons
  increments by 10 times the  amount dragging by a pixel does. Shift +
  click decrements by 10 times  the amount.
*/
class FL_EXPORT Fl_Adjuster : public Fl_Valuator {
  int drag;
  int ix;
  int soft_;
protected:
  void draw();
  int handle(int);
  void value_damage();
public:
  Fl_Adjuster(int X,int Y,int W,int H,const char *l=0);
  /**
    If "soft" is turned on, the user is allowed to drag the value outside
    the range.  If they drag the value to one of the ends, let go, then
    grab again and continue to drag, they can get to any value.  Default is
    one.
  */
  void soft(int s) {soft_ = s;}
  /**
    If "soft" is turned on, the user is allowed to drag the value outside
    the range.  If they drag the value to one of the ends, let go, then
    grab again and continue to drag, they can get to any value.  Default is
    one.
  */
  int soft() const {return soft_;}
};

#endif

//
// End of "$Id: Fl_Adjuster.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_BMP_Image.H.





































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//
// "$Id: Fl_BMP_Image.H 6614 2009-01-01 16:11:32Z matt $"
//
// BMP image header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_BMP_Image widget . */

#ifndef Fl_BMP_Image_H
#define Fl_BMP_Image_H
#  include "Fl_Image.H"

/**
  The Fl_BMP_Image class supports loading, caching,
  and drawing of Windows Bitmap (BMP) image files.
*/
class FL_EXPORT Fl_BMP_Image : public Fl_RGB_Image {

  public:

  Fl_BMP_Image(const char* filename);
};

#endif

//
// End of "$Id: Fl_BMP_Image.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Bitmap.H.

























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//
// "$Id: Fl_Bitmap.H 6614 2009-01-01 16:11:32Z matt $"
//
// Bitmap header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Bitmap widget . */

#ifndef Fl_Bitmap_H
#define Fl_Bitmap_H
#  include "Fl_Image.H"

class Fl_Widget;
struct Fl_Menu_Item;

/**
  The Fl_Bitmap class supports caching and drawing of mono-color
  (bitmap) images. Images are drawn using the current color.
*/
class FL_EXPORT Fl_Bitmap : public Fl_Image {
  public:

  /** pointer to raw bitmap data */
  const uchar *array;
  /** Non-zero if array points to bitmap data allocated internally */
  int alloc_array;
#if defined(__APPLE__) || defined(WIN32)
  /** for internal use */
  void *id;
#else
  /** for internal use */
  unsigned id;
#endif // __APPLE__ || WIN32
  /** The constructors create a new bitmap from the specified bitmap data */
  Fl_Bitmap(const uchar *bits, int W, int H) :
    Fl_Image(W,H,0), array(bits), alloc_array(0), id(0) {data((const char **)&array, 1);}
  /** The constructors create a new bitmap from the specified bitmap data */
  Fl_Bitmap(const char *bits, int W, int H) :
    Fl_Image(W,H,0), array((const uchar *)bits), alloc_array(0), id(0) {data((const char **)&array, 1);}
  virtual ~Fl_Bitmap();
  virtual Fl_Image *copy(int W, int H);
  Fl_Image *copy() { return copy(w(), h()); }
  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0);
  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);}
  virtual void label(Fl_Widget*w);
  virtual void label(Fl_Menu_Item*m);
  virtual void uncache();
};

#endif

//
// End of "$Id: Fl_Bitmap.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Box.H.











































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//
// "$Id: Fl_Box.H 6614 2009-01-01 16:11:32Z matt $"
//
// Box header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Box widget . */

#ifndef Fl_Box_H
#define Fl_Box_H

#ifndef Fl_Widget_H
#include "Fl_Widget.H"
#endif

/**
  This widget simply draws its box, and possibly it's label.  Putting it
  before some other widgets and making it big enough to surround them
  will let you draw a frame around them.
*/
class FL_EXPORT Fl_Box : public Fl_Widget {
protected:
  void draw();
public:
  /**
    - The first constructor sets box() to FL_NO_BOX, which
    means it is invisible. However such widgets are useful as placeholders
    or Fl_Group::resizable()
    values.  To change the box to something visible, use box(n).
    - The second form of the constructor sets the box to the specified box
    type.
    <P>The destructor removes the box.
  */
    Fl_Box(int X, int Y, int W, int H, const char *l=0)
	: Fl_Widget(X,Y,W,H,l) {}
  /**    See Fl_Box::Fl_Box(int x, int y, int w, int h, const char * = 0)   */
    Fl_Box(Fl_Boxtype b, int X, int Y, int W, int H, const char *l)
	: Fl_Widget(X,Y,W,H,l) {box(b);}

  virtual int handle(int);
};

#endif

//
// End of "$Id: Fl_Box.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Browser.H.









































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
//
// "$Id: Fl_Browser.H 6850 2009-09-07 02:25:51Z greg.ercolano $"
//
// Browser header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Browser widget . */

// Forms-compatable browser.  Probably useful for other
// lists of textual data.  Notice that the line numbers
// start from 1, and 0 means "no line".

#ifndef Fl_Browser_H
#define Fl_Browser_H

#include "Fl_Browser_.H"
#include "Fl_Image.H"

struct FL_BLINE;

/**
  The Fl_Browser widget displays a scrolling list of text
  lines, and manages all the storage for the text.  This is not a text
  editor or spreadsheet!  But it is useful for showing a vertical list of
  named objects to the user.
  
  Each line in the browser is identified by number. <I>The numbers
  start at one</I> (this is so that zero can be reserved for "no line" in
  the selective browsers). <I>Unless otherwise noted, the methods do not
  check to see if the passed line number is in range and legal.  It must
  always be greater than zero and &lt;= size().</I>

  Each line contains a null-terminated string of text and a void *
  data pointer.  The text string is displayed, the void *
  pointer can be used by the callbacks to reference the object the text
  describes.

  The base class does nothing when the user clicks on it.  The
  subclasses 
  Fl_Select_Browser, 
  Fl_Hold_Browser, and 
  Fl_Multi_Browser react to user clicks to select lines in
  the browser and do callbacks.

  The base class
  Fl_Browser_ provides the scrolling and selection mechanisms of
  this and all the subclasses, but the dimensions and appearance of each
  item are determined by the subclass. You can use Fl_Browser_
  to display information other than text, or text that is dynamically
  produced from your own data structures. If you find that loading the
  browser is a lot of work or is inefficient, you may want to make a
  subclass of Fl_Browser_.

  Some common coding patterns used for working with Fl_Browser:
  \code
      // How to loop through all the items in the browser
      for ( int t=1; t<=browser->size(); t++ ) {       // index 1 based..!
	  printf("item #%d, label='%s'\n", t, browser->text(t));
      }
  \endcode

  Note: If you are <I>subclassing</I> Fl_Browser, it's more efficient
  to use the protected methods item_first() and item_next(), since
  Fl_Browser internally uses linked lists to manage the browser's items.
  For more info, see find_item(int).
*/
class FL_EXPORT Fl_Browser : public Fl_Browser_ {

  FL_BLINE *first;		// the array of lines
  FL_BLINE *last;
  FL_BLINE *cache;
  int cacheline;		// line number of cache
  int lines;                	// Number of lines
  int full_height_;
  const int* column_widths_;
  char format_char_;		// alternative to @-sign
  char column_char_;		// alternative to tab

protected:

  // required routines for Fl_Browser_ subclass:
  void* item_first() const ;
  void* item_next(void* item) const ;
  void* item_prev(void* item) const ;
  void* item_last()const ;
  int item_selected(void* item) const ;
  void item_select(void* item, int val);
  int item_height(void* item) const ;
  int item_width(void* item) const ;
  void item_draw(void* item, int X, int Y, int W, int H) const ;
  int full_height() const ;
  int incr_height() const ;
  const char *item_text(void *item) const;
  /** Swap the items \p a and \p b.
      You must call redraw() to make any changes visible.
      \param[in] a,b the items to be swapped.
      \see swap(int,int), item_swap()
   */
  void item_swap(void *a, void *b) { swap((FL_BLINE*)a, (FL_BLINE*)b); }
  /** Return the item at specified \p line.
      \param[in] line The line of the item to return. (1 based)
      \returns The item, or NULL if line out of range.
      \see item_at(), find_line(), lineno()
   */
  void *item_at(int line) const { return (void*)find_line(line); }

  FL_BLINE* find_line(int line) const ;
  FL_BLINE* _remove(int line) ;
  void insert(int line, FL_BLINE* item);
  int lineno(void *item) const ;
  void swap(FL_BLINE *a, FL_BLINE *b);

public:

  void remove(int line);
  void add(const char* newtext, void* d = 0);
  void insert(int line, const char* newtext, void* d = 0);
  void move(int to, int from);
  int  load(const char* filename);
  void swap(int a, int b);
  void clear();

  /**
    Returns how many lines are in the browser.
    The last line number is equal to this.
    Returns 0 if browser is empty.
  */
  int size() const { return lines; }
  void size(int W, int H) { Fl_Widget::size(W, H); }

  int topline() const ;
  /** For internal use only? */
  enum Fl_Line_Position { TOP, BOTTOM, MIDDLE };
  void lineposition(int line, Fl_Line_Position pos);
  /**
    Scrolls the browser so the top item in the browser
    is showing the specified \p line.
    \param[in] line The line to be displayed at the top.
    \see topline(), middleline(), bottomline(), displayed(), lineposition()
   */
  void topline(int line) { lineposition(line, TOP); }
  /**
    Scrolls the browser so the bottom item in the browser
    is showing the specified \p line.
    \param[in] line The line to be displayed at the bottom.
    \see topline(), middleline(), bottomline(), displayed(), lineposition()
   */
  void bottomline(int line) { lineposition(line, BOTTOM); }
  /**
    Scrolls the browser so the middle item in the browser
    is showing the specified \p line.
    \param[in] line The line to be displayed in the middle.
    \see topline(), middleline(), bottomline(), displayed(), lineposition()
   */
  void middleline(int line) { lineposition(line, MIDDLE); }

  int select(int line, int val=1);
  int selected(int line) const ;
  void show(int line);
  /** Shows the entire Fl_Browser widget -- opposite of hide(). */
  void show() { Fl_Widget::show(); }
  void hide(int line);
  /** Hides the entire Fl_Browser widget -- opposite of show(). */
  void hide() { Fl_Widget::hide(); }
  int visible(int line) const ;

  int value() const ;
  /**
    Sets the browser's value(), which selects the specified \p line.
    This is the same as calling select(line).
    \see select(), selected(), value(), item_select(), item_selected()
   */
  void value(int line) { select(line); }
  const char* text(int line) const ;
  void text(int line, const char* newtext);
  void* data(int line) const ;
  void data(int line, void* d);

  Fl_Browser(int X, int Y, int W, int H, const char *L = 0);
  /**
    The destructor deletes all list items and destroys the browser.
   */
  ~Fl_Browser() { clear(); }

  /**
    Gets the current format code prefix character, which by default is '\@'.
    A string of formatting codes at the start of each column are stripped off
    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>'\@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
    \li <tt>'\@b'</tt> Use a <B>bold</B> font (adds FL_BOLD to font)
    \li <tt>'\@i'</tt> Use an <I>italic</I> font (adds FL_ITALIC to font)
    \li <tt>'\@f' or '\@t'</tt> Use a fixed-pitch
    font (sets font to FL_COURIER)
    \li <tt>'\@c'</tt> Center the line horizontally
    \li <tt>'\@r'</tt> Right-justify the text
    \li <tt>'\@B0', '\@B1', ... '\@B255'</tt> Fill the backgound with
    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
    \li <tt>'\@u' or '\@_'</tt> Underline the text.
    \li <tt>'\@-'</tt> draw an engraved line through the middle.

    Notice that the '\@.' command can be used to reliably
    terminate the parsing.  To print a random string in a random color, use 
    <tt>sprintf("@C%d@.%s", color, string)</tt> and it will work even if the
    string starts with a digit or has the format character in it.
  */
  char format_char() const { return format_char_; }
  /**
    Sets the current format code prefix character to \p c.
    The default prefix is '\@'.  Set the prefix to 0 to disable formatting.
    \see format_char() for list of '\@' codes
  */
  void format_char(char c) { format_char_ = c; }
  /**
    Gets the current column separator character.
    The default is '\\t' (tab).
    \see column_char(), column_widths()
  */
  char column_char() const { return column_char_; }
  /**
    Sets the column separator to c.
    This will only have an effect if you also set column_widths().
    The default is '\\t' (tab).
    \see column_char(), column_widths()
  */
  void column_char(char c) { column_char_ = c; }
  /**
    Gets the current column width array.
    This array is zero-terminated and specifies the widths in pixels of
    each column. The text is split at each column_char() and each part is
    formatted into it's own column.  After the last column any remaining
    text is formatted into the space between the last column and the
    right edge of the browser, even if the text contains instances of
    column_char() .  The default value is a one-element array of just
    a zero, which means there are no columns.

    Example:
    \code
  Fl_Browser *b = new Fl_Browser(..);
  int widths[] = { 50, 50, 50, 70, 70, 40, 40, 70, 70, 50, 0 };  // widths for each column
  b->column_widths(widths); // assign array to widget
  b->column_char('\t');     // use tab as the column character
  b->add("USER\tPID\tCPU\tMEM\tVSZ\tRSS\tTTY\tSTAT\tSTART\tTIME\tCOMMAND");
  b->add("root\t2888\t0.0\t0.0\t1352\t0\ttty3\tSW\tAug15\t0:00\t@b@f/sbin/mingetty tty3");
  b->add("root\t13115\t0.0\t0.0\t1352\t0\ttty2\tSW\tAug30\t0:00\t@b@f/sbin/mingetty tty2");
  [..]
    \endcode
    \see column_char(), column_widths()
  */
  const int* column_widths() const { return column_widths_; }
  /**
    Sets the current array to \p arr.  Make sure the last entry is zero.
    \see column_char(), column_widths()
  */
  void column_widths(const int* arr) { column_widths_ = arr; }

  /**
    Returns non-zero if \p line has been scrolled to a position where it is being displayed.
    Checks to see if the item's vertical position is within the top and bottom
    edges of the display window. This does NOT take into account the hide()/show()
    status of the widget or item.
    \param[in] line The line to be checked
    \returns 1 if visible, 0 if not visible.
    \see topline(), middleline(), bottomline(), displayed(), lineposition()
  */
  int displayed(int line) const { return Fl_Browser_::displayed(find_line(line)); }

  /**
    Make the item at the specified \p line visible().
    Functionally similar to show(int line).
    If \p line is out of range, redisplay top or bottom of list as appropriate.
    \param[in] line The line to be made visible.
    \see show(int), hide(int), display(), visible(), make_visible()
  */
  void make_visible(int line) {
    if (line < 1) Fl_Browser_::display(find_line(1));
    else if (line > lines) Fl_Browser_::display(find_line(lines));
    else Fl_Browser_::display(find_line(line));
  }

  // icon support
  void icon(int line, Fl_Image* icon);
  Fl_Image* icon(int line) const;
  void remove_icon(int line);

  /** For back compatibility only. */
  void replace(int a, const char* b) { text(a, b); }
  void display(int line, int val=1);
};

#endif

//
// End of "$Id: Fl_Browser.H 6850 2009-09-07 02:25:51Z greg.ercolano $".
//

Added fltk-1.3/FL/Fl_Browser_.H.





















































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
//
// "$Id: Fl_Browser_.H 6902 2009-09-27 11:06:56Z matt $"
//
// Common browser header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Browser_ widget . */

// Yes, I know this should be a template...

#ifndef Fl_Browser__H
#define Fl_Browser__H

#ifndef Fl_Group_H
#include "Fl_Group.H"
#endif
#include "Fl_Scrollbar.H"
#include <FL/Fl.H>		// Fl::scrollbar_size()

#define FL_NORMAL_BROWSER	0	/**< type() of Fl_Browser */
#define FL_SELECT_BROWSER	1	/**< type() of FL_Select_Browser */
#define FL_HOLD_BROWSER		2	/**< type() of Fl_Hold_Browser */
#define FL_MULTI_BROWSER	3	/**< type() of Fl_Multi_Browser */

#define FL_SORT_ASCENDING	0	/**< sort browser items in ascending alphabetic order. */
#define FL_SORT_DESCENDING	1	/**< sort in descending order */

/**
  This is the base class for browsers.  To be useful it must be
  subclassed and several virtual functions defined.  The Forms-compatible
  browser and the file chooser's browser are subclassed off of this.

  This has been designed so that the subclass has complete control
  over the storage of the data, although because next() and 
  prev() functions are used to index, it works best as a linked list
  or as a large block of characters in which the line breaks must be
  searched for.

  A great deal of work has been done so that the "height" of a data
  object does not need to be determined until it is drawn.  This is
  useful if actually figuring out the size of an object requires
  accessing image data or doing stat() on a file or doing some
  other slow operation.
*/
class FL_EXPORT Fl_Browser_ : public Fl_Group {
  int position_;	// where user wants it scrolled to
  int real_position_;	// the current vertical scrolling position
  int hposition_;	// where user wants it panned to
  int real_hposition_;	// the current horizontal scrolling position
  int offset_;		// how far down top_ item the real_position is
  int max_width;	// widest object seen so far
  uchar has_scrollbar_;	// which scrollbars are enabled
  Fl_Font textfont_;
  Fl_Fontsize textsize_;
  Fl_Color textcolor_;
  void* top_;		// which item scrolling position is in
  void* selection_;	// which is selected (except for FL_MULTI_BROWSER)
  void *redraw1,*redraw2; // minimal update pointers
  void* max_width_item;	// which item has max_width_
  int scrollbar_size_;	// size of scrollbar trough

  void update_top();

protected:

  // All of the following must be supplied by the subclass:
  /**
    This method must be provided by the subclass 
    to return the first item in the list.
    \see item_first(), item_next(), item_last(), item_prev()
   */
  virtual void *item_first() const = 0;
  /**
    This method must be provided by the subclass
    to return the item in the list after \p item.
    \see item_first(), item_next(), item_last(), item_prev()
   */
  virtual void *item_next(void *item) const = 0;
  /**
    This method must be provided by the subclass
    to return the item in the list before \p item.
    \see item_first(), item_next(), item_last(), item_prev()
   */
  virtual void *item_prev(void *item) const = 0;
  /**
    This method must be provided by the subclass
    to return the last item in the list.
    \see item_first(), item_next(), item_last(), item_prev()
   */
  virtual void *item_last() const { return 0L; }
  /** 
    This method must be provided by the subclass to return 
    the height of \p item in pixels.
    Allow for two additional pixels for the list selection box.
    \param[in] item The item whose height is returned.
    \returns The height of the specified \p item in pixels.
    \see item_height(), item_width(), item_quick_height()
  */
  virtual int item_height(void *item) const = 0;
  /**
    This method must be provided by the subclass to return the width of the
    \p item in pixels.  Allow for two additional pixels for the list
    selection box.
    \param[in] item The item whose width is returned.
    \returns The width of the item in pixels.
  */
  virtual int item_width(void *item) const = 0;
  virtual int item_quick_height(void *item) const ;
  /**
    This method must be provided by the subclass to draw the \p item
    in the area indicated by \p X, \p Y, \p W, \p H.
  */
  virtual void item_draw(void *item,int X,int Y,int W,int H) const = 0;
  /**
    This optional method returns a string (label) that may be used for sorting. 
    \param[in] item The item whose label text is returned.
    \returns The item's text label. (Can be NULL if blank)
   */
  virtual const char *item_text(void *item) const { return 0L; }
  /**
    This optional method should be provided by the subclass 
    to efficiently swap browser items \p a and \p b, such as for sorting.
    \param[in] a,b The two items to be swapped.
   */
  virtual void item_swap(void *a,void *b) { }
  /**
    This method must be provided by the subclass 
    to return the item for the specified \p index. 
    \param[in] index The \p index of the item to be returned
    \returns The item at the specified \p index.
   */
  virtual void *item_at(int index) const { return 0L; }
  // you don't have to provide these but it may help speed it up:
  virtual int full_width() const ;	// current width of all items
  virtual int full_height() const ;	// current height of all items
  virtual int incr_height() const ;	// average height of an item
  // These only need to be done by subclass if you want a multi-browser:
  virtual void item_select(void *item,int val=1);
  virtual int item_selected(void *item) const ;

  // things the subclass may want to call:
  /**
    Returns the item that appears at the top of the list.
   */
  void *top() const { return top_; }
  /**
    Returns the item currently selected, or NULL if there is no selection.
    
    For multiple selection browsers this call returns the currently focused item,
    even if it is not selected. To find all selected items, call 
    Fl_Multi_Browser::selected() for every item in question.
  */
  void *selection() const { return selection_; }
  void new_list(); // completely clobber all data, as though list replaced
  void deleting(void *item); // get rid of any pointers to item
  void replacing(void *a,void *b); // change a pointers to b
  void swapping(void *a,void *b); // exchange pointers a and b
  void inserting(void *a,void *b); // insert b near a
  int displayed(void *item) const ; // true if this item is visible
  void redraw_line(void *item); // minimal update, no change in size
  /**
    This method will cause the entire list to be redrawn.
    \see redraw_lines(), redraw_line()
   */
  void redraw_lines() { damage(FL_DAMAGE_SCROLL); } // redraw all of them
  void bbox(int &X,int &Y,int &W,int &H) const;
  int leftedge() const;	// x position after scrollbar & border
  void *find_item(int ypos); // item under mouse
  
  void draw();
  Fl_Browser_(int X,int Y,int W,int H,const char *L=0);

public:

  /**
    Vertical scrollbar. Public, so that it can be accessed directly.
   */
  Fl_Scrollbar scrollbar;
  /**
    Horizontal scrollbar. Public, so that it can be accessed directly.
   */
  Fl_Scrollbar hscrollbar;

  int handle(int event);
  void resize(int X,int Y,int W,int H);

  int select(void *item,int val=1,int docallbacks=0);
  int select_only(void *item,int docallbacks=0);
  int deselect(int docallbacks=0);
  /**
    Gets the vertical scroll position of the list as a pixel position \p pos.
    The position returned is how many pixels of the list are scrolled off the top edge
    of the screen.  Example: A position of '3' indicates the top 3 pixels of 
    the list are scrolled off the top edge of the screen.
    \see position(), hposition()
  */
  int position() const { return position_; }
  void position(int pos); // scroll to here
  /**
    Gets the horizontal scroll position of the list as a pixel position \p pos.
    The position returned is how many pixels of the list are scrolled off the left edge
    of the screen. Example: A position of '18' indicates the left 18 pixels of
    the list are scrolled off the left edge of the screen.
    \see position(), hposition()
  */
  int hposition() const { return hposition_; }
  void hposition(int); // pan to here
  void display(void *item); // scroll so this item is shown

  /**
    Values for has_scrollbar().
   */
  /** Anonymous enum bit flags for has_scrollbar().
     -  bit 0: horizontal
     -  bit 1: vertical
     -  bit 2: 'always' (to be combined with bits 0 and 1)
     -  bit 3-31: reserved for future use
   */
  enum { // values for has_scrollbar()
    HORIZONTAL = 1,		///< Only show horizontal scrollbar.
    VERTICAL = 2,		///< Only show vertical scrollbar.
    BOTH = 3,			///< Show both scrollbars. (default)
    ALWAYS_ON = 4,		///< Specified scrollbar(s) should 'always' be shown (to be used with HORIZONTAL/VERTICAL)
    HORIZONTAL_ALWAYS = 5,	///< Horizontal scrollbar always on.
    VERTICAL_ALWAYS = 6,	///< Vertical scrollbar always on.
    BOTH_ALWAYS = 7		///< Both scrollbars always on.
  };
  /**
    Returns the current scrollbar mode, see Fl_Browser_::has_scrollbar(uchar)
   */
  uchar has_scrollbar() const { return has_scrollbar_; }
  /**
    Sets whether the widget should have scrollbars or not (default Fl_Browser_::BOTH).
    By default you can scroll in both directions, and the scrollbars
    disappear if the data will fit in the widget.  
    has_scrollbar() changes this based on the value of \p mode:
  
    - 0 - No scrollbars.

    - Fl_Browser_::HORIZONTAL - Only a horizontal scrollbar.

    - Fl_Browser_::VERTICAL - Only a vertical scrollbar.

    - Fl_Browser_::BOTH - The default is both scrollbars.

    - Fl_Browser_::HORIZONTAL_ALWAYS - Horizontal scrollbar always on,
      vertical always off.

    - Fl_Browser_::VERTICAL_ALWAYS - Vertical scrollbar always on,
      horizontal always off.

    - Fl_Browser_::BOTH_ALWAYS - Both always on.
  */
  void has_scrollbar(uchar mode) { has_scrollbar_ = mode; }

  /**
    Gets the default text font for the lines in the browser.
    \see textfont(), textsize(), textcolor()
  */
  Fl_Font textfont() const { return textfont_; }
  /**
    Sets the default text font for the lines in the browser to \p font.
  */
  void textfont(Fl_Font font) { textfont_ = font; }

  /**
    Gets the default text size (in pixels) for the lines in the browser.
  */
  Fl_Fontsize textsize() const { return textsize_; }
  /**
    Sets the default text size (in pixels) for the lines in the browser to \p size.
  */
  void textsize(Fl_Fontsize size) { textsize_ = size; }

  /**
    Gets the default text color for the lines in the browser.
  */
  Fl_Color textcolor() const { return textcolor_; }
  /**
    Sets the default text color for the lines in the browser to color \p col.
  */
  void textcolor(Fl_Color col) { textcolor_ = col; }

  /**
    Gets the current size of the scrollbars' troughs, in pixels.

    If this value is zero (default), this widget will use the 
    Fl::scrollbar_size() value as the scrollbar's width.
  
    \returns Scrollbar size in pixels, or 0 if the global Fl::scrollsize() is being used.
    \see Fl::scrollbar_size(int)
  */
  int scrollbar_size() const {
      return(scrollbar_size_);
  }
  /**
    Sets the pixel size of the scrollbars' troughs to the \p size, in pixels.

    Normally you should not need this method, and should use
    Fl::scrollbar_size(int) instead to manage the size of ALL 
    your widgets' scrollbars. This ensures your application 
    has a consistent UI, is the default behavior, and is normally
    what you want.

    Only use THIS method if you really need to override the global
    scrollbar size. The need for this should be rare.
    
    Setting \p size to the special value of 0 causes the widget to
    track the global Fl::scrollbar_size(), which is the default.
    
    \param[in] size Sets the scrollbar size in pixels.\n
                    If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
    \see Fl::scrollbar_size()
  */
  void scrollbar_size(int size) {
      scrollbar_size_ = size;
  }   
  /**
    This method has been deprecated, existing for backwards compatibility only.
    Use scrollbar_size() instead.
    This method always returns the global value Fl::scrollbar_size().
    \returns Always returns the global value Fl::scrollbar_size().
    \todo This method should eventually be removed in 1.4+
  */
  int scrollbar_width() const {
      return(Fl::scrollbar_size());
  }
  /**
    This method has been deprecated, existing for backwards compatibility only.
    Use scrollbar_size(int) instead.
    This method sets the global Fl::scrollbar_size(), and forces this
    instance of the widget to use it.
    \todo This method should eventually be removed in 1.4+
  */
  void scrollbar_width(int width) {
      Fl::scrollbar_size(width);
      scrollbar_size_ = 0;
  }
  /**
    Moves the vertical scrollbar to the righthand side of the list.
    For back compatibility.
  */
  void scrollbar_right() { scrollbar.align(FL_ALIGN_RIGHT); }
  /**
    Moves the vertical scrollbar to the lefthand side of the list.
    For back compatibility.
  */
  void scrollbar_left() { scrollbar.align(FL_ALIGN_LEFT); }
  void sort(int flags=0);
};

#endif

//
// End of "$Id: Fl_Browser_.H 6902 2009-09-27 11:06:56Z matt $".
//

Added fltk-1.3/FL/Fl_Button.H.

































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
//
// "$Id: Fl_Button.H 6878 2009-09-17 22:12:24Z matt $"
//
// Button header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Button widget . */

#ifndef Fl_Button_H
#define Fl_Button_H

#ifndef Fl_Widget_H
#include "Fl_Widget.H"
#endif

// values for type()
#define FL_NORMAL_BUTTON	0   /**< value() will be set to 1 during the press of the button and 
                                         reverts back to 0 when the button is released */
#define FL_TOGGLE_BUTTON	1   ///< value() toggles between 0 and 1 at every click of the button
#define FL_RADIO_BUTTON		(FL_RESERVED_TYPE+2) /**< is set to 1 at button press, and all other
				         buttons in the same group with <tt>type() == FL_RADIO_BUTTON</tt>
				         are set to zero.*/
#define FL_HIDDEN_BUTTON	3   ///< for Forms compatibility

#ifndef FL_DOXYGEN
extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*);
#endif

/**
  \class Fl_Button
  \brief Buttons generate callbacks when they are clicked by the user.
  
  You control exactly when and how by changing the values for type() and
  when().  Buttons can also generate callbacks in response to \c FL_SHORTCUT
  events.  The button can either have an explicit shortcut(int s) value or a
  letter shortcut can be indicated in the label() with an '\&' character
  before it.  For the label shortcut it does not matter if \e Alt is held
  down, but if you have an input field in the same window, the user will have
  to hold down the \e Alt key so that the input field does not eat the event
  first as an \c FL_KEYBOARD event.

  \todo Refactor the doxygen comments for Fl_Button type() documentation.

  For an Fl_Button object, the type() call returns one of:
  \li \c FL_NORMAL_BUTTON (0): value() remains unchanged after button press.
  \li \c FL_TOGGLE_BUTTON: value() is inverted after button press.
  \li \c FL_RADIO_BUTTON: value() is set to 1 after button press, and all other
         buttons in the current group with <tt>type() == FL_RADIO_BUTTON</tt>
	 are set to zero.

  \todo Refactor the doxygen comments for Fl_Button when() documentation.

  For an Fl_Button object, the following when() values are useful, the default
  being \c FL_WHEN_RELEASE:
  \li \c 0: The callback is not done, instead changed() is turned on.
  \li \c FL_WHEN_RELEASE: The callback is done after the user successfully
         clicks the button, or when a shortcut is typed.
  \li \c FL_WHEN_CHANGED: The callback is done each time the value() changes
         (when the user pushes and releases the button, and as the mouse is
	 dragged around in and out of the button).
*/
class FL_EXPORT Fl_Button : public Fl_Widget {

  int shortcut_;
  char value_;
  char oldval;
  uchar down_box_;

protected:

  virtual void draw();

public:

  virtual int handle(int);

  Fl_Button(int X, int Y, int W, int H, const char *L = 0);

  int value(int v);

  /**
    Returns the current value of the button (0 or 1).
   */
  char value() const {return value_;}

  /**
    Same as \c value(1).
    \see value(int v)
   */
  int set() {return value(1);}

  /**
    Same as \c value(0).
    \see value(int v)
   */
  int clear() {return value(0);}

  void setonly(); // this should only be called on FL_RADIO_BUTTONs

  /**
    Returns the current shortcut key for the button.
    \retval int
   */
  int shortcut() const {return shortcut_;}

  /**
    Sets the shortcut key to \c s.
    Setting this overrides the use of '\&' in the label().
    The value is a bitwise OR of a key and a set of shift flags, for example:
    <tt>FL_ALT | 'a'</tt>, or
    <tt>FL_ALT | (FL_F + 10)</tt>, or just
    <tt>'a'</tt>.
    A value of 0 disables the shortcut.

    The key can be any value returned by Fl::event_key(), but will usually be
    an ASCII letter.  Use a lower-case letter unless you require the shift key
    to be held down.

    The shift flags can be any set of values accepted by Fl::event_state().
    If the bit is on, that shift key must be pushed.  Meta, Alt, Ctrl, and
    Shift must be off if they are not in the shift flags (zero for the other
    bits indicates a "don't care" setting).
    \param[in] s bitwise OR of key and shift flags
   */
  void shortcut(int s) {shortcut_ = s;}

  /**
    Returns the current down box type, which is drawn when value() is non-zero.
    \retval Fl_Boxtype
   */
  Fl_Boxtype down_box() const {return (Fl_Boxtype)down_box_;}

  /**
    Sets the down box type. The default value of 0 causes FLTK to figure out
    the correct matching down version of box().
    \param[in] b down box type
   */
  void down_box(Fl_Boxtype b) {down_box_ = b;}

  /// (for backwards compatibility)
  void shortcut(const char *s) {shortcut(fl_old_shortcut(s));}

  /// (for backwards compatibility)
  Fl_Color down_color() const {return selection_color();}

  /// (for backwards compatibility)
  void down_color(unsigned c) {selection_color(c);}
};

#endif

//
// End of "$Id: Fl_Button.H 6878 2009-09-17 22:12:24Z matt $".
//

Added fltk-1.3/FL/Fl_Cairo.H.



































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//
// "$Id: Fl_Cairo.H 6716 2009-03-24 01:40:44Z fabien $"
//
// Main header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
    Handling transparently platform dependent cairo include files 
*/

#ifndef FL_CAIRO_H
# define FL_CAIRO_H
# ifdef HAVE_CAIRO

// Cairo is currently supported for the following platforms:
// Win32, Apple Quartz, X11

# include <FL/Fl_Export.H>

# if defined(USE_X11) // X11
#  include <cairo-xlib.h>
# elif defined(WIN32)
#  include <cairo-win32.h>
# elif defined(__APPLE_QUARTZ__)
#  include <cairo-quartz.h>
# else
#  error Cairo is not supported on that platform.
# endif

/** 
   \addtogroup group_cairo
   @{
*/

/** 
   Contains all the necessary info on the current cairo context.
   A private internal & unique corresponding object is created to
   permit cairo context state handling while keeping it opaque.
   For internal use only.
   \note Only available when configure has the --enable-cairo option
*/
class FL_EXPORT Fl_Cairo_State {
public:
  Fl_Cairo_State() : cc_(0), own_cc_(false), autolink_(false), window_(0), gc_(0) {}

    // access attributes
    cairo_t* cc() const {return cc_;}		 ///< Gets the current cairo context
    bool autolink() const {return autolink_;}	 ///< Gets the autolink option. See Fl::cairo_autolink_context(bool)
    /** Sets the current cairo context, \p own indicates cc deletion is handle externally by user */
    void cc(cairo_t* c, bool own=true)  {	 
	if (cc_ && own_cc_) cairo_destroy(cc_); 
	cc_=c;
	if (!cc_) window_=0;
	own_cc_=own;
    }
    void  autolink(bool b);                     ///< Sets the autolink option, only available with --enable-cairoext
    void  window(void* w)  {window_=w;}		///< Sets the window \p w to keep track on
    void* window() const {return window_;}	///< Gets the last window attached to a cc
    void  gc(void* c)  {gc_=c;}		        ///< Sets the gc \p c to keep track on
    void* gc() const {return gc_;}		///< Gets the last gc attached to a cc

private:
    cairo_t * cc_;	 // contains the unique autoupdated cairo context
    bool own_cc_;	 // indicates whether we must delete the cc, useful for internal cleanup
    bool autolink_;	 // true by default, permits to prevent the automatic cairo mapping on fltk windows for custom cairo implementations
    void* window_, *gc_; // for keeping track internally of last win+gc treated
};

/** @} */

# endif // HAVE_CAIRO
#endif // FL_CAIRO_H

//
// End of "$Id: Fl_Cairo.H 6716 2009-03-24 01:40:44Z fabien $" .
//

Added fltk-1.3/FL/Fl_Cairo_Window.H.

























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//
// "$Id: Fl_Cairo_Window.H 6716 2009-03-24 01:40:44Z fabien $"
//
// Main header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
    Fl_Cairo_Window Handling transparently a fltk window incorporte a cairo draw callback.
*/

#ifndef FL_CAIRO_WINDOW_H
# define FL_CAIRO_WINDOW_H
# ifdef HAVE_CAIRO

// Cairo is currently supported for the following platforms:
// Win32, Apple Quartz, X11
#  include <FL/Fl.H>
#  include <FL/Fl_Double_Window.H>

/** 
   \addtogroup group_cairo
   @{
*/

/**
   This defines a pre-configured cairo fltk window.
   This class overloads the virtual draw() method for you,
   so that the only thing you have to do is to provide your cairo code.
   All cairo context handling is achieved transparently.
   \note You can alternatively define your custom cairo fltk window,
   and thus at least override the draw() method to provide custom cairo
   support. In this case you will probably use Fl::cairo_make_current(Fl_Window*)
   to attach a context to your window. You should do it only when your window is 
   the current window. \see Fl_Window::current()
*/
class FL_EXPORT Fl_Cairo_Window : public Fl_Double_Window {

public:
  Fl_Cairo_Window(int w, int h) : Fl_Double_Window(w,h),draw_cb_(0) {}

protected:
  /** Overloaded to provide cairo callback support */
  void draw() {
    Fl_Double_Window::draw();
    // manual method ? if yes explicitly get a cairo_context here
    if (!Fl::cairo_autolink_context()) 
      Fl::cairo_make_current(this); 
    if (draw_cb_) draw_cb_(this, Fl::cairo_cc());
  }

public:
  /** This defines the cairo draw callback prototype that you must further */
  typedef void (*cairo_draw_cb) (Fl_Cairo_Window* self, cairo_t* def);
  /** 
    You must provide a draw callback which will implement your cairo rendering.
    This method will permit you to set your cairo callback to \p cb.
  */
  void set_draw_cb(cairo_draw_cb  cb){draw_cb_=cb;}
private:
    cairo_draw_cb draw_cb_;
};


/** @} */

# endif // HAVE_CAIRO
#endif // FL_CAIRO_WINDOW_H

//
// End of "$Id: Fl_Cairo_Window.H 6716 2009-03-24 01:40:44Z fabien $" .
//

Added fltk-1.3/FL/Fl_Chart.H.

































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
//
// "$Id: Fl_Chart.H 6902 2009-09-27 11:06:56Z matt $"
//
// Forms chart header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Chart widget . */

#ifndef Fl_Chart_H
#define Fl_Chart_H

#ifndef Fl_Widget_H
#include "Fl_Widget.H"
#endif

// values for type()
#define FL_BAR_CHART		0	/**< type() for Bar Chart variant */
#define FL_HORBAR_CHART		1	/**< type() for Horizontal Bar Chart variant */
#define FL_LINE_CHART		2	/**< type() for Line Chart variant */
#define FL_FILL_CHART		3	/**< type() for Fill Line Chart variant */
#define FL_SPIKE_CHART		4	/**< type() for Spike Chart variant */
#define FL_PIE_CHART		5	/**< type() for Pie Chart variant */
#define FL_SPECIALPIE_CHART	6	/**< type() for Special Pie Chart variant */

#define FL_FILLED_CHART  FL_FILL_CHART	/**< for compatibility */

#define FL_CHART_MAX		128	/**< max entries per chart */
#define FL_CHART_LABEL_MAX	18	/**< max label length for entry */

/** For internal use only */
struct FL_CHART_ENTRY {
   float val;				/**< For internal use only. */
   unsigned col;			/**< For internal use only. */
   char str[FL_CHART_LABEL_MAX+1];	/**< For internal use only. */
};

/**
  \class Fl_Chart
  \brief Fl_Chart displays simple charts.
  It is provided for Forms compatibility.

  \image html charts.gif  
  \image latex charts.eps  "Fl_Chart" width=10cm
  \todo Refactor Fl_Chart::type() information.

  The type of an Fl_Chart object can be set using type(uchar t) to:
  \li \c FL_BAR_CHART: Each sample value is drawn as a vertical bar.
  \li \c FL_FILLED_CHART: The chart is filled from the bottom of the graph
         to the sample values.
  \li \c FL_HORBAR_CHART: Each sample value is drawn as a horizontal bar.
  \li \c FL_LINE_CHART: The chart is drawn as a polyline with vertices at
         each sample value.
  \li \c FL_PIE_CHART: A pie chart is drawn with each sample value being
         drawn as a proportionate slice in the circle.
  \li \c FL_SPECIALPIE_CHART: Like \c FL_PIE_CHART, but the first slice is
         separated from the pie.
  \li \c FL_SPIKE_CHART: Each sample value is drawn as a vertical line.
 */
class FL_EXPORT Fl_Chart : public Fl_Widget {
    int numb;
    int maxnumb;
    int sizenumb;
    FL_CHART_ENTRY *entries;
    double min,max;
    uchar autosize_;
    Fl_Font textfont_;
    Fl_Fontsize textsize_;
    Fl_Color textcolor_;
protected:
    void draw();
public:
    Fl_Chart(int X, int Y, int W, int H, const char *L = 0);

    ~Fl_Chart();

    void clear();

    void add(double val, const char *str = 0, unsigned col = 0);

    void insert(int ind, double val, const char *str = 0, unsigned col = 0);

    void replace(int ind, double val, const char *str = 0, unsigned col = 0);

    /**
      Gets the lower and upper bounds of the chart values.
      \param[out] a, b are set to lower, upper
     */
    void bounds(double *a,double *b) const {*a = min; *b = max;}

    void bounds(double a,double b);

    /**
      Returns the number of data values in the chart.
     */
    int size() const {return numb;}

    void size(int W, int H) { Fl_Widget::size(W, H); }

    /**
      Gets the maximum number of data values for a chart.
     */
    int maxsize() const {return maxnumb;}

    void maxsize(int m);

    /** Gets the chart's text font */
    Fl_Font textfont() const {return textfont_;}
    /** Sets the chart's text font to \p s. */
    void textfont(Fl_Font s) {textfont_ = s;}

    /** Gets the chart's text size */
    Fl_Fontsize textsize() const {return textsize_;}
    /** gets the chart's text size to \p s. */
    void textsize(Fl_Fontsize s) {textsize_ = s;}

    /** Gets the chart's text color */
    Fl_Color textcolor() const {return textcolor_;}
    /** gets the chart's text color to \p n. */
    void textcolor(Fl_Color n) {textcolor_ = n;}

    /**
      Get whether the chart will automatically adjust the bounds of the chart.
      \returns non-zero if auto-sizing is enabled and zero if disabled.
     */
    uchar autosize() const {return autosize_;}

    /**
      Set whether the chart will automatically adjust the bounds of the chart.
      \param[in] n non-zero to enable automatic resizing, zero to disable.
     */
    void autosize(uchar n) {autosize_ = n;}
};

#endif

//
// End of "$Id: Fl_Chart.H 6902 2009-09-27 11:06:56Z matt $".
//

Added fltk-1.3/FL/Fl_Check_Browser.H.





















































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//
// "$Id: Fl_Check_Browser.H 6614 2009-01-01 16:11:32Z matt $"
//
// Fl_Check_Browser header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Check_Browser widget . */

#ifndef Fl_Check_Browser_H
#define Fl_Check_Browser_H

#include "Fl.H"
#include "Fl_Browser_.H"

/**
  The Fl_Check_Browser widget displays a scrolling list of text
  lines that may be selected and/or checked by the user.
*/
class FL_EXPORT Fl_Check_Browser : public Fl_Browser_ {
  /* required routines for Fl_Browser_ subclass: */

  void *item_first() const;
  void *item_next(void *) const;
  void *item_prev(void *) const;
  int item_height(void *) const;
  int item_width(void *) const;
  void item_draw(void *, int, int, int, int) const;
  void item_select(void *, int);
  int item_selected(void *) const;

  /* private data */

  public: // IRIX 5.3 C++ compiler doesn't support private structures...

#ifndef FL_DOXYGEN
  /** For internal use only. */
  struct cb_item {
	  cb_item *next;	/**< For internal use only. */
	  cb_item *prev;	/**< For internal use only. */
	  char checked;		/**< For internal use only. */
	  char selected;	/**< For internal use only. */
	  char *text;		/**< For internal use only. */
  };
#endif // !FL_DOXYGEN

  private:

  cb_item *first;
  cb_item *last;
  cb_item *cache;
  int cached_item;
  int nitems_;
  int nchecked_;
  cb_item *find_item(int) const;
  int lineno(cb_item *) const;

  public:

  Fl_Check_Browser(int x, int y, int w, int h, const char *l = 0);
   /** The destructor deletes all list items and destroys the browser. */
  ~Fl_Check_Browser() { clear(); }
  int add(char *s);               // add an (unchecked) item
  int add(char *s, int b);        // add an item and set checked
				  // both return the new nitems()
  int remove(int item);           // delete an item. Returns nitems()

  // inline const char * methods to avoid breaking binary compatibility...
   /** See int Fl_Check_Browser::add(char *s) */
  int add(const char *s) { return add((char *)s); }
  /** See int Fl_Check_Browser::add(char *s) */
  int add(const char *s, int b) { return add((char *)s, b); }

  void clear();                   // delete all items
  /**
    Returns how many lines are in the browser.  The last line number is equal to
    this.
  */
  int nitems() const { return nitems_; }
  /**    Returns how many items are currently checked.  */
  int nchecked() const { return nchecked_; }
  int checked(int item) const;
  void checked(int item, int b);
  /**    Equivalent to Fl_Check_Browser::checked(item, 1).  */
  void set_checked(int item) { checked(item, 1); }
  void check_all();
  void check_none();
  int value() const;              // currently selected item
  char *text(int item) const;     // returns pointer to internal buffer

  protected:

  int handle(int);
};

#endif // Fl_Check_Browser_H

//
// End of "$Id: Fl_Check_Browser.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Check_Button.H.

























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//
// "$Id: Fl_Check_Button.H 6614 2009-01-01 16:11:32Z matt $"
//
// Check button header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Check_Button widget . */

#ifndef Fl_Check_Button_H
#define Fl_Check_Button_H

#include "Fl_Light_Button.H"

/**
  \class Fl_Check_Button
  \brief A button with an "checkmark" to show its status.

  \image html Fl_Check_Button.gif
  \image latex Fl_Check_Button.eps  "Fl_Check_Button" width=4cm
  Buttons generate callbacks when they are clicked by the user. You control
  exactly when and how by changing the values for type() and when().

  The Fl_Check_Button subclass displays its "ON" state by showing a "checkmark"
  rather than drawing itself pushed in.
  
  \todo Refactor Fl_Check_Button doxygen comments (add color() info etc?)
  \todo Generate Fl_Check_Button.gif with visible checkmark.
 */
class FL_EXPORT Fl_Check_Button : public Fl_Light_Button {
public:
  Fl_Check_Button(int X, int Y, int W, int H, const char *L = 0);
};

#endif

//
// End of "$Id: Fl_Check_Button.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Choice.H.

























































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//
// "$Id: Fl_Choice.H 6614 2009-01-01 16:11:32Z matt $"
//
// Choice header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Choice widget . */

#ifndef Fl_Choice_H
#define Fl_Choice_H

#include "Fl_Menu_.H"

/**
  \class Fl_Choice
  \brief A button that is used to pop up a menu.

  This is a button that, when pushed, pops up a menu (or hierarchy of menus)
  defined by an array of Fl_Menu_Item objects.
  Motif calls this an OptionButton.

  The only difference between this and a Fl_Menu_Button is that the name of
  the most recent chosen menu item is displayed inside the box, while the
  label is displayed outside the box. However, since the use of this is most
  often to control a single variable rather than do individual callbacks,
  some of the Fl_Menu_Button methods are redescribed here in those terms.

  When the user picks an item off the menu the value() is set to that item
  and then the item's callback is done with the menu_button as the
  \c Fl_Widget* argument. If the item does not have a callback the
  menu_button's callback is done instead.

  All three mouse buttons pop up the menu. The Forms behavior of the first
  two buttons to increment/decrement the choice is not implemented.  This
  could be added with a subclass, however.

  The menu will also pop up in response to shortcuts indicated by putting
  a '\&' character in the label().  See Fl_Button::shortcut(int s) for a
  description of this.

  Typing the shortcut() of any of the items will do exactly the same as when
  you pick the item with the mouse.  The '\&' character in item names are
  only looked at when the menu is popped up, however.

  \image html choice.gif
  \image latex choice.eps  "Fl_Choice" width=4cm
  \todo Refactor the doxygen comments for Fl_Choice changed() documentation.

  \li <tt>int Fl_Widget::changed() const</tt>
      This value is true the user picks a different value. <em>It is turned
      off by value() and just before doing a callback (the callback can turn
      it back on if desired).</em>
  \li <tt>void Fl_Widget::set_changed()</tt>
      This method sets the changed() flag.
  \li <tt>void Fl_Widget::clear_changed()</tt>
      This method clears the changed() flag.
  \li <tt>Fl_Boxtype Fl_Choice::down_box() const</tt>
      Gets the current down box, which is used when the menu is popped up.
      The default down box type is \c FL_DOWN_BOX.
  \li <tt>void Fl_Choice::down_box(Fl_Boxtype b)</tt>
      Sets the current down box type to \p b.
 */
class FL_EXPORT Fl_Choice : public Fl_Menu_ {
protected:
  void draw();
public:
  int handle(int);

  Fl_Choice(int X, int Y, int W, int H, const char *L = 0);

  /**
    Gets the index of the last item chosen by the user.
    The index is zero initially.
   */
  int value() const {return Fl_Menu_::value();}

  int value(int v);

  int value(const Fl_Menu_Item* v);
};

#endif

//
// End of "$Id: Fl_Choice.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Clock.H.



















































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//
// "$Id: Fl_Clock.H 6812 2009-07-01 07:27:25Z AlbrechtS $"
//
// Clock header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Clock, Fl_Clock_Output widgets . */

#ifndef Fl_Clock_H
#define Fl_Clock_H

#ifndef Fl_Widget_H
#include "Fl_Widget.H"
#endif

// values for type:
#define FL_SQUARE_CLOCK		0	/**< type() of Square Clock variant */
#define FL_ROUND_CLOCK		1	/**< type() of Round Clock variant */
#define FL_ANALOG_CLOCK FL_SQUARE_CLOCK	/**< An analog clock is square */
#define FL_DIGITAL_CLOCK FL_SQUARE_CLOCK /**< Not yet implemented */

// fabien: Please keep the horizontal formatting of both images in class desc, 
// don't lose vert. space for nothing!

/**
  \class Fl_Clock_Output
  \brief This widget can be used to display a program-supplied time.
  
  The time shown on the clock is not updated. To display the current time,
  use Fl_Clock instead.

  \htmlonly <BR>  <table align=CENTER border=1 cellpadding=5 >  
  <caption align=bottom>type() FL_SQUARE_CLOCK and FL_ROUND_CLOCK </caption> <TR><TD> \endhtmlonly
  \image html clock.gif  
  \htmlonly </TD> <TD> \endhtmlonly
  \image html round_clock.gif 
  \htmlonly </TD> </TR> </table> \endhtmlonly
  \image latex clock.eps "FL_SQUARE_CLOCK type" width=4cm
  \image latex round_clock.eps "FL_ROUND_CLOCK type" width=4cm
 */
class FL_EXPORT Fl_Clock_Output : public Fl_Widget {
  int hour_, minute_, second_;
  ulong value_;
  void drawhands(Fl_Color,Fl_Color); // part of draw
protected:
  void draw();
  void draw(int X, int Y, int W, int H);
public:

  Fl_Clock_Output(int X, int Y, int W, int H, const char *L = 0);

  void value(ulong v);	// set to this Unix time
  
  void value(int H, int m, int s);

  /**
    Returns the displayed time.
    Returns the time in seconds since the UNIX epoch (January 1, 1970).
    \see value(ulong)
   */
  ulong value() const {return value_;}

  /**
    Returns the displayed hour (0 to 23).
    \see value(), minute(), second()
   */
  int hour() const {return hour_;}

  /**
    Returns the displayed minute (0 to 59).
    \see value(), hour(), second()
   */
  int minute() const {return minute_;}

  /**
    Returns the displayed second (0 to 60, 60=leap second).
    \see value(), hour(), minute()
   */
  int second() const {return second_;}
};

// a Fl_Clock displays the current time always by using a timeout:

/**
  \class Fl_Clock
  \brief This widget provides a round analog clock display.

  Fl_Clock is provided for Forms compatibility. 
  It installs a 1-second timeout callback using Fl::add_timeout().
  You can choose the rounded or square type of the clock with type(), see below.
  \htmlonly <BR>  <table align=CENTER border=1 cellpadding=5 >  
  <caption align=bottom>type() FL_SQUARE_CLOCK and FL_ROUND_CLOCK </caption> <TR><TD> \endhtmlonly
  \image html clock.gif  
  \htmlonly </TD> <TD> \endhtmlonly
  \image html round_clock.gif 
  \htmlonly </TD> </TR> </table> \endhtmlonly
  \image latex clock.eps "FL_SQUARE_CLOCK type" width=4cm  
  \image latex round_clock.eps "FL_ROUND_CLOCK type" width=4cm
 */
class FL_EXPORT Fl_Clock : public Fl_Clock_Output {
public:
  int handle(int);

  Fl_Clock(int X, int Y, int W, int H,  const char *L = 0);
  
  Fl_Clock(uchar t, int X, int Y, int W, int H, const char *L);
  
  ~Fl_Clock();
};

#endif

//
// End of "$Id: Fl_Clock.H 6812 2009-07-01 07:27:25Z AlbrechtS $".
//

Added fltk-1.3/FL/Fl_Color_Chooser.H.



























































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
//
// "$Id: Fl_Color_Chooser.H 6614 2009-01-01 16:11:32Z matt $"
//
// Color chooser header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/** \file
   Fl_Color_Chooser widget . */

// The color chooser object and the color chooser popup.  The popup
// is just a window containing a single color chooser and some boxes
// to indicate the current and cancelled color.

#ifndef Fl_Color_Chooser_H
#define Fl_Color_Chooser_H

#include <FL/Fl_Group.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Return_Button.H>
#include <FL/Fl_Choice.H>
#include <FL/Fl_Value_Input.H>

#ifndef FL_DOXYGEN

/** For internal use only */
class FL_EXPORT Flcc_HueBox : public Fl_Widget {
  int px, py;
protected:
  void draw();
  int handle_key(int);
public:
  int handle(int);
  Flcc_HueBox(int X, int Y, int W, int H) : Fl_Widget(X,Y,W,H) {
  px = py = 0;}
};

/** For internal use only */
class FL_EXPORT Flcc_ValueBox : public Fl_Widget {
  int py;
protected:
  void draw();
  int handle_key(int);
public:
  int handle(int);
  Flcc_ValueBox(int X, int Y, int W, int H) : Fl_Widget(X,Y,W,H) {
  py = 0;}
};

/** For internal use only */
class FL_EXPORT Flcc_Value_Input : public Fl_Value_Input {
public:
  int format(char*);
  Flcc_Value_Input(int X, int Y, int W, int H) : Fl_Value_Input(X,Y,W,H) {}
};

#endif // !FL_DOXYGEN

/** \addtogroup group_comdlg 
    @{ */

/**
  \class Fl_Color_Chooser
  \brief The Fl_Color_Chooser widget provides a standard RGB color chooser.

  \image html fl_color_chooser.jpg
  \image latex fl_color_chooser.eps "fl_color_chooser()" width=5cm

  You can place any number of the widgets into a panel of your own design.
  The diagram shows the widget as part of a color chooser dialog created by
  the fl_color_chooser() function. The Fl_Color_Chooser widget contains the
  hue box, value slider, and rgb input fields from the above diagram (it
  does not have the color chips or the Cancel or OK buttons).
  The callback is done every time the user changes the rgb value. It is not
  done if they move the hue control in a way that produces the \e same rgb
  value, such as when saturation or value is zero.

  The fl_color_chooser() function pops up a window to let the user pick an
  arbitrary RGB color. They can pick the hue and saturation in the "hue box"
  on the left (hold down CTRL to just change the saturation), and the
  brightness using the vertical slider. Or they can type the 8-bit numbers
  into the RGB Fl_Value_Input fields, or drag the mouse across them to adjust
  them.  The pull-down menu lets the user set the input fields to show RGB,
  HSV, or 8-bit RGB (0 to 255).

  fl_color_chooser() returns non-zero if the user picks ok, and updates the
  RGB values.  If the user picks cancel or closes the window this returns
  zero and leaves RGB unchanged.

  If you use the color chooser on an 8-bit screen, it will allocate all the
  available colors, leaving you no space to exactly represent the color the
  user picks! You can however use fl_rectf() to fill a region with a simulated
  color using dithering.
 */
/** @} */
class FL_EXPORT Fl_Color_Chooser : public Fl_Group {
  Flcc_HueBox huebox;
  Flcc_ValueBox valuebox;
  Fl_Choice choice;
  Flcc_Value_Input rvalue;
  Flcc_Value_Input gvalue;
  Flcc_Value_Input bvalue;
  Fl_Box resize_box;
  double hue_, saturation_, value_;
  double r_, g_, b_;
  void set_valuators();
  static void rgb_cb(Fl_Widget*, void*);
  static void mode_cb(Fl_Widget*, void*);
public:
  /** Returns which Fl_Color_Chooser variant is currently active */
  int mode() {return choice.value();}

  /**
    Returns the current hue.
    0 <= hue < 6. Zero is red, one is yellow, two is green, etc.
    <em>This value is convenient for the internal calculations - some other
    systems consider hue to run from zero to one, or from 0 to 360.</em>
   */
  double hue() const {return hue_;}

  /**
    Returns the saturation.
    0 <= saturation <= 1.
   */
  double saturation() const {return saturation_;}

  /**
    Returns the value/brightness.
    0 <= value <= 1.
   */
  double value() const {return value_;}

  /**
    Returns the current red value.
    0 <= r <= 1.
   */
  double r() const {return r_;}

  /**
    Returns the current green value.
    0 <= g <= 1.
   */
  double g() const {return g_;}

  /**
    Returns the current blue value.
    0 <= b <= 1.
   */
  double b() const {return b_;}

  int hsv(double H, double S, double V);

  int rgb(double R, double G, double B);

  static void hsv2rgb(double H, double S, double V, double& R, double& G, double& B);

  static void rgb2hsv(double R, double G, double B, double& H, double& S, double& V);

  Fl_Color_Chooser(int X, int Y, int W, int H, const char *L = 0);
};

FL_EXPORT int fl_color_chooser(const char* name, double& r, double& g, double& b);
FL_EXPORT int fl_color_chooser(const char* name, uchar& r, uchar& g, uchar& b);

#endif

//
// End of "$Id: Fl_Color_Chooser.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Counter.H.

























































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
//
// "$Id: Fl_Counter.H 6939 2009-11-17 14:45:36Z matt $"
//
// Counter header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Counter widget . */

// A numerical value with up/down step buttons.  From Forms.

#ifndef Fl_Counter_H
#define Fl_Counter_H

#ifndef Fl_Valuator_H
#include "Fl_Valuator.H"
#endif

// values for type():
#define FL_NORMAL_COUNTER	0	/**< type() for counter with fast buttons */
#define FL_SIMPLE_COUNTER	1	/**< type() for counter without fast buttons */

/**
  Controls a single floating point value with button (or keyboard) arrows.
  Double arrows buttons achieve larger steps than simple arrows.
  \see Fl_Spinner for value input with vertical step arrows.
  <P align=center>\image html counter.gif</P>
  \image latex counter.eps "Fl_Counter" width=4cm

  \todo Refactor the doxygen comments for Fl_Counter type() documentation.

  The type of an Fl_Counter object can be set using type(uchar t) to:
  \li \c FL_NORMAL_COUNTER: Displays a counter with 4 arrow buttons.
  \li \c FL_SIMPLE_COUNTER: Displays a counter with only 2 arrow buttons.
*/
class FL_EXPORT Fl_Counter : public Fl_Valuator {

  Fl_Font textfont_;
  Fl_Fontsize textsize_;
  Fl_Color textcolor_;
  double lstep_;
  uchar mouseobj;
  static void repeat_callback(void *);
  int calc_mouseobj();
  void increment_cb();

protected:

  void draw();

public:

  int handle(int);

  Fl_Counter(int X, int Y, int W, int H, const char* L = 0);
  ~Fl_Counter();

  /**
    Sets the increment for the large step buttons.
    The default value is 1.0.
    \param[in] a large step increment.
  */
  void lstep(double a) {lstep_ = a;}

  /**
    Sets the increments for the normal and large step buttons.
    \param[in] a, b normal and large step increments.
  */
  void step(double a,double b) {Fl_Valuator::step(a); lstep_ = b;}

  /**
    Sets the increment for the normal step buttons.
    \param[in] a normal step increment.
  */
  void step(double a) {Fl_Valuator::step(a);}

  /**
    Returns the increment for normal step buttons.
   */
  double step() const {return Fl_Valuator::step();}

  /** Gets the text font */
  Fl_Font textfont() const {return textfont_;}
  /** Sets the text font to \p s */
  void textfont(Fl_Font s) {textfont_ = s;}

  /** Gets the font size */
  Fl_Fontsize textsize() const {return textsize_;}
  /** Sets the font size to \p s */
  void textsize(Fl_Fontsize s) {textsize_ = s;}

  /** Gets the font color */
  Fl_Color textcolor() const {return textcolor_;}
  /** Sets the font color to \p s */
  void textcolor(Fl_Color s) {textcolor_ = s;}

};

#endif

//
// End of "$Id: Fl_Counter.H 6939 2009-11-17 14:45:36Z matt $".
//

Added fltk-1.3/FL/Fl_Dial.H.



































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//
// "$Id: Fl_Dial.H 6614 2009-01-01 16:11:32Z matt $"
//
// Dial header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Dial widget . */

#ifndef Fl_Dial_H
#define Fl_Dial_H

#ifndef Fl_Valuator_H
#include "Fl_Valuator.H"
#endif

// values for type():
#define FL_NORMAL_DIAL	0	/**< type() for dial variant with dot */
#define FL_LINE_DIAL	1	/**< type() for dial variant with line */
#define FL_FILL_DIAL	2	/**< type() for dial variant with filled arc */

/**
  The Fl_Dial widget provides a circular dial to control a
  single floating point value.
  <P ALIGN=CENTER>\image html dial.gif 
  \image latex dial.eps "Fl_Dial" width=4cm
  Use type() to set the type of the dial to:
  <UL>
  <LI>FL_NORMAL_DIAL - Draws a normal dial with a knob. </LI>
  <LI>FL_LINE_DIAL - Draws a dial with a line. </LI>
  <LI>FL_FILL_DIAL - Draws a dial with a filled arc. </LI>
  </UL>

*/
class FL_EXPORT Fl_Dial : public Fl_Valuator {

  short a1,a2;

protected:

  // these allow subclasses to put the dial in a smaller area:
  void draw(int X, int Y, int W, int H);
  int handle(int event, int X, int Y, int W, int H);
  void draw();

public:

  int handle(int);
  /**
    Creates a new Fl_Dial widget using the given position, size,
    and label string. The default type is FL_NORMAL_DIAL.
  */
  Fl_Dial(int x,int y,int w,int h, const char *l = 0);
  /** 
     Sets Or gets the angles used for the minimum and maximum values.  The default
     values are 45 and 315 (0 degrees is straight down and the angles
     progress clockwise).  Normally angle1 is less than angle2, but if you
     reverse them the dial moves counter-clockwise.
  */
  short angle1() const {return a1;}
  /** See short angle1() const */
  void angle1(short a) {a1 = a;}
  /** See short angle1() const */
  short angle2() const {return a2;}
  /** See short angle1() const */
  void angle2(short a) {a2 = a;}
  /** See short angle1() const */
  void angles(short a, short b) {a1 = a; a2 = b;}

};

#endif

//
// End of "$Id: Fl_Dial.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Double_Window.H.



































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//
// "$Id: Fl_Double_Window.H 6614 2009-01-01 16:11:32Z matt $"
//
// Double-buffered window header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Double_Window widget . */

#ifndef Fl_Double_Window_H
#define Fl_Double_Window_H

#include "Fl_Window.H"

/**
  The Fl_Double_Window provides a double-buffered window.
  If possible this will use the X double buffering extension (Xdbe).  If
  not, it will draw the window data into an off-screen pixmap, and then
  copy it to the on-screen window.
  <P>It is highly recommended that you put the following code before the
  first show() of <I>any</I> window in your program: </P>
  \code
  Fl::visual(FL_DOUBLE|FL_INDEX)
  \endcode
  This makes sure you can use Xdbe on servers where double buffering
  does not exist for every visual.
*/
class FL_EXPORT Fl_Double_Window : public Fl_Window {
protected:
  void flush(int eraseoverlay);
  /**
    Force double buffering, even if the OS already buffers windows
    (overlays need that on MacOS and Windows2000)
  */
  char force_doublebuffering_;
public:
  void show();
  void show(int a, char **b) {Fl_Window::show(a,b);}
  void flush();
  void resize(int,int,int,int);
  void hide();
  ~Fl_Double_Window();
  /**
    Creates a new Fl_Double_Window widget using the given
    position, size, and label (title) string.
  */
  Fl_Double_Window(int W, int H, const char *l = 0) 
    : Fl_Window(W,H,l), force_doublebuffering_(0) { type(FL_DOUBLE_WINDOW); }
   /**
    See  Fl_Double_Window::Fl_Double_Window(int w, int h, const char *label = 0)
  */
  Fl_Double_Window(int X, int Y, int W, int H, const char *l = 0)
    : Fl_Window(X,Y,W,H,l), force_doublebuffering_(0) { type(FL_DOUBLE_WINDOW); }
};

#endif

//
// End of "$Id: Fl_Double_Window.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Export.H.



































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
 * "$Id: Fl_Export.H 6614 2009-01-01 16:11:32Z matt $"
 *
 * WIN32 DLL export .
 *
 * Copyright 1998-2009 by Bill Spitzak and others.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 * USA.
 *
 * Please report all bugs and problems on the following page:
 *
 *     http://www.fltk.org/str.php
 */

#ifndef Fl_Export_H
#  define Fl_Export_H

/*
 * The following is only used when building DLLs under WIN32...
 */

#  if defined(FL_DLL) && (defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) || __GNUC__ >= 3)
#    ifdef FL_LIBRARY
#      define FL_EXPORT	__declspec(dllexport)
#    else
#      define FL_EXPORT	__declspec(dllimport)
#    endif /* FL_LIBRARY */
#  else
#    define FL_EXPORT
#  endif /* FL_DLL */

#endif /* !Fl_Export_H */

/*
 * End of "$Id: Fl_Export.H 6614 2009-01-01 16:11:32Z matt $".
 */

Added fltk-1.3/FL/Fl_File_Browser.H.

















































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//
// "$Id: Fl_File_Browser.H 6614 2009-01-01 16:11:32Z matt $"
//
// FileBrowser definitions.
//
// Copyright 1999-2009 by Michael Sweet.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_File_Browser widget . */

//
// Include necessary header files...
//

#ifndef _Fl_File_Browser_H_
#  define _Fl_File_Browser_H_

#  include "Fl_Browser.H"
#  include "Fl_File_Icon.H"
#  include "filename.H"


//
// Fl_File_Browser class...
//

/** The Fl_File_Browser widget displays a list of filenames, optionally with file-specific icons. */
class FL_EXPORT Fl_File_Browser : public Fl_Browser
{
  int		filetype_;
  const char	*directory_;
  uchar		iconsize_;
  const char	*pattern_;

  int		full_height() const;
  int		item_height(void *) const;
  int		item_width(void *) const;
  void		item_draw(void *, int, int, int, int) const;
  int		incr_height() const { return (item_height(0)); }

public:
  enum { FILES, DIRECTORIES };

  /**
    The constructor creates the Fl_File_Browser widget at the specified position and size.
    The destructor destroys the widget and frees all memory that has been allocated.
  */
  Fl_File_Browser(int, int, int, int, const char * = 0);

  /**    Sets or gets the size of the icons. The default size is 20 pixels.  */
  uchar		iconsize() const { return (iconsize_); };
  /**    Sets or gets the size of the icons. The default size is 20 pixels.  */
  void		iconsize(uchar s) { iconsize_ = s; redraw(); };

  /**
    Sets or gets the filename filter. The pattern matching uses
    the fl_filename_match()
    function in FLTK.
  */
  void	filter(const char *pattern);
  /**
    Sets or gets the filename filter. The pattern matching uses
    the fl_filename_match()
    function in FLTK.
  */
  const char	*filter() const { return (pattern_); };

  /**
    Loads the specified directory into the browser. If icons have been
    loaded then the correct icon is associated with each file in the list.
    
    <P>The sort argument specifies a sort function to be used with
    fl_filename_list().
  */
  int		load(const char *directory, Fl_File_Sort_F *sort = fl_numericsort);

  Fl_Fontsize  textsize() const { return Fl_Browser::textsize(); };
  void		textsize(Fl_Fontsize s) { Fl_Browser::textsize(s); iconsize_ = (uchar)(3 * s / 2); };

  /**
    Sets or gets the file browser type, FILES or
    DIRECTORIES. When set to FILES, both
    files and directories are shown. Otherwise only directories are
    shown.
  */
  int		filetype() const { return (filetype_); };
  /**
    Sets or gets the file browser type, FILES or
    DIRECTORIES. When set to FILES, both
    files and directories are shown. Otherwise only directories are
    shown.
  */
  void		filetype(int t) { filetype_ = t; };
};

#endif // !_Fl_File_Browser_H_

//
// End of "$Id: Fl_File_Browser.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_File_Chooser.H.





















































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
//
// "$Id: Fl_File_Chooser.H 6678 2009-03-13 23:36:09Z AlbrechtS $"
//
// Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

// generated by Fast Light User Interface Designer (fluid) version 1.0300

#ifndef Fl_File_Chooser_H
#define Fl_File_Chooser_H
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <FL/Fl_Group.H>
#include <FL/Fl_Choice.H>
#include <FL/Fl_Menu_Button.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Preferences.H>
#include <FL/Fl_Tile.H>
#include <FL/Fl_File_Browser.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Check_Button.H>
#include <FL/Fl_File_Input.H>
#include <FL/Fl_Return_Button.H>
#include <FL/fl_ask.H>

class FL_EXPORT Fl_File_Chooser {
public:
  enum { SINGLE = 0, MULTI = 1, CREATE = 2, DIRECTORY = 4 }; 
private:
  static Fl_Preferences prefs_; 
  void (*callback_)(Fl_File_Chooser*, void *); 
  void *data_; 
  char directory_[1024]; 
  char pattern_[1024]; 
  char preview_text_[2048]; 
  int type_; 
  void favoritesButtonCB(); 
  void favoritesCB(Fl_Widget *w); 
  void fileListCB(); 
  void fileNameCB(); 
  void newdir(); 
  static void previewCB(Fl_File_Chooser *fc); 
  void showChoiceCB(); 
  void update_favorites(); 
  void update_preview(); 
public:
  Fl_File_Chooser(const char *d, const char *p, int t, const char *title);
private:
  Fl_Double_Window *window;
  void cb_window_i(Fl_Double_Window*, void*);
  static void cb_window(Fl_Double_Window*, void*);
  Fl_Choice *showChoice;
  void cb_showChoice_i(Fl_Choice*, void*);
  static void cb_showChoice(Fl_Choice*, void*);
  Fl_Menu_Button *favoritesButton;
  void cb_favoritesButton_i(Fl_Menu_Button*, void*);
  static void cb_favoritesButton(Fl_Menu_Button*, void*);
public:
  Fl_Button *newButton;
private:
  void cb_newButton_i(Fl_Button*, void*);
  static void cb_newButton(Fl_Button*, void*);
  void cb__i(Fl_Tile*, void*);
  static void cb_(Fl_Tile*, void*);
  Fl_File_Browser *fileList;
  void cb_fileList_i(Fl_File_Browser*, void*);
  static void cb_fileList(Fl_File_Browser*, void*);
  Fl_Box *previewBox;
public:
  Fl_Check_Button *previewButton;
private:
  void cb_previewButton_i(Fl_Check_Button*, void*);
  static void cb_previewButton(Fl_Check_Button*, void*);
  Fl_File_Input *fileName;
  void cb_fileName_i(Fl_File_Input*, void*);
  static void cb_fileName(Fl_File_Input*, void*);
  Fl_Return_Button *okButton;
  void cb_okButton_i(Fl_Return_Button*, void*);
  static void cb_okButton(Fl_Return_Button*, void*);
  Fl_Button *cancelButton;
  void cb_cancelButton_i(Fl_Button*, void*);
  static void cb_cancelButton(Fl_Button*, void*);
  Fl_Double_Window *favWindow;
  Fl_File_Browser *favList;
  void cb_favList_i(Fl_File_Browser*, void*);
  static void cb_favList(Fl_File_Browser*, void*);
  Fl_Button *favUpButton;
  void cb_favUpButton_i(Fl_Button*, void*);
  static void cb_favUpButton(Fl_Button*, void*);
  Fl_Button *favDeleteButton;
  void cb_favDeleteButton_i(Fl_Button*, void*);
  static void cb_favDeleteButton(Fl_Button*, void*);
  Fl_Button *favDownButton;
  void cb_favDownButton_i(Fl_Button*, void*);
  static void cb_favDownButton(Fl_Button*, void*);
  Fl_Button *favCancelButton;
  void cb_favCancelButton_i(Fl_Button*, void*);
  static void cb_favCancelButton(Fl_Button*, void*);
  Fl_Return_Button *favOkButton;
  void cb_favOkButton_i(Fl_Return_Button*, void*);
  static void cb_favOkButton(Fl_Return_Button*, void*);
public:
  ~Fl_File_Chooser();
  void callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0);
  void color(Fl_Color c);
  Fl_Color color();
  int count(); 
  void directory(const char *d); 
  char * directory();
  void filter(const char *p); 
  const char * filter();
  int filter_value();
  void filter_value(int f);
  void hide();
  void iconsize(uchar s);
  uchar iconsize();
  void label(const char *l);
  const char * label();
  void ok_label(const char *l);
  const char * ok_label();
  void preview(int e); 
  int preview() const { return previewButton->value(); }; 
  void rescan(); 
  void rescan_keep_filename(); 
  void show();
  int shown();
  void textcolor(Fl_Color c);
  Fl_Color textcolor();
  void textfont(Fl_Font f);
  Fl_Font textfont();
  void textsize(Fl_Fontsize s);
  Fl_Fontsize textsize();
  void type(int t);
  int type();
  void * user_data() const;
  void user_data(void *d);
  const char *value(int f = 1); 
  void value(const char *filename); 
  int visible();
  /**
     [standard text may be customized at run-time]
  */
  static const char *add_favorites_label; 
  /**
     [standard text may be customized at run-time]
  */
  static const char *all_files_label; 
  /**
     [standard text may be customized at run-time]
  */
  static const char *custom_filter_label; 
  /**
     [standard text may be customized at run-time]
  */
  static const char *existing_file_label; 
  /**
     [standard text may be customized at run-time]
  */
  static const char *favorites_label; 
  /**
     [standard text may be customized at run-time]
  */
  static const char *filename_label; 
  /**
     [standard text may be customized at run-time]
  */
  static const char *filesystems_label; 
  /**
     [standard text may be customized at run-time]
  */
  static const char *manage_favorites_label; 
  /**
     [standard text may be customized at run-time]
  */
  static const char *new_directory_label; 
  /**
     [standard text may be customized at run-time]
  */
  static const char *new_directory_tooltip; 
  /**
     [standard text may be customized at run-time]
  */
  static const char *preview_label; 
  /**
     [standard text may be customized at run-time]
  */
  static const char *save_label; 
  /**
     [standard text may be customized at run-time]
  */
  static const char *show_label; 
  /**
     the sort function that is used when loading
     the contents of a directory.
  */
  static Fl_File_Sort_F *sort; 
private:
  Fl_Widget* ext_group; 
public:
  Fl_Widget* add_extra(Fl_Widget* gr);
};
FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname,int relative=0);
FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname,int relative=0);
FL_EXPORT void fl_file_chooser_callback(void (*cb)(const char*));
FL_EXPORT void fl_file_chooser_ok_label(const char*l);
#endif

//
// End of "$Id: Fl_File_Chooser.H 6678 2009-03-13 23:36:09Z AlbrechtS $".
//

Added fltk-1.3/FL/Fl_File_Icon.H.

















































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
//
// "$Id: Fl_File_Icon.H 6614 2009-01-01 16:11:32Z matt $"
//
// Fl_File_Icon definitions.
//
// Copyright 1999-2009 by Michael Sweet.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_File_Icon widget . */

//
// Include necessary header files...
//

#ifndef _Fl_Fl_File_Icon_H_
#  define _Fl_Fl_File_Icon_H_

#  include "Fl.H"


//
// Special color value for the icon color.
//

#  define FL_ICON_COLOR (Fl_Color)0xffffffff	/**< icon color [background?]*/


//
// Fl_File_Icon class...
//

/** 
  The Fl_File_Icon class manages icon images that can be used 
  as labels in other widgets and as icons in the FileBrowser widget.
*/
class FL_EXPORT Fl_File_Icon			//// Icon data
{
  static Fl_File_Icon *first_;	// Pointer to first icon/filetype
  Fl_File_Icon	*next_;		// Pointer to next icon/filetype
  const char	*pattern_;	// Pattern string
  int		type_;		// Match only if directory or file?
  int		num_data_;	// Number of data elements
  int		alloc_data_;	// Number of allocated elements
  short		*data_;		// Icon data

  public:

  enum				// File types
  {
    ANY,			// Any kind of file
    PLAIN,			// Only plain files
    FIFO,			// Only named pipes
    DEVICE,			// Only character and block devices
    LINK,			// Only symbolic links
    DIRECTORY			// Only directories
  };

  enum				// Data opcodes
  {
    END,			// End of primitive/icon
    COLOR,			// Followed by color value (2 shorts)
    LINE,			// Start of line
    CLOSEDLINE,			// Start of closed line
    POLYGON,			// Start of polygon
    OUTLINEPOLYGON,		// Followed by outline color (2 shorts)
    VERTEX			// Followed by scaled X,Y
  };

  Fl_File_Icon(const char *p, int t, int nd = 0, short *d = 0);
  ~Fl_File_Icon();

  short		*add(short d);

  /**
    Adds a color value to the icon array, returning a pointer to it.
    \param[in] c color value
  */
  short		*add_color(Fl_Color c)
		{ short *d = add((short)COLOR); add((short)(c >> 16)); add((short)c); return (d); }

  /**
    Adds a vertex value to the icon array, returning a pointer to it.
    The integer version accepts coordinates from 0 to 10000.
    The origin (0.0) is in the lower-lefthand corner of the icon.
    \param[in] x, y vertex coordinates
  */
  short		*add_vertex(int x, int y)
		{ short *d = add((short)VERTEX); add((short)x); add((short)y); return (d); }

  /**
    Adds a vertex value to the icon array, returning a pointer to it.
    The floating point version goes from 0.0 to 1.0.
    The origin (0.0) is in the lower-lefthand corner of the icon.
    \param[in] x, y vertex coordinates
  */
  short		*add_vertex(float x, float y)
		{ short *d = add((short)VERTEX); add((short)(x * 10000.0));
		  add((short)(y * 10000.0)); return (d); }

  /** Clears all icon data from the icon.*/
  void		clear() { num_data_ = 0; }

  void		draw(int x, int y, int w, int h, Fl_Color ic, int active = 1);

  void		label(Fl_Widget *w);

  static void	labeltype(const Fl_Label *o, int x, int y, int w, int h, Fl_Align a);
  void		load(const char *f);
  int		load_fti(const char *fti);
  int		load_image(const char *i);

  /** Returns next file icon object. See Fl_File_Icon::first() */
  Fl_File_Icon	*next() { return (next_); }

  /** Returns the filename matching pattern for the icon.*/
  const char	*pattern() { return (pattern_); }

  /**  Returns the number of words of data used by the icon.*/
  int		size() { return (num_data_); }

  /**
    Returns the filetype associated with the icon, which can be one of the
    following:
  
    \li Fl_File_Icon::ANY, any kind of file.
    \li Fl_File_Icon::PLAIN, plain files.
    \li Fl_File_Icon::FIFO, named pipes.
    \li Fl_File_Icon::DEVICE, character and block devices.
    \li Fl_File_Icon::LINK, symbolic links.
    \li Fl_File_Icon::DIRECTORY, directories.
  */
  int		type() { return (type_); }

  /**  Returns the data array for the icon.*/
  short		*value() { return (data_); }

  static Fl_File_Icon *find(const char *filename, int filetype = ANY);

  /** Returns a pointer to the first icon in the list.*/
  static Fl_File_Icon *first() { return (first_); }
  static void	load_system_icons(void);
};

#endif // !_Fl_Fl_File_Icon_H_

//
// End of "$Id: Fl_File_Icon.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_File_Input.H.

















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//
// "$Id: Fl_File_Input.H 6716 2009-03-24 01:40:44Z fabien $"
//
// File_Input header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
// Original version Copyright 1998 by Curtis Edwards.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_File_Input widget . */

#ifndef Fl_File_Input_H
#  define Fl_File_Input_H

#  include <FL/Fl_Input.H>

/**
  \class Fl_File_Input
  \brief This widget displays a pathname in a text input field.

  A navigation bar located above the input field allows the user to
  navigate upward in the directory tree.
  You may want to handle FL_WHEN_CHANGED events for tracking text changes
  and also FL_WHEN_RELEASE for button release when changing to parent dir.
  FL_WHEN_RELEASE callback won't be called if the directory clicked 
  is the same that the current one.
  <P align=CENTER> \image html Fl_File_Input.gif </P> 
  \image latex Fl_File_Input.eps "Fl_File_Input"  width=6cm
  \note As all Fl_Input derived objects, Fl_File_Input may call its callback
  when loosing focus (see FL_UNFOCUS) to update its state like its cursor shape.
  One resulting side effect is that you should call clear_changed() early in your callback
  to avoid reentrant calls if you plan to show another window or dialog box in the callback.
*/
class FL_EXPORT Fl_File_Input : public Fl_Input
{
  Fl_Color	errorcolor_;
  char		ok_entry_;
  uchar		down_box_;
  short		buttons_[200];
  short		pressed_;

  void		draw_buttons();
  int		handle_button(int event);
  void		update_buttons();

public:

  Fl_File_Input(int X, int Y, int W, int H, const char *L=0);

  virtual int handle(int event);

protected:
  virtual void draw();

public:
  /** Gets the box type used for the navigation bar. */
  Fl_Boxtype	down_box() const { return (Fl_Boxtype)down_box_; }
  /** Sets the box type to use for the navigation bar.  */
  void		down_box(Fl_Boxtype b) { down_box_ = b; }

  /**
    Gets the current error color.
    \todo Better docs for Fl_File_Input::errorcolor() - is it even used?
  */
  Fl_Color	errorcolor() const { return errorcolor_; }
  /** Sets the current error color to \p c */
  void		errorcolor(Fl_Color c) { errorcolor_ = c; }

  int	value(const char *str);
  int	value(const char *str, int len);

  /**
    Returns the current value, which is a pointer to an internal buffer
    and is valid only until the next event is handled.
  */
  const char	*value() { return Fl_Input_::value(); }
};

#endif // !Fl_File_Input_H


//
// End of "$Id: Fl_File_Input.H 6716 2009-03-24 01:40:44Z fabien $".
//

Added fltk-1.3/FL/Fl_Fill_Dial.H.

































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//
// "$Id: Fl_Fill_Dial.H 6614 2009-01-01 16:11:32Z matt $"
//
// Filled dial header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Fill_Dial widget . */

#ifndef Fl_Fill_Dial_H
#define Fl_Fill_Dial_H

#include "Fl_Dial.H"

/** Draws a dial with a filled arc */
class Fl_Fill_Dial : public Fl_Dial {
public:
    /** Creates a filled dial, also setting its type to FL_FILL_DIAL. */
    Fl_Fill_Dial(int x,int y,int w,int h, const char *l = 0)
	: Fl_Dial(x,y,w,h,l) {type(FL_FILL_DIAL);}
};

#endif

//
// End of "$Id: Fl_Fill_Dial.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Fill_Slider.H.































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//
// "$Id: Fl_Fill_Slider.H 6614 2009-01-01 16:11:32Z matt $"
//
// Filled slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Fill_Slider widget . */

#ifndef Fl_Fill_Slider_H
#define Fl_Fill_Slider_H

#include "Fl_Slider.H"
/** Widget that draws a filled horizontal  slider,  useful as a progress or value meter*/
class Fl_Fill_Slider : public Fl_Slider {
public:
    /** Creates the slider from its position,size and optional title. */
    Fl_Fill_Slider(int x,int y,int w,int h,const char *l=0)
	: Fl_Slider(x,y,w,h,l) {type(FL_VERT_FILL_SLIDER);}
};

#endif

//
// End of "$Id: Fl_Fill_Slider.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Float_Input.H.



















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//
// "$Id: Fl_Float_Input.H 6614 2009-01-01 16:11:32Z matt $"
//
// Floating point input header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Float_Input widget . */


#ifndef Fl_Float_Input_H
#define Fl_Float_Input_H

#include "Fl_Input.H"

/**
  The Fl_Float_Input class is a subclass of Fl_Input
  that only allows the user to type floating point numbers (sign,
  digits, decimal point, more digits, 'E' or 'e', sign, digits).
*/
class Fl_Float_Input : public Fl_Input {
public:
  /**
      Creates a new Fl_Float_Input widget using the given position,
    size, and label string. The default boxtype is FL_DOWN_BOX.
  <P> Inherited destructor destroys the widget and any value associated with it
  */
  Fl_Float_Input(int X,int Y,int W,int H,const char *l = 0)
    : Fl_Input(X,Y,W,H,l) {type(FL_FLOAT_INPUT);}
};

#endif

//
// End of "$Id: Fl_Float_Input.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_FormsBitmap.H.

















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//
// "$Id: Fl_FormsBitmap.H 6614 2009-01-01 16:11:32Z matt $"
//
// Forms bitmap header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_FormsBitmap widget . */

#ifndef Fl_FormsBitmap_H
#define Fl_FormsBitmap_H

#include "Fl_Bitmap.H"

/** 
    Forms compatibility Bitmap Image Widget
*/
class FL_EXPORT Fl_FormsBitmap : public Fl_Widget {
    Fl_Bitmap *b;
protected:
    void draw();
public:
    Fl_FormsBitmap(Fl_Boxtype, int, int, int, int, const char * = 0);
    void set(int W, int H, const uchar *bits);
    /** Sets a new bitmap. */
    void bitmap(Fl_Bitmap *B) {b = B;}
    /** Gets a the current associated Fl_Bitmap objects. */
    Fl_Bitmap *bitmap() const {return b;}
};

#endif

//
// End of "$Id: Fl_FormsBitmap.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_FormsPixmap.H.































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//
// "$Id: Fl_FormsPixmap.H 6614 2009-01-01 16:11:32Z matt $"
//
// Forms pixmap header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_FormsPixmap widget . */

#ifndef Fl_FormsPixmap_H
#define Fl_FormsPixmap_H

#include "Fl_Pixmap.H"

/**
  \class Fl_FormsPixmap
  \brief Forms pixmap drawing routines
*/
class FL_EXPORT Fl_FormsPixmap : public Fl_Widget {
    Fl_Pixmap *b;
protected:
    void draw();
public:
    Fl_FormsPixmap(Fl_Boxtype t, int X, int Y, int W, int H, const char *L= 0);

    void set(/*const*/char * const * bits);

    /**
      Set the internal pixmap pointer to an existing pixmap.
      \param[in] B existing pixmap
    */
    void Pixmap(Fl_Pixmap *B) {b = B;}

    /** Get the internal pixmap pointer. */
    Fl_Pixmap *Pixmap() const {return b;}
};

#endif

//
// End of "$Id: Fl_FormsPixmap.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Free.H.



















































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//
// "$Id: Fl_Free.H 6614 2009-01-01 16:11:32Z matt $"
//
// Forms free header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Free widget . */

#ifndef Fl_Free_H
#define Fl_Free_H

#ifndef Fl_Widget_H
#include "Fl_Widget.H"
#endif

#define FL_NORMAL_FREE		1 /**< normal event handling */
#define FL_SLEEPING_FREE	2 /**< deactivate event handling */
#define FL_INPUT_FREE		3 /**< accepts FL_FOCUS events */
#define FL_CONTINUOUS_FREE	4 /**< repeated timeout handling */
#define FL_ALL_FREE		5 /**< FL_INPUT_FREE and FL_CONTINOUS_FREE */

/** appropriate signature for handle function */
typedef int (*FL_HANDLEPTR)(Fl_Widget *, int , float, float, char);

/**
  Emulation of the Forms "free" widget.
  
  This emulation allows the free demo to run, and appears to be useful for
  porting programs written in Forms which use the free widget or make
  subclasses of the Forms widgets.

  There are five types of free, which determine when the handle function
  is called:
  
  \li \c FL_NORMAL_FREE      normal event handling.
  \li \c FL_SLEEPING_FREE    deactivates event handling (widget is inactive).
  \li \c FL_INPUT_FREE       accepts FL_FOCUS events.
  \li \c FL_CONTINUOUS_FREE  sets a timeout callback 100 times a second and
                             provides an FL_STEP event. This has obvious
			     detrimental effects on machine performance.
  \li \c FL_ALL_FREE         same as FL_INPUT_FREE and FL_CONTINUOUS_FREE.
 
*/
class FL_EXPORT Fl_Free : public Fl_Widget {
    FL_HANDLEPTR hfunc;
    static void step(void *);
protected:
    void draw();
public:
    int handle(int e);
  Fl_Free(uchar t,int X,int Y,int W,int H,const char *L,FL_HANDLEPTR hdl);
  ~Fl_Free();
};

// old event names for compatibility:
#define FL_MOUSE	FL_DRAG /**< for backward compatibility */
#define FL_DRAW		100     /**< for backward compatibility [UNUSED]*/
#define FL_STEP		101     /**< for backward compatibility */
#define FL_FREEMEM	102     /**< for backward compatibility [UNUSED]*/
#define FL_FREEZE	103     /**< for backward compatibility [UNUSED]*/
#define FL_THAW		104     /**< for backward compatibility [UNUSED]*/

#endif

//
// End of "$Id: Fl_Free.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_GIF_Image.H.







































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//
// "$Id: Fl_GIF_Image.H 6614 2009-01-01 16:11:32Z matt $"
//
// GIF image header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_GIF_Image widget . */

#ifndef Fl_GIF_Image_H
#define Fl_GIF_Image_H
#  include "Fl_Pixmap.H"

/**
  The Fl_GIF_Image class supports loading, caching,
  and drawing of Compuserve GIF<SUP>SM</SUP> images. The class
  loads the first image and supports transparency.
*/
class FL_EXPORT Fl_GIF_Image : public Fl_Pixmap {

  public:

  Fl_GIF_Image(const char* filename);
};

#endif

//
// End of "$Id: Fl_GIF_Image.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Gl_Window.H.

























































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
//
// "$Id: Fl_Gl_Window.H 6664 2009-02-18 09:27:54Z AlbrechtS $"
//
// OpenGL header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Gl_Window widget . */

#ifndef Fl_Gl_Window_H
#define Fl_Gl_Window_H

#include "Fl_Window.H"

#ifndef GLContext
/**
  Opaque pointer type to hide system specific implementation.
*/
typedef void* GLContext; // actually a GLXContext or HGLDC
#endif

class Fl_Gl_Choice; // structure to hold result of glXChooseVisual

/**
  The Fl_Gl_Window widget sets things up so OpenGL works.
  
  It also keeps an OpenGL "context" for that window, so that changes to the
  lighting and projection may be reused between redraws. Fl_Gl_Window
  also flushes the OpenGL streams and swaps buffers after draw() returns.

  OpenGL hardware typically provides some overlay bit planes, which
  are very useful for drawing UI controls atop your 3D graphics.  If the
  overlay hardware is not provided, FLTK tries to simulate the overlay.
  This works pretty well if your graphics are double buffered, but not
  very well for single-buffered.

  Please note that the FLTK drawing and clipping functions
  will not work inside an Fl_Gl_Window. All drawing
  should be done using OpenGL calls exclusively.
  Even though Fl_Gl_Window is derived from Fl_Group, 
  it is not useful to add other FLTK Widgets as children,
  unless those widgets are modified to draw using OpenGL calls.
*/
class FL_EXPORT Fl_Gl_Window : public Fl_Window {

  int mode_;
  const int *alist;
  Fl_Gl_Choice *g;
  GLContext context_;
  char valid_f_;
  char damage1_; // damage() of back buffer
  virtual void draw_overlay();
  void init();

  void *overlay;
  void make_overlay();
  friend class _Fl_Gl_Overlay;

  static int can_do(int, const int *);
  int mode(int, const int *);

public:

  void show();
  void show(int a, char **b) {Fl_Window::show(a,b);}
  void flush();
  void hide();
  void resize(int,int,int,int);

  /**
    Is turned off when FLTK creates a new context for this window or 
    when the window resizes, and is turned on \e after draw() is called.
    You can use this inside your draw() method to avoid unnecessarily
    initializing the OpenGL context. Just do this:
    \code
    void mywindow::draw() {
     if (!valid()) {
       glViewport(0,0,w(),h());
       glFrustum(...);
       ...other initialization...
     }
     if (!context_valid()) {
       ...load textures, etc. ...
     }
     ... draw your geometry here ...
    }
    \endcode
    
    You can turn valid() on by calling valid(1).  You
    should only do this after fixing the transformation inside a draw()
    or after make_current().  This is done automatically after 
    draw() returns.
  */
  char valid() const {return valid_f_ & 1;}
  /**
    See char Fl_Gl_Window::valid() const 
  */
  void valid(char v) {if (v) valid_f_ |= 1; else valid_f_ &= 0xfe;}
  void invalidate();

  /**
    Will only be set if the 
    OpenGL context is created or recreated. It differs from
    Fl_Gl_Window::valid() which is also set whenever the context
    changes size.
  */
  char context_valid() const {return valid_f_ & 2;}
  /**
    See char Fl_Gl_Window::context_valid() const 
  */
  void context_valid(char v) {if (v) valid_f_ |= 2; else valid_f_ &= 0xfd;}

  /**  Returns non-zero if the hardware supports the given or current OpenGL mode. */
  static int can_do(int m) {return can_do(m,0);}
  /**  Returns non-zero if the hardware supports the given or current OpenGL mode. */
  static int can_do(const int *m) {return can_do(0, m);}
  /**  Returns non-zero if the hardware supports the given or current OpenGL mode. */
  int can_do() {return can_do(mode_,alist);}
  /**
    Set or change the OpenGL capabilites of the window.  The value can be
    any of the following OR'd together:

    - \c FL_RGB - RGB color (not indexed)
    - \c FL_RGB8 - RGB color with at least 8 bits of each color
    - \c FL_INDEX - Indexed mode
    - \c FL_SINGLE - not double buffered
    - \c FL_DOUBLE - double buffered
    - \c FL_ACCUM - accumulation buffer
    - \c FL_ALPHA - alpha channel in color
    - \c FL_DEPTH - depth buffer
    - \c FL_STENCIL - stencil buffer
    - \c FL_MULTISAMPLE - multisample antialiasing

    FL_RGB and FL_SINGLE have a value of zero, so they
    are "on" unless you give FL_INDEX or FL_DOUBLE.

    If the desired combination cannot be done, FLTK will try turning off 
    FL_MULTISAMPLE.  If this also fails the show() will call 
    Fl::error() and not show the window.

    You can change the mode while the window is displayed.  This is most
    useful for turning double-buffering on and off.  Under X this will
    cause the old X window to be destroyed and a new one to be created.  If
    this is a top-level window this will unfortunately also cause the
    window to blink, raise to the top, and be de-iconized, and the xid()
    will change, possibly breaking other code.  It is best to make the GL
    window a child of another window if you wish to do this!

    mode() must not be called within draw() since it
    changes the current context.
  */
  Fl_Mode mode() const {return (Fl_Mode)mode_;}
  /** See Fl_Mode mode() const */
  int mode(int a) {return mode(a,0);}
  /** See Fl_Mode mode() const */
  int mode(const int *a) {return mode(0, a);}
  /** void See void context(void* v, int destroy_flag) */
  void* context() const {return context_;}
  void context(void*, int destroy_flag = 0);
  void make_current();
  void swap_buffers();
  void ortho();

  /**
    Returns true if the hardware overlay is possible.  If this is false,
    FLTK will try to simulate the overlay, with significant loss of update
    speed.  Calling this will cause FLTK to open the display.
  */
  int can_do_overlay();
  /**
    This method causes draw_overlay() to be called at a later time.
    Initially the overlay is clear. If you want the window to display
    something in the overlay when it first appears, you must call this
    immediately after you show() your window.
  */
  void redraw_overlay();
  void hide_overlay();
  /**
    The make_overlay_current() method selects the OpenGL context
    for the widget's overlay.  It is called automatically prior to the 
    draw_overlay() method being called and can also be used to
    implement feedback and/or selection within the handle()
    method.
  */
  void make_overlay_current();

  ~Fl_Gl_Window();
  /**
    Creates a new Fl_Gl_Window widget using the given size, and label string. 
    The default boxtype is FL_NO_BOX. The default mode is FL_RGB|FL_DOUBLE|FL_DEPTH.
  */
  Fl_Gl_Window(int W, int H, const char *l=0) : Fl_Window(W,H,l) {init();}
  /**
    Creates a new Fl_Gl_Window widget using the given position,
    size, and label string. The default boxtype is FL_NO_BOX. The
    default mode is FL_RGB|FL_DOUBLE|FL_DEPTH.
  */

  Fl_Gl_Window(int X, int Y, int W, int H, const char *l=0)
    : Fl_Window(X,Y,W,H,l) {init();}

protected:
  /**
    Draws the Fl_Gl_Window.

    You \e \b must override the draw() method.
  */
  virtual void draw();
};

#endif

//
// End of "$Id: Fl_Gl_Window.H 6664 2009-02-18 09:27:54Z AlbrechtS $".
//

Added fltk-1.3/FL/Fl_Group.H.





































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
//
// "$Id: Fl_Group.H 6907 2009-09-28 14:34:52Z matt $"
//
// Group header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Group, Fl_End classes . */

#ifndef Fl_Group_H
#define Fl_Group_H

#ifndef Fl_Widget_H
#include "Fl_Widget.H"
#endif

/**
  The Fl_Group class is the FLTK container widget. It maintains
  an array of child widgets. These children can themselves be any widget
  including Fl_Group. The most important subclass of Fl_Group
  is Fl_Window, however groups can also be used to control radio buttons 
  or to enforce resize behavior.
*/
class FL_EXPORT Fl_Group : public Fl_Widget {

  Fl_Widget** array_;
  Fl_Widget* savedfocus_;
  Fl_Widget* resizable_;
  int children_;
  int *sizes_; // remembered initial sizes of children

  int navigation(int);
  static Fl_Group *current_;
 
  // unimplemented copy ctor and assignment operator
  Fl_Group(const Fl_Group&);
  Fl_Group& operator=(const Fl_Group&);

protected:
  void draw();
  void draw_child(Fl_Widget& widget) const;
  void draw_children();
  void draw_outside_label(const Fl_Widget& widget) const ;
  void update_child(Fl_Widget& widget) const;
  int  *sizes();

public:

  int handle(int);
  void begin();
  void end();
  static Fl_Group *current();
  static void current(Fl_Group *g);

  /**
    Returns how many child widgets the group has.
  */
  int children() const {return children_;}
  /**
    Returns array()[n].  <i>No range checking is done!</i>
  */
  Fl_Widget* child(int n) const {return array()[n];}
  int find(const Fl_Widget*) const;
  /**
    See int Fl_Group::find(const Fl_Widget *w) const 
  */
  int find(const Fl_Widget& o) const {return find(&o);}
  Fl_Widget* const* array() const;

  void resize(int,int,int,int);
  /**
    Creates a new Fl_Group widget using the given position, size,
    and label string. The default boxtype is FL_NO_BOX.
  */
  Fl_Group(int,int,int,int, const char * = 0);
  virtual ~Fl_Group();
  void add(Fl_Widget&);
  /**
    See void Fl_Group::add(Fl_Widget &w) 
  */
  void add(Fl_Widget* o) {add(*o);}
  void insert(Fl_Widget&, int i);
  /**
    This does insert(w, find(before)).  This will append the
    widget if \p before is not in the group.
  */
  void insert(Fl_Widget& o, Fl_Widget* before) {insert(o,find(before));}
  void remove(Fl_Widget&);
  /**
    Removes the widget \p o from the group.
    \sa void remove(Fl_Widget&)
  */
  void remove(Fl_Widget* o) {remove(*o);}
  void clear();

  /**
    See void Fl_Group::resizable(Fl_Widget *box) 
  */
  void resizable(Fl_Widget& o) {resizable_ = &o;}
  /**
    The resizable widget defines the resizing box for the group. When the
    group is resized it calculates a new size and position for all of its
    children. Widgets that are horizontally or vertically inside the
    dimensions of the box are scaled to the new size. Widgets outside the
    box are moved.

    In these examples the gray area is the resizable:

    \image html resizebox1.gif
    
    \image html resizebox2.gif
    
    \image latex resizebox1.eps "before resize"  width=4cm
    
    \image latex resizebox2.eps "after resize"   width=4cm

    The resizable may be set to the group itself, in which case all the
    contents are resized. This is the default value for Fl_Group,
    although NULL is the default for Fl_Window and Fl_Pack.

    If the resizable is NULL then all widgets remain a fixed size
    and distance from the top-left corner.

    It is possible to achieve any type of resize behavior by using an
    invisible Fl_Box as the resizable and/or by using a hierarchy
    of child Fl_Group's.
  */
  void resizable(Fl_Widget* o) {resizable_ = o;}
  /**
    See void Fl_Group::resizable(Fl_Widget *box) 
  */
  Fl_Widget* resizable() const {return resizable_;}
  /**
    Adds a widget to the group and makes it the resizable widget.
  */
  void add_resizable(Fl_Widget& o) {resizable_ = &o; add(o);}
  void init_sizes();

  /**
    Controls whether the group widget clips the drawing of
    child widgets to its bounding box.
    
    Set \p c to 1 if you want to clip the child widgets to the
    bounding box.

    The default is to not clip (0) the drawing of child widgets.
  */
  void clip_children(int c) { if (c) set_flag(CLIP_CHILDREN); else clear_flag(CLIP_CHILDREN); }
  /**
    Returns the current clipping mode.

    \return true, if clipping is enabled, false otherwise.

    \see void Fl_Group::clip_children(int c)
  */
  unsigned int clip_children() { return (flags() & CLIP_CHILDREN) != 0; }

  // back compatibility functions:

  /**
    \deprecated This is for backwards compatibility only. You should use
    \e W->%take_focus() instead.
    \sa Fl_Widget::take_focus();
  */
  void focus(Fl_Widget* W) {W->take_focus();}

  /** This is for forms compatibility only */
  Fl_Widget* & _ddfdesign_kludge() {return resizable_;}

  /** This is for forms compatibility only */
  void forms_end();
};

// dummy class used to end child groups in constructors for complex
// subclasses of Fl_Group:
/**
  This is a dummy class that allows you to end a Fl_Group in a constructor list of a
  class:
  \code 
   class MyClass {
   Fl_Group group;
   Fl_Button button_in_group;
   Fl_End end;
   Fl_Button button_outside_group;
   MyClass();
  };
  MyClass::MyClass() :
   group(10,10,100,100),
   button_in_group(20,20,60,30),
   end(),
   button_outside_group(10,120,60,30)
  {} 
  \endcode
*/
class FL_EXPORT Fl_End {
public:
  /** All it does is calling Fl_Group::current()->end() */
  Fl_End() {Fl_Group::current()->end();}
};

#endif

//
// End of "$Id: Fl_Group.H 6907 2009-09-28 14:34:52Z matt $".
//

Added fltk-1.3/FL/Fl_Help_Dialog.H.































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//
// "$Id: Fl_Help_Dialog.H 6614 2009-01-01 16:11:32Z matt $"
//
// Fl_Help_Dialog dialog for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Help_Dialog widget . */

// generated by Fast Light User Interface Designer (fluid) version 1.0108

#ifndef Fl_Help_Dialog_H
#define Fl_Help_Dialog_H
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Group.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Help_View.H>

class FL_EXPORT Fl_Help_Dialog {
  int index_; 
  int max_; 
  int line_[100]; 
  char file_[100][256]; 
  int find_pos_; 
public:
  Fl_Help_Dialog();
private:
  Fl_Double_Window *window_;
  Fl_Button *back_;
  void cb_back__i(Fl_Button*, void*);
  static void cb_back_(Fl_Button*, void*);
  Fl_Button *forward_;
  void cb_forward__i(Fl_Button*, void*);
  static void cb_forward_(Fl_Button*, void*);
  Fl_Button *smaller_;
  void cb_smaller__i(Fl_Button*, void*);
  static void cb_smaller_(Fl_Button*, void*);
  Fl_Button *larger_;
  void cb_larger__i(Fl_Button*, void*);
  static void cb_larger_(Fl_Button*, void*);
  Fl_Input *find_;
  void cb_find__i(Fl_Input*, void*);
  static void cb_find_(Fl_Input*, void*);
  Fl_Help_View *view_;
  void cb_view__i(Fl_Help_View*, void*);
  static void cb_view_(Fl_Help_View*, void*);
public:
  ~Fl_Help_Dialog();
  int h();
  void hide();
  void load(const char *f);
  void position(int xx, int yy);
  void resize(int xx, int yy, int ww, int hh);
  void show();
  void show(int argc, char **argv);
  void textsize(Fl_Fontsize s);
  Fl_Fontsize textsize();
  void topline(const char *n);
  void topline(int n);
  void value(const char *f);
  const char * value() const;
  int visible();
  int w();
  int x();
  int y();
};
#endif

//
// End of "$Id: Fl_Help_Dialog.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Help_View.H.





































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
//
// "$Id: Fl_Help_View.H 6743 2009-04-07 17:33:22Z AlbrechtS $"
//
// Help Viewer widget definitions.
//
// Copyright 1997-2009 by Easy Software Products.
// Image support by Matthias Melcher, Copyright 2000-2009.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Help_View widget . */

#ifndef Fl_Help_View_H
#  define Fl_Help_View_H

//
// Include necessary header files...
//

#  include <stdio.h>
#  include "Fl.H"
#  include "Fl_Group.H"
#  include "Fl_Scrollbar.H"
#  include "fl_draw.H"
#  include "Fl_Shared_Image.H"


//
// Fl_Help_Func type - link callback function for files...
//


typedef const char *(Fl_Help_Func)(Fl_Widget *, const char *);


//
// Fl_Help_Block structure...
//

struct Fl_Help_Block
{
  const char	*start,		// Start of text
		*end;		// End of text
  uchar		border;		// Draw border?
  Fl_Color	bgcolor;	// Background color
  int		x,		// Indentation/starting X coordinate
		y,		// Starting Y coordinate
		w,		// Width
		h;		// Height
  int		line[32];	// Left starting position for each line
};

//
// Fl_Help_Link structure...
//
/** Definition of a link for the html viewer. */
struct Fl_Help_Link
{
  char		filename[192],	///< Reference filename
		name[32];	///< Link target (blank if none)
  int		x,		///< X offset of link text
		y,		///< Y offset of link text
		w,		///< Width of link text
		h;		///< Height of link text
};

/*
 * Fl_Help_View font stack opaque implementation
 */

/** Fl_Help_View font stack element definition. */
struct Fl_Help_Font_Style {
  Fl_Font      f;  ///< Font
  Fl_Fontsize  s;  ///< Font Size
  Fl_Color     c;  ///< Font Color
  void get(Fl_Font &afont, Fl_Fontsize &asize, Fl_Color &acolor) {afont=f; asize=s; acolor=c;} ///< Gets current font attributes
  void set(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {f=afont; s=asize; c=acolor;} ///< Sets current font attributes
  Fl_Help_Font_Style(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {set(afont, asize, acolor);}
  Fl_Help_Font_Style(){} // For in table use
};

/** Fl_Help_View font stack definition. */
const size_t MAX_FL_HELP_FS_ELTS = 100;

struct Fl_Help_Font_Stack {
  /** font stack construction, initialize attributes. */
  Fl_Help_Font_Stack() {
    nfonts_ = 0;
  }

  void init(Fl_Font f, Fl_Fontsize s, Fl_Color c) { 
    nfonts_ = 0;
    elts_[nfonts_].set(f, s, c);
    fl_font(f, s); 
    fl_color(c);
  }
  /** Gets the top (current) element on the stack. */
  void top(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { elts_[nfonts_].get(f, s, c); }
  /** Pushes the font style triplet on the stack, also calls fl_font() & fl_color() adequately */
  void push(Fl_Font f, Fl_Fontsize s, Fl_Color c) { 
    if (nfonts_ <  MAX_FL_HELP_FS_ELTS-1) nfonts_ ++;
    elts_[nfonts_].set(f, s, c);
    fl_font(f, s); fl_color(c); 
  }
  /** Pops from the stack the font style triplet and calls fl_font() & fl_color() adequately */
  void pop(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { 
    if (nfonts_ > 0) nfonts_ --;
    top(f, s, c);
    fl_font(f, s); fl_color(c);
  }
  /** Gets the current count of font style elements in the stack. */
  size_t count() const {return nfonts_;} // Gets the current number of fonts in the stack

protected:
  size_t nfonts_;		///< current number of fonts in stack
  Fl_Help_Font_Style elts_[100]; ///< font elements
};

/** Fl_Help_Target structure */

struct Fl_Help_Target
{
  char		name[32];	///< Target name
  int		y;		///< Y offset of target
};

/**
  The Fl_Help_View widget displays HTML text. Most HTML 2.0
  elements are supported, as well as a primitive implementation of tables.
  GIF, JPEG, and PNG images are displayed inline.
*/
class FL_EXPORT Fl_Help_View : public Fl_Group	// Help viewer widget
{
  enum { RIGHT = -1, CENTER, LEFT };	///< Alignments

  char		title_[1024];		///< Title string
  Fl_Color	defcolor_,		///< Default text color
		bgcolor_,		///< Background color
		textcolor_,		///< Text color
		linkcolor_;		///< Link color
  Fl_Font       textfont_;		///< Default font for text
  Fl_Fontsize  textsize_;		///< Default font size
  const char	*value_;		///< HTML text value
  Fl_Help_Font_Stack fstack_;           ///< font stack management
  int		nblocks_,		///< Number of blocks/paragraphs
		ablocks_;		///< Allocated blocks
  Fl_Help_Block	*blocks_;		///< Blocks

  Fl_Help_Func	*link_;			///< Link transform function

  int		nlinks_,		///< Number of links
		alinks_;		///< Allocated links
  Fl_Help_Link	*links_;		///< Links

  int		ntargets_,		///< Number of targets
		atargets_;		///< Allocated targets
  Fl_Help_Target *targets_;		///< Targets

  char		directory_[1024];	///< Directory for current file
  char		filename_[1024];	///< Current filename
  int		topline_,		///< Top line in document
		leftline_,		///< Lefthand position
		size_,			///< Total document length
		hsize_,			///< Maximum document width
  		scrollbar_size_;	///< Size for both scrollbars
  Fl_Scrollbar	scrollbar_,		///< Vertical scrollbar for document
		hscrollbar_;		///< Horizontal scrollbar

  static int    selection_first;
  static int    selection_last;
  static int    selection_push_first;
  static int    selection_push_last;
  static int    selection_drag_first;
  static int    selection_drag_last;
  static int    selected;
  static int    draw_mode;
  static int    mouse_x;
  static int    mouse_y;
  static int    current_pos;
  static Fl_Help_View *current_view;
  static Fl_Color hv_selection_color;
  static Fl_Color hv_selection_text_color;


  void initfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { f = textfont_; s = textsize_; c = textcolor_; fstack_.init(f, s, c); }
  void pushfont(Fl_Font f, Fl_Fontsize s) {fstack_.push(f, s, textcolor_);}
  void pushfont(Fl_Font f, Fl_Fontsize s, Fl_Color c) {fstack_.push(f, s, c);}
  void popfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) {fstack_.pop(f, s, c);}

  Fl_Help_Block	*add_block(const char *s, int xx, int yy, int ww, int hh, uchar border = 0);
  void		add_link(const char *n, int xx, int yy, int ww, int hh);
  void		add_target(const char *n, int yy);
  static int	compare_targets(const Fl_Help_Target *t0, const Fl_Help_Target *t1);
  int		do_align(Fl_Help_Block *block, int line, int xx, int a, int &l);
  void		draw();
  void		format();
  void		format_table(int *table_width, int *columns, const char *table);
  void		free_data();
  int		get_align(const char *p, int a);
  const char	*get_attr(const char *p, const char *n, char *buf, int bufsize);
  Fl_Color	get_color(const char *n, Fl_Color c);
  Fl_Shared_Image *get_image(const char *name, int W, int H);
  int		get_length(const char *l);
  int		handle(int);

  void          hv_draw(const char *t, int x, int y);
  char          begin_selection();
  char          extend_selection();
  void          end_selection(int c=0);
  void          clear_global_selection();
  Fl_Help_Link  *find_link(int, int);
  void          follow_link(Fl_Help_Link*);

public:

  Fl_Help_View(int xx, int yy, int ww, int hh, const char *l = 0);
  ~Fl_Help_View();
  /** Returns the current directory for the text in the buffer. */
  const char	*directory() const { if (directory_[0]) return (directory_);
  					else return ((const char *)0); }
  /** Returns the current filename for the text in the buffer. */
  const char	*filename() const { if (filename_[0]) return (filename_);
  					else return ((const char *)0); }
  int		find(const char *s, int p = 0);
  /**
    This method assigns a callback function to use when a link is
    followed or a file is loaded (via Fl_Help_View::load()) that
    requires a different file or path.
    
    The callback function receives a pointer to the Fl_Help_View
    widget and the URI or full pathname for the file in question.
    It must return a pathname that can be opened as a local file or NULL:
    
    \code
    const char *fn(Fl_Widget *w, const char *uri);
    \endcode
    
    The link function can be used to retrieve remote or virtual
    documents, returning a temporary file that contains the actual
    data. If the link function returns NULL, the value of
    the Fl_Help_View widget will remain unchanged.
    
    If the link callback cannot handle the URI scheme, it should
    return the uri value unchanged or set the value() of the widget
    before returning NULL.
  */
  void		link(Fl_Help_Func *fn) { link_ = fn; }
  int		load(const char *f);
  void		resize(int,int,int,int);
  /** Gets the size of the help view. */
  int		size() const { return (size_); }
  void		size(int W, int H) { Fl_Widget::size(W, H); }
  /** Sets the default text color. */
  void		textcolor(Fl_Color c) { if (textcolor_ == defcolor_) textcolor_ = c; defcolor_ = c; }
  /** Returns the current default text color. */
  Fl_Color	textcolor() const { return (defcolor_); }
  /** Sets the default text font. */
  void		textfont(Fl_Font f) { textfont_ = f; format(); }
  /** Returns the current default text font. */
  Fl_Font       textfont() const { return (textfont_); }
  /** Sets the default text size. */
  void		textsize(Fl_Fontsize s) { textsize_ = s; format(); }
  /** Gets the default text size. */
  Fl_Fontsize  textsize() const { return (textsize_); }
  /** Returns the current document title, or NULL if there is no title. */
  const char	*title() { return (title_); }
  void		topline(const char *n);
  void		topline(int);
  /** Returns the current top line in pixels. */
  int		topline() const { return (topline_); }
  void		leftline(int);
  /** Gets the left position in pixels. */
  int		leftline() const { return (leftline_); }
  void		value(const char *val);
  /** Returns the current buffer contents. */
  const char	*value() const { return (value_); }
  void          clear_selection();
  void          select_all();
  /**
    Gets the current size of the scrollbars' troughs, in pixels.

    If this value is zero (default), this widget will use the 
    Fl::scrollbar_size() value as the scrollbar's width.
  
    \returns Scrollbar size in pixels, or 0 if the global Fl::scrollbar_size() is being used.
    \see Fl::scrollbar_size(int)
  */
  int scrollbar_size() const {
      return(scrollbar_size_);
  }
  /**
    Sets the pixel size of the scrollbars' troughs to the \p size, in pixels.

    Normally you should not need this method, and should use
    Fl::scrollbar_size(int) instead to manage the size of ALL 
    your widgets' scrollbars. This ensures your application 
    has a consistent UI, is the default behavior, and is normally
    what you want.

    Only use THIS method if you really need to override the global
    scrollbar size. The need for this should be rare.
    
    Setting \p size to the special value of 0 causes the widget to
    track the global Fl::scrollbar_size(), which is the default.
    
    \param[in] size Sets the scrollbar size in pixels.\n
                    If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
    \see Fl::scrollbar_size()
  */
  void scrollbar_size(int size) {
      scrollbar_size_ = size;
  }   
};

#endif // !Fl_Help_View_H

//
// End of "$Id: Fl_Help_View.H 6743 2009-04-07 17:33:22Z AlbrechtS $".
//

Added fltk-1.3/FL/Fl_Hold_Browser.H.



























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//
// "$Id: Fl_Hold_Browser.H 6614 2009-01-01 16:11:32Z matt $"
//
// Hold browser header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Hold_Browser widget . */

#ifndef Fl_Hold_Browser_H
#define Fl_Hold_Browser_H

#include "Fl_Browser.H"

/**
  The Fl_Hold_Browser is a subclass of Fl_Browser
  which lets the user select a single item, or no items by clicking on
  the empty space.  As long as the mouse button is held down the item
  pointed to by it is highlighted, and this highlighting remains on when
  the mouse button is released. Normally the callback is done when the
  user releases the mouse, but you can change this with when().
  <P>See Fl_Browser for methods to add and remove lines from the browser.
*/
class Fl_Hold_Browser : public Fl_Browser {
public:
  /**
    Creates a new Fl_Hold_Browser widget using the given
    position, size, and label string. The default boxtype is FL_DOWN_BOX.
    The constructor specializes Fl_Browser() by setting the type to FL_HOLD_BROWSER.
    The destructor destroys the widget and frees all memory that has been allocated.
 */
  Fl_Hold_Browser(int X,int Y,int W,int H,const char *l=0)
	: Fl_Browser(X,Y,W,H,l) {type(FL_HOLD_BROWSER);}
};

#endif

//
// End of "$Id: Fl_Hold_Browser.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Hor_Fill_Slider.H.





























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//
// "$Id: Fl_Hor_Fill_Slider.H 6614 2009-01-01 16:11:32Z matt $"
//
// Horizontal fill slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Hor_Fill_Slider widget . */

#ifndef Fl_Hor_Fill_Slider_H
#define Fl_Hor_Fill_Slider_H

#include "Fl_Slider.H"

class Fl_Hor_Fill_Slider : public Fl_Slider {
public:
    Fl_Hor_Fill_Slider(int x,int y,int w,int h,const char *l=0)
	: Fl_Slider(x,y,w,h,l) {type(FL_HOR_FILL_SLIDER);}
};

#endif

//
// End of "$Id: Fl_Hor_Fill_Slider.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Hor_Nice_Slider.H.





























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//
// "$Id: Fl_Hor_Nice_Slider.H 6614 2009-01-01 16:11:32Z matt $"
//
// Horizontal "nice" slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Hor_Nice_Slider widget . */

#ifndef Fl_Hor_Nice_Slider_H
#define Fl_Hor_Nice_Slider_H

#include "Fl_Slider.H"

class Fl_Hor_Nice_Slider : public Fl_Slider {
public:
    Fl_Hor_Nice_Slider(int x,int y,int w,int h,const char *l=0)
	: Fl_Slider(x,y,w,h,l) {type(FL_HOR_NICE_SLIDER); box(FL_FLAT_BOX);}
};

#endif

//
// End of "$Id: Fl_Hor_Nice_Slider.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Hor_Slider.H.





























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//
// "$Id: Fl_Hor_Slider.H 6614 2009-01-01 16:11:32Z matt $"
//
// Horizontal slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Hor_Slider widget . */

#ifndef Fl_Hor_Slider_H
#define Fl_Hor_Slider_H

#include "Fl_Slider.H"

class Fl_Hor_Slider : public Fl_Slider {
public:
    Fl_Hor_Slider(int X,int Y,int W,int H,const char *l=0)
	: Fl_Slider(X,Y,W,H,l) {type(FL_HOR_SLIDER);}
};

#endif

//
// End of "$Id: Fl_Hor_Slider.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Hor_Value_Slider.H.





























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//
// "$Id: Fl_Hor_Value_Slider.H 6614 2009-01-01 16:11:32Z matt $"
//
// Horizontal value slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Hor_Value_Slider widget . */

#ifndef Fl_Hor_Value_Slider_H
#define Fl_Hor_Value_Slider_H

#include "Fl_Value_Slider.H"

class Fl_Hor_Value_Slider : public Fl_Value_Slider {
public:
    Fl_Hor_Value_Slider(int X,int Y,int W,int H,const char *l=0)
	: Fl_Value_Slider(X,Y,W,H,l) {type(FL_HOR_SLIDER);}
};

#endif

//
// End of "$Id: Fl_Hor_Value_Slider.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Image.H.





























































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
//
// "$Id: Fl_Image.H 6614 2009-01-01 16:11:32Z matt $"
//
// Image header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Image, Fl_RGB_Image classes . */

#ifndef Fl_Image_H
#  define Fl_Image_H

#  include "Enumerations.H"

class Fl_Widget;
struct Fl_Menu_Item;
struct Fl_Label;

/**
  Fl_Image is the base class used for caching and
  drawing all kinds of images in FLTK. This class keeps track of
  common image data such as the pixels, colormap, width, height,
  and depth. Virtual methods are used to provide type-specific
  image handling.</P>
  
  <P>Since the Fl_Image class does not support image
  drawing by itself, calling the draw() method results in
  a box with an X in it being drawn instead.
*/
class FL_EXPORT Fl_Image {
  int w_, h_, d_, ld_, count_;
  const char * const *data_;

  // Forbid use of copy contructor and assign operator
  Fl_Image & operator=(const Fl_Image &);
  Fl_Image(const Fl_Image &);

  protected:

  /**
    The first form of the w() method returns the current
    image width in pixels.</P>
    
    <P>The second form is a protected method that sets the current
    image width.
  */
  void w(int W) {w_ = W;}
  /**
    The first form of the h() method returns the current
    image height in pixels.</P>
    
    <P>The second form is a protected method that sets the current
    image height.
  */
  void h(int H) {h_ = H;}
  /**
    The first form of the d() method returns the current
    image depth. The return value will be 0 for bitmaps, 1 for
    pixmaps, and 1 to 4 for color images.</P>
    
    <P>The second form is a protected method that sets the current
    image depth.
  */
  void d(int D) {d_ = D;}
  /**    See int ld()  */
  void ld(int LD) {ld_ = LD;}
  /**    See const char * const *data()  */
  void data(const char * const *p, int c) {data_ = p; count_ = c;}
  void draw_empty(int X, int Y);

  static void labeltype(const Fl_Label *lo, int lx, int ly, int lw, int lh, Fl_Align la);
  static void measure(const Fl_Label *lo, int &lw, int &lh);

  public:

  /** See void Fl_Image::w(int) */
  int w() const {return w_;}
  /** See void Fl_Image::h(int) */
  int h() const {return h_;}
  /**
    The first form of the d() method returns the current
    image depth. The return value will be 0 for bitmaps, 1 for
    pixmaps, and 1 to 4 for color images.</P>
    
    <P>The second form is a protected method that sets the current
    image depth.
  */
  int d() const {return d_;}
  /**
    The first form of the ld() method returns the current
    line data size in bytes. Line data is extra data that is included
    after each line of color image data and is normally not present.</P>
    
    <P>The second form is a protected method that sets the current
    line data size in bytes.
  */
  int ld() const {return ld_;}
  /**
    The count() method returns the number of data values
    associated with the image. The value will be 0 for images with
    no associated data, 1 for bitmap and color images, and greater
    than 2 for pixmap images.
  */
  int count() const {return count_;}
  /**
    The first form of the data() method returns a
    pointer to the current image data array. Use the
    count() method to find the size of the data array.</P>
    
    <P>The second form is a protected method that sets the current
    array pointer and count of pointers in the array.
  */
  const char * const *data() const {return data_;}
  
  /**
    The constructor creates an empty image with the specified
    width, height, and depth. The width and height are in pixels.
    The depth is 0 for bitmaps, 1 for pixmap (colormap) images, and
    1 to 4 for color images.
  */
  Fl_Image(int W, int H, int D) {w_ = W; h_ = H; d_ = D; ld_ = 0; count_ = 0; data_ = 0;}
  virtual ~Fl_Image();
  virtual Fl_Image *copy(int W, int H);
  /**
    The copy() method creates a copy of the specified
    image. If the width and height are provided, the image is
    resized to the specified size. The image should be deleted (or in
    the case of Fl_Shared_Image, released) when you are done
    with it.
  */
  Fl_Image *copy() { return copy(w(), h()); }
  virtual void color_average(Fl_Color c, float i);
  /**
    The inactive() method calls
    color_average(FL_BACKGROUND_COLOR, 0.33f) to produce 
    an image that appears grayed out. <I>This method does not 
    alter the original image data.</I>
  */
  void inactive() { color_average(FL_GRAY, .33f); }
  virtual void desaturate();
  virtual void label(Fl_Widget*w);
  virtual void label(Fl_Menu_Item*m);
  /**
    The draw() methods draw the image. This form specifies
    a bounding box for the image, with the origin
    (upper-lefthand corner) of the image offset by the cx
    and cy arguments.
  */
  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0); // platform dependent
  /**
    The draw() methods draw the image. This form
    specifies the upper-lefthand corner of the image
  */
  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);} // platform dependent
  virtual void uncache();
};

/**
  The Fl_RGB_Image class supports caching and drawing
  of full-color images with 1 to 4 channels of color information.
  Images with an even number of channels are assumed to contain
  alpha information, which is used to blend the image with the
  contents of the screen.</P>
  
  <P>Fl_RGB_Image is defined in
  &lt;FL/Fl_Image.H&gt;, however for compatibility reasons
  &lt;FL/Fl_RGB_Image.H&gt; should be included.
*/
class FL_EXPORT Fl_RGB_Image : public Fl_Image {
  public:

  const uchar *array;
  int alloc_array; // Non-zero if array was allocated

#if defined(__APPLE__) || defined(WIN32)
  void *id; // for internal use
  void *mask; // for internal use (mask bitmap)
#else
  unsigned id; // for internal use
  unsigned mask; // for internal use (mask bitmap)
#endif // __APPLE__ || WIN32
/**  The constructor creates a new image from the specified data. */
  Fl_RGB_Image(const uchar *bits, int W, int H, int D=3, int LD=0) :
    Fl_Image(W,H,D), array(bits), alloc_array(0), id(0), mask(0) {data((const char **)&array, 1); ld(LD);}
  virtual ~Fl_RGB_Image();
  virtual Fl_Image *copy(int W, int H);
  Fl_Image *copy() { return copy(w(), h()); }
  virtual void color_average(Fl_Color c, float i);
  virtual void desaturate();
  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0);
  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);}
  virtual void label(Fl_Widget*w);
  virtual void label(Fl_Menu_Item*m);
  virtual void uncache();
};

#endif // !Fl_Image_H

//
// End of "$Id: Fl_Image.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Input.H.













































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
//
// "$Id: Fl_Input.H 6699 2009-03-18 22:58:12Z engelsman $"
//
// Input header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Input widget . */

#ifndef Fl_Input_H
#define Fl_Input_H

#include "Fl_Input_.H"

/**
  This is the FLTK text input widget. It displays a single line
  of text and lets the user edit it. Normally it is drawn with an
  inset box and a white background. The text may contain any
  characters (even 0), and will correctly display anything, using
  ^X notation for unprintable control characters and \\nnn notation
  for unprintable characters with the high bit set. It assumes the
  font can draw any characters in the ISO-8859-1 character set.</P>
  
  <CENTER><TABLE border=1 WIDTH=90% summary="Fl_Input keyboard and mouse bindings.">
  
  <TR><TD WIDTH=200><B>Mouse button 1</B></TD><TD>Moves the cursor to
  this point. Drag selects characters.  Double click selects words.
  Triple click selects all text.  Shift+click extends the selection.
  When you select text it is automatically copied to the clipboard.
  </TD></TR>
  
  <TR><TD><B>Mouse button 2</B></TD><TD>Insert the clipboard at
  the point clicked.  You can also select a region and replace it with the
  clipboard by selecting the region with mouse button 2.
  </TD></TR>
  
  <TR><TD><B>Mouse button 3</B></TD><TD>Currently acts like button 1.</TD></TR>
  
  <TR><TD><B>Backspace</B></TD><TD>Deletes one character to the left, or
  deletes the selected region.</TD></TR>
  <TR><TD><B>Enter</B></TD><TD>May cause the callback, see when().</TD></TR>
  <TR><TD><B>^A or Home</B></TD><TD>Go to start of line.</TD></TR>
  <TR><TD><B>^B or Left</B></TD><TD>Move left</TD></TR>
  <TR><TD><B>^C</B></TD><TD>Copy the selection to the clipboard</TD></TR>
  <TR><TD><B>^D or Delete</B></TD><TD>Deletes one character to the right
  or deletes the selected region.</TD></TR>
  <TR><TD><B>^E or End</B></TD><TD>Go to the end of line.</TD></TR>
  <TR><TD><B>^F or Right</B></TD><TD>Move right</TD></TR>
  <TR><TD><B>^K</B></TD><TD>Delete to the end of line (next \\n character)
  or deletes a single \\n character.  These deletions are all concatenated
  into the clipboard.</TD></TR>
  <TR><TD><B>^N or Down</B></TD><TD>Move down (for Fl_Multiline_Input
  only, otherwise it moves to the next input field).</TD></TR>
  <TR><TD><B>^P or Up</B></TD><TD>Move up (for Fl_Multiline_Input only,
  otherwise it moves to the previous input field).</TD></TR>
  <TR><TD><B>^U</B></TD><TD>Delete everything.</TD></TR>
  <TR><TD><B>^V or ^Y</B></TD><TD>Paste the clipboard</TD></TR>
  <TR><TD><B>^X or ^W</B></TD><TD>Copy the region to the clipboard and
  delete it.</TD></TR>
  <TR><TD><B>^Z or ^_</B></TD><TD>Undo.  This is a single-level undo
  mechanism, but all adjacent deletions and insertions are concatenated
  into a single "undo".  Often this will undo a lot more than you
  expected.</TD></TR>
  <TR><TD><B>Shift+move</B></TD><TD>Move the cursor but also extend the
  selection.</TD></TR>
  
  <TR><TD><B>RightCtrl or
  <BR>Compose</B></TD><TD>
  \anchor Fl_Input_Compose_Character
  Start a compose-character
  sequence.  The next one or two keys typed define the character to
  insert (see table that follows.)
  
  <p>For instance, to type "" type [compose][a]['] or [compose]['][a].
  
  <P>The character "nbsp" (non-breaking space) is typed by using
  [compose][space].
  
  <P>The single-character sequences may be followed by a space if
  necessary to remove ambiguity.  For instance, if you really want to
  type "~" rather than "" you must type [compose][a][space][~].
  
  <p>The same key may be used to "quote" control characters into the
  text.  If you need a ^Q character you can get one by typing
  [compose][Control+Q].
  
  <p>X may have a key on the keyboard
  defined as XK_Multi_key.  If so this key may be used as well
  as the right-hand control key.  You can set this up with the program
  xmodmap.
  
  <p>If your keyboard is set to support a foreign language you should
  also be able to type "dead key" prefix characters.  On X you will
  actually be able to see what dead key you typed, and if you then move
  the cursor without completing the sequence the accent will remain
  inserted.</TD></TR>
  </TABLE></CENTER>
  
  <!-- NEW PAGE -->
  <center><table border=1 summary="Character Composition Table">
  <caption align="top">Character Composition Table</caption>
  <tr>
  	<th>Keys</th><th>Char</th>
  	<th>Keys</th><th>Char</th>
  	<th>Keys</th><th>Char</th>
  	<th>Keys</th><th>Char</th>
  	<th>Keys</th><th>Char</th>
  	<th>Keys</th><th>Char</th>
  
  </tr><tr>
  	<td align=center>sp</td><td align=center><small>nbsp</small></td>
  	<td align=center>*</td><td align=center></td>
  	<td align=center>` A</td><td align=center></td>
  	<td align=center>D -</td><td align=center></td>
  	<td align=center>` a</td><td align=center></td>
  	<td align=center>d -</td><td align=center></td>
  </tr><tr>
  	<td align=center>!</td><td align=center></td>
  	<td align=center>+ -</td><td align=center></td>
  	<td align=center>' A</td><td align=center></td>
  	<td align=center>~ N</td><td align=center></td>
  	<td align=center>' a</td><td align=center></td>
  	<td align=center>~ n</td><td align=center></td>
  </tr><tr>
  	<td align=center>%</td><td align=center></td>
  	<td align=center>2</td><td align=center></td>
  	<td align=center>A ^</td><td align=center></td>
  	<td align=center>` O</td><td align=center></td>
  	<td align=center>^ a</td><td align=center></td>
  	<td align=center>` o</td><td align=center></td>
  </tr><tr>
  	<td align=center>#</td><td align=center></td>
  	<td align=center>3</td><td align=center></td>
  	<td align=center>~ A</td><td align=center></td>
  	<td align=center>' O</td><td align=center></td>
  	<td align=center>~ a</td><td align=center></td>
  	<td align=center>' o</td><td align=center></td>
  </tr><tr>
  	<td align=center>$</td><td align=center></td>
  	<td align=center>'</td><td align=center></td>
  	<td align=center>: A</td><td align=center></td>
  	<td align=center>^ O</td><td align=center></td>
  	<td align=center>: a</td><td align=center></td>
  	<td align=center>^ o</td><td align=center></td>
  </tr><tr>
  	<td align=center>y =</td><td align=center></td>
  	<td align=center>u</td><td align=center></td>
  	<td align=center>* A</td><td align=center></td>
  	<td align=center>~ O</td><td align=center></td>
  	<td align=center>* a</td><td align=center></td>
  	<td align=center>~ o</td><td align=center></td>
  </tr><tr>
  	<td align=center>|</td><td align=center></td>
  	<td align=center>p</td><td align=center></td>
  	<td align=center>A E</td><td align=center></td>
  	<td align=center>: O</td><td align=center></td>
  	<td align=center>a e</td><td align=center></td>
  	<td align=center>: o</td><td align=center></td>
  </tr><tr>
  	<td align=center>&</td><td align=center></td>
  	<td align=center>.</td><td align=center></td>
  	<td align=center>, C</td><td align=center></td>
  	<td align=center>x</td><td align=center></td>
  	<td align=center>, c</td><td align=center></td>
  	<td align=center>- :</td><td align=center></td>
  </tr><tr>
  	<td align=center>:</td><td align=center></td>
  	<td align=center>,</td><td align=center></td>
  	<td align=center>E `</td><td align=center></td>
  	<td align=center>O /</td><td align=center></td>
  	<td align=center>` e</td><td align=center></td>
  	<td align=center>o /</td><td align=center></td>
  </tr><tr>
  	<td align=center>c</td><td align=center></td>
  	<td align=center>1</td><td align=center></td>
  	<td align=center>' E</td><td align=center></td>
  	<td align=center>` U</td><td align=center></td>
  	<td align=center>' e</td><td align=center></td>
  	<td align=center>` u</td><td align=center></td>
  </tr><tr>
  	<td align=center>a</td><td align=center></td>
  	<td align=center>o</td><td align=center></td>
  	<td align=center>^ E</td><td align=center></td>
  	<td align=center>' U</td><td align=center></td>
  	<td align=center>^ e</td><td align=center></td>
  	<td align=center>' u</td><td align=center></td>
  </tr><tr>
  	<td align=center>&lt; &lt;</td><td align=center></td>
  	<td align=center>&gt; &gt;</td><td align=center></td>
  	<td align=center>: E</td><td align=center></td>
  	<td align=center>^ U</td><td align=center></td>
  	<td align=center>: e</td><td align=center></td>
  	<td align=center>^ u</td><td align=center></td>
  </tr><tr>
  	<td align=center>~</td><td align=center></td>
  	<td align=center>1 4</td><td align=center></td>
  	<td align=center>` I</td><td align=center></td>
  	<td align=center>: U</td><td align=center></td>
  	<td align=center>` i</td><td align=center></td>
  	<td align=center>: u</td><td align=center></td>
  </tr><tr>
  	<td align=center>-</td><td align=center></td>
  	<td align=center>1 2</td><td align=center></td>
  	<td align=center>' I</td><td align=center></td>
  	<td align=center>' Y</td><td align=center></td>
  	<td align=center>' i</td><td align=center></td>
  	<td align=center>' y</td><td align=center></td>
  </tr><tr>
  	<td align=center>r</td><td align=center></td>
  	<td align=center>3 4</td><td align=center></td>
  	<td align=center>^ I</td><td align=center></td>
  	<td align=center>T H</td><td align=center></td>
  	<td align=center>^ i</td><td align=center></td>
  	<td align=center>t h</td><td align=center></td>
  </tr><tr>
  	<td align=center>_</td><td align=center></td>
  	<td align=center>?</td><td align=center></td>
  	<td align=center>: I</td><td align=center></td>
  	<td align=center>s s</td><td align=center></td>
  	<td align=center>: i</td><td align=center></td>
  	<td align=center>: y</td><td align=center></td>
  </tr>
  </table></center>
*/
class FL_EXPORT Fl_Input : public Fl_Input_ {
  int handle_key();
  int shift_position(int p);
  int shift_up_down_position(int p);
  void handle_mouse(int keepmark=0);
protected:
  void draw();
public:
  int handle(int);
  Fl_Input(int,int,int,int,const char * = 0);
};

#endif 

//
// End of "$Id: Fl_Input.H 6699 2009-03-18 22:58:12Z engelsman $".
//

Added fltk-1.3/FL/Fl_Input_.H.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
//
// "$Id: Fl_Input_.H 6902 2009-09-27 11:06:56Z matt $"
//
// Input base class header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Input_ widget . */

#ifndef Fl_Input__H
#define Fl_Input__H

#ifndef Fl_Widget_H
#include "Fl_Widget.H"
#endif

#define FL_NORMAL_INPUT		0
#define FL_FLOAT_INPUT		1
#define FL_INT_INPUT		2
#define FL_HIDDEN_INPUT		3
#define FL_MULTILINE_INPUT	4
#define FL_SECRET_INPUT		5
#define FL_INPUT_TYPE		7
#define FL_INPUT_READONLY	8
#define FL_NORMAL_OUTPUT	(FL_NORMAL_INPUT | FL_INPUT_READONLY)
#define FL_MULTILINE_OUTPUT	(FL_MULTILINE_INPUT | FL_INPUT_READONLY)
#define FL_INPUT_WRAP		16
#define FL_MULTILINE_INPUT_WRAP	(FL_MULTILINE_INPUT | FL_INPUT_WRAP)
#define FL_MULTILINE_OUTPUT_WRAP (FL_MULTILINE_INPUT | FL_INPUT_READONLY | FL_INPUT_WRAP)

/**
  This class provides a low-overhead text input field.

  This is a virtual base class below Fl_Input. It has all
  the same interfaces, but lacks the handle() and
  draw() method. You may want to subclass it if you are
  one of those people who likes to change how the editing keys
  work. It may also be useful for adding scrollbars
  to the input field.
  
  This can act like any of the subclasses of Fl_Input, by
  setting type() to one of the following values:
  
  \code
  #define FL_NORMAL_INPUT	   0
  #define FL_FLOAT_INPUT	   1
  #define FL_INT_INPUT		   2
  #define FL_MULTILINE_INPUT	   4
  #define FL_SECRET_INPUT	   5
  #define FL_INPUT_TYPE		   7
  #define FL_INPUT_READONLY	   8
  #define FL_NORMAL_OUTPUT	   (FL_NORMAL_INPUT | FL_INPUT_READONLY)
  #define FL_MULTILINE_OUTPUT	   (FL_MULTILINE_INPUT | FL_INPUT_READONLY)
  #define FL_INPUT_WRAP		   16
  #define FL_MULTILINE_INPUT_WRAP  (FL_MULTILINE_INPUT | FL_INPUT_WRAP)
  #define FL_MULTILINE_OUTPUT_WRAP (FL_MULTILINE_INPUT | FL_INPUT_READONLY | FL_INPUT_WRAP)
  \endcode

  All variables that represent an index into a text buffer are byte-oriented,
  not character oriented. Since utf8 characters can be up to six bytes long, 
  simply incrementing such an index will not reliably advance to the next character
  in the text buffer. 

  Indices and pointers into the text buffer should always point at a 7 bit ASCII 
  character or the beginning of a utf8 character sequence. Behavior for false
  utf8 sequences and pointers into the middle of a seqeunce are undefined.

  \see Fl_Text_Display, Fl_Text_Editor for more powerful text handling widgets

  \internal
  When porting this widget from ASCII to UTF8, previously legal pointers into 
  the text of this widget can become illegal by pointing into the middle of
  a UTF8 seuence. This is not a big problem for Fl_Input_ because all code
  in this module is quite tolerant. It could be problematic though when deriving
  from this class because no feedback for illegal pointers is given. Additionaly,
  a careless "copy" call can put partial UTF8 sequnces into the clipboard.

  None of these issues should be desasterous. Nevertheless, we should 
  discuss how FLTK should handle false UTF8 suequences and pointers.
*/
class FL_EXPORT Fl_Input_ : public Fl_Widget {

  /** \internal Storage for the text field. */
  const char* value_;

  /** \internal Buffer memory for expanded text. \see expand() */
  char* buffer;

  /** \internal Size of text in bytes in the \p value_ field. */
  int size_;

  /** \internal \todo Please document me! */
  int bufsize;
  
  /** \internal Positin of the cursor in the document */
  int position_;

  /** \internal Position of the other end of the selected text. If \p position_ equals 
      \p mark_, no text is selected */
  int mark_;

  /** \internal Offset to text origin within widget bounds */
  int xscroll_, yscroll_;

  /** \internal Minimal update pointer. Display requirs redraw from here to the end
      of the buffer. */
  int mu_p;

  /** \internal Maximum size of buffer. \todo Is this really needed? */
  int maximum_size_;

  /** \internal Shortcut key that will fetch focus for this widget. */
  int shortcut_;

  /** \internal This is set if no text but only the cursor needs updating. */
  uchar erase_cursor_only;

  /** \internal The font used for the entire text. */
  Fl_Font textfont_;

  /** \internal Height of the font used for the entire text. */
  Fl_Fontsize textsize_;

  /** \internal color of the entire text */
  Fl_Color textcolor_;

  /** \internal color of the text cursor */
  Fl_Color cursor_color_;

  /** \internal Horizontal cursor position in pixels while movin up or down.  */
  static double up_down_pos;

  /** \internal Flag to remeber last cursor move. */
  static int was_up_down;

  /* Convert a given text segment into the text that will be rendered on screen. */
  const char* expand(const char*, char*) const;

  /* Calculates the width in pixels of part of a text buffer. */
  double expandpos(const char*, const char*, const char*, int*) const;

  /* Mark a range of characters for update. */
  void minimal_update(int, int);

  /* Mark a range of characters for update. */
  void minimal_update(int p);

  /* Copy the value from a possibly static entry into the internal buffer. */
  void put_in_buffer(int newsize);

  /* Set the current font and font size. */
  void setfont() const;

protected:

  /* Find the start of a word. */
  int word_start(int i) const;

  /* Find the end of a word. */
  int word_end(int i) const;

  /* Find the start of a line. */
  int line_start(int i) const;
  
  /* Find the end of a line. */
  int line_end(int i) const;

  /* Draw the text in the passed bounding box. */
  void drawtext(int, int, int, int);

  /* Move the cursor to the column given by up_down_pos. */
  int up_down_position(int, int keepmark=0);

  /* Handle mouse clicks and mose moves. */
  void handle_mouse(int, int, int, int, int keepmark=0);

  /* Handle all kinds of text field related events. */
  int handletext(int e, int, int, int, int);

  /* Check the when() field and do a callback if indicated. */
  void maybe_do_callback();

  /** \internal Horizontal offset of text to left edge of widget. */
  int xscroll() const {return xscroll_;}

  /** \internal Vertical offset of text to top edge of widget. */
  int yscroll() const {return yscroll_;}
  void yscroll(int y) { yscroll_ = y; damage(FL_DAMAGE_EXPOSE);}

  /* Return the number of lines displayed on a single page.  */
  int linesPerPage();

public:

  /* Change the size of the widget. */
  void resize(int, int, int, int);

  /* Constructor */
  Fl_Input_(int, int, int, int, const char* = 0);

  /* Destructor */
  ~Fl_Input_();

  /* Changes the widget text. */
  int value(const char*);

  /* Changes the widget text. */
  int value(const char*, int);

  /* Changes the widget text. */
  int static_value(const char*);

  /* Changes the widget text. */
  int static_value(const char*, int);

  /**
      Returns the text displayed in the widget.

      This function returns the current value, which is a pointer
      to the internal buffer and is valid only until the next event is
      handled.
  
      \return pointer to an internal buffer - do not free() this    
      \see Fl_Input_::value(const char*)
  */
  const char* value() const {return value_;}

  /* Returns the character at index \p i. */
  Fl_Char index(int i) const;

  /**
    Returns the number of bytes in value(). 
  
    This may be greater than <tt>strlen(value())</tt> if there are 
    \c nul characters in the text.

    \return number of bytes in the text
  */
  int size() const {return size_;}

  /** Sets the width and height of this widget.
    \param [in] W, H new width and height
    \see Fl_Widget::size(int, int) */
  void size(int W, int H) { Fl_Widget::size(W, H); }

  /** Gets the maximum length of the input field.  
    \todo It is not clear if this function is actually required */
  int maximum_size() const {return maximum_size_;}

  /** Sets the maximum length of the input field. 
    \todo It is not clear if this function is actually required */
  void maximum_size(int m) {maximum_size_ = m;}

  /** Gets the position of the text cursor.
    \return the cursor position as an index
    \see position(int, int)
  */
  int position() const {return position_;}

  /** Gets the current selection mark. 
    \return index into the text */
  int mark() const {return mark_;}

  /* Sets the index for the cursor and mark. */
  int position(int p, int m);

  /** Set the cursor position and mark.
    position(n) is the same as <tt>position(n, n)</tt>.
    \param p new index for cursor and mark
    \return 0 if no positions changed
    \see position(int, int), position(), mark(int)
  */
  int position(int p) {return position(p, p);}

  /** Sets the current selection mark. 
    mark(n) is  the same as <tt>position(position(),n)</tt>.
    \param m new index of the mark 
    \return 0 if the mark did not change
    \see position(), position(int, int) */
  int mark(int m) {return position(position(), m);}

  /* Deletes text from b to e and inserts the new string text. */
  int replace(int, int, const char*, int=0);

  /**
    Deletes the current selection.

    This function deletes the currently selected text
    \e without storing it in the clipboard. To use the clipboard,
    you may call copy() first or copy_cuts() after
    this call.

    \return 0 if no data was copied
  */
  int cut() {return replace(position(), mark(), 0);}

  /**
    Deletes the next \p n bytes rounded to characters before or after the cursor.

    This function deletes the currently selected text
    \e without storing it in the clipboard. To use the clipboard,
    you may call copy() first or copy_cuts() after
    this call.

    \param n number of bytes rounded to full characters and clamped to the buffer.
           A negative number will cut characters to the left of the cursor.
    \return 0 if no data was copied
  */
  int cut(int n) {return replace(position(), position()+n, 0);}

  /**
    Deletes all characters between index \p a and \p b.

    This function deletes the currently selected text
    \e without storing it in the clipboard. To use the clipboard,
    you may call copy() first or copy_cuts() after
    this call.

    \param a, b range of bytes rounded to full characters and clamped to the buffer
    \return 0 if no data was copied
  */
  int cut(int a, int b) {return replace(a, b, 0);}

  /**
    Inserts text at the cursor position.

    This function inserts the string in \p t at the cursor
    position() and moves the new position and mark to
    the end of the inserted text.

    \param [in] t text that will be inserted
    \param [in] l length of text, or 0 if the string is terminated by \c nul.
    \return 0 if no text was inserted
  */
  int insert(const char* t, int l=0){return replace(position_, mark_, t, l);}

  /* Put the current selection into the clipboard. */
  int copy(int clipboard);

  /* Undo previous changes to the text buffer. */
  int undo();

  /* Copy the yank buffer to the clipboard. */
  int copy_cuts();

  /** Return the shortcut key associtaed with this widget.
    \return shortcut keystroke
    \see Fl_Button::shortcut() */
  int shortcut() const {return shortcut_;}

  /** 
    Sets the shortcut key associtaed with this widget.
    Pressing the shortcut key gives text editing focus to this widget.
    \param [in] s new shortcut keystroke 
    \see Fl_Button::shortcut() 
  */
  void shortcut(int s) {shortcut_ = s;}

  /** Gets the font of the text in the input field.
    \return the current Fl_Font index */
  Fl_Font textfont() const {return textfont_;}

  /** Sets the font of the text in the input field.
    The text font defaults to \c FL_HELVETICA.
    \param [in] s the new text font */
  void textfont(Fl_Font s) {textfont_ = s;}

  /** Gets the size of the text in the input field.
    \return the text height in pixels */
  Fl_Fontsize textsize() const {return textsize_;}

  /** Sets the size of the text in the input field.
    The text height defaults to \c FL_NORMAL_SIZE.
    \param [in] s the new font height in pixel units */
  void textsize(Fl_Fontsize s) {textsize_ = s;}

  /** Gets the color of the text in the input field.
    \return the text color
    \see textcolor(Fl_Color) */
  Fl_Color textcolor() const {return textcolor_;}

  /** Sets the color of the text in the input field.
    The text color defaults to \c FL_FOREGROUND_COLOR.
    \param [in] n new text color
    \see textcolor() */
  void textcolor(Fl_Color n) {textcolor_ = n;}

  /** Gets the color of the cursor.  
    \return the current cursor color */
  Fl_Color cursor_color() const {return cursor_color_;}

  /** Sets the color of the cursor.  
    The default color for the cursor is \c FL_BLACK.
    \param [in] n the new cursor color */
  void cursor_color(Fl_Color n) {cursor_color_ = n;}

  /** Gets the input field type. 
    \return the current input type */
  int input_type() const {return type() & FL_INPUT_TYPE; }

  /** Sets the input field type. 
    A redraw() is required to reformat the input field.
    \param [in] t new input type */
  void input_type(int t) { type((uchar)(t | readonly())); }

  /** Gets the read-only state of the input field.  
    \return non-zero if this widget is read-only */
  int readonly() const { return type() & FL_INPUT_READONLY; }

  /** Sets the read-only state of the input field.  
    \param [in] b if \p b is 0, the text in this widget can be edited by the user */
  void readonly(int b) { if (b) type((uchar)(type() | FL_INPUT_READONLY));
                         else type((uchar)(type() & ~FL_INPUT_READONLY)); }

  /**
    Gets  the word wrapping state of the input field. 
    Word wrap is only functional with multi-line input fields.
  */
  int wrap() const { return type() & FL_INPUT_WRAP; }

  /**
    Sets the word wrapping state of the input field. 
    Word wrap is only functional with multi-line input fields.
  */
  void wrap(int b) { if (b) type((uchar)(type() | FL_INPUT_WRAP));
                         else type((uchar)(type() & ~FL_INPUT_WRAP)); }

};

#endif 

//
// End of "$Id: Fl_Input_.H 6902 2009-09-27 11:06:56Z matt $".
//

Added fltk-1.3/FL/Fl_Input_Choice.H.

















































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
//
// "$Id: Fl_Input_Choice.H 6614 2009-01-01 16:11:32Z matt $"
//
// An input/chooser widget.
//            ______________  ____
//           |              || __ |
//           | input area   || \/ |
//           |______________||____|
//
// Copyright 1998-2009 by Bill Spitzak and others.
// Copyright 2004 by Greg Ercolano.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Input_Choice widget . */



#ifndef Fl_Input_Choice_H
#define Fl_Input_Choice_H

#include <FL/Fl.H>
#include <FL/Fl_Group.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Menu_Button.H>
#include <FL/fl_draw.H>
#include <string.h>

/**
  A combination of the input widget and a menu button.
  The user can either type into the input area, or use the
  menu button chooser on the right, which loads the input area
  with predefined text.  Normally it is drawn with an inset box 
  and a white background. 
  <P>
  The application can directly access both the input and menu
  widgets directly, using the menubutton()
  and input() accessor methods.
*/
class Fl_Input_Choice : public Fl_Group {
  // Private class to handle slightly 'special' behavior of menu button
  class InputMenuButton : public Fl_Menu_Button {
    void draw() {
      draw_box(FL_UP_BOX, color());
      fl_color(active_r() ? labelcolor() : fl_inactive(labelcolor()));
      int xc = x()+w()/2, yc=y()+h()/2;
      fl_polygon(xc-5,yc-3,xc+5,yc-3,xc,yc+3);
      if (Fl::focus() == this) draw_focus();
    }
  public:
    InputMenuButton(int x,int y,int w,int h,const char*l=0) : 
	Fl_Menu_Button(x,y,w,h,l) { box(FL_UP_BOX); }
  };

  Fl_Input *inp_;
  InputMenuButton *menu_;

  static void menu_cb(Fl_Widget*, void *data) { 
    Fl_Input_Choice *o=(Fl_Input_Choice *)data;
    const Fl_Menu_Item *item = o->menubutton()->mvalue();
    if (item && item->flags & (FL_SUBMENU|FL_SUBMENU_POINTER)) return;	// ignore submenus
    if (!strcmp(o->inp_->value(), o->menu_->text()))
    {
      o->Fl_Widget::clear_changed();
      if (o->when() & FL_WHEN_NOT_CHANGED)
	o->do_callback();
    }
    else
    {
      o->inp_->value(o->menu_->text());
      o->inp_->set_changed();
      o->Fl_Widget::set_changed();
      if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
	o->do_callback();
    }

    if (o->callback() != default_callback)
    {
      o->Fl_Widget::clear_changed();
      o->inp_->clear_changed();
    }
  }

  static void inp_cb(Fl_Widget*, void *data) { 
    Fl_Input_Choice *o=(Fl_Input_Choice *)data;
    if (o->inp_->changed()) {
      o->Fl_Widget::set_changed();
      if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
	o->do_callback();
    } else {
      o->Fl_Widget::clear_changed();
      if (o->when() & FL_WHEN_NOT_CHANGED)
	o->do_callback();
    }

    if (o->callback() != default_callback)
      o->Fl_Widget::clear_changed();
  }

  // Custom resize behavior -- input stretches, menu button doesn't
  inline int inp_x() { return(x() + Fl::box_dx(box())); }
  inline int inp_y() { return(y() + Fl::box_dy(box())); }
  inline int inp_w() { return(w() - Fl::box_dw(box()) - 20); }
  inline int inp_h() { return(h() - Fl::box_dh(box())); }

  inline int menu_x() { return(x() + w() - 20 - Fl::box_dx(box())); }
  inline int menu_y() { return(y() + Fl::box_dy(box())); }
  inline int menu_w() { return(20); }
  inline int menu_h() { return(h() - Fl::box_dh(box())); }

public:
  /**
    Creates a new Fl_Input_Choice widget using the given position, size,
    and label string.
  <P> Inherited destructor Destroys the widget and any value associated with it.
  */
  Fl_Input_Choice (int x,int y,int w,int h,const char*l=0) : Fl_Group(x,y,w,h,l) {
    Fl_Group::box(FL_DOWN_BOX);
    align(FL_ALIGN_LEFT);				// default like Fl_Input
    inp_ = new Fl_Input(inp_x(), inp_y(),
			inp_w(), inp_h());
    inp_->callback(inp_cb, (void*)this);
    inp_->box(FL_FLAT_BOX);		// cosmetic
    inp_->when(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED);
    menu_ = new InputMenuButton(menu_x(), menu_y(),
				menu_w(), menu_h());
    menu_->callback(menu_cb, (void*)this);
    menu_->box(FL_FLAT_BOX);				// cosmetic
    end();
  }
  
  /** Adds an item to the menu.*/
  void add(const char *s) { menu_->add(s);  }
  int changed() const { return inp_->changed() | Fl_Widget::changed();}
  void clear_changed() { 
    inp_->clear_changed();
    Fl_Widget::clear_changed();
  }
  void set_changed() { 
    inp_->set_changed();
    // no need to call Fl_Widget::set_changed()
  }
  /** Removes all items from the menu. */
  void clear() { menu_->clear(); }
  /** Gets the box type of the menu button */
  Fl_Boxtype down_box() const { return (menu_->down_box()); }
  /** Sets the box type of the menu button */
  void down_box(Fl_Boxtype b) { menu_->down_box(b); }
  /** Gets the Fl_Menu_Item array used for the menu. */
  const Fl_Menu_Item *menu() { return (menu_->menu()); }
  /** Sets the Fl_Menu_Item array used for the menu. */
  void menu(const Fl_Menu_Item *m) { menu_->menu(m); }
  void resize(int X, int Y, int W, int H) {
    Fl_Group::resize(X,Y,W,H);
    inp_->resize(inp_x(), inp_y(), inp_w(), inp_h());
    menu_->resize(menu_x(), menu_y(), menu_w(), menu_h());
  }
  /** Gets the encapsulated input text color attributes */
  Fl_Color textcolor() const { return (inp_->textcolor());}
  /** Sets the encapsulated input text color attributes */
  void textcolor(Fl_Color c) { inp_->textcolor(c);}
  /** Gets the encapsulated input text font  attributes */
  Fl_Font textfont() const { return (inp_->textfont());}
  /** Sets the encapsulated input text font attributes */
  void textfont(Fl_Font f) { inp_->textfont(f);}
  /** Gets the encapsulated input size attributes */
  Fl_Fontsize textsize() const { return (inp_->textsize()); }
  /** Sets the encapsulated input size attributes */
  void textsize(Fl_Fontsize s) { inp_->textsize(s); }
  /** See void Fl_Input_Choice::value(const char *s)  */
  const char* value() const { return (inp_->value()); }
  /**
    Sets or returns the input widget's current contents. The
    second form sets the contents using the index into the menu
    which you can set as an integer.  Setting the value effectively
    'chooses' this menu item, and sets it as the new input text,
    deleting the previous text.
  */
  void value(const char *val) { inp_->value(val); }
  /**    See void Fl_Input_Choice::value(const char *s)  */
  void value(int val) {
    menu_->value(val);
    inp_->value(menu_->text(val));
  }
  /**    Returns a reference to the internal Fl_Menu_Button widget.  */
  Fl_Menu_Button *menubutton() { return menu_; }
  /**
    Returns a reference to the internal Fl_Input widget.</p>
  */
  Fl_Input *input() { return inp_; }
};

#endif // !Fl_Input_Choice_H

//
// End of "$Id: Fl_Input_Choice.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Int_Input.H.















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//
// "$Id: Fl_Int_Input.H 6614 2009-01-01 16:11:32Z matt $"
//
// Integer input header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Int_Input widget . */

#ifndef Fl_Int_Input_H
#define Fl_Int_Input_H

#include "Fl_Input.H"

/**
  The Fl_Int_Input class is a subclass of Fl_Input
  that only allows the user to type decimal digits (or hex numbers of the form 0xaef).
*/
class Fl_Int_Input : public Fl_Input {
public:
  /**
    Creates a new Fl_Int_Input widget using the given position,
    size, and label string. The default boxtype is FL_DOWN_BOX.
    <P>Inherited destructor Destroys the widget and any value associated with it.
  */
  Fl_Int_Input(int X,int Y,int W,int H,const char *l = 0)
      : Fl_Input(X,Y,W,H,l) {type(FL_INT_INPUT);}
};

#endif

//
// End of "$Id: Fl_Int_Input.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_JPEG_Image.H.









































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//
// "$Id: Fl_JPEG_Image.H 6614 2009-01-01 16:11:32Z matt $"
//
// JPEG image header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_JPEG_Image class . */

#ifndef Fl_JPEG_Image_H
#define Fl_JPEG_Image_H
#  include "Fl_Image.H"

/**
  The Fl_JPEG_Image class supports loading, caching,
  and drawing of Joint Photographic Experts Group (JPEG) File
  Interchange Format (JFIF) images. The class supports grayscale
  and color (RGB) JPEG image files.
*/
class FL_EXPORT Fl_JPEG_Image : public Fl_RGB_Image {

  public:

  Fl_JPEG_Image(const char* filename);
};

#endif

//
// End of "$Id: Fl_JPEG_Image.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Light_Button.H.























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//
// "$Id: Fl_Light_Button.H 6614 2009-01-01 16:11:32Z matt $"
//
// Lighted button header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Light_Button widget . */

#ifndef Fl_Light_Button_H
#define Fl_Light_Button_H

#include "Fl_Button.H"

/**
  <P>This subclass displays the "on" state by turning on a light, 
  rather than drawing pushed in.  The shape of the  "light" 
  is initially set to FL_DOWN_BOX.  The color of the light when
  on is controlled with selection_color(), which defaults to FL_YELLOW.

  Buttons generate callbacks when they are clicked by the user.  You
  control exactly when and how by changing the values for type() and when().
  <P ALIGN=CENTER>\image html Fl_Light_Button.gif</P> 
  \image latex Fl_Light_Button.eps "Fl_Light_Button" width=4cm
*/
class FL_EXPORT Fl_Light_Button : public Fl_Button {
protected:
    virtual void draw();
public:
    virtual int handle(int);
    Fl_Light_Button(int x,int y,int w,int h,const char *l = 0);
};

#endif

//
// End of "$Id: Fl_Light_Button.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Line_Dial.H.





























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//
// "$Id: Fl_Line_Dial.H 6614 2009-01-01 16:11:32Z matt $"
//
// Line dial header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Line_Dial widget . */

#ifndef Fl_Line_Dial_H
#define Fl_Line_Dial_H

#include "Fl_Dial.H"

class Fl_Line_Dial : public Fl_Dial {
public:
    Fl_Line_Dial(int x,int y,int w,int h, const char *l = 0)
	: Fl_Dial(x,y,w,h,l) {type(FL_LINE_DIAL);}
};

#endif

//
// End of "$Id: Fl_Line_Dial.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Menu.H.



































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//
// "$Id: Fl_Menu.H 6614 2009-01-01 16:11:32Z matt $"
//
// Old menu header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

// this include file is for back compatibility only
#include "Fl_Menu_Item.H"

//
// End of "$Id: Fl_Menu.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Menu_.H.





































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
//
// "$Id: Fl_Menu_.H 6902 2009-09-27 11:06:56Z matt $"
//
// Menu base class header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Menu_ widget . */

#ifndef Fl_Menu__H
#define Fl_Menu__H

#ifndef Fl_Widget_H
#include "Fl_Widget.H"
#endif
#include "Fl_Menu_Item.H"

/**
  Base class of all widgets that have a menu in FLTK.
  Currently FLTK provides you with 
  Fl_Menu_Button, Fl_Menu_Bar, and Fl_Choice.
  
  <P>The class contains a pointer to an array of structures of type  Fl_Menu_Item.  The
  array may either be supplied directly by the user program, or it may
  be "private": a dynamically allocated array managed by the Fl_Menu_.
*/
class FL_EXPORT Fl_Menu_ : public Fl_Widget {

  Fl_Menu_Item *menu_;
  const Fl_Menu_Item *value_;

protected:

  uchar alloc;
  uchar down_box_;
  Fl_Font textfont_;
  Fl_Fontsize textsize_;
  Fl_Color textcolor_;

public:
  Fl_Menu_(int,int,int,int,const char * =0);
  ~Fl_Menu_();

  int item_pathname(char *name, int namelen, const Fl_Menu_Item *finditem=0) const;
  const Fl_Menu_Item* picked(const Fl_Menu_Item*);
  const Fl_Menu_Item* find_item(const char *name);

  const Fl_Menu_Item* test_shortcut() {return picked(menu()->test_shortcut());}
  void global();

  /**
    Returns a pointer to the array of Fl_Menu_Items.  This will either be
    the value passed to menu(value) or the private copy.
  */  
  const Fl_Menu_Item *menu() const {return menu_;}
  void menu(const Fl_Menu_Item *m);
  void copy(const Fl_Menu_Item *m, void* user_data = 0);
  int  add(const char*, int shortcut, Fl_Callback*, void* = 0, int = 0);
  /** See int Fl_Menu_::add(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0)*/
  int  add(const char* a, const char* b, Fl_Callback* c, void* d = 0, int e = 0) {
      return add(a,fl_old_shortcut(b),c,d,e);}
  int  add(const char *);
  int  size() const ;
  void size(int W, int H) { Fl_Widget::size(W, H); }
  void clear();
  void replace(int,const char *);
  void remove(int);
 /** Changes the shortcut of item i to n.  */
  void shortcut(int i, int s) {menu_[i].shortcut(s);}
  /** Sets the flags of item i.  For a list of the flags, see Fl_Menu_Item.  */
  void mode(int i,int fl) {menu_[i].flags = fl;}
  /** Gets the flags of item i.  For a list of the flags, see Fl_Menu_Item.  */
  int  mode(int i) const {return menu_[i].flags;}

  /** Returns a pointer to the last menu item that was picked.  */
  const Fl_Menu_Item *mvalue() const {return value_;}
  /** Returns the index into menu() of the last item chosen by the user.  It is zero initially. */
  int value() const {return value_ ? (int)(value_-menu_) : -1;}
  int value(const Fl_Menu_Item*);
  /**
    The value is the index into menu() of the last item chosen by
    the user.  It is zero initially.  You can set it as an integer, or set
    it with a pointer to a menu item.  The set routines return non-zero if
    the new value is different than the old one.
  */
  int value(int i) {return value(menu_+i);}
  /** Returns the title of the last item chosen, or of item i.  */
  const char *text() const {return value_ ? value_->text : 0;}
  /** Returns the title of the last item chosen, or of item i.  */
  const char *text(int i) const {return menu_[i].text;}

  /** Gets the current font of menu item labels.  */
  Fl_Font textfont() const {return textfont_;}
  /**  Sets the current font of menu item labels.  */
  void textfont(Fl_Font c) {textfont_=c;}
  /**  Gets the font size of menu item labels.  */
  Fl_Fontsize textsize() const {return textsize_;}
  /**  Sets the font size of menu item labels.  */
  void textsize(Fl_Fontsize c) {textsize_=c;}
  /** Get the current color of menu item labels.  */
  Fl_Color textcolor() const {return textcolor_;}
  /** Sets the current color of menu item labels. */
  void textcolor(Fl_Color c) {textcolor_=c;}

  /**
    This box type is used to surround the currently-selected items in the
    menus.  If this is FL_NO_BOX then it acts like 
    FL_THIN_UP_BOX and selection_color() acts like 
    FL_WHITE, for back compatibility.    
  */
  Fl_Boxtype down_box() const {return (Fl_Boxtype)down_box_;}
  /**    See Fl_Boxtype Fl_Menu_::down_box() const   */
  void down_box(Fl_Boxtype b) {down_box_ = b;}

  /** For back compatibility, same as selection_color() */
  Fl_Color down_color() const {return selection_color();}
  /** For back compatibility, same as selection_color() */
  void down_color(unsigned c) {selection_color(c);}
};

#endif

//
// End of "$Id: Fl_Menu_.H 6902 2009-09-27 11:06:56Z matt $".
//

Added fltk-1.3/FL/Fl_Menu_Bar.H.



















































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//
// "$Id: Fl_Menu_Bar.H 6614 2009-01-01 16:11:32Z matt $"
//
// Menu bar header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Menu_Bar widget . */

#ifndef Fl_Menu_Bar_H
#define Fl_Menu_Bar_H

#include "Fl_Menu_.H"

/**
  This widget provides a standard menubar interface.  Usually you will
  put this widget along the top edge of your window.  The height of the
  widget should be 30 for the menu titles to draw correctly with the
  default font.
  <P>The items on the bar and the menus they bring up are defined by a
  single Fl_Menu_Item
  array.  Because a Fl_Menu_Item array defines a hierarchy, the
  top level menu defines the items in the menubar, while the submenus
  define the pull-down menus. Sub-sub menus and lower pop up to the right
  of the submenus. </P>
  <P ALIGN=CENTER>\image html  menubar.gif</P>
  \image latex  menubar.eps " menubar" width=12cm
  <P>If there is an item in the top menu that is not a title of a
  submenu, then it acts like a "button" in the menubar.  Clicking on it
  will pick it. </P>
  <P>When the user picks an item off the menu, the item's callback is
  done with the menubar as the Fl_Widget* argument.  If the item
  does not have a callback the menubar's callback is done instead. </P>
  <P>Submenus will also pop up in response to shortcuts indicated by
  putting a '&' character in the name field of the menu item. If you put a
  '&' character in a top-level "button" then the shortcut picks it.  The
  '&' character in submenus is ignored until the menu is popped up. </P>
  <P>Typing the shortcut() of any of the menu items will cause
  callbacks exactly the same as when you pick the item with the mouse.
*/
class FL_EXPORT Fl_Menu_Bar : public Fl_Menu_ {
protected:
    void draw();
public:
    int handle(int);
  /**
      Creates a new Fl_Menu_Bar widget using the given position,
    size, and label string. The default boxtype is FL_UP_BOX.
    <P>The constructor sets menu() to NULL.  See 
    Fl_Menu_ for the methods to set or change the menu. </P>
    <P>labelsize(), labelfont(), and labelcolor()
    are used to control how the menubar items are drawn.  They are
    initialized from the Fl_Menu static variables, but you can
    change them if desired. </P>
    <P>label() is ignored unless you change align() to
    put it outside the menubar.
    <P>The destructor removes the Fl_Menu_Bar widget and all of its
    menu items.
  */
    Fl_Menu_Bar(int X, int Y, int W, int H,const char *l=0)
      : Fl_Menu_(X,Y,W,H,l) {}
};

#endif

//
// End of "$Id: Fl_Menu_Bar.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Menu_Button.H.

















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//
// "$Id: Fl_Menu_Button.H 6614 2009-01-01 16:11:32Z matt $"
//
// Menu button header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Menu_Button widget . */

#ifndef Fl_Menu_Button_H
#define Fl_Menu_Button_H

#include "Fl_Menu_.H"

/**
  This is a button that when pushed pops up a menu (or hierarchy of
  menus) defined by an array of 
  Fl_Menu_Item objects.
  <P ALIGN=CENTER>\image html  menu_button.gif</P>
  \image latex  menu_button.eps " menu_button" width=5cm
  <P>Normally any mouse button will pop up a menu and it is lined up
  below the button as shown in the picture.  However an Fl_Menu_Button
  may also control a pop-up menu.  This is done by setting the type()
  , see below. </P>
  <P>The menu will also pop up in response to shortcuts indicated by
  putting a '&' character in the label(). </P>
  <P>Typing the shortcut() of any of the menu items will cause
  callbacks exactly the same as when you pick the item with the mouse.
  The '&' character in menu item names are only looked at when the menu is
  popped up, however. </P>
  <P>When the user picks an item off the menu, the item's callback is
  done with the menu_button as the Fl_Widget* argument.  If the
  item does not have a callback the menu_button's callback is done
  instead.
*/
class FL_EXPORT Fl_Menu_Button : public Fl_Menu_ {
protected:
  void draw();
public:
  // values for type:
  enum {POPUP1 = 1, POPUP2, POPUP12, POPUP3, POPUP13, POPUP23, POPUP123};
  int handle(int);
  const Fl_Menu_Item* popup();
  Fl_Menu_Button(int,int,int,int,const char * =0);
};

#endif

//
// End of "$Id: Fl_Menu_Button.H 6614 2009-01-01 16:11:32Z matt $".
//

Added fltk-1.3/FL/Fl_Menu_Item.H.





































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
//
// "$Id: Fl_Menu_Item.H 6902 2009-09-27 11:06:56Z matt $"
//
// Menu item header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

#ifndef Fl_Menu_Item_H
#define Fl_Menu_Item_H

#  include "Fl_Widget.H"
#  include "Fl_Image.H"

#  if defined(__APPLE__) && defined(check)
#    undef check
#  endif

enum { // values for flags:
  FL_MENU_INACTIVE = 1,		///< Deactivate menu item (gray out)
  FL_MENU_TOGGLE= 2,		///< Item is a checkbox toggle (shows checkbox for on/off state)
  FL_MENU_VALUE = 4,		///< The on/off state for checkbox/radio buttons (if set, state is 'on')
  FL_MENU_RADIO = 8,		///< Item is a radio button (one checkbox of many can be on)
  FL_MENU_INVISIBLE = 0x10,	///< Item will not show up (shortcut will work)
  FL_SUBMENU_POINTER = 0x20,	///< Indicates user_data() is a pointer to another menu array
  FL_SUBMENU = 0x40,		///< This item is a submenu to other items
  FL_MENU_DIVIDER = 0x80,	///< Creates divider line below this item. Also ends a group of radio buttons.
  FL_MENU_HORIZONTAL = 0x100	///< ??? -- reserved
};

extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*);

class Fl_Menu_;

/**
  The Fl_Menu_Item structure defines a single menu item that
  is used by the Fl_Menu_ class.  
  \code
  struct Fl_Menu_Item {
   const char*	        text; // label()
   ulong		shortcut_;
   Fl_Callback*	        callback_;
   void*		user_data_;
   int		        flags;
   uchar		labeltype_;
   uchar		labelfont_;
   uchar		labelsize_;
   uchar		labelcolor_;
  };
  
  enum { // values for flags:
   FL_MENU_INACTIVE	= 1,      // Deactivate menu item (gray out)
   FL_MENU_TOGGLE	= 2,      // Item is a checkbox toggle (shows checkbox for on/off state)
   FL_MENU_VALUE	= 4,      // The on/off state for checkbox/radio buttons (if set, state is 'on')
   FL_MENU_RADIO	= 8,      // Item is a radio button (one checkbox of many can be on)
   FL_MENU_INVISIBLE	= 0x10,   // Item will not show up (shortcut will work)
   FL_SUBMENU_POINTER	= 0x20,   // Indicates user_data() is a pointer to another menu array
   FL_SUBMENU		= 0x40,   // This item is a submenu to other items
   FL_MENU_DIVIDER	= 0x80,   // Creates divider line below this item. Also ends a group of radio buttons.
   FL_MENU_HORIZONTAL	= 0x100   // ??? -- reserved
  };
  \endcode
  Typically menu items are statically defined; for example:
  \code
  Fl_Menu_Item popup[] = {
   {"&alpha",   FL_ALT+'a', the_cb, (void*)1},
   {"&beta",    FL_ALT+'b', the_cb, (void*)2},
   {"gamma",    FL_ALT+'c', the_cb, (void*)3, FL_MENU_DIVIDER},
   {"&strange",  0,   strange_cb},
   {"&charm",    0,   charm_cb},
   {"&truth",    0,   truth_cb},
   {"b&eauty",   0,   beauty_cb},
   {"sub&menu",  0,   0, 0, FL_SUBMENU},
   {"one"},
   {"two"},
   {"three"},
   {0},
   {"inactive", FL_ALT+'i', 0, 0, FL_MENU_INACTIVE|FL_MENU_DIVIDER},
   {"invisible",FL_ALT+'i', 0, 0, FL_MENU_INVISIBLE},
   {"check",    FL_ALT+'i', 0, 0, FL_MENU_TOGGLE|FL_MENU_VALUE},
   {"box",      FL_ALT+'i', 0, 0, FL_MENU_TOGGLE},
   {0}};
  \endcode
  produces:

  \image html   menu.gif
  \image latex  menu.eps "menu" width=10cm

  A submenu title is identified by the bit FL_SUBMENU in the 
  flags field, and ends with a label() that is NULL.
  You can nest menus to any depth.  A pointer to the first item in the
  submenu can be treated as an Fl_Menu array itself.  It is also
  possible to make separate submenu arrays with FL_SUBMENU_POINTER flags.

  You should use the method functions to access structure members and
  not access them directly to avoid compatibility problems with future
  releases of FLTK.
*/
struct FL_EXPORT Fl_Menu_Item {
  const char *text;	    ///< menu item text, returned by label()
  int shortcut_;	    ///< menu item shortcut
  Fl_Callback *callback_;   ///< menu item callback
  void *user_data_;	    ///< menu item user_data for 3rd party apps
  int flags;		    ///< menu item flags like FL_MENU_TOGGLE, FL_MENU_RADIO
  uchar labeltype_;	    ///< how the menu item text looks like
  Fl_Font labelfont_;	    ///< which font for this menu item text
  Fl_Fontsize labelsize_;   ///< size of menu item text
  Fl_Color labelcolor_;	    ///< menu item text color 

  // advance N items, skipping submenus:
  const Fl_Menu_Item *next(int=1) const;

  /**
    Advances a pointer by n items through a menu array, skipping
    the contents of submenus and invisible items. There are two calls so
    that you can advance through const and non-const data.
  */
  Fl_Menu_Item *next(int i=1) {
    return (Fl_Menu_Item*)(((const Fl_Menu_Item*)this)->next(i));}

  /** Returns the first menu item, same as next(0). */
  const Fl_Menu_Item *first() const { return next(0); }

  /** Returns the first menu item, same as next(0). */
  Fl_Menu_Item *first() { return next(0); }

  // methods on menu items:
  /**
    Returns the title of the item.
    A NULL here indicates the end of the menu (or of a submenu).
    A '&' in the item will print an underscore under the next letter,
    and if the menu is popped up that letter will be a "shortcut" to pick 
    that item.  To get a real '&' put two in a row.
  */
  const char* label() const {return text;}

  /**    See const char* Fl_Menu_Item::label() const   */
  void label(const char* a) {text=a;}

  /**    See const char* Fl_Menu_Item::label() const   */
  void label(Fl_Labeltype a,const char* b) {labeltype_ = a; text = b;}

  /**
    A labeltype identifies a routine that draws the label of the
    widget.  This can be used for special effects such as emboss, or to use
    the label() pointer as another form of data such as a bitmap.
    The value FL_NORMAL_LABEL prints the label as text.
  */
  Fl_Labeltype labeltype() const {return (Fl_Labeltype)labeltype_;}

  /**
    A labeltype identifies a routine that draws the label of the
    widget.  This can be used for special effects such as emboss, or to use
    the label() pointer as another form of data such as a bitmap.
    The value FL_NORMAL_LABEL prints the label as text.
  */
  void labeltype(Fl_Labeltype a) {labeltype_ = a;}

  /**
    This color is passed to the labeltype routine, and is typically the
    color of the label text.  This defaults to FL_BLACK.  If this
    color is not black fltk will <I>not</I> use overlay bitplanes to draw
    the menu - this is so that images put in the menu draw correctly.
  */
  Fl_Color labelcolor() const {return labelcolor_;}

  /** See Fl_Color Fl_Menu_Item::labelcolor() const */
  void labelcolor(Fl_Color a) {labelcolor_ = a;}
  /**
    Fonts are identified by small 8-bit indexes into a table. See the 
    enumeration list for predefined fonts. The default value is a
    Helvetica font. The function Fl::set_font() can define new fonts.
  */
  Fl_Font labelfont() const {return labelfont_;}

  /**
    Fonts are identified by small 8-bit indexes into a table. See the 
    enumeration list for predefined fonts. The default value is a
    Helvetica font.  The function Fl::set_font() can define new fonts.
  */
  void labelfont(Fl_Font a) {labelfont_ = a;}

  /** Gets the label font pixel size/height.*/
  Fl_Fontsize labelsize() const {return labelsize_;}

  /** Sets the label font pixel size/height.*/
  void labelsize(Fl_Fontsize a) {labelsize_ = a;}

  /**
     Each item has space for a callback function and an argument for that
     function. Due to back compatibility, the Fl_Menu_Item itself
     is not passed to the callback, instead you have to get it by calling 
     ((Fl_Menu_*)w)->mvalue() where w is the widget argument.
  */
  Fl_Callback_p callback() const {return callback_;}

  /** See Fl_Callback_p Fl_MenuItem::callback() const */
  void callback(Fl_Callback* c, void* p) {callback_=c; user_data_=p;}

  /** See Fl_Callback_p Fl_MenuItem::callback() const */
  void callback(Fl_Callback* c) {callback_=c;}

  /** See Fl_Callback_p Fl_MenuItem::callback() const */
  void callback(Fl_Callback0*c) {callback_=(Fl_Callback*)c;}

  /** See Fl_Callback_p Fl_MenuItem::callback() const */
  void callback(Fl_Callback1*c, long p=0) {callback_=(Fl_Callback*)c; user_data_=(void*)p;}

  /**
    Get or set the user_data argument that is sent to the
    callback function.
  */
  void* user_data() const {return user_data_;}
  /**
    Get or set the user_data argument that is sent to the
    callback function.
  */
  void user_data(void* v) {user_data_ = v;}
  /**
    For convenience you can also define the callback as taking a long
    argument.  This is implemented by casting this to a Fl_Callback
    and casting the long to a void* and may not be
    portable to some machines.
  */
  long argument() const {return (long)user_data_;}
  /**
    For convenience you can also define the callback as taking a long
    argument.  This is implemented by casting this to a Fl_Callback
    and casting the long to a void* and may not be
    portable to some machines.
  */
  void argument(long v) {user_data_ = (void*)v;}

  /** Gets what key combination shortcut will trigger the menu item. */
  int shortcut() const {return shortcut_;}

  /**
    Sets exactly what key combination will trigger the menu item.  The
    value is a logical 'or' of a key and a set of shift flags, for instance 
    FL_ALT+'a' or FL_ALT+FL_F+10 or just 'a'.  A value of
    zero disables the shortcut.

    The key can be any value returned by Fl::event_key(), but will usually 
    be an ASCII letter. Use a lower-case letter unless you require the shift 
    key to be held down.

    The shift flags can be any set of values accepted by Fl::event_state().
    If the bit is on that shift key must be pushed.  Meta, Alt, Ctrl, 
    and Shift must be off if they are not in the shift flags (zero for the 
    other bits indicates a "don't care" setting).
  */
  void shortcut(int s) {shortcut_ = s;}
  /**
    Returns true if either FL_SUBMENU or FL_SUBMENU_POINTER
    is on in the flags. FL_SUBMENU indicates an embedded submenu
    that goes from the next item through the next one with a NULL
    label(). FL_SUBMENU_POINTER indicates that user_data()
    is a pointer to another menu array.
  */
  int submenu() const {return flags&(FL_SUBMENU|FL_SUBMENU_POINTER);}
  /**
    Returns true if a checkbox will be drawn next to this item.  This is
    true if FL_MENU_TOGGLE or FL_MENU_RADIO is set in the flags.
  */
  int checkbox() const {return flags&FL_MENU_TOGGLE;}
  /**
    Returns true if this item is a radio item.  When a radio button is
    selected all "adjacent" radio buttons are turned off.  A set of radio
    items is delimited by an item that has radio() false, or by an
    item with FL_MENU_DIVIDER turned on.
  */
  int radio() const {return flags&FL_MENU_RADIO;}
  /** Returns the current value of the check or radio item. */
  int value() const {return flags&FL_MENU_VALUE;}
  /**
    Turns the check or radio item "on" for the menu item. Note that this
    does not turn off any adjacent radio items like set_only() does.
  */
  void set() {flags |= FL_MENU_VALUE;}

  /** Turns the check or radio item "off" for the menu item. */
  void clear() {flags &= ~FL_MENU_VALUE;}

  void setonly();

  /** Gets the visibility of an item. */
  int visible() const {return !(flags&FL_MENU_INVISIBLE);}

  /** Makes an item visible in the menu. */
  void show() {flags &= ~FL_MENU_INVISIBLE;}

  /** Hides an item in the menu. */
  void hide() {flags |= FL_MENU_INVISIBLE;}

  /** Gets whether or not the item can be picked. */
  int active() const {return !(flags&FL_MENU_INACTIVE);}

  /** Allows a menu item to be picked. */
  void activate() {flags &= ~FL_MENU_INACTIVE;}
  /**
    Prevents a menu item from being picked. Note that this will also cause
    the menu item to appear grayed-out.
  */
  void deactivate() {flags |= FL_MENU_INACTIVE;}
  /** Returns non 0 if FL_INACTIVE and FL_INVISIBLE are cleared, 0 otherwise. */
  int activevisible() const {return !(flags & (FL_MENU_INACTIVE|FL_MENU_INVISIBLE));}

  // compatibility for FLUID so it can set the image of a menu item...

  /** compatibility api for FLUID, same as a->label(this) */
  void image(Fl_Image* a) {a->label(this);}

  /** compatibility api for FLUID, same as a.label(this) */
  void image(Fl_Image& a) {a.label(this);}

  // used by menubar:
  int measure(int* h, const Fl_Menu_*) const;
  void draw(int x, int y, int w, int h, const Fl_Menu_*, int t=0) const;

  // popup menus without using an Fl_Menu_ widget:
  const Fl_Menu_Item* popup(
    int X, int Y,
    const char *title = 0,
    const Fl_Menu_Item* picked=0,
    const Fl_Menu_* = 0) const;
  const Fl_Menu_Item* pulldown(
    int X, int Y, int W, int H,
    const Fl_Menu_Item* picked = 0,
    const Fl_Menu_* = 0,
    const Fl_Menu_Item* title = 0,
    int menubar=0) const;
  const Fl_Menu_Item* test_shortcut() const;
  const Fl_Menu_Item* find_shortcut(int *ip=0) const;

  /**
    Calls the Fl_Menu_Item item's callback, and provides the 
    Fl_Widget argument (and optionally overrides the user_data()
    argument). You must first check that callback() is non-zero
    before calling this.
  */
  void do_callback(Fl_Widget* o) const {callback_(o, user_data_);}

  /**
    Calls the Fl_Menu_Item item's callback, and provides the 
    Fl_Widget argument (and optionally overrides the user_data()
    argument). You must first check that callback() is non-zero
    before calling this.
  */
  void do_callback(Fl_Widget* o,void* arg) const {callback_(o, arg);}

  /**
    Calls the Fl_Menu_Item item's callback, and provides the 
    Fl_Widget argument (and optionally overrides the user_data()
    argument).  You must first check that callback() is non-zero
    before calling this.
  */
  void do_callback(Fl_Widget* o,long arg) const {callback_(o, (void*)arg);}

  // back-compatibility, do not use:

  /** back compatibility only \deprecated. */
  int checked() const {return flags&FL_MENU_VALUE;}

  /** back compatibility only \deprecated. */
  void check() {flags |= FL_MENU_VALUE;}

  /** back compatibility only \deprecated. */
  void uncheck() {flags &= ~FL_MENU_VALUE;}

  int add(const char*, int shortcut, Fl_Callback*, void* =0, int = 0);

  /** See int add(const char*, int shortcut, Fl_Callback*, void*, int) */
  int add(const char*a, const char* b, Fl_Callback* c,
	  void* d = 0, int e = 0) {
    return add(a,fl_old_shortcut(b),c,d,e);}

  int size() const ;
};

typedef Fl_Menu_Item Fl_Menu; // back compatibility

enum {	// back-compatibility enum:
  FL_PUP_NONE	= 0,
  FL_PUP_GREY	= FL_MENU_INACTIVE,
  FL_PUP_GRAY	= FL_MENU_INACTIVE,
  FL_MENU_BOX	= FL_MENU_TOGGLE,
  FL_PUP_BOX	= FL_MENU_TOGGLE,
  FL_MENU_CHECK	= FL_MENU_VALUE,
  FL_PUP_CHECK	= FL_MENU_VALUE,
  FL_PUP_RADIO	= FL_MENU_RADIO,
  FL_PUP_INVISIBLE = FL_MENU_INVISIBLE,
  FL_PUP_SUBMENU = FL_SUBMENU_POINTER
};

#endif

//
// End of "$Id: Fl_Menu_Item.H 6902 2009-09-27 11:06:56Z matt $".
//

Added fltk-1.3/FL/Fl_Menu_Window.H.









































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//
// "$Id: Fl_Menu_Window.H 6909 2009-09-28 14:41:43Z matt $"
//
// Menu window header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2009 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems on the following page:
//
//     http://www.fltk.org/str.php
//

/* \file
   Fl_Menu_Window widget . */

#ifndef Fl_Menu_Window_H
#define Fl_Menu_Window_H

#include "Fl_Single_Window.H"

/**
  The Fl_Menu_Window widget is a window type used for menus. By
  default the window is drawn in the hardware overlay planes if they are
  available so that the menu don't force the rest of the window to
  redraw.
*/
class FL_EXPORT Fl_Menu_Window : public Fl_Single_Window {
public:
  void show();
  void erase();
  void flush();
  void hide();
  /** Tells if hardware overlay mode is set */
  unsigned int overlay() {return !(flags()&NO_OVERLAY);}
  /** Tells FLTK to use hardware overlay planes if they are available.  */
  void set_overlay() {clear_flag(NO_OVERLAY);}
  /** Tells FLTK to use normal drawing planes instead of overlay planes.
      This is usually necessary if your menu contains multi-color pixmaps. */
  void clear_overlay() {set_flag(NO_OVERLAY);}
  ~Fl_Menu_Window();
  /** Creates a new Fl_Menu_Window widget using the given size, and label string. */
  Fl_Menu_Window(int W, int H, const char *l = 0)
    : Fl_Single_Window(W,H,l) { image(0); }
  /** Creates a new Fl_Menu_Window widget using the given position, size, and label string. */
  Fl_Menu_Window(int X, int Y, int W, int H, const char *l = 0)
    : Fl_Single_Window(X,Y,W,H,l) { image(0); }
};

#endif

//
// End of "$Id: Fl_Menu_Window.H 6909 2009-09-28 14:41:43Z matt $".
//

Added fltk-1.3/FL/Fl_Multi_Browser.H.