Merge branch 'portable' into improvePerformance2

# Conflicts:
#	src/Backends/Audio/SDL2.cpp
This commit is contained in:
Gabriel Ravier 2020-04-03 00:36:44 +02:00
commit f68984bd58
1905 changed files with 218600 additions and 508117 deletions

15
.gitignore vendored
View file

@ -1,6 +1,9 @@
# Exclude obj directory (object files for Makefile build)
/obj
# Exclude the (recommended) CMake build directory
/build
# Exclude executables
/game_english/CSE2_debug.exe
/game_english/DoConfig_debug.exe
@ -47,21 +50,9 @@
/vs2003/Debug (Japanese)
/vs2003/Release (Japanese)
# Exclude Visual Studio 2017 files
/vs2017/Debug
/vs2017/Release
/vs2017/Debug (Japanese)
/vs2017/Release (Japanese)
/vs2017/x64
/vs2017/.vs
/vs2017/CSE2.vcxproj.user
####
# Portable branch
####
# Exclude converted resource files
/src/Resource
# Exclude the (recommended) CMake build directory
/build

View file

@ -34,8 +34,8 @@ addons:
- g++-9
- clang-9
- libsdl2-dev
- libglfw3-dev
- libfreetype6-dev
- libfltk1.3-dev
homebrew:
packages:
- make
@ -43,29 +43,18 @@ addons:
- gcc@9
- llvm@9
- sdl2
- glfw
- freetype
- fltk
update: true
env:
- BUILD_SYSTEM=make RENDERER=Software
- BUILD_SYSTEM=make RENDERER=SDLSurface
- BUILD_SYSTEM=make RENDERER=SDLTexture
- BUILD_SYSTEM=make RENDERER=OpenGL3
- BUILD_SYSTEM=make RENDERER=OpenGLES2
- BUILD_SYSTEM=cmake RENDERER=Software
- BUILD_SYSTEM=cmake RENDERER=SDLSurface
- BUILD_SYSTEM=cmake RENDERER=SDLTexture
- BUILD_SYSTEM=cmake RENDERER=OpenGL3
- BUILD_SYSTEM=cmake RENDERER=OpenGLES2
jobs:
exclude:
# Apple's OpenGL is in a non-standard location, so these builds don't work
- os: osx
env: BUILD_SYSTEM=make RENDERER=OpenGL3
- os: osx
env: BUILD_SYSTEM=make RENDERER=OpenGLES2
- PLATFORM=SDL2 AUDIO=SDL2 RENDERER=Software
- PLATFORM=SDL2 AUDIO=SDL2 RENDERER=SDLSurface
- PLATFORM=SDL2 AUDIO=SDL2 RENDERER=SDLTexture
- PLATFORM=SDL2 AUDIO=SDL2 RENDERER=OpenGL3
- PLATFORM=SDL2 AUDIO=SDL2 RENDERER=OpenGLES2
- PLATFORM=GLFW3 AUDIO=miniaudio RENDERER=OpenGL3
- PLATFORM=GLFW3 AUDIO=miniaudio RENDERER=OpenGLES2
before_install:
# Set URL for Discord send script
@ -78,9 +67,6 @@ before_install:
# Display Travis OS name
- echo $TRAVIS_OS_NAME
# Display build type
- echo $BUILD_SYSTEM
# The following Homebrew packages aren't linked by default, and need to be prepended to the path explicitly.
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then
export PATH="$(brew --prefix llvm)/bin:$PATH";
@ -122,25 +108,15 @@ install:
fi
before_script:
- |
if [ "$BUILD_SYSTEM" == "cmake" ]; then
# Make build directory and generate CMake build files
mkdir -p ${CMAKE_BUILD_DIR} && cd ${CMAKE_BUILD_DIR}
cmake .. -DCMAKE_BUILD_TYPE=Release -DFIX_BUGS=ON -DWARNINGS=ON -DWARNINGS_ALL=ON -DRENDERER=$RENDERER
cd ..
fi
- mkdir -p ${CMAKE_BUILD_DIR} && cd ${CMAKE_BUILD_DIR}
- cmake .. -DCMAKE_BUILD_TYPE=Release -DFIX_BUGS=ON -DBACKEND_PLATFORM=$PLATFORM -DBACKEND_AUDIO=$AUDIO -DBACKEND_RENDERER=$RENDERER -DCMAKE_C_FLAGS="-Wall -Wextra -pedantic" -DCMAKE_CXX_FLAGS="-Wall -Wextra -pedantic"
- cd ..
script:
- |
if [ "$BUILD_SYSTEM" == "cmake" ]; then
# CMake build
cd ${CMAKE_BUILD_DIR}
cmake --build . --config Release --parallel $JOBS
cd ..
else
# Make build
make -j $JOBS FIX_BUGS=1 RELEASE=1 WARNINGS=1 WARNINGS_ALL=1 RENDERER=$RENDERER
fi
- cd ${CMAKE_BUILD_DIR}
- cmake --build . --config Release --parallel $JOBS
- cd ..
after_success:
# Send success notification to Discord through DISCORD_WEBHOOK_URL

File diff suppressed because it is too large Load diff

View file

@ -1,173 +1,110 @@
cmake_minimum_required(VERSION 3.7.2)
cmake_minimum_required(VERSION 3.12)
if((${CMAKE_VERSION} VERSION_EQUAL 3.9) OR (${CMAKE_VERSION} VERSION_GREATER 3.9))
cmake_policy(SET CMP0069 NEW)
option(PKG_CONFIG_STATIC_LIBS "On platforms with pkg-config, static-link the dependencies (good for Windows builds, so you don't need to bundle DLL files)" OFF)
option(MSVC_LINK_STATIC_RUNTIME "Link the static MSVC runtime library (Visual Studio only)" OFF)
option(FORCE_LOCAL_LIBS "Compile the built-in version of GLFW3 instead of using the system-provided one" OFF)
project(DoConfig LANGUAGES C CXX)
add_executable(DoConfig WIN32
"icon.rc"
"../external/glad/include/glad/glad.h"
"../external/glad/include/KHR/khrplatform.h"
"../external/glad/src/glad.c"
"DoConfig.cpp"
"imgui/imconfig.h"
"imgui/imgui.cpp"
"imgui/imgui.h"
"imgui/imgui_demo.cpp"
"imgui/imgui_draw.cpp"
"imgui/imgui_impl_glfw.cpp"
"imgui/imgui_impl_glfw.h"
"imgui/imgui_impl_opengl3.cpp"
"imgui/imgui_impl_opengl3.h"
"imgui/imgui_internal.h"
"imgui/imgui_widgets.cpp"
"imgui/imstb_rectpack.h"
"imgui/imstb_textedit.h"
"imgui/imstb_truetype.h"
)
set_target_properties(DoConfig PROPERTIES
C_STANDARD 90
C_STANDARD_REQUIRED ON
C_EXTENSIONS OFF
CXX_STANDARD 98
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
)
target_link_libraries(DoConfig PRIVATE ${CMAKE_DL_LIBS})
target_include_directories(DoConfig PRIVATE "../external/glad/include")
target_compile_definitions(DoConfig PRIVATE IMGUI_IMPL_OPENGL_LOADER_GLAD)
if(PKG_CONFIG_STATIC_LIBS)
target_link_options(DoConfig PRIVATE "-static")
endif()
if((${CMAKE_VERSION} VERSION_EQUAL 3.11) OR (${CMAKE_VERSION} VERSION_GREATER 3.11))
cmake_policy(SET CMP0072 NEW)
endif()
option(LTO "Enable link-time optimisation" OFF)
option(NATIVE_OPTIMIZATIONS "Enable processor-specific optimisations (executable might not work on other architectures) (GCC-compatible compilers only)" OFF)
option(WARNINGS "Enable common compiler warnings (for GCC-compatible compilers and MSVC only)" OFF)
option(WARNINGS_ALL "Enable ALL compiler warnings (for Clang and MSVC only)" OFF)
option(WARNINGS_FATAL "Stop compilation on any compiler warning (for GCC-compatible compilers and MSVC only)" OFF)
option(FORCE_LOCAL_LIBS "Compile the built-in version of FLTK instead of using the system-provided one" OFF)
project(DoConfig LANGUAGES CXX)
message(STATUS "Compiler ID : ${CMAKE_CXX_COMPILER_ID}")
# Has to be placed after "project()"
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# Using Clang (this is a match so that we also get "AppleClang" which is the Apple-provided Clang
set(COMPILER_IS_CLANG true)
message(STATUS "Compiling with Clang")
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# Using GCC
set(COMPILER_IS_GCC true)
message(STATUS "Compiling with GCC")
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
# Using Intel C++
set(COMPILER_IS_ICC true)
message(STATUS "Compiling with ICC")
endif()
if(COMPILER_IS_CLANG OR COMPILER_IS_GCC OR COMPILER_IS_ICC)
set(COMPILER_IS_GCC_COMPATIBLE true)
message(STATUS "Compiling with a GCC-compatible compiler")
endif()
add_executable(DoConfig "DoConfig.cpp" "icon.rc")
if(WARNINGS)
# HACK : Replace this with CMake provided stuff when possible (when CMake makes avoiding this possible (it isn't currently))
if(MSVC)
# Force to always compile with /W4 on MSVC
# Can't do this with target_compile_options
# if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
# string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
# else()
# target_compile_options(DoConfig PRIVATE /W4)
# endif()
target_compile_options(DoConfig PRIVATE /W4)
elseif(COMPILER_IS_GCC_COMPATIBLE)
target_compile_options(DoConfig PRIVATE -Wall -Wextra -pedantic)
else()
message(WARNING "Could not activate warnings ! (Unsupported compiler)")
endif()
endif()
if(WARNINGS_ALL)
# HACK : Replace this with CMake provided stuff when possible (when CMake makes avoiding this possible (it isn't currently))
if(MSVC)
# Force to always compile with /Wall on MSVC
# Can't do this with target_compile_options
# if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
# string(REGEX REPLACE "/W[0-4]" "/Wall" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
# else()
# target_compile_options(DoConfig PRIVATE /Wall)
# endif()
target_compile_options(DoConfig PRIVATE /Wall)
elseif(COMPILER_IS_CLANG)
target_compile_options(DoConfig PRIVATE -Weverything)
else()
message(WARNING "Could not activate all warnings ! (Unsupported compiler)")
endif()
endif()
if(WARNINGS_FATAL)
# HACK : Replace this with CMake provided stuff when possible (when CMake makes avoiding this possible (it isn't currently))
if(MSVC)
target_compile_options(DoConfig PRIVATE /WX)
elseif(COMPILER_IS_GCC_COMPATIBLE)
target_compile_options(DoConfig PRIVATE -Werror)
else()
message(WARNING "Could not activate fatal warnings ! (Unsupported compiler)")
endif()
endif()
# Windows tweak
if(WIN32)
set_target_properties(DoConfig PROPERTIES WIN32_EXECUTABLE YES) # Disable the console window
endif()
# MSVC tweak
if(MSVC)
target_compile_definitions(DoConfig PRIVATE _CRT_SECURE_NO_WARNINGS) # Disable warnings that normally fire up on MSVC when using "unsafe" functions instead of using MSVC's "safe" _s functions
# Disable warnings that normally fire up on MSVC when using "unsafe" functions instead of using MSVC's "safe" _s functions
target_compile_definitions(DoConfig PRIVATE _CRT_SECURE_NO_WARNINGS)
# Use `main` instead of `WinMain`
set_target_properties(DoConfig PROPERTIES LINK_FLAGS "/ENTRY:mainCRTStartup")
# This is messy as hell, and has been replaced by CMAKE_MSVC_RUNTIME_LIBRARY,
# but that's a very recent CMake addition, so we're still doing it this way for now
if(MSVC_LINK_STATIC_RUNTIME)
# Statically-link the CRT (vcpkg static libs do this)
foreach(flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
if(${flag_var} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
endif()
endforeach()
endif()
endif()
# Make it so source files are recognized as UTF-8 by MSVC
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
# Find FLTK
################
# Dependencies #
################
if(NOT FORCE_LOCAL_LIBS)
set(FLTK_SKIP_FLUID ON) # Do not require fltk-fluid (the UI designer)
find_package(FLTK)
find_package(PkgConfig QUIET)
endif()
if(FLTK_FOUND)
message(STATUS "Using system FLTK")
target_include_directories(DoConfig PRIVATE ${FLTK_INCLUDE_DIR})
target_link_libraries(DoConfig ${FLTK_LIBRARIES})
if(NOT FORCE_LOCAL_LIBS)
find_package(glfw3)
if (PKG_CONFIG_FOUND)
pkg_check_modules(glfw3 QUIET IMPORTED_TARGET glfw3)
endif()
endif()
if(TARGET PkgConfig::glfw3)
# pkg-config
if (PKG_CONFIG_STATIC_LIBS)
message(STATUS "Using system GLFW3 (pkg-config, static)")
target_compile_options(DoConfig PRIVATE ${glfw3_STATIC_CFLAGS})
target_link_libraries(DoConfig PRIVATE ${glfw3_STATIC_LINK_LIBRARIES})
else()
message(STATUS "Using system GLFW3 (pkg-config, dynamic)")
target_compile_options(DoConfig PRIVATE ${glfw3_CFLAGS})
target_link_libraries(DoConfig PRIVATE ${glfw3_LINK_LIBRARIES})
endif()
elseif(TARGET glfw)
# CMake
message(STATUS "Using system GLFW3 (CMake)")
target_link_libraries(DoConfig PRIVATE glfw)
else()
# Compile it ourselves
message(STATUS "Using local FLTK")
# Clear this or it will cause an error during FLTK's configuration.
# FLTK only appends to it, so the leftover junk gets fed into a bunch
# of important functions. THAT was no fun to debug.
set(FLTK_LIBRARIES)
set(OPTION_BUILD_EXAMPLES OFF) # Needed to prevent a name collision
if(FORCE_LOCAL_LIBS)
set(OPTION_USE_SYSTEM_ZLIB OFF)
set(OPTION_USE_SYSTEM_LIBJPEG OFF)
set(OPTION_USE_SYSTEM_LIBPNG OFF)
endif()
add_subdirectory("fltk" EXCLUDE_FROM_ALL)
get_target_property(DIRS fltk INCLUDE_DIRECTORIES) # FLTK doesn't mark its includes as PUBLIC or INTERFACE, so we have to do this stupidity
target_include_directories(DoConfig PRIVATE ${DIRS})
target_link_libraries(DoConfig fltk)
endif()
# Enable link-time optimisation if available
if(LTO)
if((${CMAKE_VERSION} VERSION_EQUAL 3.9) OR (${CMAKE_VERSION} VERSION_GREATER 3.9))
include(CheckIPOSupported)
check_ipo_supported(RESULT result)
if(result)
set_target_properties(DoConfig PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()
endif()
endif()
# Enable -march=native if available
if(NATIVE_OPTIMIZATIONS)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE) # GCC flag
if(COMPILER_SUPPORTS_MARCH_NATIVE)
target_compile_options(DoConfig PRIVATE -march=native)
else()
CHECK_CXX_COMPILER_FLAG("-xHost" COMPILER_SUPPORTS_XHOST) # ICC (Linux) flag
CHECK_CXX_COMPILER_FLAG("/QxHost" COMPILER_SUPPORTS_QXHOST) # ICC (Windows) flag
if(COMPILER_SUPPORTS_XHOST)
target_compile_options(DoConfig PRIVATE -xHost)
elseif(COMPILER_SUPPORTS_QXHOST)
target_compile_options(DoConfig PRIVATE /QxHost)
else()
message(WARNING "Couldn't activate native optimizations ! (Unsupported compiler)")
endif()
endif()
message(STATUS "Using local GLFW3")
set(GLFW_BUILD_EXAMPLES OFF CACHE INTERNAL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE INTERNAL "" FORCE)
set(GLFW_BUILD_DOCS OFF CACHE INTERNAL "" FORCE)
set(GLFW_INSTALL OFF CACHE INTERNAL "" FORCE)
add_subdirectory("../external/glfw" "glfw" EXCLUDE_FROM_ALL)
target_link_libraries(DoConfig PRIVATE glfw)
endif()

View file

@ -1,283 +1,290 @@
/* This program is free software. It comes without any warranty, to
* the extent permitted by applicable law. You can redistribute it
* and/or modify it under the terms of the Do What The F*** You Want
* To Public License, Version 2, as published by Sam Hocevar. See
* http://sam.zoy.org/wtfpl/COPYING for more details. */
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include "FL/Fl.H"
#include "FL/Fl_Check_Button.H"
#include "FL/Fl_Choice.H"
#include "FL/Fl_Radio_Round_Button.H"
#include "FL/Fl_Window.H"
#include <FL/Enumerations.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Group.H>
#include <FL/Fl_Menu_Item.H>
#include <FL/Fl_Round_Button.H>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include "glad/glad.h"
#include <GLFW/glfw3.h>
struct data
#include "imgui/imgui.h"
#include "imgui/imgui_impl_glfw.h"
#include "imgui/imgui_impl_opengl3.h"
#define WINDOW_WIDTH 360
#define WINDOW_HEIGHT 290
struct Config
{
char magic[32];
char font[64];
unsigned char move[4];
unsigned char attack[4];
unsigned char okay[4];
unsigned char display[4];
unsigned char useJoy[4];
unsigned char buttons[8][4];
char proof[0x20];
char font_name[0x40];
int move_button_mode;
int attack_button_mode;
int ok_button_mode;
int display_mode;
bool bJoystick;
int joystick_button[8];
};
class RadioRow
{
public:
RadioRow(char offset);
int value();
void value(int input);
private:
Fl_Group *group;
Fl_Radio_Round_Button *buttons[6];
};
static const char MAGIC[32] = "DOUKUTSU20041206";
static const char FONT[64] = "Courier New";
static char config_path[FILENAME_MAX];
static data config;
static unsigned long CharsToLong(unsigned char *chars)
{
return (chars[3] << 24) | (chars[2] << 16) | (chars[1] << 8) | chars[0];
}
static void LongToChars(unsigned long long_var, unsigned char *chars)
{
chars[0] = long_var & 0xFF;
chars[1] = (long_var >> 8) & 0xFF;
chars[2] = (long_var >> 16) & 0xFF;
chars[3] = (long_var >> 24) & 0xFF;
}
RadioRow::RadioRow(char offset)
{
char *temp = new char[2];
temp[0] = '1' + offset;
temp[1] = '\0';
this->group = new Fl_Group(140 + offset * 30, 150, 30, 180);
this->group->label(temp);
this->group->align(FL_ALIGN_TOP_LEFT);
for (int i = 0; i < 6; i++)
this->buttons[i] = new Fl_Radio_Round_Button(140 + offset * 30, 150 + 30 * i, 30, 30);
this->group->end();
}
int RadioRow::value()
{
for (int i = 0; i < 6; i++)
if (this->buttons[i]->value())
return i;
return 0;
}
void RadioRow::value(int input)
{
this->buttons[input]->setonly();
}
Fl_Round_Button *movear;
Fl_Round_Button *movegt;
Fl_Round_Button *buttonxz;
Fl_Round_Button *buttonzx;
Fl_Round_Button *okayjump;
Fl_Round_Button *okayattack;
Fl_Choice *displaychoice;
Fl_Check_Button *joychoice;
Fl_Group *joystuffcontainer;
RadioRow *joyRows[8];
void quit(Fl_Widget *, void *)
{
std::exit(0);
}
void activatejoy(Fl_Widget *, void *)
{
if (joystuffcontainer->active())
joystuffcontainer->deactivate();
else
joystuffcontainer->activate();
}
void read_Config()
{
std::fstream fd;
fd.open(config_path, std::ios::in | std::ios::binary);
fd.read((char *)&config, sizeof(config));
fd.close();
// If Config.dat's magic value doesn't match, create a blank default Config.dat instead
if (memcmp(config.magic, MAGIC, sizeof(config.magic)))
{
memset(&config, 0, sizeof(config));
strcpy(config.magic, MAGIC);
strcpy(config.font, FONT);
}
CharsToLong(config.move) ? movegt->setonly() : movear->setonly();
CharsToLong(config.attack) ? buttonzx->setonly() : buttonxz->setonly();
CharsToLong(config.okay) ? okayattack->setonly() : okayjump->setonly();
displaychoice->value(CharsToLong(config.display));
joychoice->value(CharsToLong(config.useJoy));
if (!CharsToLong(config.useJoy))
joystuffcontainer->deactivate();
for (int i = 0; i < 8; i++)
{
const unsigned long button = CharsToLong(config.buttons[i]);
if (button < 6 && button > 0)
{
const unsigned int button_lookup[6] = {0, 1, 2, 4, 5, 3};
joyRows[i]->value(button_lookup[button - 1]);
}
}
}
void write_Config(Fl_Widget *, void *)
{
LongToChars(movegt->value(), config.move);
LongToChars(buttonzx->value(), config.attack);
LongToChars(okayattack->value(), config.okay);
LongToChars(displaychoice->value(), config.display);
LongToChars(joychoice->value(), config.useJoy);
for (int i = 0; i < 8; i++)
{
const unsigned int button_lookup[6] = {0, 1, 2, 5, 3, 4};
LongToChars(button_lookup[joyRows[i]->value()] + 1, config.buttons[i]);
}
std::fstream fd;
fd.open(config_path, std::ios::out | std::ios::binary);
fd.write((char *)&config, sizeof(config));
fd.close();
exit(0);
}
const char *proof = "DOUKUTSU20041206";
int main(int argc, char *argv[])
{
strcpy(config_path, argv[0]);
(void)argc;
for (size_t i = strlen(config_path);; --i)
char base_directory[0x400];
strcpy(base_directory, argv[0]);
for (size_t i = strlen(base_directory);; --i)
{
if (i == 0)
if (i == 0 || base_directory[i] == '\\' || base_directory[i] == '/')
{
strcpy(config_path, "Config.dat");
break;
}
else if (config_path[i] == '\\' || config_path[i] == '/')
{
config_path[i] = '\0';
strcat(config_path, "/Config.dat");
base_directory[i] = '\0';
break;
}
}
Fl_Window *mainw = new Fl_Window(400, 380, "DoConfig - Doukutsu Monogatari Settings");
/////////////////////
// Initialise GLFW //
/////////////////////
Fl_Group *movegroup = new Fl_Group(10, 10, 185, 50);
movegroup->box(FL_THIN_DOWN_BOX);
movear = new Fl_Radio_Round_Button(10, 10, 185, 20, "Arrows for Movement");
movear->setonly();
movegt = new Fl_Radio_Round_Button(10, 40, 185, 20, "<>? for Movement");
movegroup->end();
Fl_Group *buttongroup = new Fl_Group(10, 70, 185, 50);
buttongroup->box(FL_THIN_DOWN_BOX);
buttonxz = new Fl_Radio_Round_Button(10, 70, 185, 20, "Z=Jump; X=Attack");
buttonxz->setonly();
buttonzx = new Fl_Radio_Round_Button(10, 100, 185, 20, "X=Jump; Z=Attack");
buttongroup->end();
Fl_Group *okaygroup = new Fl_Group(205, 10, 185, 50);
okaygroup->box(FL_THIN_DOWN_BOX);
okayjump = new Fl_Radio_Round_Button(205, 10, 185, 20, "Jump=Okay");
okayjump->setonly();
okayattack = new Fl_Radio_Round_Button(205, 40, 185, 20, "Attack=Okay");
okaygroup->end();
displaychoice = new Fl_Choice(205, 70, 185, 20);
Fl_Menu_Item screens[] = {
{"Fullscreen 16-bit"},
{"Windowed 320x240"},
{"Windowed 640x480"},
{"Fullscreen 24-bit"},
{"Fullscreen 32-bit"},
{0}};
displaychoice->menu(screens);
joychoice = new Fl_Check_Button(205, 100, 185, 20, "Use Joypad");
joychoice->callback(&activatejoy);
joystuffcontainer = new Fl_Group(10, 130, 380, 200);
joystuffcontainer->box(FL_THIN_DOWN_BOX);
for (int i = 0; i < 8; i++)
if (glfwInit())
{
joyRows[i] = new RadioRow(i);
const char *glsl_version = "#version 150 core";
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
GLFWwindow *window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "DoConfig - Doukutsu Monogatari Settings", NULL, NULL);
if (window != NULL)
{
glfwMakeContextCurrent(window);
glfwSwapInterval(1);
if (gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
// Check if the platform supports OpenGL 3.2
if (GLAD_GL_VERSION_3_2)
{
///////////////////////////
// Initialise Dear ImGui //
///////////////////////////
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGuiIO &io = ImGui::GetIO();
io.IniFilename = NULL; // Disable `imgui.ini`
ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL3_Init(glsl_version);
/////////////////////
// Load Config.dat //
/////////////////////
Config configuration;
char config_path[0x400];
sprintf(config_path, "%s/Config.dat", base_directory);
FILE *file = fopen(config_path, "rb");
if (file != NULL)
{
// Read from file
fread(configuration.proof, 1, sizeof(configuration.proof), file);
fread(configuration.font_name, 1, sizeof(configuration.font_name), file);
configuration.move_button_mode = fgetc(file);
fseek(file, 3, SEEK_CUR);
configuration.attack_button_mode = fgetc(file);
fseek(file, 3, SEEK_CUR);
configuration.ok_button_mode = fgetc(file);
fseek(file, 3, SEEK_CUR);
configuration.display_mode = fgetc(file);
fseek(file, 3, SEEK_CUR);
configuration.bJoystick = fgetc(file);
for (unsigned int i = 0; i < 8; ++i)
{
const int decode_table[6] = {0, 1, 2, 4, 5, 3};
fseek(file, 3, SEEK_CUR);
configuration.joystick_button[i] = decode_table[fgetc(file) - 1];
}
// There's no Label class alright? I'll switch it as soon as one is introduced.
Fl_Group *labeljump = new Fl_Group(10, 150, 10, 20);
labeljump->label("Jump:");
labeljump->align(FL_ALIGN_RIGHT);
labeljump->end();
fclose(file);
}
Fl_Group *labelattack = new Fl_Group(10, 180, 10, 20);
labelattack->label("Attack:");
labelattack->align(FL_ALIGN_RIGHT);
labelattack->end();
if (file == NULL || memcmp(configuration.proof, proof, strlen(proof)))
{
// Reset to defaults
memset(&configuration, 0, sizeof(configuration));
strcpy(configuration.proof, proof);
strcpy(configuration.font_name, "Courier New");
Fl_Group *labelweaponup = new Fl_Group(10, 210, 10, 20);
labelweaponup->label("Weapon+:");
labelweaponup->align(FL_ALIGN_RIGHT);
labelweaponup->end();
for (unsigned int i = 0; i < 8; ++i)
configuration.joystick_button[i] = i % 6;
}
Fl_Group *labelweapondown = new Fl_Group(10, 240, 10, 20);
labelweapondown->label("Weapon-:");
labelweapondown->align(FL_ALIGN_RIGHT);
labelweapondown->end();
//////////////
// Mainloop //
//////////////
Fl_Group *labelitem = new Fl_Group(10, 270, 10, 20);
labelitem->label("Items:");
labelitem->align(FL_ALIGN_RIGHT);
labelitem->end();
while (!glfwWindowShouldClose(window))
{
glfwPollEvents();
Fl_Group *labelmap = new Fl_Group(10, 300, 10, 20);
labelmap->label("Map:");
labelmap->align(FL_ALIGN_RIGHT);
labelmap->end();
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
joystuffcontainer->end();
ImGui::SetNextWindowPos(ImVec2(0, 0));
ImGui::SetNextWindowSize(ImVec2(WINDOW_WIDTH, WINDOW_HEIGHT));
Fl_Button *okaybutton = new Fl_Button(10, 340, 185, 30, "Okay");
okaybutton->callback(&write_Config);
ImGui::Begin("Main window", NULL, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBackground);
Fl_Button *cancelbutton = new Fl_Button(205, 340, 185, 30, "Cancel");
cancelbutton->callback(&quit);
if (ImGui::BeginTable("Block1", 2, ImGuiTableFlags_Borders))
{
ImGui::TableNextRow();
mainw->end();
mainw->show(argc, argv);
ImGui::TableSetColumnIndex(0);
ImGui::RadioButton("Arrows for Movement", &configuration.move_button_mode, 0);
ImGui::RadioButton("<>? for Movement", &configuration.move_button_mode, 1);
read_Config();
Fl::option(Fl::OPTION_VISIBLE_FOCUS, false);
return Fl::run();
ImGui::TableSetColumnIndex(1);
ImGui::RadioButton("Jump=Okay", &configuration.ok_button_mode, 0);
ImGui::RadioButton("Attack=Okay", &configuration.ok_button_mode, 1);
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0);
ImGui::RadioButton("Z=Jump; X=Attack", &configuration.attack_button_mode, 0);
ImGui::RadioButton("X=Jump; Z=Attack", &configuration.attack_button_mode, 1);
ImGui::TableSetColumnIndex(1);
ImGui::SetNextItemWidth(-1.0f);
const char *items[] = {"Fullscreen 16-bit", "Windowed 320x240", "Windowed 640x480", "Fullscreen 24-bit", "Fullscreen 32-bit"};
ImGui::Combo("", &configuration.display_mode, items, IM_ARRAYSIZE(items));
ImGui::Checkbox("Use Joypad", &configuration.bJoystick);
ImGui::EndTable();
}
// Joypad binding
if (ImGui::BeginTable("Joypad binding", 9))
{
ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, 60.0f);
for (int y = 0; y < 7; ++y)
{
ImGui::TableNextRow();
if (y == 0)
{
for (int x = 1; x < 9; ++x)
{
ImGui::TableSetColumnIndex(x);
ImGui::Text(" %d", x);
}
}
else
{
for (int x = 0; x < 9; ++x)
{
ImGui::TableSetColumnIndex(x);
if (x == 0)
{
const char *inputs[6] = {"Jump:", "Attack:", "Weapon+:", "Weapon-:", "Items:", "Map:"};
ImGui::Text("%s", inputs[y - 1]);
}
else
{
static char name_buffer[5] = {'#', '#', '0', '0', '\0'};
name_buffer[2] = '0' + x;
name_buffer[3] = '0' + y;
ImGui::RadioButton(name_buffer, &configuration.joystick_button[x - 1], y - 1);
}
}
}
}
ImGui::EndTable();
if (ImGui::Button("Okay", ImVec2(ImGui::GetContentRegionAvail().x / 2, 0.0f)))
{
glfwSetWindowShouldClose(window, 1);
// Save to file
FILE *file = fopen(config_path, "wb");
if (file != NULL)
{
fwrite(configuration.proof, 1, sizeof(configuration.proof), file);
fwrite(configuration.font_name, 1, sizeof(configuration.font_name), file);
fputc(configuration.move_button_mode, file);
fputc(0, file);
fputc(0, file);
fputc(0, file);
fputc(configuration.attack_button_mode, file);
fputc(0, file);
fputc(0, file);
fputc(0, file);
fputc(configuration.ok_button_mode, file);
fputc(0, file);
fputc(0, file);
fputc(0, file);
fputc(configuration.display_mode, file);
fputc(0, file);
fputc(0, file);
fputc(0, file);
fputc(configuration.bJoystick, file);
fputc(0, file);
fputc(0, file);
fputc(0, file);
for (unsigned int i = 0; i < 8; ++i)
{
const int encode_table[6] = {0, 1, 2, 5, 3, 4};
fputc(encode_table[configuration.joystick_button[i]] + 1, file);
fputc(0, file);
fputc(0, file);
fputc(0, file);
}
fclose(file);
}
}
ImGui::SameLine();
if (ImGui::Button("Cancel", ImVec2(ImGui::GetContentRegionAvail().x, 0.0f)))
glfwSetWindowShouldClose(window, 1);
}
ImGui::End();
ImGui::Render();
glClear(GL_COLOR_BUFFER_BIT);
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
glfwSwapBuffers(window);
}
}
}
}
ImGui_ImplOpenGL3_Shutdown();
ImGui_ImplGlfw_Shutdown();
ImGui::DestroyContext();
glfwDestroyWindow(window);
glfwTerminate();
}
return 0;
}

View file

@ -1,43 +0,0 @@
The initial FLTK 1.3.0 is based on the final 1.1.10.
It adds internationalization, UTF-8 (Unicode), printing support,
Doxygen based documentation, and several new widgets including
Fl_Native_File_Chooser, Fl_Table, and Fl_Tree.
FLTK 1.3.5 and previous versions contain many improvements and bug fixes.
Please see CHANGES for a list of changes in FLTK 1.3.0 to 1.3.5.
Even though FLTK 1.3.5 does not fix all STRs, we decided to release
FLTK 1.3.5 as it contains many new features, bug fixes, and adaptations
to new compiler releases and OS versions (e.g. macOS 10.14 "Mojave"
and better configure support for some Linux platforms).
Open bugs and feature requests can be viewed (offline) in KNOWN_BUGS.html
with your browser. Links in this file direct you to the current state
(online) of all listed bugs and feature requests.
Note: This file is a snapshot of https://www.fltk.org/roadmap.php
as of this release (Feb. 2019). Please take into account that some
bugs and/or feature requests in this list might have been fixed without
notice.
Bugs and feature requests for FLTK 1.4.x may also apply to FLTK 1.3.5.
FLTK 1.3.5 is expected to be the last release in the 1.3.x series.
All bug reports for 1.3.x will be fixed in FLTK 1.4.x if possible.
--------------------------------------------------------------------------------
Note to Git users: This branch (branch-1.3) is end of life since the
release of FLTK 1.3.4. Only very serious bug fixes will be available
if FLTK 1.4.0 is not yet released or not (yet) stable enough.
This release (1.3.5) is a bug fix and maintenance release without new
FLTK features (except macOS Mojave support).
The current development branch is 'master' -- please checkout a new,
clean working copy if you want to get FLTK 1.4 (master).
--------------------------------------------------------------------------------

View file

@ -1,761 +0,0 @@
CHANGES IN FLTK 1.3.5 RELEASED: Mar 03 2019
Bug fixes and other improvements
- Updated CHANGES for release, removed one wrong entry
CHANGES IN FLTK 1.3.5rc2 RELEASED: Feb 17 2019
Bug fixes and other improvements
- Fix Xcode FLTK project for use under macOS 10.14
CHANGES IN FLTK 1.3.5rc1 RELEASED: Feb 11 2019
New features and enhancements (highlights)
- Add support for macOS 10.13 "High Sierra" and 10.14 "Mojave".
- Add FL/platform.H for compatibility with FLTK 1.4 and higher.
- Improve OpenGL(3+) support.
- Improve Cairo support and (CMake) Cairo detection.
Bug fixes and other improvements
- Fix for STR 3473 (and its duplicate STR 3507) to restore configure-based
builds on recent Linux/Unix distributions where the freetype-config
command has been replaced by pkg-config.
- Fix Fl_Tree::insert() with pos out ouf range (issue #18).
- Fix Fl_GIF_Image Color Table handling (STR 3491).
- Make sure not to access Fl_Menu_ widgets if the widget gets
deleted while the menu (pulldown) is open (STR 3503).
- Fix CMake build (fluid) on case sensitive macOS file systems.
- Windows/OpenGL: improve pixel format detection (STR 3119).
- Add support for macOS 10.14 "Mojave": all drawing to windows is done
through "layer-backed views" when the app is linked to SDK 10.14.
- MacOS platform: fix regression in macOS 10.13 where an unbundled app
had its system menu bar unresponsive.
- MacOS 10.10 platform: Fl_Window::fullscreen() and fullscreen_off()
no longer call Fl_Window::hide() + Fl_Window::show().
The new procedure essentially resizes the window, as done on
the X11+EWMH and Windows platforms. This improves in particular
the possibility to turn an Fl_Gl_Window fullscreen on and off.
- MacOS platform: Support \r\n as end of line used by recent
MS Office apps in clipboard.
- Fix Fl_Text_Editor overstrike mode (STR 3463).
- More consistent and optimized "gleam" scheme box drawing.
- Fix a MinGW build error with new MinGW versions as of Feb 2018
(undefined S_OK and __FD_ISSET), see STR 3454.
- Windows/CMake: Add missing definition of WIN32 for Windows builds.
This seems to be necessary for VS2017 and other compilers that
don't #define WIN32, but FLTK relies on this preprocessor macro.
Autoconf/configure and bundled IDE files #define WIN32 as well.
- Fix illegal memory access after free when closing fluid (valgrind
reports "Invalid read of size 4"), see also STR 3427.
- Fix crash when closing fluid with Fl_Table (STR 3427).
- Fix ignored buffer pre-allocation (requestedSize) in Fl_Text_Buffer.
See fltk.general "Fl_Text_Buffer constructor bug" on Dec 5, 2016.
- Fix Fl_Browser background and text color parsing (STR 3376).
- Fix Windows CreateDC/DeleteDC mismatch (STR 3373).
- Update bundled configure scripts config.guess and config.sub.
- Fix configure --enable-cairo --enable-cairoext,
see report in fltk.general:
https://groups.google.com/forum/#!topic/fltkgeneral/x80qQ6wt0s4
- Fix macOS timer implementation (STR 3387).
- Fix drop-to-FLTK-widget under MSWindows when the desktop is
rescaled (STR 3390).
- Add support for macOS 10.13 "High Sierra". Subwindows don't
move correctly under 10.13 without this fix.
CHANGES IN FLTK 1.3.4-1 RELEASED: Nov 15 2016
Bug fixes and other improvements
- Fix Windows IDE solutions VisualC2008 and VisualC2010 to
build properly if the FLTK source directory is located
in a path that contains spaces.
Note: this is a source tar file update that is only necessary
if you build one of the above mentioned Visual Studio IDE
solutions in a path with spaces. Nothing else changed, no
documentation updates.
CHANGES IN FLTK 1.3.4 RELEASED: Nov 11 2016
Bug fixes and other improvements
- Fix test/native-filechooser help display artifact (STR #3349).
- MacOS: fix a crash when closing a fullscreen window.
- Accept empty Fl_Pixmap in Fl_RGB_Image c'tor (STR #3348).
- MacOS: fix drawing error when a window containing a hidden subwindow
is changed to fullscreen (error visible with the tabs test program).
- MacOS: fix possible crash when enabling fullscreen in test/scroll.
- Add a snapshot of known STR's and RFE's (KNOWN_BUGS.html).
CHANGES IN FLTK 1.3.4rc3 RELEASED: Oct 31 2016
Bug fixes and other improvements
- Fix string truncation in fluid (STR #2722 continued).
- MacOS: fix a small problem where the Command-Quit menu hotkey
may not work if Fl_Native_File_Chooser is used before any
window is shown.
CHANGES IN FLTK 1.3.4rc2 RELEASED: Oct 24 2016
Bug fixes and other improvements
- Make sure the "File Systems" menu item of Fl_File_Chooser
lists "/" as the first mounted file system (Linux/Unix platform).
- Added line numbers to fluid Edit -> Show Source Code viewer.
- Improved fluid's template handling (STR #3335).
CHANGES IN FLTK 1.3.4rc1 RELEASED: Oct 17 2016
New features and extensions
- Added support for Mac OS 10.11 "El Capitan" and 10.12 "Sierra".
- Added full support of true subwindows to the Mac OS X platform.
Window nesting to any depth is possible. An Fl_Gl_Window window or
subwindow can contain Fl_Window's as subwindows.
- Fluid now supports external editors (STR #3213)
See: Edit -> GUI Settings -> Use external editor
- Added method Fl_Widget::is_label_copied().
- Added methods Fl_Copy_Surface::w(), Fl_Copy_Surface::h(),
and Fl_Copy_Surface::draw_decorated_window().
- Added method Fl_Image_Surface::draw_decorated_window().
- Added method Fl_Shared_Image *Fl_Image_Surface::highres_image()
to draw into a high-resolution bitmap image (Mac OS X only).
- Added support for OpenGL version 3 and later.
- Added method Fl_Mac_App_Menu::custom_application_menu_items()
allowing customization of the application menu (Mac OS X only).
- Added 'fluid -u' command-line switch to upgrade fluid files in
batch mode. This option opens a fluid ('.fl') file and saves it
overwriting the old file with the current syntax and library version
number. Use with care (input file is overwritten unconditionally).
- Added FL_ZOOM_GESTURE gesture for OS X (only). Needs implementation
on other platforms.
- Added FL_ABI_VERSION, FL_API_VERSION, Fl::abi_version(), and
Fl::api_version(). Constants can be used to determine the compiled
FLTK version. Functions can be used to find the linked library version.
- Added Fl::abi_check() method to test if the runtime (linked)
ABI version is correct.
- Added Fl_Image::fail() to test if an image was loaded successfully
to allow for easier error detection when loading images (STR #2873).
- Added line numbers to fluid's source code viewer for New -> Code
New configuration options (ABI version)
- FLTK's ABI version can now be configured with 'configure', CMake, or
by editing a supplied file when using the bundled IDE projects.
See documentation in README.abi-version.txt.
1.3.4 ABI FEATURES
- Added deactivated user icon to Fl_Tree.
- Added Fl_Shared_Image::scale(width, height) which gives a shared
image its own drawing size, independently of the size of the
underlying image. This improves image drawing on high resolution
surfaces such as Laser printers, PDF files, and Apple retina displays.
Other improvements
- Configure now correctly sets HAVE_* variables only if both the
library and the header files were found. The configuration process
is aborted if Xft was requested explicitly with --enable-xft and
Xft was not found. The configuration summary now shows _found_
options as opposed to requested options.
- Improved drawing of rounded box (STR #2943).
- Full support of Apple 'retina' displays for which one drawing unit
corresponds to two pixels.
- The Mac OS X platform no longer uses the deprecated AGL
(Apple GL library) to draw OpenGL data. Instead, it uses standard
Cocoa APIs. This allows FLTK to support drawing GL scenes at high
resolution when an Fl_Gl_Window is mapped to a 'retina' display.
- Added Fl_Gl_Window::pixel_w(), Fl_Gl_Window::pixel_h(), and
Fl_Gl_Window::pixels_per_unit() useful for high resolution OpenGL windows.
- fl_read_image() now captures all pixels within the rectangle
described by its arguments, whether they belong to a GL scene
or not (STR #3142). It also captures subwindows of GL windows.
- Fl::delete_widget() now hides the widget or window immediately
(i.e. when called) - only destruction is delayed as before.
- FLTK header files don't expose X11 definitions in user code any more
unless requested by including FL/x.H explicitly or implicitly.
- The PostScript code output when printing images under Linux/Unix
is now much smaller by using lossless compression techniques.
- The Linux/Unix printer dialog now uses BSD-style printing commands
(lpr/lpq) when SystemV-style commands (lp/lpstat) are not available.
- Drawing alpha-blended images under X11 is now accelerated with
Xrender.
- The font used for the FL_COURIER font family was changed on the Mac OS X
platform from 'Courier New' to 'Courier' because it was too thin.
- Text drawing on the Mac platform supports Unicode 'variation selectors'
in the range [0xFE00-0xFE0F].
- Added a Mac OS implementation of Fl_Window::wait_for_expose() that
became necessary with Mac OS 10.10 "Yosemite".
- Added the libfltk target to the Xcode project producing a static
version of the FLTK library (Mac OS X).
- Restored the possibility to call Fl::set_font() before main() starts.
- Allow using the --enable-x11 configure option on the Mac OS platform
which produces an X11 version of the FLTK library (don't use unless
you know what you're doing).
- FLTK code and fluid-generated code can be used in static initializers.
- Added light gray separator line to fluid's widget browser (STR #2997).
- Improved tooltip behavior for huge tooltips: remove flicker, support
key/mouse dismiss (STR #2650).
- Modifier key names displayed in shortcut labels can now be localized.
See documentation of fl_shortcut_label(). You can set modifier key
names for Ctrl, Alt, Shift, and Meta by assigning global string
pointers to your translated modifier key names.
- Many documentation improvements and fixes.
- Fixed many compiler warnings (STR #2988).
- Fluid now generates code with less compiler warnings (STR #2813).
- Many CMake improvements and fixes. Note: CMake is mostly operating
now, but not yet recommended for production use. Please test and
report issues.
- Updated bundled zlib from 1.2.5 to 1.2.8.
- Updated bundled libjpeg from jpeg-8c to jpeg-9a.
Bug fixes
- Fix potential crash when using keyboard navigation on Fl_Tabs
widget without children (STR #3333).
- Fix potential crash if Fl_Window::icon(NULL) was called to clear
(reset) a window icon. This is now legal and documented behavior.
The same applies to Fl_Window::default_icon().
- Allow widget callback to be NULL, i.e. no callback (STR #2835).
- Fixed Fl_Help_View buffer overflow (STR #3275).
- Fl_Browser now correctly adjusts its scrollbars when the default
text size is changed with textsize(int) (STR #3057).
- Fixed Fl_Text_Display/Fl_Text_Editor slow scrolling, line number
display, wrap mode "hiding" text behind scrollbars, and more
scrollbar handling (alignment) (STR #3272).
- Fixed valgrind warning (uninitialized variable) in Fl_Window.
Visible only with FLTK_ABI_VERSION >= 10303, since FLTK 1.3.3.
- Fixed Windows drag'n'drop not showing insert position if the drop
target is inside the same window or process (STR #3209).
- Fixed undefined reference building shared cairo library (STR #3276).
- Fixed Fl_Browser if text argument to some methods is NULL (STR #3269).
- Fixed missing image release in fluid (STR #2840).
- Fixed out-of-bounds memory access in fluid (STR #3263).
- Fixed trailing white space in fluid .fl files (STR #3239).
- Several box types were not drawn correctly when deactivated.
The background color for deactivated widgets is now correct:
fl_inactive(color()) (STR #2907).
- Fix inconsistent interpretation of ld() in image handling
(STR #3308). This is a minor issue since ld() is usually 0 or
w()*d(). Documentation has been fixed, and ld() handling is now
consistent in Fl_(RGB_)Image and fl_draw_image() and friends. See
documentation of Fl_Image and Fl_RGB_Image for more information.
- Fixed Fl_Pixmap (background) drawing to respect the clip region
(STR #3206).
- Fixed reading .pbm image files: 1 is now interpreted as black,
and images whose width are a multiple of 8 are correctly read.
Note: if you relied on the faulty behavior you may need to fix
your image files.
- Restored window background drawing, particularly the 'plastic'
scheme's background (STR #3059). This was a regression since
FLTK 1.3.0.
- Prevent sending (FL_SHORTCUT) events to inactive widgets (STR #3216).
- Fixed button label clipping (STR #3237).
- Fixed Fl_Menu_::item_pathname() handling of descending submenu
pointers (STR #3177).
- Fl_Text_Display: style buffer colors are no longer manipulated by
fl_contrast() for normal text drawing (fltk.coredev thread started
04/08/15, Subject: "RFC: Fl_Text_Display style buffer color weirdness")
- Fl_Tree::deactivate() now affects draw color of items (must have
ABI 1.3.3 or higher enabled). For icons to draw deactivated,
enable ABI 1.3.4. (test/tree has a 'deactivate tree' button)
- Fl_Tree::find_item() did not find items if the pathname contained
identical strings (STR #3234).
- Fixed possible bad border effect when a set of radio menu items
is located first in its menu (STR #3176): Fl_Menu_Item::set_only()
is deprecated and replaced by Fl_Menu_::set_only(Fl_Menu_item*).
- Restore the correct state of mouse buttons and keyboard modifier keys
after closing a file or printer dialog (STR #3221).
- Fix for deactivate colors issue with Fl_Text_Display/Editor (STR #3219).
- Fixed issue with MSWindows platform where the program kept running
after closing all its windows (STR #3165).
- Fix potential buffer overflow (MSWindows: BEX64 error) and problem with
MSWindows environment variables "HOME"(MinGW) vs. "UserProfile"(DOS)
- Fix issue with MSWindows platform where a window would decrease
in size after each close/open (STR #3167).
- Fix undefined reference XGetUtf8FontAndGlyph (STR #3191).
- Fix potential keyboard hangup (STR #3192).
- Fix for: .xbm images were not previewed (STR #3131).
- Fixed crash on Mac platform when resizing a not yet shown() Fl_Gl_Window.
- Fixed potential Windows GDI leak (STR #3254).
- Fixed Linux/Unix potential program hang when dialog pops up while
a menu is open (STR #3179).
- Fixed a crash when a Unix/Linux program calls take_focus() before any
window has been show()n.
- Fixed an error on the Mac platform when drawing to an Fl_Image_Surface
object without using the Fl_Image_Surface::draw() method.
- Fixed STR #3268 where a fullscreen window could become relocated
behind the menu bar and dock (Mac OS only).
- Fixed STR #3207: ^C not working when numlock or capslock is on.
- Fixed code editor in Fluid (STR #3184).
- Fixed a potential hangup of the Fl::awake() queue under Windows if
a window is resized or moved while the Fl::awake() message is sent
(STR #3143).
- Fixed a regression: restore the possibility to call
fl_draw_image(buf,X,Y,W,H,D,L) with negative D and/or L arguments.
- Fixed overflow in Fl_Valuator::precision(int) to 0...9 (STR #3280).
CHANGES IN FLTK 1.3.3 RELEASED: Nov 03 2014
New features and extensions
- New class Fl_Copy_Surface allows copying graphical data to the
clipboard in a cross-platform way (STR #3058).
- Support for pasting graphical data from the clipboard to a widget.
- New class Fl_Image_Surface allows drawing into an Fl_Image object.
- Methods Fl::add_clipboard_notify() and Fl::remove_clipboard_notify()
to get notifications whenever the clipboard changes (STR #2636).
- New method Fl_Window::wait_for_expose() (STR #3124, STR #3129).
- New bilinear scaling method for RGB images (STR #2869, STR #3062).
- New method Fl_Widget::top_window() (STR #2948).
- New method Fl_Widget::top_window_offset() (part of STR #2944).
- New Fl_Tree_Item methods label_x(), label_y(), label_w(), label_h().
- New methods Fl::enable_im() and Fl::disable_im() to enable/disable
system Input Methods (IM).
- New methods Fl::add_system_handler() and Fl::remove_system_handler()
to intercept low level system events.
- New FLTK scheme "gleam" (STR #2672).
- New method Fl::is_scheme() to compare the current scheme name.
- New method to set custom icons for windows (STR #2816),
see Fl_Window::icon() for more info.
- New method to set any custom cursor, based on a Fl_RGB_Image object.
Also changed fallback cursors to use this method, so that fallback
cursors are handled in a platform independent manner (STR #2660).
- New ability to convert Fl_Pixmap to Fl_RGB_Image (STR #2659).
- Support for full screen windows over multiple monitors.
- New optional line numbers in Fl_Text_Display and options to control
line numbers and word wrapping (on/off) in example test/editor.cxx.
- On Linux/Unix, class Fl_Native_File_Chooser uses file dialogs from
the Gnome environment (provided by the libgtk dynamic library) if
available, and falls back to Fl_File_Chooser if not (STR #3088).
Use option Fl::OPTION_FNFC_USES_GTK to enable/disable this feature.
- New support for the Mac OS text input system that deals with character
composition and input of languages with large character sets (e.g.
Chinese and Japanese). This implementation has been reported to work
well for Chinese. Superficial testing suggests it's also operational
for Japanese. In-depth testing remains needed though.
Other improvements
- Many CMake improvements (e.g. STR #2962, 2977, 2994, 3045, 3055).
- Some autoconf, configure improvements.
- Removed 1024 bytes constraint in labels and browser lines (STR #2990).
- Mac OS version of Fl_Native_File_Chooser: when using filters in a
save file dialog, the output file extension gets changed when the
user modifies the output file type.
- Many Mac OS X improvements related to Fl_Sys_Menu_Bar.
- Improved Mac OS X keyboard handling of special keys or combinations.
- General Mac OS X improvements, incl. high resolution (Retina)
displays, and support up to Mac OS X 10.10.
- Documentation improvements and clarifications.
- Printing support improvements, including GL windows.
- Many improvements related to Fl_Tree (some of them only as ABI
breaking features, see below).
- Some static data has been made 'const' to improve memory usage
with shared libraries.
- Don't grab navkeys with modifiers (CTRL, ALT), as the application
may want them (STR #3104).
- Check compiler support of -fvisibility, -fvisibility-inlines-hidden,
and use it, if available. Reduces shared library size.
- Drag'n'drop behaves better now: if text is dropped in the widget it
comes from, then it works like cut and paste.
- Other improvements of DND handling when dragging text from other
applications, e.g. Firefox and Thunderbird.
- Windows message WM_QUIT is processed like SIGTERM, i.e. as a
request to terminate the program.
- Fluid no longer closes the code window when hitting ESC (STR #2997).
- Improved Fl_Widget::when() handling in Fl_Tabs (STR #2939).
- Improved support for more recent compilers (clang and gcc) that
issue more warnings, and fixed some 32-/64-bit compilation issues.
- Added method Fl_Window::clear_modal_states() to make it possible
to remove the modal or non-modal state from a window (STR #3123).
Bug fixes
- Fixed word selection dragging in text input (STR #3014).
- Fixed border padding for special cases (STR #3061, Windows only).
- Fixed crash if Fl_Window::flush() called while window not shown()
(STR #3028).
- Fixed segfault in fl_set_fonts_xft.cxx when loading fonts not named
as expected (STR #2976).
- Fixed a memory leak in font loading/allocation (STR #3069).
- Fixed minor memory leaks in handling/freeing of X11 objects.
- Fixed OS X fl_read_image() and Fl_Paged_Device::print_window_part()
when using a Retina display.
- Fixed MinGW build if configure didn't find strcasecmp() (STR #2994).
- Fixed access of protected member under Linux/Unix (STR #2903).
- Fixed various Mac specific OpenGL issues (STR #2944)
- Fixed PostScript printing with non-english locale (STR #3130).
- Fixed a regression in Fl_File_Chooser since FLTK 1.1.8: the
Enter key now selects the file again.
- Fixed a bug in Fl_Native_File_Chooser (Windows) for some file name
input filters (STR #3101).
- Fixed out-of-bounds memory access in Fl_Text_Display (STR #2730).
1.3.3 ABI FEATURES
To enable the following ABI features, put:
#define FLTK_ABI_VERSION 10303
..at the top of your FL/Enumerations.H and rebuild FLTK and your app.
- Added Fl_Window::shape(const Fl_Image*) to create arbitrarily-shaped
windows
- Made Fl_Help_View::handle() public and Fl_Help_View::draw() protected
to enable inheritance and for consistency (STR #2834).
Note: both methods were private.
- Made Fl_Scroll::recalc_scrollbars() protected so that it can be used
in derived widgets to calculate scrollbar visibility and positions.
- Added Fl_Table::tab_cell_nav() for controlling Tab key navigation of table
- Added Fl_Tree::get_selected_items(), returns the selected items as an array
- Added Fl_Tree::item_draw_callback(), letting one define a custom draw
function for Fl_Tree_Item's.
- Fl_Tree: various related changes:
o Added horizontal scrollbar
o Separated draw() and tree size calculation
o Added new public methods:
> resize() -- uses optimized dim calc, avoids tree recalc
> next_item() -- added parameters: direction, visibility
> extend_selection() -- added parameters, improved algorithm
> calc_dimensions() -- calc tix/y/w/h, tox/y/w/h and scrollbars
> calc_tree() -- calc tree_w/tree_h
> recalc_tree() -- schedules calc_tree()
> first_visible_item(), last_visible_item(), next_visible_item()
> first_selected_item(), last_selected_item(), next_selected_item()
o Added protected variables:
> _tix/y/w/h -- tree widget 'inner' dimension
> _tox/y/w/h -- tree widget 'outer' dimension
> _tree_w,_tree_h -- entire tree hierarchy width/height
o Deprecated:
> item_clicked() -- use callback_item() instead
> first_visible() -- use first_visible_item() instead
> last_visible() -- use last_visible_item() instead
- Fl_Tree_Item: various related changes:
o Added Fl_Tree ptr: needed for auto-recalc when item modified directly
o Added new methods tree(), recalc_tree()
o Added new ctor that accepts Fl_Tree*
o draw() parameters changed to include tree size calculations
o Deprecated:
> ctor using Fl_Tree_Prefs parameter (Fl_Tree* version better,
and must be used for 1.3.3 ABI features to work correctly)
> next_displayed() -- use next_visible() instead
> prev_displayed() -- use prev_visible() instead
- test/tree: added tests for newly added features
CHANGES IN FLTK 1.3.2 RELEASED: Dec 12 2012
- Removed unnecessary drawing calls (STR #2898)
- Fixed regression in FLTK 1.3.1 for unbundled Mac OS FLTK applications
that did not appear in dock nor have a menu bar (STR #2890).
- Fl_Table::clear() now calls table->clear() for consistency. (STR #2889)
- Fixed Fl_Scroll widget that fails under Mac OS X 10.8 and Retina
display (STR #2887).
- Prevents scrollbars from drawing when widget is sized too small
to be visible (STR #2886).
- Documented how to make a Mac OS X FLTK application launchable
by dropping files on its icon.
- Fixed a Mac-specific issue that appeared with OS 10.8 (Mountain Lion):
long delay before opening when the application is started by dragging
a file on the application icon.
- Fixed use of PNG image from in-memory data (STR #2884).
- Added static Fl_RGB_Image::max_size(size_t) to limit the maximum
memory size allowed to RGB images (STR #2881).
CHANGES IN FLTK 1.3.1 RELEASED: Nov 06 2012
- Fixed utf_strncasecmp and utf_strcasecmp
- Moved all inline constructors into source file to avoid bad DLLs
- Fixed Fl_Widget::copy_label() and Fl_Window::copy_label() when
called with the old label() (STR #2836)
- Fixed Fl_Input_::maximum_size() documentation and replace() method
to honor maximum_size() as number of allowed characters (STR #2747).
- Fixed a potential crash if Fl_Double_Window::flush() was called
before show()
- Fixed regression (in FLTK 1.3.0) that could clear a radio
button by using the keyboard (space or shortcut) (STR #2748)
- Fixed fl_pie() drawing too small on X11 (STR #2703)
- Fixed Fl_Menu issue with unusual menu flags (STR #2680)
- Fixed Windows DLL import of fl_xid() (STR #2670)
- Added Fl::screen_work_area() functions that compute the work area
of a screen. These functions improve the positioning of menus.
Changed Fl::x(), Fl::y(), Fl::w(), Fl::h() functions
to return the origin and size of the work area of the main screen
(STR #2695 + 2697)
- Created the FL_SCREEN_CONFIGURATION_CHANGED event that is triggered
when a screen is added, removed, moved or when resolution is changed
(STR #2600)
- Improved the description of page size and orientation by
Fl_PostScript_File_Device.
- Added support for horizontal wheel movement under X11 and Windows
Vista and above (STR #2644).
1.3.1 ABI FEATURES
(To enable the following ABI features, put: #define FLTK_ABI_VERSION 10301
at the top of your FL/Enumerations.H and rebuild FLTK and your app)
- Fl_Tree optimized to support large trees (eg. 100k items):
Added _next_sibling and _prev_sibling to Fl_Tree_Item class,
and support methods.
CHANGES IN FLTK 1.3.0 RELEASED: Jun 16 2011
New Features
- Added UTF-8 Unicode support throughout FLTK and Fluid
- Added Fl_Tree widget for hierarchical views
- Added Fl_Table widget for widget layout
- Added Fl_Native_Filechooser as a widget and global options
- Added printing support (Fl_Printer class and friends) for native
printing on Windows and Mac OS X, PostScript printing on X11
with CUPS or lp, and PostScript file output on all platforms
- Added basic Fl_Device abstraction layer for all drawing functions
- Moved OS X code base to the more modern Cocoa toolkit thanks
to the awesome work of Manolo Gouy (STR #2221)
API and ABI Compatibility to FLTK 1.1.x
- All strings are expected to be in UTF-8 Unicode encoding
- Replaced Fl_Scroll::position(int,int) with scroll_to(int,int)
to avoid overriding Fl_Widget::position(int,int) (STR #1303)
- Although FLTK 1.3 maintains source code compatibility as good
as possible, the binary interface changed considerably.
- Updated the bundled libpng to v1.5.1 (released Feb 3, 2011)
- Updated the bundled libjpeg to v8c (released Jan 16, 2011)
- Updated the bundled zlib to v1.2.5 (released Apr 19, 2010)
API Enhancements and Changes
- Changed font index to 32 bit
- Changed font size to 32 bit
- Changed widget coordinates to 32 bit
- Corrected const methods of Fl_Text_{Buffer|Display|Selection}
to be declared const, corrected an Fl_Text_Buffer attrib. typo
- All draw() methods of widgets are now protected (STR #2142).
- Changed Fl_Group::clip_children() to public (STR #2017)
- Changed socket library to winsock2 (ws2_32.dll) instead of
wsock32.dll for Windows. The dll is now loaded dynamically only
if/when needed.
- Changed hide() and show() methods. They are now virtual from
Fl_Widget.
- Added new label and image alignments (STR #2269)
- Added global UI options (STR #2471)
- Added 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.
- Added sorting to Fl_Browser_ (STR #2113)
- Added new method client_area() for easier positioning of children
in Fl_Tabs (STR #2480)
- Added interface to set color chooser mode (STR #2407)
- Added Fl_Menu_::find_item by callback
- Added loading jpeg images from memory
- Added support for shortcuts for Fl_Input_, Fl_Value_Input, and
Fl_Text_Display derived widgets (STR #1770)
- Added Fl_Menu_ methods: insert(), find_index(), clear_submenu()
- Hotspot behavior of fl_message() and other common dialogs is now
optional (STR #2561).
- Common dialogs like fl_message() and fl_ask() can now have a window
title (STR #2562).
IDE Support and Command Line Build Options
- FLTK now supports Apple Xcode 3, MS VisualC 2008, and
MS VisualC 2010. MS VisualC 6 support is maintained as a
compatibility base for VisualC.net, etc. . FLTK continues
to support configure/make and improved CMake build files.
- Added step by step README's for MSWindows, OS X, and four
Linux distros.
- Added "ide" subdirectory for all IDE support files
- Added template to generate new projects with Xcode.
- Added --enable-cairo and --enable-cairoext configure options.
- redesigned CMake files (STR #2317).
- 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.
- Changed "fltk-config --post foo" to create an application
bundle rather than attaching a resource fork.
- Changed default for configure option --with-links for common
misspellings on case sensitive file systems like Unix/Linux.
The new default is --without-links; use --with-links on
Unix/Linux only if you need the links (e.g. lowercase '.h')
Fluid
- Added argument-less constructor in Fluid Widget Class
- Added jpeg support to Fluid image() element
- Added binary data type to Fluid
- Empty functions in Fluid no longer create an
implementation (STR #2259)
- Fixed internationalisation of menus using Fluid (STR #2246)
- Fixed menu item counting issue in Fluid (STR #2322)
- Fixed lost top item in Fluid's tree browser (STR #2233)
- Fixed Fluid dependency on X11 (STR #2261)
- Fixed Fluid textcolor output (STR #1992)
- Fixed wrong default value of Fl_Spinner in Fluid (STR #1991)
Documentation
- Added documentation for event delivery (STR #1983)
- Added Fl_Scroll::bbox() documentation (STR #1893)
- Updated documentation for Fl_Input_
- Updated Copyright dates to 2010 (STR #2036)
- Updated mirror sites in documentation (STR #2220)
- Fixed documentation for Fl_Progress (STR #2209)
- Fixed documentation (added missing COMCTL32.LIB dependency)
Other Improvements
- Added drag'n'drop support for Fl_Text_*
- Added visual feedback for button shortcuts (STR #2372)
- Added callback when double-clicking file in a file chooser
(STR #2346)
- Added alternative Xft font names (STR #2215)
- Added mouse!=0 check in Fl_Glut_Window::handle (STR #2381)
- Added indexing to Fl_Preferences
- Added OS X cursor control to Fl_Input (STR #2169)
- Added menu shortcut alignment for OS X
- Added drop box to UTF-8 test that will show the UTF-8 encoding
for the first dropped character
- Added flexible gap size for text buffer (STR #2046)
- Added clarification to Fl_GL_Window mode function (STR #1945)
- Added alternative text input awareness on OS X
- Improved handling of composed keys in OS X 10.5 and up
- Improved stability of fl_read_image (STR #2021)
- Much faster fl_read_image() for Windows (STR #2387).
- Improved support for faulty X11 clients (STR #2385)
- Integrated default menu into Demo test app
- Replaced _WIN32 symbols that had come with UTF-8 and the
new Fl_Table widget with WIN32
- Widgets now remove stale entries from the default callback
queue when they are deleted (STR #2302)
- Managing all Widget flags in a single location now (STR #2161)
- File chooser preview now recognizes UTF-8 encoded
text files (STR #2218)
- Setting a default font for Xft (STR #2216)
- 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.
- Fl_Help_View handles HTML2 font color specification (STR #890)
- Widgets now remove themselves from their parent group (if any),
when destroyed (STR #1894)
- Changed Fl_Group and Fl_Scroll to resize themselves before
resizing their children (STR #2032)
Bug Fixes
- Fixed potential crash in fl_xid() on Linux (STR #2635)
- Fixed keyboard navigation in fl_choice() (STR #2591)
- Fixed alpha blending under X11 when line data size != 0 (STR #2606)
- Fixed Fl_Tabs selection border drawing, if tabs are at the bottom
of the widget (STR #2480)
- Fixed Compiling with mingw-w64 (STR #2308).
- Fixed crashes when detecting illegal UTF-8 sequences
in Fl_Text_* widgets (STR #2348)
- Fixed Fl_Text_Display Tabulator calculations (STR #2450)
- Fixed file access code to use UTF-8 strings (STR #2440)
- Fixed ARM Unicode cross compilation issue (STR #2432)
- Fixed xclass support for Fl_Window (STR #2053)
- Fixed Caps Lock handling in X11/XIM (STR #2366)
- Fixed handling of missing fonts in Xft (STR #2355)
- Fixed OpenGL hide/show issue in OS X (STR #2260)
- Fixed File Chooser preview hang if a device was choosen
- Fixed blinking of selection when the mouse was dragged
outside of the Fl_Text_* widget
- Fixed Unicode support for Fl_Text_* widgets
- Fixed menu and shortcut handling (STR #2243)
- Fixed fltk-config to give --libs on one line (STR #2408)
- Fixed outside label redraw damage areas (STR #2436)
- Fixed compile errors when HAVE_LIBJPEG was not defined
(STR #2382)
- Fixed special handling for ISO back-tab keycode (STR #2369)
- Fixed static allocation in Fl_Tabs (STR #2370)
- Fixed Fl_Widget::measure_label() to const (STR #2406)
- Fixed unbalanced Windows OleInitialize/OleUnitialize calls
when loading/unloading the FLTK dll (STR #2417)
- Fixed X11/XDBE double buffering (STR #2152, #2197)
- Fixed menu and tooltip window animation bug under X11 (compiz)
by setting an appropriate window type (STR #2082)
- Fixed max. fd calculation, if USE_POLL is enabled (STR #2324)
- Fixed clipping for offscreen rendering (OSX, STR #2330)
- Fixed possibility of wrong flags() in Fl_Window::iconlabel()
(STR #2161)
- Fixed Scrollbar events when max is less than min (STR #2283)
- Fixed crash in test/Editor when freeing buffer
too soon (STR #2294)
- Fixed Fl_Preferences Cygwin wide character bug (STR #2164)
- Fixed sorting in Fl_Browser - last item would not
be sorted (STR #2300)
- Fixed window levels in OS X Cocoa (STR #2316)
- Fixed a buffer overflow in fl_utf8from_mb() (STR #2279)
- Fixed a Windows GDI leak when testing alpha blending capabilities
- Fixed crashes for recursive common dialogs (STR #1986, #2150)
- Fixed a name conflict with new (VS 2008 Express) winsock2.h
versions and another conflict that produced compile errors
with VS 2008 Express (STR #2301)
- Fixed all color related calls to Fl_Color type (STR #2208)
- 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)
- 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)
- 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 fl_draw_image to obey the alpha channel (OS X only)
- Fix for multiple popups, when dragging and calling fl_alert()
and friends from the callback (STR #2159)
- Fixed control key keycodes with modifiers on OS X
- Fixed bad system menu handling in OS X (STR #2153)
- Fixed File Input mouse pointer dragging (STR #2181)
- Fixed 'del' keycode on OS X
- Fixed OS X support for sending and receiving dnd data as UTF-8
- Fixed Copy/Paste operations with UTF-8, UTF-16 support and
fltk1.1 compatibility. (STR #2104, 2121).
- Fixed fl_set_spot() for Windows (STR #2101)
- Fixed callback that 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 menu position close to screen border (STR #2057)
- Fixed adding an idle handler during a draw() call (STR #1950)
- Fixed first modifier key event (STR #1952)
- Fixed Fl_Scroll inside Fl_Scroll (STR #265)
Removed Features
- Removed Watcom compiler support because it was introduced in
1.1.6 as a partial solution and never completed.
- Removed an XForms compatibility "feature" that prevented the
down array of Fl_Menu_Button from drawing (STR #2141).
- Removed support for gcc 2.x (or older)
- Removed redundant Fl_Group casts
CHANGES IN FLTK 1.1
See CHANGES_1.1
CHANGES IN FLTK 1.0
See CHANGES_1.0

View file

@ -1,799 +0,0 @@
Changes in FLTK 1.0, up to FLTK 1.0.11 (May 7, 2001)
CHANGES IN FLTK 1.0.11
- 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 IN FLTK 1.0.10
- 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 IN FLTK 1.0.9
- 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 IN FLTK 1.0.8
- 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 IN FLTK 1.0.7
- 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 IN FLTK 1.0.6
- 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 IN FLTK 1.0.5
- 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 IN FLTK 1.0.4
- 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 IN FLTK 1.0.3
- 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 IN FLTK 1.0.2
- 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 IN FLTK 1.0.1
- 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.

File diff suppressed because it is too large Load diff

View file

@ -1,53 +0,0 @@
#
# "$Id$"
#
# FLTK-Functions.cmake
# Written by Michael Surette
#
# Copyright 1998-2016 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file. If this
# file is missing or damaged, see the license at:
#
# http://www.fltk.org/COPYING.php
#
# Please report all bugs and problems on the following page:
#
# http://www.fltk.org/str.php
#
#######################################################################
# functions used by the build system and exported for the end-user
#######################################################################
# USAGE: FLTK_RUN_FLUID TARGET_NAME "FLUID_SOURCE [.. FLUID_SOURCE]"
function(FLTK_RUN_FLUID TARGET SOURCES)
set (CXX_FILES)
foreach(src ${SOURCES})
if ("${src}" MATCHES "\\.fl$")
string(REGEX REPLACE "(.*).fl" \\1 basename ${src})
add_custom_command(
OUTPUT "${basename}.cxx" "${basename}.h"
COMMAND "${FLTK_FLUID_EXECUTABLE}" -c ${CMAKE_CURRENT_SOURCE_DIR}/${src}
DEPENDS ${src}
MAIN_DEPENDENCY ${src}
)
list(APPEND CXX_FILES "${basename}.cxx")
endif ("${src}" MATCHES "\\.fl$")
set (${TARGET} ${CXX_FILES} PARENT_SCOPE)
endforeach(src)
endfunction(FLTK_RUN_FLUID TARGET SOURCES)
#######################################################################
# sets the bundle icon for OSX bundles
function(FLTK_SET_BUNDLE_ICON TARGET ICON_PATH)
get_filename_component(ICON_NAME "${ICON_PATH}" NAME)
set_target_properties("${TARGET}" PROPERTIES
MACOSX_BUNDLE_ICON_FILE "${ICON_NAME}"
RESOURCE "${ICON_PATH}"
)
endfunction(FLTK_SET_BUNDLE_ICON TARGET ICON_PATH)
#
# End of "$Id$".
#

View file

@ -1,43 +0,0 @@
#
# "$Id$"
#
# FLTKConfig.cmake - FLTK CMake configuration file for external projects.
#
# This file is generated by CMake and used to load FLTK's settings for
# an external project.
#
# It defines the following variables:
#
# FLTK_INCLUDE_DIRS - FLTK include directories
# FLTK_LIBRARIES - list of FLTK libraries built (not yet implemented)
# FLTK_FLUID_EXECUTABLE - needed by the function FLTK_RUN_FLUID
# (or the deprecated fltk_wrap_ui() CMake command)
#
# FLTK_USE_FILE - sets things up to use FLTK (deprecated since FLTK 1.3.4)
# - will be removed in FLTK 1.4.0
set(FLTK_VERSION @FLTK_VERSION_FULL@)
include(${CMAKE_CURRENT_LIST_DIR}/FLTK-Targets.cmake)
set(FLTK_INCLUDE_DIRS "@INCLUDE_DIRS@")
set(FLTK_USE_FILE ${CMAKE_CURRENT_LIST_DIR}/UseFLTK.cmake)
if(CMAKE_CROSSCOMPILING)
find_file(FLUID_PATH
NAMES fluid fluid.exe
PATHS ENV PATH
NO_CMAKE_FIND_ROOT_PATH
)
add_executable(fluid IMPORTED)
set_target_properties(fluid
PROPERTIES IMPORTED_LOCATION ${FLUID_PATH}
)
set(FLTK_FLUID_EXECUTABLE ${FLUID_PATH})
else()
set(FLTK_FLUID_EXECUTABLE fluid)
endif(CMAKE_CROSSCOMPILING)
#
# End of "$Id$".
#

View file

@ -1,20 +0,0 @@
#
# "$Id$"
#
# UseFLTK.CMake - FLTK CMake environment configuration file for external projects.
#
# This file is deprecated and will be removed in FLTK 1.4
#
# automatically generated - do not edit
#
include_directories("@INCLUDE_DIRS@")
message(STATUS "* Notice: UseFLTK.CMake is deprecated and will be removed in FLTK 1.4")
message(STATUS "* Please use 'include_directories(\${FLTK_INCLUDE_DIRS})' or")
message(STATUS "* 'target_include_directories(<target> PUBLIC|PRIVATE \${FLTK_INCLUDE_DIRS})'")
message(STATUS "* instead of 'include(\${FLTK_USE_FILE})'.")
#
# End of "$Id$".
#

View file

@ -1,19 +0,0 @@
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
message(FATAL_ERROR
"Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
string(REGEX REPLACE "\n" ";" files "${files}")
foreach(file ${files})
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
exec_program("@CMAKE_COMMAND@"
ARGS "-E remove -f \"$ENV{DESTDIR}${file}\""
OUTPUT_VARIABLE rm_out
RETURN_VALUE rm_retval
)
if(NOT "${rm_retval}" STREQUAL 0)
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
endif(NOT "${rm_retval}" STREQUAL 0)
endforeach(file)

View file

@ -1,129 +0,0 @@
#
# "$Id$"
#
# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
# Written by Michael Surette
#
# Copyright 1998-2016 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file. If this
# file is missing or damaged, see the license at:
#
# http://www.fltk.org/COPYING.php
#
# Please report all bugs and problems on the following page:
#
# http://www.fltk.org/str.php
#
#######################################################################
# final config and export
#######################################################################
# Set the fluid executable path
if(CMAKE_CROSSCOMPILING)
find_file(FLUID_PATH
NAMES fluid fluid.exe
PATHS ENV PATH
NO_CMAKE_FIND_ROOT_PATH
)
add_executable(fluid IMPORTED)
set(FLTK_FLUID_EXECUTABLE ${FLUID_PATH})
set(FLUID) # no export
set_target_properties(fluid
PROPERTIES IMPORTED_LOCATION ${FLUID_PATH}
)
else()
add_subdirectory(fluid)
set(FLTK_FLUID_EXECUTABLE fluid)
set(FLUID fluid) # export
endif(CMAKE_CROSSCOMPILING)
add_subdirectory(src)
# generate FLTK-Targets.cmake for build directory use
export(TARGETS ${FLUID} ${FLTK_LIBRARIES} FILE ${CMAKE_BINARY_DIR}/FLTK-Targets.cmake)
# generate FLTK-Functions.cmake for build directory use
configure_file(
${FLTK_SOURCE_DIR}/CMake/FLTK-Functions.cmake
${FLTK_BINARY_DIR}/FLTK-Functions.cmake
COPYONLY
)
# generate FLTKConfig.cmake for build directory use
set(INCLUDE_DIRS "${FLTK_INCLUDE_DIRS}")
set(CONFIG_PATH ${FLTK_BINARY_DIR})
configure_file(
${FLTK_SOURCE_DIR}/CMake/FLTKConfig.cmake.in
${FLTK_BINARY_DIR}/FLTKConfig.cmake
@ONLY
)
# generate UseFLTK.cmake for build directory use
configure_file(
${FLTK_SOURCE_DIR}/CMake/UseFLTK.cmake.in
${FLTK_BINARY_DIR}/UseFLTK.cmake
@ONLY
)
# generate fltk-config for build directory use
set(prefix ${FLTK_BINARY_DIR})
set(exec_prefix "\${prefix}")
set(includedir "${FLTK_SOURCE_DIR}")
set(BINARY_DIR "${FLTK_BINARY_DIR}")
set(libdir "\${exec_prefix}/lib")
set(srcdir ".")
set(LIBNAME "${libdir}/libfltk.a")
configure_file(
"${FLTK_SOURCE_DIR}/fltk-config.in"
"${FLTK_BINARY_DIR}/fltk-config"
@ONLY
)
if(UNIX)
execute_process(COMMAND chmod 755 fltk-config
WORKING_DIRECTORY "${FLTK_BINARY_DIR}"
)
endif(UNIX)
# prepare some variables for config.h
if(IS_ABSOLUTE "${FLTK_DATADIR}")
set(PREFIX_DATA "${FLTK_DATADIR}/fltk")
else(IS_ABSOLUTE "${FLTK_DATADIR}")
set(PREFIX_DATA "${CMAKE_INSTALL_PREFIX}/${FLTK_DATADIR}/fltk")
endif(IS_ABSOLUTE "${FLTK_DATADIR}")
if(IS_ABSOLUTE "${FLTK_DOCDIR}")
set(PREFIX_DOC "${FLTK_DOCDIR}/fltk")
else(IS_ABSOLUTE "${FLTK_DOCDIR}")
set(PREFIX_DOC "${CMAKE_INSTALL_PREFIX}/${FLTK_DOCDIR}/fltk")
endif(IS_ABSOLUTE "${FLTK_DOCDIR}")
set(CONFIG_H_IN configh.cmake.in)
set(CONFIG_H config.h)
# generate config.h
configure_file(
"${FLTK_SOURCE_DIR}/${CONFIG_H_IN}"
"${FLTK_BINARY_DIR}/${CONFIG_H}"
@ONLY
)
if(OPTION_CREATE_LINKS)
# Set PREFIX_INCLUDE to the proper value.
if(IS_ABSOLUTE ${FLTK_INCLUDEDIR})
set(PREFIX_INCLUDE ${FLTK_INCLUDEDIR})
else()
set(PREFIX_INCLUDE "${CMAKE_INSTALL_PREFIX}/${FLTK_INCLUDEDIR}")
endif(IS_ABSOLUTE ${FLTK_INCLUDEDIR})
configure_file(
"${FLTK_SOURCE_DIR}/CMake/install-symlinks.cmake.in"
"${FLTK_BINARY_DIR}/install-symlinks.cmake"
@ONLY
)
endif(OPTION_CREATE_LINKS)

View file

@ -1,17 +0,0 @@
# On unix create backward compatibility symlinks
if(NOT EXISTS $ENV{DESTDIR}@PREFIX_INCLUDE@/Fl)
EXECUTE_PROCESS(COMMAND ln -s FL Fl
WORKING_DIRECTORY $ENV{DESTDIR}@PREFIX_INCLUDE@
)
endif(NOT EXISTS $ENV{DESTDIR}@PREFIX_INCLUDE@/Fl)
file(GLOB FLTK_HEADER_FILES $ENV{DESTDIR}@PREFIX_INCLUDE@/FL/*.H)
foreach(file ${FLTK_HEADER_FILES})
GET_FILENAME_COMPONENT(nameWE ${file} NAME_WE)
if(NOT EXISTS $ENV{DESTDIR}@PREFIX_INCLUDE@/FL/${nameWE}.h)
EXECUTE_PROCESS(COMMAND ln -s ${nameWE}.H ${nameWE}.h
WORKING_DIRECTORY $ENV{DESTDIR}@PREFIX_INCLUDE@/FL
)
endif(NOT EXISTS $ENV{DESTDIR}@PREFIX_INCLUDE@/FL/${nameWE}.h)
endforeach(file)

View file

@ -1,120 +0,0 @@
#
# "$Id$"
#
# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
# Written by Michael Surette
#
# Copyright 1998-2016 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file. If this
# file is missing or damaged, see the license at:
#
# http://www.fltk.org/COPYING.php
#
# Please report all bugs and problems on the following page:
#
# http://www.fltk.org/str.php
#
#######################################################################
# installation
#######################################################################
# generate uninstall target
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/CMake/cmake_uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
@ONLY
)
add_custom_target(uninstall
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
)
install(DIRECTORY ${FLTK_SOURCE_DIR}/FL
DESTINATION ${FLTK_INCLUDEDIR} USE_SOURCE_PERMISSIONS
PATTERN ".svn" EXCLUDE
)
install(DIRECTORY ${FLTK_BINARY_DIR}/FL
DESTINATION ${FLTK_INCLUDEDIR} USE_SOURCE_PERMISSIONS
)
if(OPTION_CREATE_LINKS)
install(SCRIPT ${FLTK_BINARY_DIR}/install-symlinks.cmake)
endif(OPTION_CREATE_LINKS)
# generate FLTKConfig.cmake for installed directory use
set(INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include)
set(CONFIG_PATH ${CMAKE_INSTALL_PREFIX}/${FLTK_CONFIG_PATH})
install(EXPORT FLTK-Targets
DESTINATION ${FLTK_CONFIG_PATH}
FILE FLTK-Targets.cmake
)
configure_file(
${FLTK_SOURCE_DIR}/CMake/FLTKConfig.cmake.in
${FLTK_BINARY_DIR}/etc/FLTKConfig.cmake
@ONLY
)
install(FILES
${FLTK_BINARY_DIR}/etc/FLTKConfig.cmake
${FLTK_SOURCE_DIR}/CMake/FLTK-Functions.cmake
DESTINATION ${FLTK_CONFIG_PATH}
)
configure_file(
${FLTK_SOURCE_DIR}/CMake/UseFLTK.cmake.in
${FLTK_BINARY_DIR}/etc/UseFLTK.cmake
@ONLY
)
install(FILES ${FLTK_BINARY_DIR}/etc/UseFLTK.cmake
DESTINATION ${FLTK_CONFIG_PATH}
)
# generate fltk-config
set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix "\${prefix}")
set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
set(BINARY_DIR)
set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
set(srcdir ".")
set(LIBNAME "${libdir}/libfltk.a")
configure_file(
"${FLTK_SOURCE_DIR}/fltk-config.in"
"${FLTK_BINARY_DIR}/bin/fltk-config"
@ONLY
)
if(UNIX)
execute_process(COMMAND chmod 755 fltk-config
WORKING_DIRECTORY "${FLTK_BINARY_DIR}/bin"
)
endif(UNIX)
install(PROGRAMS ${FLTK_BINARY_DIR}/bin/fltk-config
DESTINATION ${FLTK_BINDIR}
)
if(UNIX OR MSYS OR (MINGW AND CMAKE_CROSSCOMPILING))
macro(INSTALL_MAN FILE LEVEL)
install(FILES
${FLTK_SOURCE_DIR}/documentation/src/${FILE}.man
DESTINATION ${FLTK_MANDIR}/man${LEVEL}
RENAME ${FILE}.${LEVEL}
)
endmacro(INSTALL_MAN FILE LEVEL)
INSTALL_MAN(fluid 1)
INSTALL_MAN(fltk-config 1)
INSTALL_MAN(fltk 3)
INSTALL_MAN(blocks 6)
INSTALL_MAN(checkers 6)
INSTALL_MAN(sudoku 6)
endif(UNIX OR MSYS OR (MINGW AND CMAKE_CROSSCOMPILING))

View file

@ -1,134 +0,0 @@
#
# "$Id$"
#
# macros.cmake
# Written by Michael Surette
#
# Copyright 1998-2016 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file. If this
# file is missing or damaged, see the license at:
#
# http://www.fltk.org/COPYING.php
#
# Please report all bugs and problems on the following page:
#
# http://www.fltk.org/str.php
#
#######################################################################
# macros used by the build system
#######################################################################
macro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
if (${LIBTYPE} STREQUAL "SHARED")
set (LIBRARY_NAME ${LIBNAME}_SHARED)
else ()
set (LIBRARY_NAME ${LIBNAME})
endif (${LIBTYPE} STREQUAL "SHARED")
if (MSVC)
set (LIBRARY_NAME_DEBUG "${LIBRARY_NAME}d")
else ()
set (LIBRARY_NAME_DEBUG "${LIBRARY_NAME}")
endif (MSVC)
add_library(${LIBRARY_NAME} ${LIBTYPE} ${LIBFILES})
set_target_properties(${LIBRARY_NAME}
PROPERTIES
OUTPUT_NAME ${LIBRARY_NAME}
DEBUG_OUTPUT_NAME ${LIBRARY_NAME_DEBUG}
CLEAN_DIRECT_OUTPUT TRUE
COMPILE_DEFINITIONS "FL_LIBRARY"
)
if (${LIBTYPE} STREQUAL "SHARED")
set_target_properties(${LIBRARY_NAME}
PROPERTIES
VERSION ${FLTK_VERSION_FULL}
SOVERSION ${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}
PREFIX "lib" # for MSVC static/shared coexistence
)
endif (${LIBTYPE} STREQUAL "SHARED")
if (MSVC)
if (OPTION_LARGE_FILE)
set_target_properties(${LIBRARYNAME}
PROPERTIES
LINK_FLAGS /LARGEADDRESSAWARE
)
endif (OPTION_LARGE_FILE)
if (${LIBTYPE} STREQUAL "SHARED")
set_target_properties(${LIBRARY_NAME}
PROPERTIES
COMPILE_DEFINITIONS "FL_DLL"
)
endif (${LIBTYPE} STREQUAL "SHARED")
endif (MSVC)
install(TARGETS ${LIBRARY_NAME}
EXPORT FLTK-Targets
RUNTIME DESTINATION ${FLTK_BINDIR}
LIBRARY DESTINATION ${FLTK_LIBDIR}
ARCHIVE DESTINATION ${FLTK_LIBDIR}
)
list(APPEND FLTK_LIBRARIES "${LIBRARY_NAME}")
set (FLTK_LIBRARIES ${FLTK_LIBRARIES} PARENT_SCOPE)
endmacro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
#######################################################################
function(CREATE_EXAMPLE NAME SOURCES LIBRARIES)
set (srcs) # source files
set (flsrcs) # fluid source files
set (icns) # mac icons
set (tname ${NAME}) # target name
# rename reserved target name "help" (CMake 2.8.12 and later)
if (${tname} MATCHES "^help$")
set (tname "test_help")
endif (${tname} MATCHES "^help$")
foreach(src ${SOURCES})
if ("${src}" MATCHES "\\.fl$")
list(APPEND flsrcs ${src})
elseif ("${src}" MATCHES "\\.icns$")
set(icns "${src}")
else ()
list(APPEND srcs ${src})
endif ("${src}" MATCHES "\\.fl$")
endforeach(src)
set (FLUID_SOURCES)
if (flsrcs)
FLTK_RUN_FLUID(FLUID_SOURCES "${flsrcs}")
endif (flsrcs)
if (APPLE AND NOT OPTION_APPLE_X11)
add_executable(${tname} MACOSX_BUNDLE ${srcs} ${FLUID_SOURCES} ${icns})
if (icns)
FLTK_SET_BUNDLE_ICON(${tname} ${icns})
endif (icns)
else ()
add_executable(${tname} WIN32 ${srcs} ${FLUID_SOURCES})
endif (APPLE AND NOT OPTION_APPLE_X11)
set_target_properties(${tname}
PROPERTIES OUTPUT_NAME ${NAME}
)
target_link_libraries(${tname} ${LIBRARIES})
endfunction(CREATE_EXAMPLE NAME SOURCES LIBRARIES)
#######################################################################
#
# End of "$Id$".
#

View file

@ -1,374 +0,0 @@
#
# "$Id$"
#
# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
# Written by Michael Surette
#
# Copyright 1998-2016 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file. If this
# file is missing or damaged, see the license at:
#
# http://www.fltk.org/COPYING.php
#
# Please report all bugs and problems on the following page:
#
# http://www.fltk.org/str.php
#
#######################################################################
# options
#######################################################################
set(OPTION_OPTIM ""
CACHE STRING
"custom optimization flags"
)
add_definitions(${OPTION_OPTIM})
#######################################################################
set(OPTION_ARCHFLAGS ""
CACHE STRING
"custom architecture flags"
)
add_definitions(${OPTION_ARCHFLAGS})
#######################################################################
set(OPTION_ABI_VERSION ""
CACHE STRING
"FLTK ABI Version FL_ABI_VERSION: 1xxyy for 1.x.y (xx,yy with leading zero)"
)
set(FL_ABI_VERSION ${OPTION_ABI_VERSION})
#######################################################################
#######################################################################
if(UNIX)
option(OPTION_CREATE_LINKS "create backwards compatibility links" OFF)
list(APPEND FLTK_LDLIBS -lm)
endif(UNIX)
#######################################################################
if(APPLE)
option(OPTION_APPLE_X11 "use X11" OFF)
endif(APPLE)
if((NOT APPLE OR OPTION_APPLE_X11) AND NOT WIN32)
include(FindX11)
if(X11_FOUND)
set(USE_X11 1)
list(APPEND FLTK_LDLIBS -lX11)
if (X11_Xext_FOUND)
list(APPEND FLTK_LDLIBS -lXext)
endif(X11_Xext_FOUND)
endif(X11_FOUND)
endif((NOT APPLE OR OPTION_APPLE_X11) AND NOT WIN32)
#######################################################################
option(OPTION_USE_POLL "use poll if available" OFF)
mark_as_advanced(OPTION_USE_POLL)
if(OPTION_USE_POLL)
CHECK_FUNCTION_EXISTS(poll USE_POLL)
endif(OPTION_USE_POLL)
#######################################################################
option(OPTION_BUILD_SHARED_LIBS
"Build shared libraries(in addition to static libraries)"
OFF
)
#######################################################################
option(OPTION_BUILD_EXAMPLES "build example programs" ON)
#######################################################################
if(DOXYGEN_FOUND)
option(OPTION_BUILD_HTML_DOCUMENTATION "build html docs" OFF)
option(OPTION_INSTALL_HTML_DOCUMENTATION "install html docs" OFF)
if(LATEX_FOUND)
option(OPTION_BUILD_PDF_DOCUMENTATION "build pdf docs" OFF)
option(OPTION_INSTALL_PDF_DOCUMENTATION "install pdf docs" OFF)
endif(LATEX_FOUND)
endif(DOXYGEN_FOUND)
if(OPTION_BUILD_HTML_DOCUMENTATION OR OPTION_BUILD_PDF_DOCUMENTATION)
add_subdirectory(documentation)
endif(OPTION_BUILD_HTML_DOCUMENTATION OR OPTION_BUILD_PDF_DOCUMENTATION)
#######################################################################
include(FindPkgConfig)
option(OPTION_CAIRO "use lib Cairo" OFF)
option(OPTION_CAIROEXT
"use FLTK code instrumentation for Cairo extended use" OFF
)
if ((OPTION_CAIRO OR OPTION_CAIROEXT) AND LIB_CAIRO)
pkg_search_module(PKG_CAIRO cairo)
endif ((OPTION_CAIRO OR OPTION_CAIROEXT) AND LIB_CAIRO)
if (PKG_CAIRO_FOUND)
set (FLTK_HAVE_CAIRO 1)
add_subdirectory(cairo)
list(APPEND FLTK_LDLIBS -lcairo -lpixman-1)
include_directories(${PKG_CAIRO_INCLUDE_DIRS})
string(REPLACE ";" " " CAIROFLAGS "${PKG_CAIRO_CFLAGS}")
endif (PKG_CAIRO_FOUND)
if (LIB_CAIRO AND OPTION_CAIROEXT AND PKG_CAIRO_FOUND)
set(FLTK_USE_CAIRO 1)
set(FLTK_CAIRO_FOUND TRUE)
else()
set(FLTK_CAIRO_FOUND FALSE)
endif (LIB_CAIRO AND OPTION_CAIROEXT AND PKG_CAIRO_FOUND)
if ((OPTION_CAIRO OR OPTION_CAIROEXT) AND NOT PKG_CAIRO_FOUND)
message(STATUS "*** Cairo was requested but not found - please install Cairo ...")
message(STATUS "*** or disable options OPTION_CAIRO and OPTION_CAIRO_EXT")
message(FATAL_ERROR "*** Terminating: missing Cairo libs or headers")
endif ((OPTION_CAIRO OR OPTION_CAIROEXT) AND NOT PKG_CAIRO_FOUND)
#######################################################################
set(HAVE_GL LIB_GL OR LIB_MesaGL)
if(HAVE_GL)
option(OPTION_USE_GL "use OpenGL" ON)
endif(HAVE_GL)
if(OPTION_USE_GL)
if(OPTION_APPLE_X11)
set(OPENGL_FOUND TRUE)
get_filename_component(PATH_TO_XLIBS ${X11_X11_LIB} PATH)
set(OPENGL_LIBRARIES -L${PATH_TO_XLIBS} -lGLU -lGL)
find_file(HAVE_GL_GLU_H GL/glu.h PATHS /opt/X11/include)
else()
include(FindOpenGL)
if(APPLE)
set(HAVE_GL_GLU_H ${HAVE_OPENGL_GLU_H})
endif(APPLE)
endif(OPTION_APPLE_X11)
endif(OPTION_USE_GL)
if(OPENGL_FOUND)
set(CMAKE_REQUIRED_INCLUDES ${OPENGL_INCLUDE_DIR}/GL)
set(GLLIB "-lGLU -lGL")
# check if function glXGetProcAddressARB exists
set(TEMP_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
set(CMAKE_REQUIRED_LIBRARIES GLU GL)
CHECK_FUNCTION_EXISTS(glXGetProcAddressARB HAVE_GLXGETPROCADDRESSARB)
set(CMAKE_REQUIRED_LIBRARIES ${TEMP_REQUIRED_LIBRARIES})
unset(TEMP_REQUIRED_LIBRARIES)
set(FLTK_GL_FOUND TRUE)
else()
set(FLTK_GL_FOUND FALSE)
endif(OPENGL_FOUND)
#######################################################################
option(OPTION_USE_THREADS "use multi-threading" ON)
if(OPTION_USE_THREADS)
include(FindThreads)
endif(OPTION_USE_THREADS)
if(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY)
add_definitions("-D_THREAD_SAFE -D_REENTRANT")
set(USE_THREADS 1)
set(FLTK_THREADS_FOUND TRUE)
else()
set(FLTK_THREADS_FOUND FALSE)
endif(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY)
if(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT)
set(HAVE_PTHREAD 1)
if(NOT APPLE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
endif(NOT APPLE)
list(APPEND FLTK_LDLIBS -lpthread)
list(APPEND FLTK_CFLAGS -D_THREAD_SAFE -D_REENTRANT)
set(FLTK_PTHREADS_FOUND TRUE)
else()
set(HAVE_PTHREAD 0)
set(HAVE_PTHREAD_H 0)
set(FLTK_PTHREADS_FOUND FALSE)
endif(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT)
#######################################################################
option(OPTION_LARGE_FILE "enable large file support" ON)
if(OPTION_LARGE_FILE)
if(NOT MSVC)
add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE)
list(APPEND FLTK_CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE)
endif(NOT MSVC)
endif(OPTION_LARGE_FILE)
#######################################################################
option(OPTION_USE_SYSTEM_ZLIB "use system zlib" ON)
if(OPTION_USE_SYSTEM_ZLIB AND LIB_zlib)
include(FindZLIB)
endif(OPTION_USE_SYSTEM_ZLIB AND LIB_zlib)
if(OPTION_USE_SYSTEM_ZLIB AND ZLIB_FOUND)
set(FLTK_ZLIB_LIBRARIES ${ZLIB_LIBRARIES})
include_directories(${ZLIB_INCLUDE_DIRS})
set(FLTK_BUILTIN_ZLIB_FOUND FALSE)
else()
add_subdirectory(zlib)
set(FLTK_ZLIB_LIBRARIES fltk_z)
set(ZLIB_INCLUDE_DIR ${FLTK_SOURCE_DIR}/zlib)
include_directories(${FLTK_SOURCE_DIR}/zlib)
set(FLTK_BUILTIN_ZLIB_FOUND TRUE)
endif(OPTION_USE_SYSTEM_ZLIB AND ZLIB_FOUND)
if(OPTION_USE_SYSTEM_ZLIB AND NOT ZLIB_FOUND)
message(STATUS "\ncannot find system zlib library - using built-in\n")
endif(OPTION_USE_SYSTEM_ZLIB AND NOT ZLIB_FOUND)
set(HAVE_LIBZ 1)
#######################################################################
option(OPTION_USE_SYSTEM_LIBJPEG "use system libjpeg" ON)
if(OPTION_USE_SYSTEM_LIBJPEG AND LIB_jpeg)
include(FindJPEG)
endif(OPTION_USE_SYSTEM_LIBJPEG AND LIB_jpeg)
if(OPTION_USE_SYSTEM_LIBJPEG AND JPEG_FOUND)
set(FLTK_JPEG_LIBRARIES ${JPEG_LIBRARIES})
include_directories(${JPEG_INCLUDE_DIR})
set(FLTK_BUILTIN_JPEG_FOUND FALSE)
else()
add_subdirectory(jpeg)
set(FLTK_JPEG_LIBRARIES fltk_jpeg)
include_directories(${FLTK_SOURCE_DIR}/jpeg)
set(FLTK_BUILTIN_JPEG_FOUND TRUE)
endif(OPTION_USE_SYSTEM_LIBJPEG AND JPEG_FOUND)
if(OPTION_USE_SYSTEM_LIBJPEG AND NOT JPEG_FOUND)
message(STATUS "\ncannot find system jpeg library - using built-in\n")
endif(OPTION_USE_SYSTEM_LIBJPEG AND NOT JPEG_FOUND)
set(HAVE_LIBJPEG 1)
#######################################################################
option(OPTION_USE_SYSTEM_LIBPNG "use system libpng" ON)
if(OPTION_USE_SYSTEM_LIBPNG AND LIB_png)
include(FindPNG)
endif(OPTION_USE_SYSTEM_LIBPNG AND LIB_png)
if(OPTION_USE_SYSTEM_LIBPNG AND PNG_FOUND)
set(FLTK_PNG_LIBRARIES ${PNG_LIBRARIES})
include_directories(${PNG_INCLUDE_DIR})
add_definitions(${PNG_DEFINITIONS})
set(FLTK_BUILTIN_PNG_FOUND FALSE)
else()
add_subdirectory(png)
set(FLTK_PNG_LIBRARIES fltk_png)
set(HAVE_PNG_H 1)
set(HAVE_PNG_GET_VALID 1)
set(HAVE_PNG_SET_TRNS_TO_ALPHA 1)
include_directories(${FLTK_SOURCE_DIR}/png)
set(FLTK_BUILTIN_PNG_FOUND TRUE)
endif(OPTION_USE_SYSTEM_LIBPNG AND PNG_FOUND)
if(OPTION_USE_SYSTEM_LIBPNG AND NOT PNG_FOUND)
message(STATUS "\ncannot find system png library - using built-in\n")
endif(OPTION_USE_SYSTEM_LIBPNG AND NOT PNG_FOUND)
set(HAVE_LIBPNG 1)
#######################################################################
if(X11_Xinerama_FOUND)
option(OPTION_USE_XINERAMA "use lib Xinerama" ON)
endif(X11_Xinerama_FOUND)
if(OPTION_USE_XINERAMA)
set(HAVE_XINERAMA ${X11_Xinerama_FOUND})
include_directories(${X11_Xinerama_INCLUDE_PATH})
list(APPEND FLTK_LDLIBS -lXinerama)
set(FLTK_XINERAMA_FOUND TRUE)
else()
set(FLTK_XINERAMA_FOUND FALSE)
endif(OPTION_USE_XINERAMA)
#######################################################################
if(X11_Xfixes_FOUND)
option(OPTION_USE_XFIXES "use lib Xfixes" ON)
endif(X11_Xfixes_FOUND)
if(OPTION_USE_XFIXES)
set(HAVE_XFIXES ${X11_Xfixes_FOUND})
include_directories(${X11_Xfixes_INCLUDE_PATH})
list(APPEND FLTK_LDLIBS -lXfixes)
set(FLTK_XFIXES_FOUND TRUE)
else()
set(FLTK_XFIXES_FOUND FALSE)
endif(OPTION_USE_XFIXES)
#######################################################################
if(X11_Xcursor_FOUND)
option(OPTION_USE_XCURSOR "use lib Xcursor" ON)
endif(X11_Xcursor_FOUND)
if(OPTION_USE_XCURSOR)
set(HAVE_XCURSOR ${X11_Xcursor_FOUND})
include_directories(${X11_Xcursor_INCLUDE_PATH})
list(APPEND FLTK_LDLIBS -lXcursor)
set(FLTK_XCURSOR_FOUND TRUE)
else()
set(FLTK_XCURSOR_FOUND FALSE)
endif(OPTION_USE_XCURSOR)
#######################################################################
if(X11_Xft_FOUND)
option(OPTION_USE_XFT "use lib Xft" ON)
endif(X11_Xft_FOUND)
if(OPTION_USE_XFT)
set(USE_XFT X11_Xft_FOUND)
list(APPEND FLTK_LDLIBS -lXft)
set(FLTK_XFT_FOUND TRUE)
else()
set(FLTK_XFT_FOUND FALSE)
endif(OPTION_USE_XFT)
#######################################################################
if(X11_Xrender_FOUND)
option(OPTION_USE_XRENDER "use lib Xrender" ON)
endif(X11_Xrender_FOUND)
if(OPTION_USE_XRENDER)
set(HAVE_XRENDER ${X11_Xrender_FOUND})
if(HAVE_XRENDER)
include_directories(${X11_Xrender_INCLUDE_PATH})
list(APPEND FLTK_LDLIBS -lXrender)
set(FLTK_XRENDER_FOUND TRUE)
else(HAVE_XRENDER)
set(FLTK_XRENDER_FOUND FALSE)
endif(HAVE_XRENDER)
else(OPTION_USE_XRENDER)
set(FLTK_XRENDER_FOUND FALSE)
endif(OPTION_USE_XRENDER)
#######################################################################
if(X11_FOUND)
option(OPTION_USE_XDBE "use lib Xdbe" ON)
endif(X11_FOUND)
if(OPTION_USE_XDBE AND HAVE_XDBE_H)
set(HAVE_XDBE 1)
set(FLTK_XDBE_FOUND TRUE)
else()
set(FLTK_XDBE_FOUND FALSE)
endif(OPTION_USE_XDBE AND HAVE_XDBE_H)
#######################################################################
# prior to CMake 3.0 this feature was buggy
if(NOT CMAKE_VERSION VERSION_LESS 3.0.0)
option(CMAKE_SUPPRESS_REGENERATION
"suppress rules to re-run CMake on rebuild" OFF)
mark_as_advanced(CMAKE_SUPPRESS_REGENERATION)
endif(NOT CMAKE_VERSION VERSION_LESS 3.0.0)

View file

@ -1,10 +0,0 @@
#include <dirent.h>
int func (const char *d, dirent ***list, void *sort) {
int n = scandir(d, list, 0, (int(*)(const dirent **, const dirent **))sort);
}
int main() {
return 0;
}

View file

@ -1,195 +0,0 @@
#
# "$Id$"
#
# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
# Written by Michael Surette
#
# Copyright 1998-2015 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file. If this
# file is missing or damaged, see the license at:
#
# http://www.fltk.org/COPYING.php
#
# Please report all bugs and problems on the following page:
#
# http://www.fltk.org/str.php
#
#######################################################################
# check for headers, libraries and functions
#######################################################################
# headers
find_file(HAVE_ALSA_ASOUNDLIB_H alsa/asoundlib.h)
find_file(HAVE_DLFCN_H dlfcn.h)
find_file(HAVE_FREETYPE_H freetype.h PATH_SUFFIXES freetype2 freetype2/freetype)
find_file(HAVE_GL_GL_H GL/gl.h)
find_file(HAVE_GL_GLU_H GL/glu.h)
find_file(HAVE_LIBPNG_PNG_H libpng/png.h)
find_file(HAVE_LOCALE_H locale.h)
find_file(HAVE_OPENGL_GLU_H OpenGL/glu.h)
find_file(HAVE_PNG_H png.h)
find_file(HAVE_PTHREAD_H pthread.h)
find_file(HAVE_STDIO_H stdio.h)
find_file(HAVE_STRINGS_H strings.h)
find_file(HAVE_SYS_SELECT_H sys/select.h)
find_file(HAVE_SYS_STDTYPES_H sys/stdtypes.h)
find_file(HAVE_X11_XREGION_H X11/Xregion.h)
find_path(HAVE_XDBE_H Xdbe.h PATH_SUFFIXES X11/extensions extensions)
if (MSVC)
message(STATUS "Note: The following three headers should all be found!")
message(STATUS "HAVE_GL_GL_H = '${HAVE_GL_GL_H}'")
message(STATUS "HAVE_GL_GLU_H = '${HAVE_GL_GLU_H}'")
message(STATUS "HAVE_LOCALE_H = '${HAVE_LOCALE_H}'")
message(STATUS "If one of these headers was not found, run cmake-gui ...")
message(STATUS "... again from a Visual Studio developer command prompt!")
endif (MSVC)
# Simulate the behavior of autoconf macro AC_HEADER_DIRENT, see:
# https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Particular-Headers.html
# "Check for the following header files. For the first one that is found
# and defines DIR, define the listed C preprocessor macro ..."
#
# Note: we don't check if it really defines 'DIR', but we stop processing
# once we found the first suitable header file.
find_file(HAVE_DIRENT_H dirent.h)
if(NOT HAVE_DIRENT_H)
find_file(HAVE_SYS_NDIR_H sys/ndir.h)
if(NOT HAVE_SYS_NDIR_H)
find_file(HAVE_SYS_DIR_H sys/dir.h)
if(NOT HAVE_SYS_DIR_H)
find_file(HAVE_NDIR_H ndir.h)
endif(NOT HAVE_SYS_DIR_H)
endif(NOT HAVE_SYS_NDIR_H)
endif(NOT HAVE_DIRENT_H)
mark_as_advanced(HAVE_ALSA_ASOUNDLIB_H HAVE_DIRENT_H HAVE_DLFCN_H)
mark_as_advanced(HAVE_FREETYPE_H HAVE_GL_GL_H HAVE_GL_GLU_H)
mark_as_advanced(HAVE_LIBPNG_PNG_H HAVE_LOCALE_H HAVE_NDIR_H)
mark_as_advanced(HAVE_OPENGL_GLU_H HAVE_PNG_H HAVE_PTHREAD_H)
mark_as_advanced(HAVE_STDIO_H HAVE_STRINGS_H HAVE_SYS_DIR_H)
mark_as_advanced(HAVE_SYS_NDIR_H HAVE_SYS_SELECT_H)
mark_as_advanced(HAVE_SYS_STDTYPES_H HAVE_XDBE_H)
mark_as_advanced(HAVE_X11_XREGION_H)
# where to find freetype headers
find_path(FREETYPE_PATH freetype.h PATH_SUFFIXES freetype2)
find_path(FREETYPE_PATH freetype/freetype.h PATH_SUFFIXES freetype2)
if(FREETYPE_PATH)
include_directories(${FREETYPE_PATH})
endif(FREETYPE_PATH)
mark_as_advanced(FREETYPE_PATH)
#######################################################################
# libraries
find_library(LIB_CAIRO cairo)
find_library(LIB_dl dl)
find_library(LIB_fontconfig fontconfig)
find_library(LIB_freetype freetype)
find_library(LIB_GL GL)
find_library(LIB_MesaGL MesaGL)
find_library(LIB_jpeg jpeg)
find_library(LIB_png png)
find_library(LIB_zlib z)
mark_as_advanced(LIB_CAIRO LIB_dl LIB_fontconfig LIB_freetype)
mark_as_advanced(LIB_GL LIB_MesaGL)
mark_as_advanced(LIB_jpeg LIB_png LIB_zlib)
#######################################################################
# functions
include(CheckFunctionExists)
# save CMAKE_REQUIRED_LIBRARIES (is this really necessary ?)
if(DEFINED CMAKE_REQUIRED_LIBRARIES)
set(SAVED_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
else(DEFINED CMAKE_REQUIRED_LIBRARIES)
unset(SAVED_REQUIRED_LIBRARIES)
endif(DEFINED CMAKE_REQUIRED_LIBRARIES)
set(CMAKE_REQUIRED_LIBRARIES)
if(HAVE_DLFCN_H)
set(HAVE_DLFCN_H 1)
endif(HAVE_DLFCN_H)
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_DL_LIBS})
CHECK_FUNCTION_EXISTS(dlsym HAVE_DLSYM)
set(CMAKE_REQUIRED_LIBRARIES)
CHECK_FUNCTION_EXISTS(localeconv HAVE_LOCALECONV)
if(LIB_png)
set(CMAKE_REQUIRED_LIBRARIES ${LIB_png})
CHECK_FUNCTION_EXISTS(png_get_valid HAVE_PNG_GET_VALID)
CHECK_FUNCTION_EXISTS(png_set_tRNS_to_alpha HAVE_PNG_SET_TRNS_TO_ALPHA)
set(CMAKE_REQUIRED_LIBRARIES)
endif(LIB_png)
CHECK_FUNCTION_EXISTS(scandir HAVE_SCANDIR)
CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
# not really true but we convert strcasecmp calls to _stricmp calls in flstring.h
if(MSVC)
set(HAVE_STRCASECMP 1)
endif(MSVC)
CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT)
CHECK_FUNCTION_EXISTS(strlcpy HAVE_STRLCPY)
CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
if(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
set(MSG "POSIX compatible scandir")
message(STATUS "Looking for ${MSG}")
try_compile(V
${FLTK_BINARY_DIR}
${FLTK_SOURCE_DIR}/CMake/posixScandir.cxx
)
if(V)
message(STATUS "${MSG} - found")
set(HAVE_SCANDIR_POSIX 1 CACHE INTERNAL "")
else()
message(STATUS "${MSG} - not found")
set(HAVE_SCANDIR_POSIX HAVE_SCANDIR_POSIX-NOTFOUND)
endif(V)
endif(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
mark_as_advanced(HAVE_SCANDIR_POSIX)
# restore CMAKE_REQUIRED_LIBRARIES (is this really necessary ?)
if(DEFINED SAVED_REQUIRED_LIBRARIES)
set(CMAKE_REQUIRED_LIBRARIES ${SAVED_REQUIRED_LIBRARIES})
unset(SAVED_REQUIRED_LIBRARIES)
else(DEFINED SAVED_REQUIRED_LIBRARIES)
unset(CMAKE_REQUIRED_LIBRARIES)
endif(DEFINED SAVED_REQUIRED_LIBRARIES)
#######################################################################
# packages
# Doxygen: necessary for HTML and PDF docs
find_package(Doxygen)
# LaTex: necessary for PDF docs (note: FindLATEX doesn't return LATEX_FOUND)
# Note: we only check existence of `latex' (LATEX_COMPILER), hence
# building the pdf docs may still fail because of other missing tools.
set (LATEX_FOUND)
if (DOXYGEN_FOUND)
find_package(LATEX)
if (LATEX_COMPILER AND NOT LATEX_FOUND)
set(LATEX_FOUND YES)
endif (LATEX_COMPILER AND NOT LATEX_FOUND)
endif (DOXYGEN_FOUND)
# message("Doxygen found : ${DOXYGEN_FOUND}")
# message("LaTex found : ${LATEX_FOUND}")
# message("LaTex Compiler : ${LATEX_COMPILER}")
#
# End of "$Id$".
#

View file

@ -1,156 +0,0 @@
#
# "$Id$"
#
# CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
# Written by Michael Surette
#
# Copyright 1998-2017 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file. If this
# file is missing or damaged, see the license at:
#
# http://www.fltk.org/COPYING.php
#
# Please report all bugs and problems on the following page:
#
# http://www.fltk.org/str.php
#
#######################################################################
# basic setup
#######################################################################
# The FLTK version
set(FLTK_VERSION_MAJOR "1")
set(FLTK_VERSION_MINOR "3")
set(FLTK_VERSION_PATCH "5")
set(FLTK_VERSION "${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}")
set(FLTK_VERSION_FULL "${FLTK_VERSION}.${FLTK_VERSION_PATCH}")
set(EXECUTABLE_OUTPUT_PATH ${FLTK_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${FLTK_BINARY_DIR}/lib)
set(ARCHIVE_OUTPUT_PATH ${FLTK_BINARY_DIR}/lib)
# Search for modules in the FLTK source dir first
set(CMAKE_MODULE_PATH "${FLTK_SOURCE_DIR}/CMake")
set(FLTK_INCLUDE_DIRS ${FLTK_BINARY_DIR} ${FLTK_SOURCE_DIR})
include_directories(${FLTK_INCLUDE_DIRS})
# Setup install locations
if(CMAKE_VERSION VERSION_GREATER 2.8.4)
# Use GNUInstallDirs if available.
include(GNUInstallDirs)
else()
# Else set reasonable defaults.
set(CMAKE_INSTALL_BINDIR bin)
set(CMAKE_INSTALL_LIBDIR lib)
set(CMAKE_INSTALL_INCLUDEDIR include)
set(CMAKE_INSTALL_DATADIR share)
set(CMAKE_INSTALL_MANDIR share/man)
endif(CMAKE_VERSION VERSION_GREATER 2.8.4)
set(FLTK_BINDIR ${CMAKE_INSTALL_BINDIR} CACHE PATH
"Binary install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set(FLTK_LIBDIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH
"Library install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set(FLTK_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH
"Public header install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set(FLTK_DATADIR ${CMAKE_INSTALL_DATADIR} CACHE PATH
"Non-arch data install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set(FLTK_MANDIR ${CMAKE_INSTALL_MANDIR} CACHE PATH
"Manual install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
set(FLTK_DOCDIR ${CMAKE_INSTALL_DATADIR}/doc CACHE PATH
"Non-arch doc install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
#######################################################################
# platform dependent information
#######################################################################
# The following part is probably wrong but does no harm.
# This will be removed in FLTK 1.4.0. AlbrechtS, Dec 28, 2017.
# fix no WIN32 defined issue
if(NOT WIN32)
if(_WIN32)
set(WIN32 _WIN32)
elseif(__WIN32__)
set(WIN32 __WIN32__)
endif(_WIN32)
endif(NOT WIN32)
# set where config files go
if(WIN32 AND NOT CYGWIN)
set(FLTK_CONFIG_PATH CMake)
elseif(APPLE AND NOT OPTION_APPLE_X11)
set(FLTK_CONFIG_PATH FLTK/.framework/Resources/CMake)
else()
set(FLTK_CONFIG_PATH ${FLTK_DATADIR}/fltk)
endif(WIN32 AND NOT CYGWIN)
include(TestBigEndian)
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
if(APPLE)
set(HAVE_STRCASECMP 1)
set(HAVE_DIRENT_H 1)
set(HAVE_SNPRINTF 1)
set(HAVE_VSNPRINTF 1)
set(HAVE_SCANDIR 1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated")
if(OPTION_APPLE_X11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -U__APPLE__ -mmacosx-version-min=10.3")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -U__APPLE__")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/opt/X11/lib -lfontconfig")
else()
set(__APPLE_QUARTZ__ 1)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Cocoa")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework Cocoa")
endif(OPTION_APPLE_X11)
endif(APPLE)
if(WIN32)
add_definitions(-DWIN32)
if(MSVC)
add_definitions(-DWIN32_LEAN_AND_MEAN)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
######## from ide/VisualC2010/config.h
set(BORDER_WIDTH 2)
########
endif(MSVC)
if(CMAKE_C_COMPILER_ID STREQUAL GNU)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-subsystem,windows")
endif(CMAKE_C_COMPILER_ID STREQUAL GNU)
if(MINGW AND EXISTS /mingw)
list(APPEND CMAKE_PREFIX_PATH /mingw)
endif(MINGW AND EXISTS /mingw)
endif(WIN32)
#######################################################################
# size of ints
include(CheckTypeSize)
CHECK_TYPE_SIZE(short SIZEOF_SHORT)
CHECK_TYPE_SIZE(int SIZEOF_INT)
CHECK_TYPE_SIZE(long SIZEOF_LONG)
CHECK_TYPE_SIZE("long long" HAVE_LONG_LONG)
if(${SIZEOF_SHORT} MATCHES "^2$")
set(U16 "unsigned short")
endif(${SIZEOF_SHORT} MATCHES "^2$")
if(${SIZEOF_INT} MATCHES "^4$")
set(U32 "unsigned")
else()
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()
if(${SIZEOF_LONG} MATCHES "^8$")
set(U64 "unsigned long")
endif(${SIZEOF_LONG} MATCHES "^8$")
endif(${SIZEOF_INT} MATCHES "^8$")

View file

@ -1,81 +0,0 @@
#
# "$Id$"
#
# This file sets variables for common use in export.cmake and install.cmake
# Written by Michael Surette
#
# Copyright 1998-2015 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file. If this
# file is missing or damaged, see the license at:
#
# http://www.fltk.org/COPYING.php
#
# Please report all bugs and problems on the following page:
#
# http://www.fltk.org/str.php
#
#######################################################################
set(FL_MAJOR_VERSION ${FLTK_VERSION_MAJOR})
set(FL_MINOR_VERSION ${FLTK_VERSION_MINOR})
set(FL_PATCH_VERSION ${FLTK_VERSION_PATCH})
#######################################################################
# add several libraries (STR #3011)
# FIXME: libraries may need reordering, and this version does not yet
# correctly support static linking and local zlib, png, and jpeg libs.
if(LIB_fontconfig)
list(APPEND FLTK_LDLIBS -lfontconfig)
endif(LIB_fontconfig)
if(HAVE_DLSYM)
list(APPEND FLTK_LDLIBS -ldl)
endif(HAVE_DLSYM)
if(LIB_png)
list(APPEND IMAGELIBS -lpng)
endif(LIB_png)
if(LIB_zlib)
list(APPEND IMAGELIBS -lz)
endif(LIB_zlib)
if(LIB_jpeg)
list(APPEND IMAGELIBS -ljpeg)
endif(LIB_jpeg)
string(REPLACE ";" " " IMAGELIBS "${IMAGELIBS}")
set(STATICIMAGELIBS "${IMAGELIBS}")
#######################################################################
set(CC ${CMAKE_C_COMPILER})
set(CXX ${CMAKE_CXX_COMPILER})
set(ARCHFLAGS ${OPTION_ARCHFLAGS})
string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_UPPER)
if(${BUILD_UPPER})
set(CFLAGS "${CMAKE_C_FLAGS_${BUILD_UPPER}} ${CFLAGS}")
endif(${BUILD_UPPER})
set(CFLAGS "${OPTION_OPTIM} ${CMAKE_C_FLAGS} ${CFLAGS}")
foreach(arg ${FLTK_CFLAGS})
set(CFLAGS "${CFLAGS} ${arg}")
endforeach(arg ${FLTK_CFLAGS})
set(CXXFLAGS ${CFLAGS})
foreach(arg ${FLTK_LDLIBS})
set(LINK_LIBS "${LINK_LIBS} ${arg}")
endforeach(arg ${FLTK_LDLIBS})
set(LIBS ${LINK_LIBS})
if (${CMAKE_SYSTEM_NAME} STREQUAL "AIX")
set(SHAREDSUFFIX "_s")
else ()
set(SHAREDSUFFIX "")
endif (${CMAKE_SYSTEM_NAME} STREQUAL "AIX")

View file

@ -1,77 +0,0 @@
#
# "$Id$"
#
# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
# Written by Michael Surette
#
# Copyright 1998-2016 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file. If this
# file is missing or damaged, see the license at:
#
# http://www.fltk.org/COPYING.php
#
# Please report all bugs and problems on the following page:
#
# http://www.fltk.org/str.php
#
# Prevent annoying warning under Cygwin; this must be before project().
# Remove when CMake >= 2.8.4 is required
set(CMAKE_LEGACY_CYGWIN_WIN32 0)
project(FLTK)
cmake_minimum_required(VERSION 2.6.3)
#######################################################################
# define some functions and macros
#######################################################################
include(CMake/FLTK-Functions.cmake)
include(CMake/macros.cmake)
#######################################################################
# basic setup
#######################################################################
include(CMake/setup.cmake)
#######################################################################
# check for headers, libraries and functions
#######################################################################
include(CMake/resources.cmake)
#######################################################################
# options
#######################################################################
include(CMake/options.cmake)
#######################################################################
# variables shared by export and install
# export.cmake creates configuration files for direct use in a built but uninstalled FLTK
# install.cmake creates these files for an installed FLTK
# these two would only differ in paths, so common variables are set here
#######################################################################
include(CMake/variables.cmake)
#######################################################################
# final config and export
#######################################################################
include(CMake/export.cmake)
configure_file(
${FLTK_SOURCE_DIR}/abi-version.cmake.in
${FLTK_BINARY_DIR}/FL/abi-version.h
@ONLY
)
#######################################################################
# build examples - these have to be built after fluid is built/imported
#######################################################################
if(OPTION_BUILD_EXAMPLES)
add_subdirectory(test)
endif(OPTION_BUILD_EXAMPLES)
#######################################################################
# installation
#######################################################################
#include(CMake/install.cmake)

View file

@ -1,530 +0,0 @@
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
through the "Software Trouble Report" on the following page:
http://www.fltk.org/str.php
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!

View file

@ -1,71 +0,0 @@
CREDITS - Fast Light Tool Kit (FLTK) Version 1.3.5
--------------------------------------------------
This file lists the people responsible for the toolkit you are
now using. If you've been looking for your name in lights
but we've forgotten you here, please use the report on the
following page, and we'll update this file accordingly:
http://www.fltk.org/str.php
CORE DEVELOPERS
The following people do the day-to-day development of FLTK:
Greg Ercolano
Manolo Gouy
Lauri Kasanen
Ian MacArthur
Pierre Ossman
Albrecht Schlosser
These people have previously been active developers 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:
Laszlo Z. Antal (LZA)
Teun Burgers
Paul Chambers
Stephen Davies
Yuri D'Elia
Domingo Alvarez Duarte
Yuri Fedorchenko
George Garvey
Duncan Gibson
Mikael Hultgren
Stuart Levy
Jean-Marc Lienher (OksiD)
Howard Lightstone
Mike Lindner
Alexander Mai
Alexander Rabi
James Roth
Ivan Nieto (Mr.Satan)
Jamie Snape
Andrea Suatoni
Michael Surette
Paul Sydney
Aaron Ucko
Emanuele Vicentini
Josef Vitu
Jim Wilson
Ken Yarnall

View file

@ -1,38 +0,0 @@
# 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)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,73 +0,0 @@
//
// "$Id$"
//
// Adjuster widget header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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.png
\image latex adjuster1.png "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$".
//

View file

@ -1,41 +0,0 @@
//
// "$Id$"
//
// BMP image header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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$".
//

View file

@ -1,78 +0,0 @@
//
// "$Id$"
//
// Bitmap header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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 {
friend class Fl_Quartz_Graphics_Driver;
friend class Fl_GDI_Graphics_Driver;
friend class Fl_GDI_Printer_Graphics_Driver;
friend class Fl_Xlib_Graphics_Driver;
public:
/** pointer to raw bitmap data */
const uchar *array;
/** Non-zero if array points to bitmap data allocated internally */
int alloc_array;
private:
int start(int XP, int YP, int WP, int HP, int &cx, int &cy,
int &X, int &Y, int &W, int &H);
#if defined(__APPLE__) || defined(WIN32)
/** for internal use */
void *id_;
#else
/** for internal use */
unsigned id_;
#endif // __APPLE__ || WIN32
public:
/** 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$".
//

View file

@ -1,59 +0,0 @@
//
// "$Id$"
//
// Box header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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 its 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);
/** 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);
virtual int handle(int);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,326 +0,0 @@
//
// "$Id$"
//
// Browser header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2016 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Browser widget . */
// Forms-compatible 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); }
/**
Gets the default text size (in pixels) for the lines in the browser.
*/
Fl_Fontsize textsize() const { return Fl_Browser_::textsize(); }
/*
Sets the default text size for the lines in the browser to newSize.
Defined and documented in Fl_Browser.cxx
*/
void textsize(Fl_Fontsize newSize);
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(..);
static 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$".
//

View file

@ -1,388 +0,0 @@
//
// "$Id$"
//
// Common browser header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2016 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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.
Keyboard navigation of browser items
------------------------------------
The keyboard navigation of browser items is only possible if
visible_focus() is enabled. If disabled, the widget rejects keyboard focus;
Tab and Shift-Tab focus navigation will skip the widget.
In 'Select' and 'Normal' mode, the widget rejects keyboard focus;
no navigation keys are supported (other than scrollbar positioning).
In 'Hold' mode, the widget accepts keyboard focus, and Up/Down arrow
keys can navigate the selected item.
In 'Multi' mode, the widget accepts keyboard focus, and Up/Down arrow
keys navigate the focus box; Space toggles the current item's selection,
Enter selects only the current item (deselects all others). If Shift
(or Ctrl) is combined with Up/Down arrow keys, the current item's
selection state is extended to the next item. In this way one can
extend a selection or de-selection.
*/
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 { (void)item; 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) { (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 { (void)index; 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 newSize) { textsize_ = newSize; }
/**
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::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 \p newSize, 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 newSize to the special value of 0 causes the widget to
track the global Fl::scrollbar_size(), which is the default.
\param[in] newSize 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 newSize) {
scrollbar_size_ = newSize;
}
/**
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$".
//

View file

@ -1,176 +0,0 @@
//
// "$Id$"
//
// Button header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2014 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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
extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*);
class Fl_Widget_Tracker;
/**
\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:
static Fl_Widget_Tracker *key_release_tracker;
static void key_release_timeout(void*);
void simulate_key_action();
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().
Some derived classes (e.g. Fl_Round_Button and Fl_Light_Button use
down_box() for special purposes. See docs of these classes.
\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$".
//

View file

@ -1,88 +0,0 @@
//
// "$Id$"
//
// Main header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Handling transparently platform dependent cairo include files
*/
#ifndef FL_CAIRO_H
# define FL_CAIRO_H
# ifdef FLTK_HAVE_CAIRO
// Cairo is currently supported for the following platforms:
// Win32, Apple Quartz, X11
# include <FL/Fl_Export.H>
# include <cairo.h>
/**
\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 == \e true (the default) indicates that the cairo context \p c
will be deleted by FLTK internally when another cc is set later.
\p own == \e false indicates cc deletion is handled externally
by the user program.
*/
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_; // false by default, prevents the automatic cairo mapping on fltk windows
// for custom cairo implementations.
void* window_, *gc_; // for keeping track internally of last win+gc treated
};
/** @} */
# endif // FLTK_HAVE_CAIRO
#endif // FL_CAIRO_H
//
// End of "$Id$" .
//

View file

@ -1,83 +0,0 @@
//
// "$Id$"
//
// Main header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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 FLTK_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 // FLTK_HAVE_CAIRO
#endif // FL_CAIRO_WINDOW_H
//
// End of "$Id$" .
//

View file

@ -1,151 +0,0 @@
//
// "$Id$"
//
// Forms chart header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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.png
\image latex charts.png "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$".
//

View file

@ -1,113 +0,0 @@
//
// "$Id$"
//
// Fl_Check_Browser header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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$".
//

View file

@ -1,39 +0,0 @@
//
// "$Id$"
//
// Check button header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2014 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#ifndef Fl_Check_Button_H
#define Fl_Check_Button_H
#include "Fl_Light_Button.H"
/*
class: Fl_Check_Button.
A button with a "checkmark" to show its status.
*/
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$".
//

View file

@ -1,106 +0,0 @@
//
// "$Id$"
//
// Choice header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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 clicks a menu item, value() is set to that item
and then:
- The item's callback is done if one has been set; the
Fl_Choice is passed as the Fl_Widget* argument,
along with any userdata configured for the callback.
- If the item does not have a callback, the Fl_Choice widget's
callback is done instead, along with any userdata configured
for it. The callback can determine which item was picked using
value(), mvalue(), item_pathname(), etc.
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.png
\image latex choice.png "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$".
//

View file

@ -1,128 +0,0 @@
//
// "$Id$"
//
// Clock header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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.png
\htmlonly </TD> <TD> \endhtmlonly
\image html round_clock.png
\htmlonly </TD> </TR> </table> \endhtmlonly
\image latex clock.png "FL_SQUARE_CLOCK type" width=4cm
\image latex round_clock.png "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.png
\htmlonly </TD> <TD> \endhtmlonly
\image html round_clock.png
\htmlonly </TD> </TR> </table> \endhtmlonly
\image latex clock.png "FL_SQUARE_CLOCK type" width=4cm
\image latex round_clock.png "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$".
//

View file

@ -1,190 +0,0 @@
//
// "$Id$"
//
// Color chooser header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/** \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.jpg "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
\return color modes are rgb(0), byte(1), hex(2), or hsv(3)
*/
int mode() {return choice.value();}
/**
Set which Fl_Color_Chooser variant is currently active
\param[in] newMode color modes are rgb(0), byte(1), hex(2), or hsv(3)
*/
void mode(int newMode);
/**
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, int m=-1);
FL_EXPORT int fl_color_chooser(const char* name, uchar& r, uchar& g, uchar& b, int m=-1);
#endif
//
// End of "$Id$".
//

View file

@ -1,137 +0,0 @@
//
// "$Id$"
//
// Copy-to-clipboard code for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2014 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#ifndef Fl_Copy_Surface_H
#define Fl_Copy_Surface_H
#include <FL/Fl_Paged_Device.H>
#include <FL/Fl_Printer.H>
#include <FL/x.H>
/** Supports copying of graphical data to the clipboard.
<br> After creation of an Fl_Copy_Surface object, call set_current() on it, and all subsequent graphics requests
will be recorded in the clipboard. It's possible to draw widgets (using Fl_Copy_Surface::draw()
) or to use any of the \ref fl_drawings or the \ref fl_attributes.
Finally, delete the Fl_Copy_Surface object to load the clipboard with the graphical data.
<br> Fl_GL_Window 's can be copied to the clipboard as well.
<br> Usage example:
\code
Fl_Widget *g = ...; // a widget you want to copy to the clipboard
Fl_Copy_Surface *copy_surf = new Fl_Copy_Surface(g->w(), g->h()); // create an Fl_Copy_Surface object
copy_surf->set_current(); // direct graphics requests to the clipboard
fl_color(FL_WHITE); fl_rectf(0, 0, g->w(), g->h()); // draw a white background
copy_surf->draw(g); // draw the g widget in the clipboard
delete copy_surf; // after this, the clipboard is loaded
Fl_Display_Device::display_device()->set_current(); // direct graphics requests back to the display
\endcode
Platform details:
\li MSWindows: Transparent RGB images copy without transparency.
The graphical data are copied to the clipboard as an 'enhanced metafile'.
\li Mac OS: The graphical data are copied to the clipboard (a.k.a. pasteboard) in two 'flavors':
1) in vectorial form as PDF data; 2) in bitmap form as a TIFF image.
Applications to which the clipboard content is pasted can use the flavor that suits them best.
\li X11: the graphical data are copied to the clipboard as an image in BMP format.
*/
class FL_EXPORT Fl_Copy_Surface : public Fl_Surface_Device {
private:
int width;
int height;
Fl_Paged_Device *helper;
#ifdef __APPLE__
CFMutableDataRef pdfdata;
CGContextRef oldgc;
CGContextRef gc;
void prepare_copy_pdf_and_tiff(int w, int h);
void complete_copy_pdf_and_tiff();
void init_PDF_context(int w, int h);
static size_t MyPutBytes(void* info, const void* buffer, size_t count);
#elif defined(WIN32)
HDC oldgc;
HDC gc;
#else // Xlib
Fl_Offscreen xid;
Window oldwindow;
Fl_Surface_Device *_ss;
#endif
public:
static const char *class_id;
const char *class_name() {return class_id;};
Fl_Copy_Surface(int w, int h);
~Fl_Copy_Surface();
void set_current();
void draw(Fl_Widget* widget, int delta_x = 0, int delta_y = 0);
void draw_decorated_window(Fl_Window* win, int delta_x = 0, int delta_y = 0);
/** Returns the pixel width of the copy surface */
int w() { return width; }
/** Returns the pixel height of the copy surface */
int h() { return height; }
};
#if defined(__APPLE__)
/* Mac class to reimplement Fl_Paged_Device::printable_rect() */
class FL_EXPORT Fl_Quartz_Surface_ : public Fl_System_Printer {
protected:
int width;
int height;
public:
static const char *class_id;
const char *class_name() {return class_id;};
Fl_Quartz_Surface_(int w, int h);
virtual int printable_rect(int *w, int *h);
virtual ~Fl_Quartz_Surface_() {};
};
#elif defined(WIN32)
/* Win class to implement translate()/untranslate() */
class FL_EXPORT Fl_GDI_Surface_ : public Fl_Paged_Device {
int width;
int height;
unsigned depth;
POINT origins[10];
public:
static const char *class_id;
const char *class_name() {return class_id;};
Fl_GDI_Surface_();
virtual void translate(int x, int y);
virtual void untranslate();
virtual ~Fl_GDI_Surface_();
};
#elif !defined(FL_DOXYGEN)
/* Xlib class to implement translate()/untranslate() */
class FL_EXPORT Fl_Xlib_Surface_ : public Fl_Paged_Device {
public:
static const char *class_id;
const char *class_name() {return class_id;};
Fl_Xlib_Surface_();
virtual void translate(int x, int y);
virtual void untranslate();
virtual ~Fl_Xlib_Surface_();
};
#endif
#endif // Fl_Copy_Surface_H
//
// End of "$Id$".
//

View file

@ -1,115 +0,0 @@
//
// "$Id$"
//
// Counter header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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.png</P>
\image latex counter.png "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$".
//

View file

@ -1,636 +0,0 @@
//
// "$Id$"
//
// Definition of classes Fl_Device, Fl_Graphics_Driver, Fl_Surface_Device, Fl_Display_Device
// for the Fast Light Tool Kit (FLTK).
//
// Copyright 2010-2014 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/** \file Fl_Device.H
\brief declaration of classes Fl_Device, Fl_Graphics_Driver, Fl_Surface_Device,
Fl_Display_Device, Fl_Device_Plugin.
*/
#ifndef Fl_Device_H
#define Fl_Device_H
#include <FL/x.H>
#include <FL/Fl_Plugin.H>
#include <FL/Fl_Image.H>
#include <FL/Fl_Bitmap.H>
#include <FL/Fl_Pixmap.H>
#include <FL/Fl_RGB_Image.H>
#include <stdlib.h>
class Fl_Graphics_Driver;
class Fl_Font_Descriptor;
/** \brief Points to the driver that currently receives all graphics requests */
FL_EXPORT extern Fl_Graphics_Driver *fl_graphics_driver;
/**
signature of image generation callback function.
\param[in] data user data passed to function
\param[in] x,y,w position and width of scan line in image
\param[out] buf buffer for generated image data. You must copy \p w
pixels from scanline \p y, starting at pixel \p x
to this buffer.
*/
typedef void (*Fl_Draw_Image_Cb)(void* data,int x,int y,int w,uchar* buf);
// typedef what the x,y fields in a point are:
#ifdef WIN32
typedef int COORD_T;
# define XPOINT XPoint
#elif defined(__APPLE__)
typedef float COORD_T;
typedef struct { float x; float y; } QPoint;
# define XPOINT QPoint
extern float fl_quartz_line_width_;
#else
typedef short COORD_T;
# define XPOINT XPoint
#endif
/**
All graphical output devices and all graphics systems.
This class supports a rudimentary system of run-time type information.
*/
class FL_EXPORT Fl_Device {
public:
/** A string that identifies each subclass of Fl_Device.
Function class_name() applied to a device of this class returns this string.
*/
static const char *class_id;
/**
Returns the name of the class of this object.
Use of the class_name() function is discouraged because it will be removed from future FLTK versions.
The class of an instance of an Fl_Device subclass can be checked with code such as:
\code
if ( instance->class_name() == Fl_Printer::class_id ) { ... }
\endcode
*/
virtual const char *class_name() {return class_id;};
/**
Virtual destructor.
The destructor of Fl_Device must be virtual to make the destructors of
derived classes being called correctly on destruction.
*/
virtual ~Fl_Device() {};
};
#define FL_REGION_STACK_SIZE 10
#define FL_MATRIX_STACK_SIZE 32
/**
\brief A virtual class subclassed for each graphics driver FLTK uses.
Typically, FLTK applications do not use directly objects from this class. Rather, they perform
drawing operations (e.g., fl_rectf()) that operate on the current drawing surface (see Fl_Surface_Device).
Drawing operations are functionally presented in \ref drawing and as function lists
in the \ref fl_drawings and \ref fl_attributes modules. The \ref fl_graphics_driver global variable
gives at any time the graphics driver used by all drawing operations. Its value changes when
drawing operations are directed to another drawing surface by Fl_Surface_Device::set_current().
\p The Fl_Graphics_Driver class is of interest if one wants to perform new kinds of drawing operations.
An example would be to draw to a PDF file. This would involve creating a new Fl_Graphics_Driver derived
class. This new class should implement all virtual methods of the Fl_Graphics_Driver class
to support all FLTK drawing functions.
*/
class FL_EXPORT Fl_Graphics_Driver : public Fl_Device {
public:
/** A 2D coordinate transformation matrix
*/
struct matrix {double a, b, c, d, x, y;};
private:
static const matrix m0;
Fl_Font font_; // current font
Fl_Fontsize size_; // current font size
Fl_Color color_; // current color
int sptr;
static const int matrix_stack_size = FL_MATRIX_STACK_SIZE;
matrix stack[FL_MATRIX_STACK_SIZE];
matrix m;
int n, p_size, gap_;
XPOINT *p;
int what;
int fl_clip_state_number;
int rstackptr;
static const int region_stack_max = FL_REGION_STACK_SIZE - 1;
Fl_Region rstack[FL_REGION_STACK_SIZE];
#ifdef WIN32
int numcount;
int counts[20];
#endif
Fl_Font_Descriptor *font_descriptor_;
void transformed_vertex0(COORD_T x, COORD_T y);
void fixloop();
protected:
#ifndef FL_DOXYGEN
enum {LINE, LOOP, POLYGON, POINT_};
inline int vertex_no() { return n; }
inline XPOINT *vertices() {return p;}
inline int vertex_kind() {return what;}
#endif
/* ** \brief red color for background and/or mixing if device does not support masking or alpha *
uchar bg_r_;
** \brief green color for background and/or mixing if device does not support masking or alpha *
uchar bg_g_;
** \brief blue color for background and/or mixing if device does not support masking or alpha *
uchar bg_b_; */
friend class Fl_Pixmap;
friend class Fl_Bitmap;
friend class Fl_RGB_Image;
friend void fl_rect(int x, int y, int w, int h);
friend void fl_rectf(int x, int y, int w, int h);
friend void fl_line_style(int style, int width, char* dashes);
friend void fl_xyline(int x, int y, int x1);
friend void fl_xyline(int x, int y, int x1, int y2);
friend void fl_xyline(int x, int y, int x1, int y2, int x3);
friend void fl_yxline(int x, int y, int y1);
friend void fl_yxline(int x, int y, int y1, int x2);
friend void fl_yxline(int x, int y, int y1, int x2, int y3);
friend void fl_line(int x, int y, int x1, int y1);
friend void fl_line(int x, int y, int x1, int y1, int x2, int y2);
friend void fl_draw(const char *str, int n, int x, int y);
#ifdef __APPLE__
friend void fl_draw(const char *str, int n, float x, float y);
#endif
friend void fl_draw(int angle, const char *str, int n, int x, int y);
friend void fl_rtl_draw(const char *str, int n, int x, int y);
friend void fl_font(Fl_Font face, Fl_Fontsize size);
friend void fl_color(Fl_Color c);
friend void fl_color(uchar r, uchar g, uchar b);
friend void fl_point(int x, int y);
friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2);
friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2);
friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
friend void fl_begin_points();
friend void fl_begin_line();
friend void fl_begin_loop();
friend void fl_begin_polygon();
friend void fl_vertex(double x, double y);
friend void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
friend void fl_circle(double x, double y, double r);
friend void fl_arc(double x, double y, double r, double start, double end);
friend void fl_arc(int x, int y, int w, int h, double a1, double a2);
friend void fl_pie(int x, int y, int w, int h, double a1, double a2);
friend void fl_end_points();
friend void fl_end_line();
friend void fl_end_loop();
friend void fl_end_polygon();
friend void fl_transformed_vertex(double xf, double yf);
friend void fl_push_clip(int x, int y, int w, int h);
friend int fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
friend int fl_not_clipped(int x, int y, int w, int h);
friend void fl_push_no_clip();
friend void fl_pop_clip();
friend void fl_begin_complex_polygon();
friend void fl_gap();
friend void fl_end_complex_polygon();
friend void fl_push_matrix();
friend void fl_pop_matrix();
friend void fl_mult_matrix(double a, double b, double c, double d, double x, double y);
friend void fl_scale(double x, double y);
friend void fl_scale(double x);
friend void fl_translate(double x, double y);
friend void fl_rotate(double d);
friend double fl_transform_x(double x, double y);
friend double fl_transform_y(double x, double y);
friend double fl_transform_dx(double x, double y);
friend double fl_transform_dy(double x, double y);
friend Fl_Region fl_clip_region();
friend void fl_clip_region(Fl_Region r);
friend void fl_restore_clip();
friend void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L);
friend void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L);
friend void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
friend FL_EXPORT void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
friend FL_EXPORT void gl_start();
friend FL_EXPORT void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
matrix *fl_matrix; /**< Points to the current coordinate transformation matrix */
/** \brief The constructor. */
Fl_Graphics_Driver();
/** \brief see fl_rect(int x, int y, int w, int h). */
virtual void rect(int x, int y, int w, int h);
/** \brief see fl_rectf(int x, int y, int w, int h). */
virtual void rectf(int x, int y, int w, int h);
/** \brief see fl_line_style(int style, int width, char* dashes). */
virtual void line_style(int style, int width=0, char* dashes=0);
/** \brief see fl_xyline(int x, int y, int x1). */
virtual void xyline(int x, int y, int x1);
/** \brief see fl_xyline(int x, int y, int x1, int y2). */
virtual void xyline(int x, int y, int x1, int y2);
/** \brief see fl_xyline(int x, int y, int x1, int y2, int x3). */
virtual void xyline(int x, int y, int x1, int y2, int x3);
/** \brief see fl_yxline(int x, int y, int y1). */
virtual void yxline(int x, int y, int y1);
/** \brief see fl_yxline(int x, int y, int y1, int x2). */
virtual void yxline(int x, int y, int y1, int x2);
/** \brief see fl_yxline(int x, int y, int y1, int x2, int y3). */
virtual void yxline(int x, int y, int y1, int x2, int y3);
/** \brief see fl_line(int x, int y, int x1, int y1). */
virtual void line(int x, int y, int x1, int y1);
/** \brief see fl_line(int x, int y, int x1, int y1, int x2, int y2). */
virtual void line(int x, int y, int x1, int y1, int x2, int y2);
/** \brief see fl_draw(const char *str, int n, int x, int y). */
virtual void draw(const char *str, int n, int x, int y) {}
#ifdef __APPLE__
virtual void draw(const char *str, int n, float x, float y) { draw(str, n, (int)(x+0.5), (int)(y+0.5));}
#endif
/** \brief see fl_draw(int angle, const char *str, int n, int x, int y). */
virtual void draw(int angle, const char *str, int n, int x, int y) {}
/** \brief see fl_rtl_draw(const char *str, int n, int x, int y). */
virtual void rtl_draw(const char *str, int n, int x, int y) {};
/** \brief see fl_color(Fl_Color c). */
virtual void color(Fl_Color c) {color_ = c;}
/** \brief see fl_color(uchar r, uchar g, uchar b). */
virtual void color(uchar r, uchar g, uchar b) {}
/** \brief see fl_point(int x, int y). */
virtual void point(int x, int y);
/** \brief see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2). */
virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2);
/** \brief see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3). */
virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
/** \brief see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2). */
virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
/** \brief see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3). */
virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
/** \brief see fl_begin_points(). */
virtual void begin_points();
/** \brief see fl_begin_line(). */
virtual void begin_line();
/** \brief see fl_begin_loop(). */
virtual void begin_loop();
/** \brief see fl_begin_polygon(). */
virtual void begin_polygon();
/** \brief see fl_vertex(double x, double y). */
virtual void vertex(double x, double y);
/** \brief see fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3). */
virtual void curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
/** \brief see fl_circle(double x, double y, double r). */
virtual void circle(double x, double y, double r);
/** \brief see fl_arc(double x, double y, double r, double start, double end). */
virtual void arc(double x, double y, double r, double start, double end);
/** \brief see fl_arc(int x, int y, int w, int h, double a1, double a2). */
virtual void arc(int x, int y, int w, int h, double a1, double a2);
/** \brief see fl_pie(int x, int y, int w, int h, double a1, double a2). */
virtual void pie(int x, int y, int w, int h, double a1, double a2);
/** \brief see fl_end_points(). */
virtual void end_points();
/** \brief see fl_end_line(). */
virtual void end_line();
/** \brief see fl_end_loop(). */
virtual void end_loop();
/** \brief see fl_end_polygon(). */
virtual void end_polygon();
/** \brief see fl_begin_complex_polygon(). */
virtual void begin_complex_polygon();
/** \brief see fl_gap(). */
virtual void gap();
/** \brief see fl_end_complex_polygon(). */
virtual void end_complex_polygon();
/** \brief see fl_transformed_vertex(double xf, double yf). */
virtual void transformed_vertex(double xf, double yf);
/** \brief see fl_push_clip(int x, int y, int w, int h). */
virtual void push_clip(int x, int y, int w, int h);
/** \brief see fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H). */
virtual int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
/** \brief see fl_not_clipped(int x, int y, int w, int h). */
virtual int not_clipped(int x, int y, int w, int h);
/** \brief see fl_push_no_clip(). */
virtual void push_no_clip();
/** \brief see fl_pop_clip(). */
virtual void pop_clip();
/** \brief see fl_push_matrix(). */
void push_matrix();
/** \brief see fl_pop_matrix(). */
void pop_matrix();
/** \brief see fl_mult_matrix(double a, double b, double c, double d, double x, double y). */
void mult_matrix(double a, double b, double c, double d, double x, double y);
/** \brief see fl_scale(double x, double y). */
inline void scale(double x, double y) { mult_matrix(x,0,0,y,0,0); }
/** \brief see fl_scale(double x). */
inline void scale(double x) { mult_matrix(x,0,0,x,0,0); }
/** \brief see fl_translate(double x, double y). */
inline void translate(double x,double y) { mult_matrix(1,0,0,1,x,y); }
/** \brief see fl_rotate(double d). */
void rotate(double d);
/** \brief see fl_transform_x(double x, double y). */
double transform_x(double x, double y);
/** \brief see fl_transform_y(double x, double y). */
double transform_y(double x, double y);
/** \brief see fl_transform_dx(double x, double y). */
double transform_dx(double x, double y);
/** \brief see fl_transform_dy(double x, double y). */
double transform_dy(double x, double y);
/** \brief see fl_clip_region(). */
Fl_Region clip_region();
/** \brief see fl_clip_region(Fl_Region r). */
void clip_region(Fl_Region r);
/** \brief see fl_restore_clip(). */
void restore_clip();
// Images
/** \brief see fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L). */
virtual void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0) {}
/** \brief see fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L). */
virtual void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0) {}
/** \brief see fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D). */
virtual void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3) {}
/** \brief see fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D). */
virtual void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1) {}
// Image classes
/** \brief Draws an Fl_RGB_Image object to the device.
*
Specifies a bounding box for the image, with the origin (upper left-hand corner) of
the image offset by the cx and cy arguments.
*/
virtual void draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy) {}
/** \brief Draws an Fl_Pixmap object to the device.
*
Specifies a bounding box for the image, with the origin (upper left-hand corner) of
the image offset by the cx and cy arguments.
*/
virtual void draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy) {}
/** \brief Draws an Fl_Bitmap object to the device.
*
Specifies a bounding box for the image, with the origin (upper left-hand corner) of
the image offset by the cx and cy arguments.
*/
virtual void draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {}
#if FLTK_ABI_VERSION >= 10301
virtual
#endif
void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
public:
static const char *class_id;
virtual const char *class_name() {return class_id;};
/** \brief see fl_font(Fl_Font face, Fl_Fontsize size). */
virtual void font(Fl_Font face, Fl_Fontsize fsize) {font_ = face; size_ = fsize;}
/** \brief see fl_font(void). */
Fl_Font font() {return font_; }
/** \brief see fl_size(). */
Fl_Fontsize size() {return size_; }
/** \brief see fl_width(const char *str, int n). */
virtual double width(const char *str, int n) {return 0;}
/** \brief see fl_width(unsigned int n). */
virtual inline double width(unsigned int c) { char ch = (char)c; return width(&ch, 1); }
/** \brief see fl_text_extents(const char*, int n, int& dx, int& dy, int& w, int& h). */
virtual void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
/** \brief see fl_height(). */
virtual int height() {return size();}
/** \brief see fl_descent(). */
virtual int descent() {return 0;}
/** \brief see fl_color(void). */
Fl_Color color() {return color_;}
/** Returns a pointer to the current Fl_Font_Descriptor for the graphics driver */
inline Fl_Font_Descriptor *font_descriptor() { return font_descriptor_;}
/** Sets the current Fl_Font_Descriptor for the graphics driver */
inline void font_descriptor(Fl_Font_Descriptor *d) { font_descriptor_ = d;}
#if FLTK_ABI_VERSION >= 10304 || defined(FL_DOXYGEN)
virtual
#endif
int draw_scaled(Fl_Image *img, int X, int Y, int W, int H);
/** \brief The destructor */
virtual ~Fl_Graphics_Driver() { if (p) free(p); }
};
#if defined(__APPLE__) || defined(FL_DOXYGEN)
/**
\brief The Mac OS X-specific graphics class.
*
This class is implemented only on the Mac OS X platform.
*/
class FL_EXPORT Fl_Quartz_Graphics_Driver : public Fl_Graphics_Driver {
public:
static const char *class_id;
const char *class_name() {return class_id;};
void color(Fl_Color c);
void color(uchar r, uchar g, uchar b);
void draw(const char* str, int n, int x, int y);
#ifdef __APPLE__
void draw(const char *str, int n, float x, float y);
#endif
void draw(int angle, const char *str, int n, int x, int y);
void rtl_draw(const char* str, int n, int x, int y);
void font(Fl_Font face, Fl_Fontsize size);
void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
int draw_scaled(Fl_Image *img, int XP, int YP, int WP, int HP);
void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
double width(const char *str, int n);
double width(unsigned int c);
void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
int height();
int descent();
#if ! defined(FL_DOXYGEN)
static Fl_Offscreen create_offscreen_with_alpha(int w, int h);
#endif
void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
};
#endif
#if defined(WIN32) || defined(FL_DOXYGEN)
/**
\brief The MSWindows-specific graphics class.
*
This class is implemented only on the MSWindows platform.
*/
class FL_EXPORT Fl_GDI_Graphics_Driver : public Fl_Graphics_Driver {
public:
static const char *class_id;
const char *class_name() {return class_id;};
void color(Fl_Color c);
void color(uchar r, uchar g, uchar b);
void draw(const char* str, int n, int x, int y);
void draw(int angle, const char *str, int n, int x, int y);
void rtl_draw(const char* str, int n, int x, int y);
void font(Fl_Font face, Fl_Fontsize size);
void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
double width(const char *str, int n);
double width(unsigned int c);
void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
int height();
int descent();
#if ! defined(FL_DOXYGEN)
void copy_offscreen_with_alpha(int x,int y,int w,int h,HBITMAP bitmap,int srcx,int srcy);
#endif
void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
};
/**
The graphics driver used when printing on MSWindows.
*
This class is implemented only on the MSWindows platform. It 's extremely similar to Fl_GDI_Graphics_Driver.
*/
class FL_EXPORT Fl_GDI_Printer_Graphics_Driver : public Fl_GDI_Graphics_Driver {
public:
static const char *class_id;
const char *class_name() {return class_id;};
void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
void draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy);
int draw_scaled(Fl_Image *img, int XP, int YP, int WP, int HP);
};
#endif
#if !(defined(__APPLE__) || defined(WIN32))
/**
\brief The Xlib-specific graphics class.
*
This class is implemented only on the Xlib platform.
*/
class FL_EXPORT Fl_Xlib_Graphics_Driver : public Fl_Graphics_Driver {
public:
static const char *class_id;
const char *class_name() {return class_id;};
void color(Fl_Color c);
void color(uchar r, uchar g, uchar b);
void draw(const char* str, int n, int x, int y);
void draw(int angle, const char *str, int n, int x, int y);
void rtl_draw(const char* str, int n, int x, int y);
void font(Fl_Font face, Fl_Fontsize size);
void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
double width(const char *str, int n);
double width(unsigned int c);
void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
int height();
int descent();
void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
#if ! defined(FL_DOXYGEN)
void copy_offscreen_with_alpha(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
#endif
};
#endif
/**
A drawing surface that's susceptible to receive graphical output.
Any FLTK application has at any time a current drawing surface to which all drawing requests are directed.
The current surface is given by Fl_Surface_Device::surface().
When main() begins running, the current drawing surface has been set to the computer's display,
an instance of the Fl_Display_Device class.
A drawing surface other than the computer's display, is typically used as follows:
<ol><li> Create \c surface, an object from a particular Fl_Surface_Device derived class (e.g., Fl_Copy_Surface, Fl_Printer).
<li> Memorize what is the current drawing surface with <tt> Fl_Surface_Device *old_current = Fl_Surface_Device::surface();</tt>
<li> Call \c surface->set_current(); to redirect all graphics requests to \c surface which becomes the new
current drawing surface (not necessary with class Fl_Printer because it is done by Fl_Printer::start_job()).
<li> At this point any of the \ref fl_drawings (e.g., fl_rect()) or the \ref fl_attributes or \ref drawing_images functions
(e.g., fl_draw_image(), Fl_Image::draw()) operates on the new current drawing surface.
Certain drawing surfaces allow additional ways to draw to them (e.g., Fl_Printer::print_widget(), Fl_Image_Surface::draw()).
<li> After all drawing requests have been performed, redirect graphics requests back to their previous destination
with \c old_current->set_current();.
<li> Delete \c surface.
</ol>
*/
class FL_EXPORT Fl_Surface_Device : public Fl_Device {
/** \brief The graphics driver in use by this surface. */
Fl_Graphics_Driver *_driver;
static Fl_Surface_Device *_surface; // the surface that currently receives graphics output
static Fl_Surface_Device *default_surface(); // create surface is none exists yet
protected:
/** \brief Constructor that sets the graphics driver to use for the created surface. */
Fl_Surface_Device(Fl_Graphics_Driver *graphics_driver) {_driver = graphics_driver; };
public:
static const char *class_id;
const char *class_name() {return class_id;};
virtual void set_current(void);
/** \brief Sets the graphics driver of this drawing surface. */
inline void driver(Fl_Graphics_Driver *graphics_driver) {_driver = graphics_driver;};
/** \brief Returns the graphics driver of this drawing surface. */
inline Fl_Graphics_Driver *driver() {return _driver; };
/** The current drawing surface.
In other words, the Fl_Surface_Device object that currently receives all graphics output */
static inline Fl_Surface_Device *surface() {
return _surface ? _surface : default_surface();
};
/** \brief The destructor. */
virtual ~Fl_Surface_Device() {}
};
/**
A display to which the computer can draw.
When the program begins running, an Fl_Display_Device instance has been created and made the current drawing surface.
There is no need to create any other object of this class.
*/
class FL_EXPORT Fl_Display_Device : public Fl_Surface_Device {
static Fl_Display_Device *_display; // the platform display device
#ifdef __APPLE__
friend class Fl_X;
friend class Fl_Graphics_Driver;
static bool high_res_window_; //< true when drawing to a window of a retina display (Mac OS X only)
static bool high_resolution() {return high_res_window_;}
#endif
public:
static const char *class_id;
const char *class_name() {return class_id;};
Fl_Display_Device(Fl_Graphics_Driver *graphics_driver);
static Fl_Display_Device *display_device();
};
/**
This plugin socket allows the integration of new device drivers for special
window or screen types.
This class is not intended for use outside the FLTK library.
It is currently used to provide an automated printing
service and screen capture for OpenGL windows, if linked with fltk_gl.
*/
class FL_EXPORT Fl_Device_Plugin : public Fl_Plugin {
public:
/** \brief The constructor */
Fl_Device_Plugin(const char *pluginName)
: Fl_Plugin(klass(), pluginName) { }
/** \brief Returns the class name */
virtual const char *klass() { return "fltk:device"; }
/** \brief Returns the plugin name */
virtual const char *name() = 0;
/** \brief Prints a widget
\param w the widget
\param x,y offsets where to print relatively to coordinates origin
\param height height of the current drawing area
*/
virtual int print(Fl_Widget* w, int x, int y, int height) = 0;
/** captures a rectangle of a widget as an image
\return The captured pixels as an RGB image
*/
#ifdef FL_LIBRARY
virtual
#endif
Fl_RGB_Image* rectangle_capture(Fl_Widget *widget, int x, int y, int w, int h) {return NULL;}
};
#endif // Fl_Device_H
//
// End of "$Id$".
//

View file

@ -1,88 +0,0 @@
//
// "$Id$"
//
// Dial header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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.png
\image latex dial.png "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$".
//

View file

@ -1,73 +0,0 @@
//
// "$Id$"
//
// Double-buffered window header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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);
/**
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);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,42 +0,0 @@
/*
* "$Id$"
*
* WIN32 DLL export .
*
* Copyright 1998-2010 by Bill Spitzak and others.
*
* This library is free software. Distribution and use rights are outlined in
* the file "COPYING" which should have been included with this file. If this
* file is missing or damaged, see the license at:
*
* http://www.fltk.org/COPYING.php
*
* Please report all bugs and problems on the following page:
*
* http://www.fltk.org/str.php
*/
#ifndef Fl_Export_H
# define Fl_Export_H
/*
* The following is only used when building DLLs under WIN32...
*/
# if defined(FL_DLL)
# ifdef FL_LIBRARY
# define FL_EXPORT __declspec(dllexport)
# else
# define FL_EXPORT __declspec(dllimport)
# endif /* FL_LIBRARY */
# elif __GNUC__ >= 4
# define FL_EXPORT __attribute__ ((visibility ("default")))
# else
# define FL_EXPORT
# endif /* FL_DLL */
#endif /* !Fl_Export_H */
/*
* End of "$Id$".
*/

View file

@ -1,111 +0,0 @@
//
// "$Id$"
//
// FileBrowser definitions.
//
// Copyright 1999-2010 by Michael Sweet.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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$".
//

View file

@ -1,245 +0,0 @@
//
// "$Id$"
//
// Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2015 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
// =======================================================================
// DO NOT EDIT FL/Fl_File_Chooser.H and src/Fl_File_Chooser.cxx !!!
// =======================================================================
// Please use fluid to change src/Fl_File_Chooser.fl interactively
// and then use fluid to "write code" or edit and use fluid -c .
// =======================================================================
//
// generated by Fast Light User Interface Designer (fluid) version 1.0305
#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_[FL_PATH_MAX];
char pattern_[FL_PATH_MAX];
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;
inline void cb_window_i(Fl_Double_Window*, void*);
static void cb_window(Fl_Double_Window*, void*);
Fl_Choice *showChoice;
inline void cb_showChoice_i(Fl_Choice*, void*);
static void cb_showChoice(Fl_Choice*, void*);
Fl_Menu_Button *favoritesButton;
inline void cb_favoritesButton_i(Fl_Menu_Button*, void*);
static void cb_favoritesButton(Fl_Menu_Button*, void*);
public:
Fl_Button *newButton;
private:
inline void cb_newButton_i(Fl_Button*, void*);
static void cb_newButton(Fl_Button*, void*);
inline void cb__i(Fl_Tile*, void*);
static void cb_(Fl_Tile*, void*);
Fl_File_Browser *fileList;
inline 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:
inline void cb_previewButton_i(Fl_Check_Button*, void*);
static void cb_previewButton(Fl_Check_Button*, void*);
public:
Fl_Check_Button *showHiddenButton;
private:
inline void cb_showHiddenButton_i(Fl_Check_Button*, void*);
static void cb_showHiddenButton(Fl_Check_Button*, void*);
Fl_File_Input *fileName;
inline void cb_fileName_i(Fl_File_Input*, void*);
static void cb_fileName(Fl_File_Input*, void*);
Fl_Return_Button *okButton;
inline void cb_okButton_i(Fl_Return_Button*, void*);
static void cb_okButton(Fl_Return_Button*, void*);
Fl_Button *cancelButton;
inline void cb_cancelButton_i(Fl_Button*, void*);
static void cb_cancelButton(Fl_Button*, void*);
Fl_Double_Window *favWindow;
Fl_File_Browser *favList;
inline void cb_favList_i(Fl_File_Browser*, void*);
static void cb_favList(Fl_File_Browser*, void*);
Fl_Button *favUpButton;
inline void cb_favUpButton_i(Fl_Button*, void*);
static void cb_favUpButton(Fl_Button*, void*);
Fl_Button *favDeleteButton;
inline void cb_favDeleteButton_i(Fl_Button*, void*);
static void cb_favDeleteButton(Fl_Button*, void*);
Fl_Button *favDownButton;
inline void cb_favDownButton_i(Fl_Button*, void*);
static void cb_favDownButton(Fl_Button*, void*);
Fl_Button *favCancelButton;
inline void cb_favCancelButton_i(Fl_Button*, void*);
static void cb_favCancelButton(Fl_Button*, void*);
Fl_Return_Button *favOkButton;
inline 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(); };
private:
void showHidden(int e);
void remove_hidden_files();
public:
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;
/**
[standard text may be customized at run-time]
*/
static const char *hidden_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$".
//

View file

@ -1,159 +0,0 @@
//
// "$Id$"
//
// Fl_File_Icon definitions.
//
// Copyright 1999-2010 by Michael Sweet.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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$".
//

View file

@ -1,97 +0,0 @@
//
// "$Id$"
//
// File_Input header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
// Original version Copyright 1998 by Curtis Edwards.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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 as the current one.
<P align=CENTER> \image html Fl_File_Input.png </P>
\image latex Fl_File_Input.png "Fl_File_Input" width=6cm
\note As all Fl_Input derived objects, Fl_File_Input may call its callback
when losing 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$".
//

View file

@ -1,38 +0,0 @@
//
// "$Id$"
//
// Filled dial header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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_EXPORT 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);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,37 +0,0 @@
//
// "$Id$"
//
// Filled slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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_EXPORT 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);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,47 +0,0 @@
//
// "$Id$"
//
// Floating point input header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2011 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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_EXPORT 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.
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);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,47 +0,0 @@
//
// "$Id$"
//
// Forms bitmap header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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$".
//

View file

@ -1,54 +0,0 @@
//
// "$Id$"
//
// Forms pixmap header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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$".
//

View file

@ -1,80 +0,0 @@
//
// "$Id$"
//
// Forms free header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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$".
//

View file

@ -1,42 +0,0 @@
//
// "$Id$"
//
// GIF image header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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$".
//

View file

@ -1,284 +0,0 @@
//
// "$Id$"
//
// OpenGL header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2015 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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 *);
static int gl_plugin_linkage();
public:
void show();
void show(int a, char **b) {Fl_Window::show(a,b);}
void flush();
void hide();
void resize(int,int,int,int);
int handle(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,pixel_w(),pixel_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 OpenGL mode. */
static int can_do(int m) {return can_do(m,0);}
/** Returns non-zero if the hardware supports the given OpenGL mode.
\see Fl_Gl_Window::mode(const int *a) */
static int can_do(const int *m) {return can_do(0, m);}
/** Returns non-zero if the hardware supports the current OpenGL mode. */
int can_do() {return can_do(mode_,alist);}
/** Returns the current OpenGL capabilites of the window.
Don't use this if capabilities were set through Fl_Gl_Window::mode(const int *a).
*/
Fl_Mode mode() const {return (Fl_Mode)mode_;}
/**
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
- \c FL_OPENGL3 - use OpenGL version 3.0 or more.
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.
The FL_OPENGL3 flag is required to access OpenGL version 3 or more
under the X11 and MacOS platforms; it's optional under Windows.
See more details in \ref opengl3.
\version the <tt>FL_OPENGL3</tt> flag appeared in version 1.3.4
*/
int mode(int a) {return mode(a,0);}
/** Set the OpenGL capabilites of the window using platform-specific data.
\param a zero-ending array of platform-specific attributes and attribute values
<p><b>Unix/Linux platform</b>: attributes are GLX attributes adequate for the 3rd argument of
the <tt>glXChooseVisual()</tt> function (e.g., <tt>GLX_DOUBLEBUFFER</tt>, defined by including <GL/glx.h>).
\note What attributes are adequate here is subject to change.
The preferred, stable public API is Fl_Gl_Window::mode(int a).
<p><b>MSWindows platform</b>: this member function is of no use.
<p><b>Mac OS X platform</b>: attributes belong to the <tt>CGLPixelFormatAttribute</tt> enumeration
(defined by including <tt><OpenGL/OpenGL.h></tt>, e.g., <tt>kCGLPFADoubleBuffer</tt>)
and may be followed by adequate attribute values.
*/
int mode(const int *a) {return mode(0, a);}
/** Returns a pointer to the GLContext that this window is using.
\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();
// Note: Doxygen docs in Fl_Widget.H to avoid redundancy.
virtual Fl_Gl_Window* as_gl_window() {return this;}
/** The number of pixels per FLTK unit of length for the window.
Returns 1, except for a window mapped to
an Apple 'retina' display, and if Fl::use_high_res_GL(bool) is set to true,
when it returns 2. This method dynamically adjusts its value when the window
is moved to/from a retina display. This method is useful, e.g., to convert,
in a window's handle() method, the FLTK units returned by Fl::event_x() and
Fl::event_y() to the pixel units used by the OpenGL source code.
\version 1.3.4
*/
#ifdef __APPLE__
float pixels_per_unit();
#else
float pixels_per_unit() { return 1; }
#endif
/** Gives the window width in OpenGL pixels.
Generally identical with the result of the w() function, but for a window mapped to
an Apple 'retina' display, and if Fl::use_high_res_GL(bool) is set to true,
pixel_w() returns 2 * w(). This method detects when the window has been moved
between low and high resolution displays and automatically adjusts the returned value.
\version 1.3.4
*/
int pixel_w() { return int(pixels_per_unit() * w() + 0.5); }
/** Gives the window height in OpenGL pixels.
Generally identical with the result of the h() function, but for a window mapped to
an Apple 'retina' display, and if Fl::use_high_res_GL(bool) is set to true,
pixel_h() returns 2 * h(). This method detects when the window has been moved
between low and high resolution displays and automatically adjusts the returned value.
\version 1.3.4
*/
int pixel_h() { return int(pixels_per_unit() * h() + 0.5); }
~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$".
//

View file

@ -1,228 +0,0 @@
//
// "$Id$"
//
// Group header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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.
The tab and arrow keys are used to move the focus between widgets of
this group, and to other groups. The only modifier grabbed is shift
(for shift-tab), so that ctrl-tab, alt-up, and such are free
for the app to use as shortcuts.
*/
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(int index);
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.png
<br>
\image html resizebox2.png
\image latex resizebox1.png "before resize" width=4cm
\image latex resizebox2.png "after resize" width=4.85cm
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; }
// Note: Doxygen docs in Fl_Widget.H to avoid redundancy.
virtual Fl_Group* as_group() { return this; }
// 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$".
//

View file

@ -1,90 +0,0 @@
//
// "$Id$"
//
// Fl_Help_Dialog dialog for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2015 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
// ========================================================================
// DO NOT EDIT FL/Fl_Help_Dialog.H and src/Fl_Help_Dialog.cxx !!!
// ========================================================================
// Please use fluid to change src/Fl_Help_Dialog.fl interactively
// and then use fluid to "write code" or edit and use fluid -c .
// ========================================================================
//
// generated by Fast Light User Interface Designer (fluid) version 1.0305
#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]; // FIXME: we must remove those static numbers
char file_[100][FL_PATH_MAX]; // FIXME: we must remove those static numbers
int find_pos_;
public:
Fl_Help_Dialog();
private:
Fl_Double_Window *window_;
Fl_Button *back_;
inline void cb_back__i(Fl_Button*, void*);
static void cb_back_(Fl_Button*, void*);
Fl_Button *forward_;
inline void cb_forward__i(Fl_Button*, void*);
static void cb_forward_(Fl_Button*, void*);
Fl_Button *smaller_;
inline void cb_smaller__i(Fl_Button*, void*);
static void cb_smaller_(Fl_Button*, void*);
Fl_Button *larger_;
inline void cb_larger__i(Fl_Button*, void*);
static void cb_larger_(Fl_Button*, void*);
Fl_Input *find_;
inline void cb_find__i(Fl_Input*, void*);
static void cb_find_(Fl_Input*, void*);
Fl_Help_View *view_;
inline 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$".
//

View file

@ -1,399 +0,0 @@
//
// "$Id$"
//
// Help Viewer widget definitions.
//
// Copyright 1997-2010 by Easy Software Products.
// Image support by Matthias Melcher, Copyright 2000-2009.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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"
# include "filename.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_EXPORT 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_EXPORT 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.
Supported HTML tags:
- A: HREF/NAME
- B
- BODY: BGCOLOR/TEXT/LINK
- BR
- CENTER
- CODE
- DD
- DL
- DT
- EM
- FONT: COLOR/SIZE/FACE=(helvetica/arial/sans/times/serif/symbol/courier)
- H1/H2/H3/H4/H5/H6
- HEAD
- HR
- I
- IMG: SRC/WIDTH/HEIGHT/ALT
- KBD
- LI
- OL
- P
- PRE
- STRONG
- TABLE: TH/TD/TR/BORDER/BGCOLOR/COLSPAN/ALIGN=CENTER|RIGHT|LEFT
- TITLE
- TT
- U
- UL
- VAR
Supported color names:
- black,red,green,yellow,blue,magenta,fuchsia,cyan,aqua,white,gray,grey,lime,maroon,navy,olive,purple,silver,teal.
Supported urls:
- Internal: file:
- External: http: ftp: https: ipp: mailto: news:
Quoted char names:
- Aacute aacute Acirc acirc acute AElig aelig Agrave agrave amp Aring aring Atilde atilde Auml auml
- brvbar bull
- Ccedil ccedil cedil cent copy curren
- deg divide
- Eacute eacute Ecirc ecirc Egrave egrave ETH eth Euml euml euro
- frac12 frac14 frac34
- gt
- Iacute iacute Icirc icirc iexcl Igrave igrave iquest Iuml iuml
- laquo lt
- macr micro middot
- nbsp not Ntilde ntilde
- Oacute oacute Ocirc ocirc Ograve ograve ordf ordm Oslash oslash Otilde otilde Ouml ouml
- para permil plusmn pound
- quot
- raquo reg
- sect shy sup1 sup2 sup3 szlig
- THORN thorn times trade
- Uacute uacute Ucirc ucirc Ugrave ugrave uml Uuml uuml
- Yacute yacute
- yen Yuml yuml
*/
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_[FL_PATH_MAX];///< Directory for current file
char filename_[FL_PATH_MAX]; ///< 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);
#if FLTK_ABI_VERSION >= 10303
protected:
#endif
void draw();
#if FLTK_ABI_VERSION >= 10303
private:
#endif
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);
#if FLTK_ABI_VERSION >= 10303
public:
#endif
int handle(int);
#if FLTK_ABI_VERSION >= 10303
private:
#endif
void hv_draw(const char *t, int x, int y, int entity_extra_length = 0);
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 \p newSize, 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 newSize to the special value of 0 causes the widget to
track the global Fl::scrollbar_size(), which is the default.
\param[in] newSize 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 newSize) {
scrollbar_size_ = newSize;
}
};
#endif // !Fl_Help_View_H
//
// End of "$Id$".
//

View file

@ -1,51 +0,0 @@
//
// "$Id$"
//
// Hold browser header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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_EXPORT 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);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,36 +0,0 @@
//
// "$Id$"
//
// Horizontal fill slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Hor_Fill_Slider widget . */
#ifndef Fl_Hor_Fill_Slider_H
#define Fl_Hor_Fill_Slider_H
#include "Fl_Slider.H"
class FL_EXPORT Fl_Hor_Fill_Slider : public Fl_Slider {
public:
Fl_Hor_Fill_Slider(int X,int Y,int W,int H,const char *L=0);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,36 +0,0 @@
//
// "$Id$"
//
// Horizontal "nice" slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Hor_Nice_Slider widget . */
#ifndef Fl_Hor_Nice_Slider_H
#define Fl_Hor_Nice_Slider_H
#include "Fl_Slider.H"
class FL_EXPORT Fl_Hor_Nice_Slider : public Fl_Slider {
public:
Fl_Hor_Nice_Slider(int X,int Y,int W,int H,const char *L=0);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,45 +0,0 @@
//
// "$Id$"
//
// Horizontal slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2011 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Hor_Slider widget . */
#ifndef Fl_Hor_Slider_H
#define Fl_Hor_Slider_H
#include "Fl_Slider.H"
/** Horizontal Slider class.
\see class Fl_Slider.
*/
class FL_EXPORT Fl_Hor_Slider : public Fl_Slider {
public:
/**
Creates a new Fl_Hor_Slider widget using the given position,
size, and label string.
*/
Fl_Hor_Slider(int X,int Y,int W,int H,const char *l=0);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,36 +0,0 @@
//
// "$Id$"
//
// Horizontal value slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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_EXPORT 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);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,262 +0,0 @@
//
// "$Id$"
//
// Image header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2016 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/** \file
Fl_Image, Fl_RGB_Image classes. */
#ifndef Fl_Image_H
# define Fl_Image_H
# include "Enumerations.H"
#include <stdlib.h>
class Fl_Widget;
class Fl_Pixmap;
struct Fl_Menu_Item;
struct Fl_Label;
/** \enum Fl_RGB_Scaling
The scaling algorithm to use for RGB images.
*/
enum Fl_RGB_Scaling {
FL_RGB_SCALING_NEAREST = 0, ///< default RGB image scaling algorithm
FL_RGB_SCALING_BILINEAR ///< more accurate, but slower RGB image scaling algorithm
};
/**
\brief Base class for image caching and drawing.
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.
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 {
public:
static const int ERR_NO_IMAGE = -1;
static const int ERR_FILE_ACCESS = -2;
static const int ERR_FORMAT = -3;
private:
int w_, h_, d_, ld_, count_;
const char * const *data_;
static Fl_RGB_Scaling RGB_scaling_;
// Forbid use of copy constructor and assign operator
Fl_Image & operator=(const Fl_Image &);
Fl_Image(const Fl_Image &);
protected:
/**
Sets the current image width in pixels.
*/
void w(int W) {w_ = W;}
/**
Sets the current image height in pixels.
*/
void h(int H) {h_ = H;}
/**
Sets the current image depth.
*/
void d(int D) {d_ = D;}
/**
Sets the current line data size in bytes.
Color images may contain extra data that is included after every
line of color image data and is normally not present.
If \p LD is zero, then line data size is assumed to be w() * d() bytes.
If \p LD is non-zero, then it must be positive and larger than w() * d()
to account for the extra data per line.
*/
void ld(int LD) {ld_ = LD;}
/**
Sets the current array pointer and count of pointers in the array.
*/
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:
/**
Returns the current image width in pixels.
*/
int w() const {return w_;}
/**
Returns the current image height in pixels.
*/
int h() const {return h_;}
/**
Returns the current image depth.
The return value will be 0 for bitmaps, 1 for
pixmaps, and 1 to 4 for color images.</P>
*/
int d() const {return d_;}
/**
Returns the current line data size in bytes.
\see ld(int)
*/
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_;}
/**
Returns a pointer to the current image data array.
Use the count() method to find the size of the data array.
*/
const char * const *data() const {return data_;}
int fail();
Fl_Image(int W, int H, int D);
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.
An internal copy is made of the original image before
changes are applied, to avoid modifying the original image.
*/
void inactive() { color_average(FL_GRAY, .33f); }
virtual void desaturate();
virtual void label(Fl_Widget*w);
virtual void label(Fl_Menu_Item*m);
/**
Draws the image with a bounding box.
Arguments <tt>X,Y,W,H</tt> specify
a bounding box for the image, with the origin
(upper-left corner) of the image offset by the \c cx
and \c cy arguments.
In other words: <tt>fl_push_clip(X,Y,W,H)</tt> is applied,
the image is drawn with its upper-left corner at <tt>X-cx,Y-cy</tt> and its own width and height,
<tt>fl_pop_clip</tt><tt>()</tt> is applied.
*/
virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0); // platform dependent
/**
Draws 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();
// set RGB image scaling method
static void RGB_scaling(Fl_RGB_Scaling);
// get RGB image scaling method
static Fl_RGB_Scaling RGB_scaling();
};
/**
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.
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 {
friend class Fl_Quartz_Graphics_Driver;
friend class Fl_GDI_Graphics_Driver;
friend class Fl_GDI_Printer_Graphics_Driver;
friend class Fl_Xlib_Graphics_Driver;
static size_t max_size_;
public:
/** Points to the start of the object's data array
*/
const uchar *array;
/** If non-zero, the object's data array is delete[]'d when deleting the object.
*/
int alloc_array;
private:
#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
public:
Fl_RGB_Image(const uchar *bits, int W, int H, int D=3, int LD=0);
Fl_RGB_Image(const Fl_Pixmap *pxm, Fl_Color bg=FL_GRAY);
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();
/** Sets the maximum allowed image size in bytes when creating an Fl_RGB_Image object.
The image size in bytes of an Fl_RGB_Image object is the value of the product w() * h() * d().
If this product exceeds size, the created object of a derived class of Fl_RGB_Image
won't be loaded with the image data.
This does not apply to direct RGB image creation with
Fl_RGB_Image::Fl_RGB_Image(const uchar *bits, int W, int H, int D, int LD).
The default max_size() value is essentially infinite.
*/
static void max_size(size_t size) { max_size_ = size;}
/** Returns the maximum allowed image size in bytes when creating an Fl_RGB_Image object.
\sa void Fl_RGB_Image::max_size(size_t)
*/
static size_t max_size() {return max_size_;}
};
#endif // !Fl_Image_H
//
// End of "$Id$".
//

View file

@ -1,99 +0,0 @@
//
// "$Id$"
//
// Draw-to-image code for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2014 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#ifndef Fl_Image_Surface_H
#define Fl_Image_Surface_H
#include <FL/Fl_Copy_Surface.H>
#include <FL/Fl_Image.H>
#include <FL/Fl_Shared_Image.H>
/** Directs all graphics requests to an Fl_Image.
After creation of an Fl_Image_Surface object, call set_current() on it, and all subsequent graphics requests
will be recorded in the image. It's possible to draw widgets (using Fl_Image_Surface::draw())
or to use any of the \ref fl_drawings or the \ref fl_attributes.
Finally, call image() on the object to obtain a newly allocated Fl_RGB_Image object.
<br> Fl_GL_Window objects can be drawn in the image as well.
<br> Usage example:
\code
Fl_Widget *g = ...; // a widget you want to draw in an image
Fl_Image_Surface *img_surf = new Fl_Image_Surface(g->w(), g->h()); // create an Fl_Image_Surface object
img_surf->set_current(); // direct graphics requests to the image
fl_color(FL_WHITE); fl_rectf(0, 0, g->w(), g->h()); // draw a white background
img_surf->draw(g); // draw the g widget in the image
Fl_RGB_Image* image = img_surf->image(); // get the resulting image
delete img_surf; // delete the img_surf object
Fl_Display_Device::display_device()->set_current(); // direct graphics requests back to the display
\endcode
*/
class FL_EXPORT Fl_Image_Surface : public Fl_Surface_Device {
private:
void prepare_(int w, int h, int highres);
Fl_Offscreen offscreen;
int width;
int height;
Fl_Paged_Device *helper;
#ifdef __APPLE__
#elif defined(WIN32)
HDC _sgc;
Window _sw;
Fl_Surface_Device *_ss;
int _savedc;
#else
Fl_Surface_Device *previous;
Window pre_window;
GC gc;
#endif
public:
static const char *class_id;
const char *class_name() {return class_id;};
#if FLTK_ABI_VERSION >= 10304 || defined(FL_DOXYGEN)
Fl_Image_Surface(int w, int h, int highres = 0);
#else
Fl_Image_Surface(int w, int h, int highres);
Fl_Image_Surface(int w, int h);
#endif
~Fl_Image_Surface();
void set_current();
void draw(Fl_Widget*, int delta_x = 0, int delta_y = 0);
void draw_decorated_window(Fl_Window* win, int delta_x = 0, int delta_y = 0);
Fl_RGB_Image *image();
Fl_Shared_Image *highres_image();
};
#ifdef __APPLE__
/* Mac class to implement translate()/untranslate() for a flipped bitmap graphics context */
class FL_EXPORT Fl_Quartz_Flipped_Surface_ : public Fl_Quartz_Surface_ {
public:
static const char *class_id;
const char *class_name() {return class_id;};
Fl_Quartz_Flipped_Surface_(int w, int h);
void translate(int x, int y);
void untranslate();
virtual ~Fl_Quartz_Flipped_Surface_() {};
};
#endif
#endif // Fl_Image_Surface_H
//
// End of "$Id$".
//

View file

@ -1,269 +0,0 @@
//
// "$Id$"
//
// Input header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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, and will correctly display any UTF text, using
^X notation for unprintable control characters. It assumes the
font can draw any characters of the used scripts, which is true
for standard fonts under MSWindows and Mac OS X.
Characters can be input using the keyboard or the character palette/map.
Character composition is done using dead keys and/or a compose
key as defined by the operating system.
<P>
<!-- DON'T use the class name in the caption, or doxygen 1.8.x will fail. -->
<TABLE WIDTH="90%" BORDER="1" SUMMARY="Fl_Input keyboard and mouse bindings.">
<CAPTION ALIGN="TOP">Keyboard and mouse bindings.</CAPTION>
<TR><TD NOWRAP="NOWRAP" WIDTH="1%">
<B>Mouse button 1</B>
</TD><TD>
Moves the cursor to this point.
Drag selects characters.
Double click selects words.
Triple click selects all line.
Shift+click extends the selection.
When you select text it is automatically copied to the selection buffer.
</TD></TR><TR><TD NOWRAP="NOWRAP">
<B>Mouse button 2</B>
</TD><TD>
Insert the selection buffer at the point clicked.
You can also select a region and replace it with the selection buffer
by selecting the region with mouse button 2.
</TD></TR><TR><TD NOWRAP="NOWRAP">
<B>Mouse button 3</B>
</TD><TD>
Currently acts like button 1.
</TD></TR><TR><TD NOWRAP="NOWRAP">
<B>Backspace</B>
</TD><TD>
Deletes one character to the left, or deletes the selected region.
</TD></TR><TR><TD NOWRAP="NOWRAP">
<B>Delete</B>
</TD><TD>
Deletes one character to the right, or deletes the selected region.
Combine with Shift for equivalent of ^X (copy+cut).
</TD></TR><TR><TD NOWRAP="NOWRAP">
<B>Enter</b>
</TD><TD>
May cause the callback, see when().
</TD></TR></TABLE>
<P>
<TABLE WIDTH="90%" BORDER="1" SUMMARY="Fl_Input platform specific keyboard bindings.">
<CAPTION ALIGN="TOP">Platform specific keyboard bindings.</CAPTION>
<TR>
<TD NOWRAP="NOWRAP" WIDTH="1%"><B> Windows/Linux </B></TD>
<TD NOWRAP="NOWRAP" WIDTH="1%"><B> Mac </B></TD>
<TD NOWRAP="NOWRAP" ><B> Function </B></TD>
</TR><TR>
<TD NOWRAP="NOWRAP"><B> ^A </B></TD>
<TD NOWRAP="NOWRAP"><B> Command-A </B></TD>
<TD>
<B>Selects all text in the widget.</B>
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> ^C </B></TD>
<TD NOWRAP="NOWRAP"><B> Command-C </B></TD>
<TD>
<B>Copy the current selection to the clipboard.</B>
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> ^I </B></TD>
<TD NOWRAP="NOWRAP"><B> ^I </B></TD>
<TD>
<B>Insert a tab.</B>
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> ^J </B></TD>
<TD NOWRAP="NOWRAP"><B> ^J </B></TD>
<TD>
<B>Insert a Line Feed.</B> <BR>
(Similar to literal 'Enter' character)
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> ^L </B></TD>
<TD NOWRAP="NOWRAP"><B> ^L </B></TD>
<TD>
<B>Insert a Form Feed.</B>
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> ^M </B></TD>
<TD NOWRAP="NOWRAP"><B> ^M </B></TD>
<TD>
<B>Insert a Carriage Return.</B>
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> ^V,<BR>Shift-Insert </B></TD>
<TD NOWRAP="NOWRAP"><B> Command-V </B></TD>
<TD>
<B>Paste the clipboard.</B> <BR>
(Macs keyboards don't have "Insert" keys,
but if they did, Shift-Insert would work)
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> ^X,<BR>Shift-Delete </B></TD>
<TD NOWRAP="NOWRAP"><B> Command-X,<BR>Shift-Delete </B></TD>
<TD>
<B>Cut.</B> <BR>
Copy the selection to the clipboard and delete it.
(If there's no selection, Shift-Delete acts like Delete)
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> ^Z </B></TD>
<TD NOWRAP="NOWRAP"><B> Command-Z </B></TD>
<TD>
<B>Undo.</B> <BR>
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 NOWRAP="NOWRAP"><B> Shift-^Z </B></TD>
<TD NOWRAP="NOWRAP"><B> Shift-Command-Z </B></TD>
<TD>
<B>Redo.</B> <BR>
Currently same behavior as ^Z.
Reserved for future multilevel undo/redo.
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> Arrow Keys </B></TD>
<TD NOWRAP="NOWRAP"><B> Arrow Keys </B></TD>
<TD>
<B>Standard cursor movement.</B> <BR>
Can be combined with Shift to extend selection.
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> Home </B></TD>
<TD NOWRAP="NOWRAP"><B> Command-Up,<BR>Command-Left </B></TD>
<TD>
<B>Move to start of line.</B> <BR>
Can be combined with Shift to extend selection.
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> End </B></TD>
<TD NOWRAP="NOWRAP"><B> Command-Down,<BR>Command-Right </B></TD>
<TD>
<B>Move to end of line.</B> <BR>
Can be combined with Shift to extend selection.
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B>Ctrl-Home</B></TD>
<TD NOWRAP="NOWRAP"><B>Command-Up,<BR>Command-PgUp,<BR>Ctrl-Left</B></TD>
<TD>
<B>Move to top of document/field.</B> <BR>
In single line input, moves to start of line.
In multiline input, moves to start of top line.
Can be combined with Shift to extend selection.
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> Ctrl-End </B></TD>
<TD NOWRAP="NOWRAP"><B> Command-End,<BR>Command-PgDn,<BR>Ctrl-Right</B></TD>
<TD>
<B>Move to bottom of document/field.</B> <BR>
In single line input, moves to end of line.
In multiline input, moves to end of last line.
Can be combined with Shift to extend selection.
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> Ctrl-Left </B></TD>
<TD NOWRAP="NOWRAP"><B> Alt-Left </B></TD>
<TD>
<B>Word left.</B> <BR>
Can be combined with Shift to extend selection.
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> Ctrl-Right </B></TD>
<TD NOWRAP="NOWRAP"><B> Alt-Right </B></TD>
<TD>
<B>Word right.</B> <BR>
Can be combined with Shift to extend selection.
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> Ctrl-Backspace </B></TD>
<TD NOWRAP="NOWRAP"><B> Alt-Backspace </B></TD>
<TD>
<B>Delete word left.</B>
</TD></TR><TR>
<TD NOWRAP="NOWRAP"><B> Ctrl-Delete </B></TD>
<TD NOWRAP="NOWRAP"><B> Alt-Delete </B></TD>
<TD>
<B>Delete word right.</B>
</TD></TR></TABLE>
*/
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);
// Private keyboard functions
int kf_lines_up(int repeat_num);
int kf_lines_down(int repeat_num);
int kf_page_up();
int kf_page_down();
int kf_insert_toggle();
int kf_delete_word_right();
int kf_delete_word_left();
int kf_delete_sol();
int kf_delete_eol();
int kf_delete_char_right();
int kf_delete_char_left();
int kf_move_sol();
int kf_move_eol();
int kf_clear_eol();
int kf_move_char_left();
int kf_move_char_right();
int kf_move_word_left();
int kf_move_word_right();
int kf_move_up_and_sol();
int kf_move_down_and_eol();
int kf_top();
int kf_bottom();
int kf_select_all();
int kf_undo();
int kf_redo();
int kf_copy();
int kf_paste();
int kf_copy_cut();
protected:
void draw();
public:
int handle(int);
Fl_Input(int,int,int,int,const char * = 0);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,499 +0,0 @@
//
// "$Id$"
//
// Input base class header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2015 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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, counting from 0 (at or before the first character)
to size() (at the end of the buffer, after the last byte). Since UTF-8
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 UTF-8 character sequence. Behavior for false
UTF-8 sequences and pointers into the middle of a sequence are undefined.
\see Fl_Text_Display, Fl_Text_Editor for more powerful text handling widgets
\internal
When porting this widget from ASCII to UTF-8, previously legal pointers into
the text of this widget can become illegal by pointing into the middle of
a UTF-8 sequence. 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. Additionally,
a careless "copy" call can put partial UTF-8 sequences into the clipboard.
None of these issues should be disastrous. Nevertheless, we should
discuss how FLTK should handle false UTF-8 sequences 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 Current size of internal value() buffer in bytes. */
int bufsize;
/** \internal Position 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 Behavior of Tab key in multiline input widget.
If enabled (default) Tab causes focus nav, otherwise Tab is inserted
as a character. */
int tab_nav_;
/** \internal Offset to text origin within widget bounds */
int xscroll_, yscroll_;
/** \internal Minimal update pointer. Display requires redraw from here to the end
of the buffer. */
int mu_p;
/** \internal Maximum number of (UTF-8) characters a user can input. */
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 moving up or down. */
static double up_down_pos;
/** \internal Flag to remember 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 mouse 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 yOffset) { yscroll_ = yOffset; 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 in characters.
\see maximum_size(int). */
int maximum_size() const {return maximum_size_;}
/** Sets the maximum length of the input field in characters.
This limits the number of <b>characters</b> that can be inserted
in the widget.
Since FLTK 1.3 this is different than the buffer size, since one
character can be more than one byte in UTF-8 encoding. In FLTK 1.1
this was the same (one byte = one character).
*/
void maximum_size(int m) {maximum_size_ = m;}
/** Gets the position of the text cursor.
\return the cursor position as an index in the range 0..size()
\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);
/** Sets 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 \p b to \p e and inserts the new string \p text. */
int replace(int b, int e, const char *text, int ilen=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 associated with this widget.
\return shortcut keystroke
\see Fl_Button::shortcut() */
int shortcut() const {return shortcut_;}
/**
Sets the shortcut key associated 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)); }
/**
Sets whether the Tab key does focus navigation,
or inserts tab characters into Fl_Multiline_Input.
By default this flag is enabled to provide the 'normal' behavior
most users expect; Tab navigates focus to the next widget.
To inserting an actual Tab character, users can use Ctrl-I
or copy/paste.
Disabling this flag gives the old FLTK behavior where Tab
inserts a tab character into the text field, in which case
only the mouse can be used to navigate to the next field.
History: This flag was provided for backwards support of FLTK's old 1.1.x
behavior where Tab inserts a tab character instead of navigating
focus to the next widget. This behavior was unique to Fl_Multiline_Input.
With the advent of Fl_Text_Editor, this old behavior has been deprecated.
\param [in] val If \p val is 1, Tab advances focus (default).<BR>
If \p val is 0, Tab inserts a tab character (old FLTK behavior).
\see tab_nav(), Fl::OPTION_ARROW_FOCUS.
*/
void tab_nav(int val) {
tab_nav_ = val;
}
/**
Gets whether the Tab key causes focus navigation in multiline input fields or not.
If enabled (default), hitting Tab causes focus navigation to the next widget.
If disabled, hitting Tab inserts a tab character into the text field.
\returns 1 if Tab advances focus (default), 0 if Tab inserts tab characters.
\see tab_nav(int), Fl::OPTION_ARROW_FOCUS.
*/
int tab_nav() const {
return tab_nav_;
}
};
#endif
//
// End of "$Id$".
//

View file

@ -1,268 +0,0 @@
//
// "$Id$"
//
// An input/chooser widget.
// ______________ ____
// | || __ |
// | input area || \/ |
// |______________||____|
//
// Copyright 1998-2010 by Bill Spitzak and others.
// Copyright 2004 by Greg Ercolano.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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.
\image html input_choice.jpg
\image latex input_choice.jpg "Fl_Input_Choice widget" width=6cm
The user can either type into the input area, or use the
menu button chooser on the right to choose an item which loads
the input area with the selected text.
The application can directly access both the internal Fl_Input
and Fl_Menu_Button widgets respectively using the input() and menubutton()
accessor methods.
The default behavior is to invoke the Fl_Input_Choice::callback()
if the user changes the input field's contents, either by typing,
pasting, or clicking a different item in the choice menu.
The callback can determine if an item was picked vs. typing
into the input field by checking the value of menubutton()->changed(),
which will be:
- 1: the user picked a different item in the choice menu
- 0: the user typed or pasted directly into the input field
Example use:
\code
#include <stdio.h>
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Input_Choice.H>
void choice_cb(Fl_Widget *w, void *userdata) {
// Show info about the picked item
Fl_Input_Choice *choice = (Fl_Input_Choice*)w;
const Fl_Menu_Item *item = choice->menubutton()->mvalue();
printf("*** Choice Callback:\n");
printf(" item label()='%s'\n", item ? item->label() : "(No item)");
printf(" item value()=%d\n", choice->menubutton()->value());
printf(" input value()='%s'\n", choice->input()->value());
printf(" The user %s\n", choice->menubutton()->changed()
? "picked a menu item"
: "typed text");
}
int main() {
Fl_Double_Window win(200,100,"Input Choice");
win.begin();
Fl_Input_Choice choice(10,10,100,30);
choice.callback(choice_cb, 0);
choice.add("Red");
choice.add("Orange");
choice.add("Yellow");
//choice.value("Red"); // uncomment to make "Red" default
win.end();
win.show();
return Fl::run();
}
\endcode
*/
class FL_EXPORT 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_;
// note: this is used by the Fl_Input_Choice ctor defined in Fl_Group.
static void menu_cb(Fl_Widget*, void *data) {
Fl_Input_Choice *o=(Fl_Input_Choice *)data;
Fl_Widget_Tracker wp(o);
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 (wp.deleted()) return;
if (o->callback() != default_callback)
{
o->Fl_Widget::clear_changed();
o->inp_->clear_changed();
}
}
// note: this is used by the Fl_Input_Choice ctor defined in Fl_Group.
static void inp_cb(Fl_Widget*, void *data) {
Fl_Input_Choice *o=(Fl_Input_Choice *)data;
Fl_Widget_Tracker wp(o);
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 (wp.deleted()) return;
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.
Inherited destructor destroys the widget and any values associated with it.
*/
Fl_Input_Choice(int X,int Y,int W,int H,const char*L=0);
/** Adds an item to the menu.
You can access the more complex Fl_Menu_Button::add() methods
(setting callbacks, userdata, etc), via menubutton(). Example:
\code
Fl_Input_Choice *choice = new Fl_Input_Choice(100,10,120,25,"Fonts");
Fl_Menu_Button *mb = choice->menubutton(); // use Fl_Input_Choice's Fl_Menu_Button
mb->add("Helvetica", 0, MyFont_CB, (void*)mydata); // use Fl_Menu_Button's add() methods
mb->add("Courier", 0, MyFont_CB, (void*)mydata);
mb->add("More..", 0, FontDialog_CB, (void*)mydata);
\endcode
*/
void add(const char *s) { menu_->add(s); }
/** Returns the combined changed() state of the input and menu button widget. */
int changed() const { return inp_->changed() | Fl_Widget::changed(); }
/** Clears the changed() state of both input and menu button widgets. */
void clear_changed() {
inp_->clear_changed();
Fl_Widget::clear_changed();
}
/** Sets the changed() state of both input and menu button widgets
to the specfied value.*/
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 Fl_Input text field's text color.
Fl_Color textcolor() const { return (inp_->textcolor());}
/// Sets the Fl_Input text field's text color to \p c.
void textcolor(Fl_Color c) { inp_->textcolor(c);}
/// Gets the Fl_Input text field's font style.
Fl_Font textfont() const { return (inp_->textfont());}
/// Sets the Fl_Input text field's font style to \p f.
void textfont(Fl_Font f) { inp_->textfont(f);}
/// Gets the Fl_Input text field's font size
Fl_Fontsize textsize() const { return (inp_->textsize()); }
/// Sets the Fl_Input text field's font size to \p s.
void textsize(Fl_Fontsize s) { inp_->textsize(s); }
/// Returns the Fl_Input text field's current contents.
const char* value() const { return (inp_->value()); }
/** Sets the Fl_Input text field's contents to \p val.
Does not affect the menu selection.*/
void value(const char *val) { inp_->value(val); }
/** Chooses item# \p val in the menu, and sets the Fl_Input text field
to that value. Any previous text is cleared.*/
void value(int val) {
menu_->value(val);
inp_->value(menu_->text(val));
}
/** Returns a pointer to the internal Fl_Menu_Button widget.
This can be used to access any of the methods of the menu button, e.g.
\code
Fl_Input_Choice *choice = new Fl_Input_Choice(100,10,120,25,"Choice:");
[..]
// Print all the items in the choice menu
for ( int t=0; t<choice->menubutton()->size(); t++ ) {
const Fl_Menu_Item &item = choice->menubutton()->menu()[t];
printf("item %d -- label=%s\n", t, item.label() ? item.label() : "(Null)");
}
\endcode
*/
Fl_Menu_Button *menubutton() { return menu_; }
/** Returns a pointer to the internal Fl_Input widget.
This can be used to directly access all of the Fl_Input widget's
methods.*/
Fl_Input *input() { return inp_; }
};
#endif // !Fl_Input_Choice_H
//
// End of "$Id$".
//

View file

@ -1,46 +0,0 @@
//
// "$Id$"
//
// Integer input header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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_EXPORT 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.
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);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,44 +0,0 @@
//
// "$Id$"
//
// JPEG image header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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);
Fl_JPEG_Image(const char *name, const unsigned char *data);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,50 +0,0 @@
//
// "$Id$"
//
// Lighted button header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Light_Button widget . */
#ifndef Fl_Light_Button_H
#define Fl_Light_Button_H
#include "Fl_Button.H"
/**
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.png</P>
\image latex Fl_Light_Button.png "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$".
//

View file

@ -1,36 +0,0 @@
//
// "$Id$"
//
// Line dial header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Line_Dial widget . */
#ifndef Fl_Line_Dial_H
#define Fl_Line_Dial_H
#include "Fl_Dial.H"
class FL_EXPORT Fl_Line_Dial : public Fl_Dial {
public:
Fl_Line_Dial(int X,int Y,int W,int H, const char *L = 0);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,24 +0,0 @@
//
// "$Id$"
//
// Old menu header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
// this include file is for back compatibility only
#include "Fl_Menu_Item.H"
//
// End of "$Id$".
//

View file

@ -1,188 +0,0 @@
//
// "$Id$"
//
// Menu base class header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2016 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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.
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_.
When the user clicks a menu item, value() is set to that item
and then:
- If the Fl_Menu_Item has a callback set, that callback
is invoked with any userdata configured for it.
(The Fl_Menu_ widget's callback is NOT invoked.)
- For any Fl_Menu_Items that \b don't have a callback set,
the Fl_Menu_ widget's callback is invoked with any userdata
configured for it. The callback can determine which item
was picked using value(), mvalue(), item_pathname(), etc.
*/
class FL_EXPORT Fl_Menu_ : public Fl_Widget {
Fl_Menu_Item *menu_;
const Fl_Menu_Item *value_;
protected:
uchar alloc; // flag indicates if menu_ is a dynamic copy (=1) or not (=0)
uchar down_box_;
Fl_Font textfont_;
Fl_Fontsize textsize_;
Fl_Color textcolor_;
int item_pathname_(char *name, int namelen, const Fl_Menu_Item *finditem,
const Fl_Menu_Item *menu=0) const;
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* find_item(Fl_Callback*);
int find_index(const char *name) const;
int find_index(const Fl_Menu_Item *item) const;
int find_index(Fl_Callback *cb) const;
/**
Returns the menu item with the entered shortcut (key value).
This searches the complete menu() for a shortcut that matches the
entered key value. It must be called for a FL_KEYBOARD or FL_SHORTCUT
event.
If a match is found, the menu's callback will be called.
\return matched Fl_Menu_Item or NULL.
*/
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.
\sa size() -- returns the size of the Fl_Menu_Item array.
\b Example: How to walk the array:
\code
for ( int t=0; t<menubar->size(); t++ ) { // walk array of items
const Fl_Menu_Item &item = menubar->menu()[t]; // get each item
fprintf(stderr, "item #%d -- label=%s, value=%s type=%s\n",
t,
item.label() ? item.label() : "(Null)", // menu terminators have NULL labels
(item.flags & FL_MENU_VALUE) ? "set" : "clear", // value of toggle or radio items
(item.flags & FL_SUBMENU) ? "Submenu" : "Item"); // see if item is a submenu or actual item
}
\endcode
*/
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 insert(int index, const char*, int shortcut, Fl_Callback*, void* = 0, int = 0);
int add(const char*, int shortcut, Fl_Callback*, void* = 0, int = 0); // see src/Fl_Menu_add.cxx
/** 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);
}
/** See int Fl_Menu_::insert(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0) */
int insert(int index, const char* a, const char* b, Fl_Callback* c, void* d = 0, int e = 0) {
return insert(index,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();
int clear_submenu(int index);
void replace(int,const char *);
void remove(int);
/** Changes the shortcut of item \p i to \p s. */
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. */
const char *text() const {return value_ ? value_->text : 0;}
/** Returns the title 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);}
void setonly(Fl_Menu_Item* item);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,97 +0,0 @@
//
// "$Id$"
//
// Menu bar header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2016 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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.
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.
\image html menubar.png
\image latex menubar.png " menubar" width=12cm
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.
When the user clicks a menu item, value() is set to that item
and then:
- The item's callback is done if one has been set; the
Fl_Menu_Bar is passed as the Fl_Widget* argument,
along with any userdata configured for the callback.
- If the item does not have a callback, the Fl_Menu_Bar's callback
is done instead, along with any userdata configured for the callback.
The callback can determine which item was picked using
value(), mvalue(), item_pathname(), etc.
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.
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.
The constructor sets menu() to NULL. See
Fl_Menu_ for the methods to set or change the menu.
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.
label() is ignored unless you change align() to
put it outside the menubar.
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);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,85 +0,0 @@
//
// "$Id$"
//
// Menu button header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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.png</P>
\image latex menu_button.png " 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().
If type() is zero a normal menu button is produced.
If it is nonzero then this is a pop-up menu. The bits in type() indicate
what mouse buttons pop up the menu (see Fl_Menu_Button::popup_buttons). </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>
When the user clicks a menu item, value() is set to that item
and then:
- The item's callback is done if one has been set; the
Fl_Menu_Button is passed as the Fl_Widget* argument,
along with any userdata configured for the callback.
- If the item does not have a callback, the Fl_Menu_Button's callback
is done instead, along with any userdata configured for it.
The callback can determine which item was picked using
value(), mvalue(), item_pathname(), etc.
*/
class FL_EXPORT Fl_Menu_Button : public Fl_Menu_ {
protected:
void draw();
public:
/**
\brief indicate what mouse buttons pop up the menu.
Values for type() used to indicate what mouse buttons pop up the menu.
Fl_Menu_Button::POPUP3 is usually what you want.
*/
enum popup_buttons {POPUP1 = 1, /**< pops up with the mouse 1st button. */
POPUP2, /**< pops up with the mouse 2nd button. */
POPUP12, /**< pops up with the mouse 1st or 2nd buttons. */
POPUP3, /**< pops up with the mouse 3rd button. */
POPUP13, /**< pops up with the mouse 1st or 3rd buttons. */
POPUP23, /**< pops up with the mouse 2nd or 3rd buttons. */
POPUP123 /**< pops up with any mouse button. */
};
int handle(int);
const Fl_Menu_Item* popup();
Fl_Menu_Button(int,int,int,int,const char * =0);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,443 +0,0 @@
//
// "$Id$"
//
// Menu item header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#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
// doxygen needs the following line to enable e.g. ::FL_MENU_TOGGLE to link to the enums
/// @file
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.png
\image latex menu.png "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 the menu's callback
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;}
/**
Returns the menu item's 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.
*/
Fl_Labeltype labeltype() const {return (Fl_Labeltype)labeltype_;}
/**
Sets the menu item's 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;}
/**
Gets the menu item's label color.
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 \b not use overlay bitplanes to draw
the menu - this is so that images put in the menu draw correctly.
*/
Fl_Color labelcolor() const {return labelcolor_;}
/**
Sets the menu item's label color.
\see Fl_Color Fl_Menu_Item::labelcolor() const
*/
void labelcolor(Fl_Color a) {labelcolor_ = a;}
/**
Gets the menu item's label font.
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_;}
/**
Sets the menu item's label font.
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;}
/**
Returns the callback function that is set for the menu item.
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_;}
/**
Sets the menu item's callback function and userdata() argument.
\see Fl_Callback_p Fl_MenuItem::callback() const
*/
void callback(Fl_Callback* c, void* p) {callback_=c; user_data_=p;}
/**
Sets the menu item's callback function.
This method does not set the userdata() argument.
\see Fl_Callback_p Fl_MenuItem::callback() const
*/
void callback(Fl_Callback* c) {callback_=c;}
/**
Sets the menu item's callback function.
This method does not set the userdata() argument.
\see Fl_Callback_p Fl_MenuItem::callback() const
*/
void callback(Fl_Callback0*c) {callback_=(Fl_Callback*)c;}
/**
Sets the menu item's callback function and userdata() argument.
This method does not set the userdata() argument.
The argument \p is cast to void* and stored as the userdata()
for the menu item's callback function.
\see Fl_Callback_p Fl_MenuItem::callback() const
*/
void callback(Fl_Callback1*c, long p=0) {callback_=(Fl_Callback*)c; user_data_=(void*)(fl_intptr_t)p;}
/**
Gets the user_data() argument that is sent to the callback function.
*/
void* user_data() const {return user_data_;}
/**
Sets the user_data() argument that is sent to the callback function.
*/
void user_data(void* v) {user_data_ = v;}
/**
Gets the user_data() argument that is sent to the callback function.
For convenience you can also define the callback as taking a long
argument. This method casts the stored userdata() argument to long
and returns it as a \e long value.
*/
long argument() const {return (long)(fl_intptr_t)user_data_;}
/**
Sets the user_data() argument that is sent to the callback function.
For convenience you can also define the callback as taking a long
argument. This method casts the given argument \p v to void*
and stores it in the menu item's userdata() member.
This may not be portable to some machines.
*/
void argument(long v) {user_data_ = (void*)(fl_intptr_t)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.
This is zero (0) if the menu item is not checked and
non-zero otherwise. You should not rely on a particular value,
only zero or non-zero.
\note The returned value for a checked menu item as of FLTK 1.3.2
is FL_MENU_VALUE (4), but may be 1 in a future version.
*/
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 bool require_alt = false) const;
/**
Calls the Fl_Menu_Item item's callback, and provides the Fl_Widget argument.
The callback is called with the stored user_data() as its second 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.
This call overrides the callback's second argument with the given value \p arg.
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.
This call overrides the callback's second argument with the
given value \p arg. long \p arg is cast to void* when calling
the callback.
You must first check that callback() is non-zero before calling this.
*/
void do_callback(Fl_Widget* o,long arg) const {callback_(o, (void*)(fl_intptr_t)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 insert(int,const char*,int,Fl_Callback*,void* =0, int =0);
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$".
//

View file

@ -1,57 +0,0 @@
//
// "$Id$"
//
// Menu window header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \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);
/** 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);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,54 +0,0 @@
//
// "$Id$"
//
// Multi browser header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Multi_Browser widget . */
#ifndef Fl_Multi_Browser_H
#define Fl_Multi_Browser_H
#include "Fl_Browser.H"
/**
The Fl_Multi_Browser class is a subclass of Fl_Browser
which lets the user select any set of the lines. The user interface
is Macintosh style: clicking an item turns off all the others and
selects that one, dragging selects all the items the mouse moves over,
and ctrl + click (Cmd+click on the Mac OS platform) toggles the items.
Shift + click extends the selection until the clicked item.
This is different from how forms did it.
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_EXPORT Fl_Multi_Browser : public Fl_Browser {
public:
/**
Creates a new Fl_Multi_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_MULTI_BROWSER.
The destructor destroys the widget and frees all memory that has been allocated.
*/
Fl_Multi_Browser(int X,int Y,int W,int H,const char *L=0);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,78 +0,0 @@
//
// "$Id$"
//
// Multi-label header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2015 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#ifndef Fl_Multi_Label_H
#define Fl_Multi_Label_H
class Fl_Widget;
struct Fl_Menu_Item;
/** This struct allows multiple labels to be added to objects that might normally have only one label.
This struct allows a mixed text and/or graphics label to be applied to an object that
would normally only have a single (usually text only) label.
Most regular FLTK widgets now support the ability to associate both images and text
with a label but some special cases, notably the non-widget Fl_Menu_Item objects, do not.
Fl_Multi_Label may be used to create menu items that have an icon and text, which would
not normally be possible for an Fl_Menu_Item.
For example, Fl_Multi_Label is used in the New->Code submenu in fluid, and others.
Each Fl_Multi_Label holds two elements, labela and labelb; each may hold either a
text label (const char*) or an image (Fl_Image*). When displayed, labela is drawn first
and labelb is drawn immediately to its right.
More complex labels might be constructed by setting labelb as another Fl_Multi_Label and
thus chaining up a series of label elements.
When assigning a label element to one of labela or labelb, they should be explicitly cast
to (const char*) if they are not of that type already.
\see Fl_Label and Fl_Labeltype
*/
struct FL_EXPORT Fl_Multi_Label {
/** Holds the "leftmost" of the two elements in the composite label.
Typically this would be assigned either a text string (const char*),
a (Fl_Image*) or a (Fl_Multi_Label*). */
const char* labela;
/** Holds the "rightmost" of the two elements in the composite label.
Typically this would be assigned either a text string (const char*),
a (Fl_Image*) or a (Fl_Multi_Label*). */
const char* labelb;
/** Holds the "type" of labela.
Typically this is set to FL_NORMAL_LABEL for a text label,
_FL_IMAGE_LABEL for an image (based on Fl_image) or _FL_MULTI_LABEL
if "chaining" multiple Fl_Multi_Label elements together. */
uchar typea;
/** Holds the "type" of labelb.
Typically this is set to FL_NORMAL_LABEL for a text label,
_FL_IMAGE_LABEL for an image (based on Fl_image) or _FL_MULTI_LABEL
if "chaining" multiple Fl_Multi_Label elements together. */
uchar typeb;
/** This method is used to associate a Fl_Multi_Label with a Fl_Widget. */
void label(Fl_Widget*);
/** This method is used to associate a Fl_Multi_Label with a Fl_Menu_Item. */
void label(Fl_Menu_Item*);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,60 +0,0 @@
//
// "$Id$"
//
// Multiline input header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2011 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Multiline_Input widget . */
#ifndef Fl_Multiline_Input_H
#define Fl_Multiline_Input_H
#include "Fl_Input.H"
/**
This input field displays '\\n' characters as new lines rather than ^J,
and accepts the Return, Tab, and up and down arrow keys. This is for
editing multiline text.
This is far from the nirvana of text editors, and is probably only
good for small bits of text, 10 lines at most. Note that this widget
does not support scrollbars or per-character color control.
If you are presenting large amounts of text and need scrollbars
or full color control of characters, you probably want Fl_Text_Editor
instead.
In FLTK 1.3.x, the default behavior of the 'Tab' key was changed
to support consistent focus navigation. To get the older FLTK 1.1.x
behavior, set Fl_Input_::tab_nav() to 0. Newer programs should consider using
Fl_Text_Editor.
*/
class FL_EXPORT Fl_Multiline_Input : public Fl_Input {
public:
/**
Creates a new Fl_Multiline_Input widget using the given
position, size, and label string. The default boxtype is FL_DOWN_BOX.
Inherited destructor destroys the widget and any value associated with it.
*/
Fl_Multiline_Input(int X,int Y,int W,int H,const char *l = 0);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,56 +0,0 @@
//
// "$Id$"
//
// Multi line output header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2011 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Multiline_Output widget . */
#ifndef Fl_Multiline_Output_H
#define Fl_Multiline_Output_H
#include "Fl_Output.H"
/**
This widget is a subclass of Fl_Output that displays multiple
lines of text. It also displays tab characters as whitespace to the
next column.
Note that this widget does not support scrollbars, or per-character
color control.
If you are presenting large amounts of read-only text
and need scrollbars, or full color control of characters,
then use Fl_Text_Display. If you want to display HTML text,
use Fl_Help_View.
*/
class FL_EXPORT Fl_Multiline_Output : public Fl_Output {
public:
/**
Creates a new Fl_Multiline_Output widget using the given position,
size, and label string. The default boxtype is FL_DOWN_BOX.
Inherited destructor destroys the widget and any value associated with it.
*/
Fl_Multiline_Output(int X,int Y,int W,int H,const char *l = 0);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,348 +0,0 @@
//
// "$Id$"
//
// FLTK native OS file chooser widget
//
// Copyright 1998-2014 by Bill Spitzak and others.
// Copyright 2004 Greg Ercolano.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/** \file
Fl_Native_File_Chooser widget. */
#ifndef FL_NATIVE_FILE_CHOOSER_H
#define FL_NATIVE_FILE_CHOOSER_H
// Use Windows' chooser
#ifdef WIN32
// #define _WIN32_WINNT 0x0501 // needed for OPENFILENAME's 'FlagsEx'
#if defined(FL_LIBRARY) || FLTK_ABI_VERSION < 10304
# include <windows.h>
# include <commdlg.h> // OPENFILENAMEW, GetOpenFileName()
# include <shlobj.h> // BROWSEINFOW, SHBrowseForFolder()
typedef OPENFILENAMEW fl_OPENFILENAMEW;
typedef BROWSEINFOW fl_BROWSEINFOW;
#else
typedef void fl_OPENFILENAMEW;
typedef void fl_BROWSEINFOW;
#endif
#endif
// Use Apple's chooser
#ifdef __APPLE__
# define MAXFILTERS 80
#endif
// All else falls back to FLTK's own chooser
#if ! defined(__APPLE__) && !defined(WIN32)
# include <FL/Fl_File_Chooser.H>
#else
# include <FL/filename.H> // FL_EXPORT
#endif
class Fl_FLTK_File_Chooser;
class Fl_GTK_File_Chooser;
/**
This class lets an FLTK application easily and consistently access
the operating system's native file chooser. Some operating systems
have very complex and specific file choosers that many users want
access to specifically, instead of FLTK's default file chooser(s).
In cases where there is no native file browser, FLTK's own file browser
is used instead.
To use this widget, use the following include in your code:
\code
#include <FL/Fl_Native_File_Chooser.H>
\endcode
The following example shows how to pick a single file:
\code
// Create and post the local native file chooser
#include <FL/Fl_Native_File_Chooser.H>
[..]
Fl_Native_File_Chooser fnfc;
fnfc.title("Pick a file");
fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
fnfc.filter("Text\t*.txt\n"
"C Files\t*.{cxx,h,c}");
fnfc.directory("/var/tmp"); // default directory to use
// Show native chooser
switch ( fnfc.show() ) {
case -1: printf("ERROR: %s\n", fnfc.errmsg()); break; // ERROR
case 1: printf("CANCEL\n"); break; // CANCEL
default: printf("PICKED: %s\n", fnfc.filename()); break; // FILE CHOSEN
}
\endcode
The Fl_Native_File_Chooser widget transmits UTF-8 encoded filenames to its user. It is
recommended to open files that may have non-ASCII names with the fl_fopen() or
fl_open() utility functions that handle these names in a cross-platform way
(whereas the standard fopen()/open() functions fail on the MSWindows platform
to open files with a non-ASCII name).
<B>Platform Specific Caveats</B>
- Under X windows, and if Fl::OPTION_FNFC_USES_GTK has not been switched off,
the widget attempts to use standard GTK file chooser dialogs if they are
available at run-time on the platform, and falls back to use FLTK's Fl_File_Chooser if they are not.
In the latter case, it's best if you call Fl_File_Icon::load_system_icons()
at the start of main(), to enable the nicer looking file browser widgets.
Use the static public attributes of class Fl_File_Chooser to localize
the browser.
- Some operating systems support certain OS specific options; see
Fl_Native_File_Chooser::options() for a list.
\image html Fl_Native_File_Chooser.png "The Fl_Native_File_Chooser on different platforms."
\image latex Fl_Native_File_Chooser.png "The Fl_Native_File_Chooser on different platforms" width=14cm
*/
class FL_EXPORT Fl_Native_File_Chooser {
public:
enum Type {
BROWSE_FILE = 0, ///< browse files (lets user choose one file)
BROWSE_DIRECTORY, ///< browse directories (lets user choose one directory)
BROWSE_MULTI_FILE, ///< browse files (lets user choose multiple files)
BROWSE_MULTI_DIRECTORY, ///< browse directories (lets user choose multiple directories)
BROWSE_SAVE_FILE, ///< browse to save a file
BROWSE_SAVE_DIRECTORY ///< browse to save a directory
};
enum Option {
NO_OPTIONS = 0x0000, ///< no options enabled
SAVEAS_CONFIRM = 0x0001, ///< Show native 'Save As' overwrite confirm dialog
NEW_FOLDER = 0x0002, ///< Show 'New Folder' icon (if supported)
PREVIEW = 0x0004, ///< enable preview mode (if supported)
USE_FILTER_EXT = 0x0008 ///< Chooser filter pilots the output file extension (if supported)
};
/** Localizable message */
static const char *file_exists_message;
public:
Fl_Native_File_Chooser(int val=BROWSE_FILE);
~Fl_Native_File_Chooser();
// Public methods
void type(int t);
int type() const ;
void options(int o);
int options() const;
int count() const;
const char *filename() const ;
const char *filename(int i) const ;
void directory(const char *val) ;
const char *directory() const;
void title(const char *t);
const char* title() const;
const char *filter() const ;
void filter(const char *f);
int filters() const ;
void filter_value(int i) ;
int filter_value() const ;
void preset_file(const char*f) ;
const char* preset_file() const;
const char *errmsg() const ;
int show() ;
#ifdef WIN32
private:
int _btype; // kind-of browser to show()
int _options; // general options
#if FLTK_ABI_VERSION >= 10304
fl_OPENFILENAMEW *_ofn_ptr; // GetOpenFileName() & GetSaveFileName() struct
fl_BROWSEINFOW *_binf_ptr; // SHBrowseForFolder() struct
WCHAR *_wpattern; // pattern buffer for filter
#else
fl_OPENFILENAMEW _ofn;
fl_BROWSEINFOW _binf;
#endif
char **_pathnames; // array of pathnames
int _tpathnames; // total pathnames
char *_directory; // default pathname to use
char *_title; // title for window
char *_filter; // user-side search filter
char *_parsedfilt; // filter parsed for Windows dialog
int _nfilters; // number of filters parse_filter counted
char *_preset_file; // the file to preselect
char *_errmsg; // error message
// Private methods
void errmsg(const char *msg);
void clear_pathnames();
void set_single_pathname(const char *s);
void add_pathname(const char *s);
void ClearOFN();
void ClearBINF();
void Win2Unix(char *s);
void Unix2Win(char *s);
int showfile();
int showdir();
void parse_filter(const char *);
void clear_filters();
void add_filter(const char *, const char *);
#endif
#ifdef __APPLE__
private:
int _btype; // kind-of browser to show()
int _options; // general options
void *_panel;
char **_pathnames; // array of pathnames
int _tpathnames; // total pathnames
char *_directory; // default pathname to use
char *_title; // title for window
char *_preset_file; // the 'save as' filename
char *_filter; // user-side search filter, eg:
// C Files\t*.[ch]\nText Files\t*.txt"
char *_filt_names; // filter names (tab delimited)
// eg. "C Files\tText Files"
char *_filt_patt[MAXFILTERS];
// array of filter patterns, eg:
// _filt_patt[0]="*.{cxx,h}"
// _filt_patt[1]="*.txt"
int _filt_total; // parse_filter() # of filters loaded
int _filt_value; // index of the selected filter
char *_errmsg; // error message
// Private methods
void errmsg(const char *msg);
void clear_pathnames();
void set_single_pathname(const char *s);
int get_saveas_basename(void);
void clear_filters();
void add_filter(const char *, const char *);
void parse_filter(const char *from);
int post();
int runmodal();
#endif
#if ! defined(__APPLE__) && !defined(WIN32)
private:
#if FLTK_ABI_VERSION <= 10302
int _btype; // kind-of browser to show()
int _options; // general options
int _nfilters;
char *_filter; // user supplied filter
char *_parsedfilt; // parsed filter
int _filtvalue; // selected filter
char *_preset_file;
char *_prevvalue; // Returned filename
char *_directory;
char *_errmsg; // error message
#endif
static int have_looked_for_GTK_libs;
union {
Fl_FLTK_File_Chooser *_x11_file_chooser;
Fl_GTK_File_Chooser *_gtk_file_chooser;
};
#endif
};
#if !defined(__APPLE__) && !defined(WIN32)
class FL_EXPORT Fl_FLTK_File_Chooser {
friend class Fl_Native_File_Chooser;
protected:
int _btype; // kind-of browser to show()
int _options; // general options
int _nfilters;
char *_filter; // user supplied filter
char *_parsedfilt; // parsed filter
int _filtvalue; // selected filter
char *_preset_file;
char *_prevvalue; // Returned filename
char *_directory;
char *_errmsg; // error message
Fl_FLTK_File_Chooser(int val);
virtual ~Fl_FLTK_File_Chooser();
void errmsg(const char *msg);
int type_fl_file(int);
void parse_filter();
int exist_dialog();
Fl_File_Chooser *_file_chooser;
virtual void type(int);
int type() const;
void options(int);
int options() const;
virtual int count() const;
virtual const char *filename() const;
virtual const char *filename(int i) const;
void directory(const char *val);
const char *directory() const;
virtual void title(const char *);
virtual const char* title() const;
const char *filter() const;
void filter(const char *);
int filters() const;
void filter_value(int i);
int filter_value() const;
void preset_file(const char*);
const char* preset_file() const;
const char *errmsg() const;
virtual int show();
};
class FL_EXPORT Fl_GTK_File_Chooser : public Fl_FLTK_File_Chooser {
friend class Fl_Native_File_Chooser;
private:
typedef struct _GtkWidget GtkWidget;
typedef struct _GtkFileFilterInfo GtkFileFilterInfo;
struct pair {
Fl_GTK_File_Chooser* running; // the running Fl_GTK_File_Chooser
const char *filter; // a filter string of the chooser
pair(Fl_GTK_File_Chooser* c, const char *f) {
running = c;
filter = strdup(f);
};
~pair() {
free((char*)filter);
};
};
GtkWidget *gtkw_ptr; // used to hold a GtkWidget* without pulling GTK into everything...
void *gtkw_slist; // used to hold a GLib GSList...
unsigned gtkw_count; // number of files read back - if any
mutable char *gtkw_filename; // last name we read back
char *gtkw_title; // the title to be applied to the dialog
const char *previous_filter;
int fl_gtk_chooser_wrapper(); // method that wraps the GTK widget
Fl_GTK_File_Chooser(int val);
virtual ~Fl_GTK_File_Chooser();
static int did_find_GTK_libs;
static void probe_for_GTK_libs(void);
virtual void type(int);
virtual int count() const;
virtual const char *filename() const;
virtual const char *filename(int i) const;
virtual void title(const char *);
virtual const char* title() const;
virtual int show();
void changed_output_type(const char *filter);
static int custom_gtk_filter_function(const GtkFileFilterInfo*, Fl_GTK_File_Chooser::pair*);
static void free_pair(pair *p);
};
#endif // !defined(__APPLE__) && !defined(WIN32)
#endif /*FL_NATIVE_FILE_CHOOSER_H*/
//
// End of "$Id$".
//

View file

@ -1,36 +0,0 @@
//
// "$Id$"
//
// "Nice" slider header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Nice_Slider widget . */
#ifndef Fl_Nice_Slider_H
#define Fl_Nice_Slider_H
#include "Fl_Slider.H"
class FL_EXPORT Fl_Nice_Slider : public Fl_Slider {
public:
Fl_Nice_Slider(int X,int Y,int W,int H,const char *L=0);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,27 +0,0 @@
//
// "$Id$"
//
// Old Fl_Object header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
// This file is provided for back compatibility only. Please use Fl_Widget
#ifndef Fl_Object
#define Fl_Object Fl_Widget
#endif
#include "Fl_Widget.H"
//
// End of "$Id$".
//

View file

@ -1,63 +0,0 @@
//
// "$Id$"
//
// Output header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2011 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Output widget . */
#ifndef Fl_Output_H
#define Fl_Output_H
#include "Fl_Input.H"
/**
This widget displays a piece of text.
When you set the value() , Fl_Output does a strcpy() to its own storage,
which is useful for program-generated values. The user may select
portions of the text using the mouse and paste the contents into other
fields or programs.
<P align=CENTER>\image html text.png</P>
\image latex text.png "Fl_Output" width=8cm
There is a single subclass, Fl_Multiline_Output, which allows you to
display multiple lines of text. Fl_Multiline_Output does not provide
scroll bars. If a more complete text editing widget is needed, use
Fl_Text_Display instead.
The text may contain any characters except \\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-Latin1 character set.
*/
class FL_EXPORT Fl_Output : public Fl_Input {
public:
/**
Creates a new Fl_Output widget using the given position,
size, and label string. The default boxtype is FL_DOWN_BOX.
Inherited destructor destroys the widget and any value associated with it.
*/
Fl_Output(int X,int Y,int W,int H, const char *l = 0);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,81 +0,0 @@
//
// "$Id$"
//
// Overlay window header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Overlay_Window class . */
#ifndef Fl_Overlay_Window_H
#define Fl_Overlay_Window_H
#include "Fl_Double_Window.H"
/**
This window provides double buffering and also the ability to draw the
"overlay" which is another picture placed on top of the main image. The
overlay is designed to be a rapidly-changing but simple graphic such as
a mouse selection box. Fl_Overlay_Window uses the overlay
planes provided by your graphics hardware if they are available.
<P>If no hardware support is found the overlay is simulated by drawing
directly into the on-screen copy of the double-buffered window, and
"erased" by copying the backbuffer over it again. This means the
overlay will blink if you change the image in the window.
*/
class FL_EXPORT Fl_Overlay_Window : public Fl_Double_Window {
#ifndef FL_DOXYGEN
friend class _Fl_Overlay;
#endif
protected:
/**
You must subclass Fl_Overlay_Window and provide this method.
It is just like a draw() method, except it draws the overlay.
The overlay will have already been "cleared" when this is called. You
can use any of the routines described in &lt;FL/fl_draw.H&gt;.
*/
virtual void draw_overlay() = 0;
private:
Fl_Window *overlay_;
public:
void show();
void flush();
void hide();
void resize(int,int,int,int);
~Fl_Overlay_Window();
/** Returns non-zero if there's hardware overlay support */
int can_do_overlay();
void redraw_overlay();
protected:
/**
See Fl_Overlay_Window::Fl_Overlay_Window(int X, int Y, int W, int H, const char *l=0)
*/
Fl_Overlay_Window(int W, int H, const char *l=0);
/**
Creates a new Fl_Overlay_Window widget using the given
position, size, and label (title) string. If the
positions (x,y) are not given, then the window manager
will choose them.
*/
Fl_Overlay_Window(int X, int Y, int W, int H, const char *l=0);
public:
void show(int a, char **b) {Fl_Double_Window::show(a,b);}
};
#endif
//
// End of "$Id$".
//

View file

@ -1,46 +0,0 @@
//
// "$Id$"
//
// PNG image header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_PNG_Image class . */
#ifndef Fl_PNG_Image_H
#define Fl_PNG_Image_H
# include "Fl_Image.H"
/**
The Fl_PNG_Image class supports loading, caching,
and drawing of Portable Network Graphics (PNG) image files. The
class loads colormapped and full-color images and handles color-
and alpha-based transparency.
*/
class FL_EXPORT Fl_PNG_Image : public Fl_RGB_Image {
public:
Fl_PNG_Image(const char* filename);
Fl_PNG_Image (const char *name_png, const unsigned char *buffer, int datasize);
private:
void load_png_(const char *name_png, const unsigned char *buffer_png, int datasize);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,43 +0,0 @@
//
// "$Id$"
//
// PNM image header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_PNM_Image class . */
#ifndef Fl_PNM_Image_H
#define Fl_PNM_Image_H
# include "Fl_Image.H"
/**
The Fl_PNM_Image class supports loading, caching,
and drawing of Portable Anymap (PNM, PBM, PGM, PPM) image files. The class
loads bitmap, grayscale, and full-color images in both ASCII and
binary formats.
*/
class FL_EXPORT Fl_PNM_Image : public Fl_RGB_Image {
public:
Fl_PNM_Image(const char* filename);
};
#endif
//
// End of "$Id$".
//

View file

@ -1,75 +0,0 @@
//
// "$Id$"
//
// Pack header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Pack widget . */
#ifndef Fl_Pack_H
#define Fl_Pack_H
#include <FL/Fl_Group.H>
/**
This widget was designed to add the functionality of compressing and
aligning widgets.
<P>If type() is Fl_Pack::HORIZONTAL all the children are
resized to the height of the Fl_Pack, and are moved next to
each other horizontally. If type() is not Fl_Pack::HORIZONTAL
then the children are resized to the width and are stacked below each
other. Then the Fl_Pack resizes itself to surround the child
widgets.
<P>This widget is needed for the Fl_Tabs.
In addition you may want to put the Fl_Pack inside an
Fl_Scroll.
<P>The resizable for Fl_Pack is set to NULL by default.</p>
<P>See also: Fl_Group::resizable()
*/
class FL_EXPORT Fl_Pack : public Fl_Group {
int spacing_;
public:
enum { // values for type(int)
VERTICAL = 0,
HORIZONTAL = 1
};
protected:
void draw();
public:
Fl_Pack(int x,int y,int w ,int h,const char *l = 0);
/**
Gets the number of extra pixels of blank space that are added
between the children.
*/
int spacing() const {return spacing_;}
/**
Sets the number of extra pixels of blank space that are added
between the children.
*/
void spacing(int i) {spacing_ = i;}
/** Same as Fl_Group::type() */
uchar horizontal() const {return type();}
};
#endif
//
// End of "$Id$".
//

View file

@ -1,155 +0,0 @@
//
// "$Id$"
//
// Printing support for the Fast Light Tool Kit (FLTK).
//
// Copyright 2010-2016 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/** \file Fl_Paged_Device.H
\brief declaration of class Fl_Paged_Device.
*/
#ifndef Fl_Paged_Device_H
#define Fl_Paged_Device_H
#include <FL/Fl_Device.H>
#include <FL/Fl_Window.H>
/** \brief Number of elements in enum Page_Format */
#define NO_PAGE_FORMATS 30 /* MSVC6 compilation fix */
/**
\brief Represents page-structured drawing surfaces.
*
This class has no public constructor: don't instantiate it; use Fl_Printer
or Fl_PostScript_File_Device instead.
*/
class FL_EXPORT Fl_Paged_Device : public Fl_Surface_Device {
#ifndef __APPLE__
friend class Fl_Copy_Surface;
friend class Fl_Image_Surface;
void draw_decorated_window(Fl_Window *win, int x_offset, int y_offset, Fl_Surface_Device *toset);
#endif
public:
/**
\brief Possible page formats.
All paper formats with pre-defined width and height.
*/
enum Page_Format {
A0 = 0, /**< A0 format */
A1,
A2,
A3,
A4, /**< A4 format */
A5,
A6,
A7,
A8,
A9,
B0,
B1,
B2,
B3,
B4,
B5,
B6,
B7,
B8,
B9,
B10,
C5E,
DLE,
EXECUTIVE,
FOLIO,
LEDGER,
LEGAL,
LETTER, /**< Letter format */
TABLOID,
ENVELOPE,
MEDIA = 0x1000
};
/**
\brief Possible page layouts.
*/
enum Page_Layout {
PORTRAIT = 0, /**< Portrait orientation */
LANDSCAPE = 0x100, /**< Landscape orientation */
REVERSED = 0x200, /**< Reversed orientation */
ORIENTATION = 0x300 /**< orientation */
};
/** \brief width, height and name of a page format
*/
typedef struct {
/** \brief width in points */
int width;
/** \brief height in points */
int height;
/** \brief format name */
const char *name;
} page_format;
/** \brief width, height and name of all elements of the enum \ref Page_Format.
*/
static const page_format page_formats[NO_PAGE_FORMATS];
private:
void traverse(Fl_Widget *widget); // finds subwindows of widget and prints them
protected:
/** \brief horizontal offset to the origin of graphics coordinates */
int x_offset;
/** \brief vertical offset to the origin of graphics coordinates */
int y_offset;
/** \brief The constructor */
Fl_Paged_Device() : Fl_Surface_Device(NULL), x_offset(0), y_offset(0) {};
#if FLTK_ABI_VERSION >= 10301
public:
/** \brief The destructor */
virtual ~Fl_Paged_Device() {};
#else
/** \brief The destructor */
virtual ~Fl_Paged_Device() {};
public:
#endif // FLTK_ABI_VERSION
static const char *class_id;
const char *class_name() {return class_id;};
virtual int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
virtual int start_page(void);
virtual int printable_rect(int *w, int *h);
virtual void margins(int *left, int *top, int *right, int *bottom);
virtual void origin(int x, int y);
virtual void origin(int *x, int *y);
virtual void scale(float scale_x, float scale_y = 0.);
virtual void rotate(float angle);
virtual void translate(int x, int y);
virtual void untranslate(void);
virtual void print_widget(Fl_Widget* widget, int delta_x = 0, int delta_y = 0);
/** Prints a window with its title bar and frame if any.
\p x_offset and \p y_offset are optional coordinates of where to position the window top left.
Equivalent to print_widget() if \p win is a subwindow or has no border.
Use Fl_Window::decorated_w() and Fl_Window::decorated_h() to get the size of the
printed window.
*/
void print_window(Fl_Window *win, int x_offset = 0, int y_offset = 0);
virtual void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x = 0, int delta_y = 0);
virtual int end_page (void);
virtual void end_job (void);
};
#endif // Fl_Paged_Device_H
//
// End of "$Id$"
//

View file

@ -1,102 +0,0 @@
//
// "$Id$"
//
// Pixmap header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2012 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Pixmap widget . */
#ifndef Fl_Pixmap_H
#define Fl_Pixmap_H
# include "Fl_Image.H"
#if defined(WIN32)
# include "x.H"
#endif
class Fl_Widget;
struct Fl_Menu_Item;
// Older C++ compilers don't support the explicit keyword... :(
# if defined(__sgi) && !defined(_COMPILER_VERSION)
# define explicit
# endif // __sgi && !_COMPILER_VERSION
/**
The Fl_Pixmap class supports caching and drawing of colormap
(pixmap) images, including transparency.
*/
class FL_EXPORT Fl_Pixmap : public Fl_Image {
friend class Fl_Quartz_Graphics_Driver;
friend class Fl_GDI_Graphics_Driver;
friend class Fl_GDI_Printer_Graphics_Driver;
friend class Fl_Xlib_Graphics_Driver;
void copy_data();
void delete_data();
void set_data(const char * const *p);
int prepare(int XP, int YP, int WP, int HP, int &cx, int &cy,
int &X, int &Y, int &W, int &H);
protected:
void measure();
public:
int alloc_data; // Non-zero if data was allocated
private:
#if defined(WIN32)
#if FLTK_ABI_VERSION < 10301
static // a static member is needed for ABI compatibility
#endif
UINT pixmap_bg_color; // RGB color used for pixmap background
#endif // WIN32
#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
public:
/** The constructors create a new pixmap from the specified XPM data. */
explicit Fl_Pixmap(char * const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
/** The constructors create a new pixmap from the specified XPM data. */
explicit Fl_Pixmap(uchar* const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
/** The constructors create a new pixmap from the specified XPM data. */
explicit Fl_Pixmap(const char * const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
/** The constructors create a new pixmap from the specified XPM data. */
explicit Fl_Pixmap(const uchar* const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
virtual ~Fl_Pixmap();
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
//
// End of "$Id$".
//

View file

@ -1,95 +0,0 @@
//
// "$Id: Fl_Plugin.H 6995 2010-01-12 08:48:55Z matt $"
//
// A Plugin system for FLTK, implemented in Fl_Preferences.cxx.
//
// Copyright 2002-2010 by Matthias Melcher.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Plugin class . */
#ifndef Fl_Plugin_H
# define Fl_Plugin_H
# include "Fl_Preferences.H"
/**
\brief Fl_Plugin allows link-time and run-time integration of binary modules.
Fl_Plugin and Fl_Plugin_Manager provide a small and simple solution for
linking C++ classes at run-time, or optionally linking modules at compile
time without the need to change the main application.
Fl_Plugin_Manager uses static initialisation to create the plugin interface
early during startup. Plugins are stored in a temporary database, organized
in classes.
Plugins should derive a new class from Fl_Plugin as a base:
\code
class My_Plugin : public Fl_Plugin {
public:
My_Plugin() : Fl_Plugin("effects", "blur") { }
void do_something(...);
};
My_Plugin blur_plugin();
\endcode
Plugins can be put into modules and either linked before distribution, or loaded
from dynamically linkable files. An Fl_Plugin_Manager is used to list and
access all currently loaded plugins.
\code
Fl_Plugin_Manager mgr("effects");
int i, n = mgr.plugins();
for (i=0; i<n; i++) {
My_Plugin *pin = (My_Plugin*)mgr.plugin(i);
pin->do_something();
}
\endcode
*/
class FL_EXPORT Fl_Plugin {
Fl_Preferences::ID id;
public:
Fl_Plugin(const char *klass, const char *name);
virtual ~Fl_Plugin();
};
/**
\brief Fl_Plugin_Manager manages link-time and run-time plugin binaries.
\see Fl_Plugin
*/
class FL_EXPORT Fl_Plugin_Manager : public Fl_Preferences {
public:
Fl_Plugin_Manager(const char *klass);
~Fl_Plugin_Manager();
/** \brief Return the number of plugins in the klass.
*/
int plugins() { return groups(); }
Fl_Plugin *plugin(int index);
Fl_Plugin *plugin(const char *name);
Fl_Preferences::ID addPlugin(const char *name, Fl_Plugin *plugin);
static void removePlugin(Fl_Preferences::ID id);
static int load(const char *filename);
static int loadAll(const char *filepath, const char *pattern=0);
};
#endif // !Fl_Preferences_H
//
// End of "$Id: Fl_Preferences.H 6995 2010-01-12 08:48:55Z matt $".
//

View file

@ -1,94 +0,0 @@
//
// "$Id$"
//
// Positioner header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/* \file
Fl_Positioner widget . */
#ifndef Fl_Positioner_H
#define Fl_Positioner_H
#ifndef Fl_Widget_H
#include "Fl_Widget.H"
#endif
/**
This class is provided for Forms compatibility. It provides 2D input.
It would be useful if this could be put atop another widget so that the
crosshairs are on top, but this is not implemented. The color of the
crosshairs is selection_color().
<P ALIGN=CENTER>\image html positioner.png </P>
\image latex positioner.png " Fl_Positioner" width=4cm
*/
class FL_EXPORT Fl_Positioner : public Fl_Widget {
double xmin, ymin;
double xmax, ymax;
double xvalue_, yvalue_;
double xstep_, ystep_;
protected:
// these allow subclasses to put the dial in a smaller area:
void draw(int, int, int, int);
int handle(int, int, int, int, int);
void draw();
public:
int handle(int);
/**
Creates a new Fl_Positioner widget using the given position,
size, and label string. The default boxtype is FL_NO_BOX.
*/
Fl_Positioner(int x,int y,int w,int h, const char *l=0);
/** Gets the X axis coordinate.*/
double xvalue() const {return xvalue_;}
/** Gets the Y axis coordinate.*/
double yvalue() const {return yvalue_;}
int xvalue(double);
int yvalue(double);
int value(double,double);
void xbounds(double, double);
/** Gets the X axis minimum */
double xminimum() const {return xmin;}
/** Same as xbounds(a, xmaximum()) */
void xminimum(double a) {xbounds(a,xmax);}
/** Gets the X axis maximum */
double xmaximum() const {return xmax;}
/** Same as xbounds(xminimum(), a) */
void xmaximum(double a) {xbounds(xmin,a);}
void ybounds(double, double);
/** Gets the Y axis minimum */
double yminimum() const {return ymin;}
/** Same as ybounds(a, ymaximum()) */
void yminimum(double a) {ybounds(a, ymax);}
/** Gets the Y axis maximum */
double ymaximum() const {return ymax;}
/** Same as ybounds(ymininimum(), a) */
void ymaximum(double a) {ybounds(ymin, a);}
/** Sets the stepping value for the X axis.*/
void xstep(double a) {xstep_ = a;}
/** Sets the stepping value for the Y axis.*/
void ystep(double a) {ystep_ = a;}
};
#endif
//
// End of "$Id$".
//

Some files were not shown because too many files have changed in this diff Show more