Browse Source

FLTK 2.0 threading support under FLTK 1.1. Needs porting to OSX.

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@1819 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
pull/168/head
Michael R Sweet 24 years ago
parent
commit
ba2be02ab2
  1. 28
      CHANGES
  2. 10
      FL/Fl.H
  3. 16
      configure.in
  4. 134
      src/Fl_lock.cxx
  5. 29
      src/Fl_win32.cxx
  6. 14
      src/Fl_x.cxx
  7. 5
      src/Makefile
  8. 31
      src/makedepend
  9. 4
      visualc/fltk.lib.dsp
  10. 15
      visualc/fltkdll.dsp

28
CHANGES

@ -1,9 +1,21 @@
CHANGES IN FLTK 1.1.0b7 CHANGES IN FLTK 1.1.0b7
- Some Win32 drivers would draw into wrong buffers
after OpenGL mode change
- Mac OS X support works 95%
- More documentation updates... - More documentation updates...
- Added Fl::lock() and friends from FLTK 2.0 to
support multi-threaded applications.
- Fl_Check_Button and Fl_Round_Button now use the
FL_NO_BOX box type to show the background of the
parent widget.
- Tweeked the plastic boxtype code to draw with the
right shading for narrow, but horizontal buttons.
- Fl_Progress now shades the bounding box instead of
drawing a polygon inside it.
- Fl::warning() under WIN32 defaults to no action. This
avoids warning dialogs when an image file cannot be
loaded.
- Some Win32 drivers would draw into wrong buffers
after OpenGL mode change
- Mac OS X support works 95%
- The file chooser would cause a segfault if you - The file chooser would cause a segfault if you
clicked in an empty area of the file list. clicked in an empty area of the file list.
- Fl_File_Icon::labeltype() would cause a segfault - Fl_File_Icon::labeltype() would cause a segfault
@ -58,16 +70,6 @@ CHANGES IN FLTK 1.1.0b7
selection and text as Fl_Input_ and friends. selection and text as Fl_Input_ and friends.
- Changed the default line scrolling in Fl_Text_Display - Changed the default line scrolling in Fl_Text_Display
to 3 lines for the mouse wheel and scrollbar arrows. to 3 lines for the mouse wheel and scrollbar arrows.
- Fl_Check_Button and Fl_Round_Button now use the
FL_NO_BOX box type to show the background of the
parent widget.
- Tweeked the plastic boxtype code to draw with the
right shading for narrow, but horizontal buttons.
- Fl_Progress now shades the bounding box instead of
drawing a polygon inside it.
- Fl::warning() under WIN32 defaults to no action. This
avoids warning dialogs when an image file cannot be
loaded.
CHANGES IN FLTK 1.1.0b6 CHANGES IN FLTK 1.1.0b6

10
FL/Fl.H

@ -1,5 +1,5 @@
// //
// "$Id: Fl.H,v 1.8.2.11.2.6 2001/11/28 20:43:44 easysw Exp $" // "$Id: Fl.H,v 1.8.2.11.2.7 2001/12/06 22:16:49 easysw Exp $"
// //
// Main header file for the Fast Light Tool Kit (FLTK). // Main header file for the Fast Light Tool Kit (FLTK).
// //
@ -220,10 +220,16 @@ public:
// Visible focus methods... // Visible focus methods...
static void visible_focus(int v) { visible_focus_ = v; } static void visible_focus(int v) { visible_focus_ = v; }
static int visible_focus() { return visible_focus_; } static int visible_focus() { return visible_focus_; }
// Multithreading support:
static void lock();
static void unlock();
static void awake(void* message = 0);
static void* thread_message();
}; };
#endif // !Fl_H #endif // !Fl_H
// //
// End of "$Id: Fl.H,v 1.8.2.11.2.6 2001/11/28 20:43:44 easysw Exp $". // End of "$Id: Fl.H,v 1.8.2.11.2.7 2001/12/06 22:16:49 easysw Exp $".
// //

16
configure.in

@ -1,7 +1,7 @@
dnl -*- sh -*- dnl -*- sh -*-
dnl the "configure" script is made from this by running GNU "autoconf" dnl the "configure" script is made from this by running GNU "autoconf"
dnl dnl
dnl "$Id: configure.in,v 1.33.2.31.2.36 2001/12/06 02:20:36 matthiaswm Exp $" dnl "$Id: configure.in,v 1.33.2.31.2.37 2001/12/06 22:16:48 easysw Exp $"
dnl dnl
dnl Configuration script for the Fast Light Tool Kit (FLTK). dnl Configuration script for the Fast Light Tool Kit (FLTK).
dnl dnl
@ -159,6 +159,7 @@ AC_ARG_ENABLE(shared, [ --enable-shared turn on shared libraries [defau
;; ;;
esac esac
fi]) fi])
AC_ARG_ENABLE(threads, [ --disable-threads disable multi-threading support],,enable_threads=yes)
AC_PROG_CC AC_PROG_CC
AC_PROG_CXX AC_PROG_CXX
@ -299,12 +300,23 @@ case $uname in
GLDSONAME="" GLDSONAME=""
GLDEMOS="" GLDEMOS=""
fi fi
# Don't make symlinks because HFS+ is not case sensitive... # Don't make symlinks because HFS+ is not case sensitive...
HLINKS="#" HLINKS="#"
# Add a postbuild step after linking applications # Add a postbuild step after linking applications
POSTBUILD="/Developer/Tools/Rez -t APPL ../FL/mac.r -o \$@" POSTBUILD="/Developer/Tools/Rez -t APPL ../FL/mac.r -o \$@"
;; ;;
*) *)
dnl Check for pthreads for multi-threaded apps...
if test "$enable_threads" = yes; then
AC_SEARCH_LIBS(pthread_create, pthread)
fi
if test "x$ac_cv_search_pthread" != x; then
AC_DEFINE(HAVE_PTHREAD)
fi
dnl Check for X11... dnl Check for X11...
AC_PATH_XTRA AC_PATH_XTRA
@ -592,5 +604,5 @@ AC_OUTPUT(makeinclude fltk.list fltk-config FL/Makefile)
chmod +x fltk-config chmod +x fltk-config
dnl dnl
dnl End of "$Id: configure.in,v 1.33.2.31.2.36 2001/12/06 02:20:36 matthiaswm Exp $". dnl End of "$Id: configure.in,v 1.33.2.31.2.37 2001/12/06 22:16:48 easysw Exp $".
dnl dnl

134
src/Fl_lock.cxx

@ -1,80 +1,132 @@
/* Fl_Lock.cxx //
// "$Id: Fl_lock.cxx,v 1.13.2.1 2001/12/06 22:16:49 easysw Exp $"
//
// Multi-threading support code for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2001 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems to "fltk-bugs@fltk.org".
//
#include <FL/Fl.H>
#include <config.h>
I would prefer that fltk contain the minimal amount of extra stuff /*
for doing threads. There are other portable thread wrapper libraries From Bill:
out there and fltk should not be providing another. This file
is an attempt to make minimal additions and make them self-contained
in this source file.
Fl::lock() - recursive lock. Plus you must call this before the I would prefer that FLTK contain the minimal amount of extra
first call to Fl::wait()/run() to initialize the thread system. stuff for doing threads. There are other portable thread
The lock is locked all the time except when Fl::wait() is waiting wrapper libraries out there and FLTK should not be providing
for events. another. This file is an attempt to make minimal additions
and make them self-contained in this source file.
Fl::unlock() - release the recursive lock. Fl::lock() - recursive lock. You must call this before the
first call to Fl::wait()/run() to initialize the thread
system. The lock is locked all the time except when
Fl::wait() is waiting for events.
Fl::awake(void*) - Causes Fl::wait() to return (with the lock locked) Fl::unlock() - release the recursive lock.
even if there are no events ready.
Fl::thread_message() - returns an argument sent to an Fl::awake call, Fl::awake(void*) - Causes Fl::wait() to return (with the lock
or returns null if none. Warning: the current implementation only locked) even if there are no events ready.
has a one-entry queue and only returns the most recent value!
See also the Fl_Threads.h header file, which provides convienence Fl::thread_message() - returns an argument sent to an
functions so you can create your own threads and mutexes. Fl::awake() call, or returns NULL if none. WARNING: the
current implementation only has a one-entry queue and only
returns the most recent value!
*/ */
#include <fltk/Fl.h>
#include <config.h>
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
#if defined(_WIN32) // Windows threading...
#ifdef WIN32
# include <windows.h>
# include <process.h>
#include <windows.h> // These pointers are in Fl_win32.cxx:
#include <process.h>
// these pointers are in Fl_win32.cxx:
extern void (*fl_lock_function)(); extern void (*fl_lock_function)();
extern void (*fl_unlock_function)(); extern void (*fl_unlock_function)();
// The main thread's ID
static DWORD main_thread; static DWORD main_thread;
// Microsoft's version of a MUTEX...
CRITICAL_SECTION cs; CRITICAL_SECTION cs;
//
// 'unlock_function()' - Release the lock.
//
static void unlock_function() { static void unlock_function() {
LeaveCriticalSection(&cs); LeaveCriticalSection(&cs);
} }
//
// 'lock_function()' - Get the lock.
//
static void lock_function() { static void lock_function() {
EnterCriticalSection(&cs); EnterCriticalSection(&cs);
} }
//
// 'Fl::lock()' - Lock access to FLTK data structures...
//
void Fl::lock() { void Fl::lock() {
if (!main_thread) if (!main_thread) InitializeCriticalSection(&cs);
InitializeCriticalSection(&cs);
lock_function(); lock_function();
if (!main_thread) { if (!main_thread) {
fl_lock_function = lock_function; fl_lock_function = lock_function;
fl_unlock_function = unlock_function; fl_unlock_function = unlock_function;
main_thread = GetCurrentThreadId(); main_thread = GetCurrentThreadId();
} }
} }
//
// 'Fl::unlock()' - Unlock access to FLTK data structures...
//
void Fl::unlock() { void Fl::unlock() {
unlock_function(); unlock_function();
} }
// when called from a thread, it causes FLTK to awake from Fl::wait()
//
// 'Fl::awake()' - Let the main thread know an update is pending.
//
// When called from a thread, it causes FLTK to awake from Fl::wait()...
//
void Fl::awake(void* msg) { void Fl::awake(void* msg) {
PostThreadMessage( main_thread, WM_USER, (WPARAM)msg, 0); PostThreadMessage( main_thread, WM_USER, (WPARAM)msg, 0);
} }
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
// POSIX threading...
#elif HAVE_PTHREAD #elif HAVE_PTHREAD
#include <unistd.h> # include <unistd.h>
#include <pthread.h> # include <pthread.h>
#ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP # ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
// Linux supports recursive locks, use them directly: // Linux supports recursive locks, use them directly:
static pthread_mutex_t fltk_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; static pthread_mutex_t fltk_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
@ -90,7 +142,7 @@ void Fl::unlock() {
// this is needed for the Fl_Mutex constructor: // this is needed for the Fl_Mutex constructor:
pthread_mutexattr_t Fl_Mutex_attrib = {PTHREAD_MUTEX_RECURSIVE_NP}; pthread_mutexattr_t Fl_Mutex_attrib = {PTHREAD_MUTEX_RECURSIVE_NP};
#else # else
// Make a recursive lock out of the pthread mutex: // Make a recursive lock out of the pthread mutex:
static pthread_mutex_t fltk_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t fltk_mutex = PTHREAD_MUTEX_INITIALIZER;
@ -99,7 +151,8 @@ static int counter;
static void lock_function() { static void lock_function() {
if (!counter || owner != pthread_self()) { if (!counter || owner != pthread_self()) {
pthread_mutex_lock(&fltk_mutex); owner = pthread_self(); pthread_mutex_lock(&fltk_mutex);
owner = pthread_self();
} }
counter++; counter++;
} }
@ -108,11 +161,12 @@ void Fl::unlock() {
if (!--counter) pthread_mutex_unlock(&fltk_mutex); if (!--counter) pthread_mutex_unlock(&fltk_mutex);
} }
#endif # endif
// Pipe for thread messaging...
static int thread_filedes[2]; static int thread_filedes[2];
// these pointers are in Fl_x.cxx: // These pointers are in Fl_x.cxx:
extern void (*fl_lock_function)(); extern void (*fl_lock_function)();
extern void (*fl_unlock_function)(); extern void (*fl_unlock_function)();
@ -133,7 +187,7 @@ void Fl::lock() {
// Init threads communication pipe to let threads awake FLTK from wait // Init threads communication pipe to let threads awake FLTK from wait
pipe(thread_filedes); pipe(thread_filedes);
Fl::add_fd(thread_filedes[0], FL_READ, thread_awake_cb); Fl::add_fd(thread_filedes[0], FL_READ, thread_awake_cb);
fl_lock_function = lock_function; fl_lock_function = lock_function;
fl_unlock_function = Fl::unlock; fl_unlock_function = Fl::unlock;
} }
} }
@ -143,3 +197,7 @@ void Fl::awake(void* msg) {
} }
#endif #endif
//
// End of "$Id: Fl_lock.cxx,v 1.13.2.1 2001/12/06 22:16:49 easysw Exp $".
//

29
src/Fl_win32.cxx

@ -1,5 +1,5 @@
// //
// "$Id: Fl_win32.cxx,v 1.33.2.37.2.9 2001/11/30 16:10:08 easysw Exp $" // "$Id: Fl_win32.cxx,v 1.33.2.37.2.10 2001/12/06 22:16:49 easysw Exp $"
// //
// WIN32-specific code for the Fast Light Tool Kit (FLTK). // WIN32-specific code for the Fast Light Tool Kit (FLTK).
// //
@ -164,6 +164,18 @@ void Fl::remove_fd(int n) {
remove_fd(n, -1); remove_fd(n, -1);
} }
// these pointers are set by the Fl::lock() function:
static void nothing() {}
void (*fl_lock_function)() = nothing;
void (*fl_unlock_function)() = nothing;
static void* thread_message_;
void* Fl::thread_message() {
void* r = thread_message_;
thread_message_ = 0;
return r;
}
MSG fl_msg; MSG fl_msg;
// This is never called with time_to_wait < 0.0. // This is never called with time_to_wait < 0.0.
@ -206,12 +218,17 @@ int fl_wait(double time_to_wait) {
} }
#endif // USE_ASYNC_SELECT #endif // USE_ASYNC_SELECT
fl_unlock_function();
if (time_to_wait < 2147483.648) { if (time_to_wait < 2147483.648) {
// Perform the requested timeout... // Perform the requested timeout...
have_message = PeekMessage(&fl_msg, NULL, 0, 0, PM_REMOVE); have_message = PeekMessage(&fl_msg, NULL, 0, 0, PM_REMOVE);
if (!have_message) { if (!have_message) {
int t = (int)(time_to_wait * 1000.0 + .5); int t = (int)(time_to_wait * 1000.0 + .5);
if (t <= 0) return 0; // too short to measure if (t <= 0) { // too short to measure
fl_lock_function();
return 0;
}
timerid = SetTimer(NULL, 0, t, NULL); timerid = SetTimer(NULL, 0, t, NULL);
have_message = GetMessage(&fl_msg, NULL, 0, 0); have_message = GetMessage(&fl_msg, NULL, 0, 0);
KillTimer(NULL, timerid); KillTimer(NULL, timerid);
@ -220,6 +237,8 @@ int fl_wait(double time_to_wait) {
have_message = GetMessage(&fl_msg, NULL, 0, 0); have_message = GetMessage(&fl_msg, NULL, 0, 0);
} }
fl_lock_function();
// Execute the message we got, and all other pending messages: // Execute the message we got, and all other pending messages:
while (have_message) { while (have_message) {
#ifdef USE_ASYNC_SELECT #ifdef USE_ASYNC_SELECT
@ -233,6 +252,10 @@ int fl_wait(double time_to_wait) {
// looks like it is best to do the dispatch-message anyway: // looks like it is best to do the dispatch-message anyway:
} }
#endif #endif
if (fl_msg.message == WM_USER) // Used for awaking wait() from another thread
thread_message_ = (void*)fl_msg.wParam;
TranslateMessage(&fl_msg); TranslateMessage(&fl_msg);
DispatchMessage(&fl_msg); DispatchMessage(&fl_msg);
have_message = PeekMessage(&fl_msg, NULL, 0, 0, PM_REMOVE); have_message = PeekMessage(&fl_msg, NULL, 0, 0, PM_REMOVE);
@ -997,5 +1020,5 @@ void Fl_Window::make_current() {
} }
// //
// End of "$Id: Fl_win32.cxx,v 1.33.2.37.2.9 2001/11/30 16:10:08 easysw Exp $". // End of "$Id: Fl_win32.cxx,v 1.33.2.37.2.10 2001/12/06 22:16:49 easysw Exp $".
// //

14
src/Fl_x.cxx

@ -1,5 +1,5 @@
// //
// "$Id: Fl_x.cxx,v 1.24.2.24.2.7 2001/11/27 17:44:06 easysw Exp $" // "$Id: Fl_x.cxx,v 1.24.2.24.2.8 2001/12/06 22:16:49 easysw Exp $"
// //
// X specific code for the Fast Light Tool Kit (FLTK). // X specific code for the Fast Light Tool Kit (FLTK).
// //
@ -179,6 +179,11 @@ static void do_queued_events() {
# endif # endif
} }
// these pointers are set by the Fl::lock() function:
static void nothing() {}
void (*fl_lock_function)() = nothing;
void (*fl_unlock_function)() = nothing;
// This is never called with time_to_wait < 0.0: // This is never called with time_to_wait < 0.0:
// It should return negative on error, 0 if nothing happens before // It should return negative on error, 0 if nothing happens before
// timeout, and >0 if any callbacks were done. // timeout, and >0 if any callbacks were done.
@ -197,6 +202,8 @@ int fl_wait(double time_to_wait) {
# endif # endif
int n; int n;
fl_unlock_function();
if (time_to_wait < 2147483.648) { if (time_to_wait < 2147483.648) {
# if USE_POLL # if USE_POLL
n = ::poll(pollfds, nfds, int(time_to_wait*1000 + .5)); n = ::poll(pollfds, nfds, int(time_to_wait*1000 + .5));
@ -213,6 +220,9 @@ int fl_wait(double time_to_wait) {
n = ::select(maxfd+1,&fdt[0],&fdt[1],&fdt[2],0); n = ::select(maxfd+1,&fdt[0],&fdt[1],&fdt[2],0);
# endif # endif
} }
fl_lock_function();
if (n > 0) { if (n > 0) {
for (int i=0; i<nfds; i++) { for (int i=0; i<nfds; i++) {
# if USE_POLL # if USE_POLL
@ -937,5 +947,5 @@ void Fl_Window::make_current() {
#endif #endif
// //
// End of "$Id: Fl_x.cxx,v 1.24.2.24.2.7 2001/11/27 17:44:06 easysw Exp $". // End of "$Id: Fl_x.cxx,v 1.24.2.24.2.8 2001/12/06 22:16:49 easysw Exp $".
// //

5
src/Makefile

@ -1,5 +1,5 @@
# #
# "$Id: Makefile,v 1.18.2.14.2.23 2001/12/06 18:23:29 easysw Exp $" # "$Id: Makefile,v 1.18.2.14.2.24 2001/12/06 22:16:49 easysw Exp $"
# #
# Library makefile for the Fast Light Tool Kit (FLTK). # Library makefile for the Fast Light Tool Kit (FLTK).
# #
@ -108,6 +108,7 @@ CPPFILES = \
Fl_get_key.cxx \ Fl_get_key.cxx \
Fl_get_system_colors.cxx \ Fl_get_system_colors.cxx \
Fl_grab.cxx \ Fl_grab.cxx \
Fl_lock.cxx \
Fl_own_colormap.cxx \ Fl_own_colormap.cxx \
Fl_visual.cxx \ Fl_visual.cxx \
Fl_x.cxx \ Fl_x.cxx \
@ -299,5 +300,5 @@ uninstall:
# #
# End of "$Id: Makefile,v 1.18.2.14.2.23 2001/12/06 18:23:29 easysw Exp $". # End of "$Id: Makefile,v 1.18.2.14.2.24 2001/12/06 22:16:49 easysw Exp $".
# #

31
src/makedepend

@ -269,6 +269,7 @@ Fl_get_system_colors.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
Fl_get_system_colors.o: ../FL/x.H ../FL/Fl_Window.H ../FL/math.h Fl_get_system_colors.o: ../FL/x.H ../FL/Fl_Window.H ../FL/math.h
Fl_grab.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H Fl_grab.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
Fl_grab.o: ../FL/x.H ../FL/Fl_Window.H Fl_grab.o: ../FL/x.H ../FL/Fl_Window.H
Fl_lock.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H ../config.h
Fl_own_colormap.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H Fl_own_colormap.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H
Fl_own_colormap.o: ../FL/Fl_Export.H ../FL/x.H ../FL/Fl_Window.H Fl_own_colormap.o: ../FL/Fl_Export.H ../FL/x.H ../FL/Fl_Window.H
Fl_visual.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H Fl_visual.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
@ -280,7 +281,7 @@ filename_absolute.o: ../FL/filename.H ../FL/Fl_Export.H flstring.h
filename_absolute.o: ../config.h filename_absolute.o: ../config.h
filename_expand.o: ../FL/filename.H ../FL/Fl_Export.H filename_expand.o: ../FL/filename.H ../FL/Fl_Export.H
filename_ext.o: ../FL/filename.H ../FL/Fl_Export.H filename_ext.o: ../FL/filename.H ../FL/Fl_Export.H
filename_isdir.o: ../config.h ../FL/filename.H ../FL/Fl_Export.H filename_isdir.o: flstring.h ../config.h ../FL/filename.H ../FL/Fl_Export.H
filename_list.o: ../config.h ../FL/filename.H ../FL/Fl_Export.H filename_list.o: ../config.h ../FL/filename.H ../FL/Fl_Export.H
filename_match.o: ../FL/filename.H ../FL/Fl_Export.H filename_match.o: ../FL/filename.H ../FL/Fl_Export.H
filename_setext.o: ../FL/filename.H ../FL/Fl_Export.H filename_setext.o: ../FL/filename.H ../FL/Fl_Export.H
@ -443,13 +444,27 @@ forms_pixmap.o: ../FL/Fl_Input.H ../FL/Fl_Menu_Button.H ../FL/Fl_Positioner.H
forms_pixmap.o: ../FL/Fl_Value_Slider.H ../FL/Fl_Timer.H forms_pixmap.o: ../FL/Fl_Value_Slider.H ../FL/Fl_Timer.H
forms_timer.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H forms_timer.o: ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
forms_timer.o: ../FL/Fl_Timer.H ../FL/Fl_Widget.H ../FL/fl_draw.H forms_timer.o: ../FL/Fl_Timer.H ../FL/Fl_Widget.H ../FL/fl_draw.H
Fl_Gl_Choice.o: ../config.h Fl_Gl_Choice.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
Fl_Gl_Overlay.o: ../config.h Fl_Gl_Choice.o: ../FL/x.H ../FL/Fl_Window.H Fl_Gl_Choice.H
Fl_Gl_Window.o: ../config.h Fl_Gl_Overlay.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H
gl_draw.o: ../config.h Fl_Gl_Overlay.o: ../FL/Fl_Export.H ../FL/x.H ../FL/Fl_Window.H Fl_Gl_Choice.H
gl_start.o: ../config.h Fl_Gl_Overlay.o: ../FL/Fl_Gl_Window.H
glut_compatability.o: ../config.h Fl_Gl_Window.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
glut_font.o: ../config.h Fl_Gl_Window.o: ../FL/x.H ../FL/Fl_Window.H Fl_Gl_Choice.H
Fl_Gl_Window.o: ../FL/Fl_Gl_Window.H
gl_draw.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
gl_draw.o: ../FL/gl.h ../FL/x.H ../FL/Fl_Window.H ../FL/fl_draw.H
gl_draw.o: Fl_Gl_Choice.H Fl_Font.H
gl_start.o: ../config.h ../FL/Fl.H ../FL/Enumerations.H ../FL/Fl_Export.H
gl_start.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/x.H
gl_start.o: ../FL/Fl_Window.H ../FL/fl_draw.H Fl_Gl_Choice.H
glut_compatability.o: ../config.h ../FL/glut.H ../FL/gl.h
glut_compatability.o: ../FL/Enumerations.H ../FL/Fl_Export.H ../FL/Fl.H
glut_compatability.o: ../FL/Fl_Gl_Window.H ../FL/Fl_Window.H
glut_compatability.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H
glut_font.o: ../config.h ../FL/glut.H ../FL/gl.h ../FL/Enumerations.H
glut_font.o: ../FL/Fl_Export.H ../FL/Fl.H ../FL/Fl_Gl_Window.H
glut_font.o: ../FL/Fl_Window.H
scandir.o: ../config.h scandir.o: ../config.h
numericsort.o: ../config.h numericsort.o: ../config.h
vsnprintf.o: ../config.h vsnprintf.o: ../config.h

4
visualc/fltk.lib.dsp

@ -339,6 +339,10 @@ SOURCE=..\src\fl_line_style.cxx
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\src\Fl_lock.cxx
# End Source File
# Begin Source File
SOURCE=..\src\Fl_Menu.cxx SOURCE=..\src\Fl_Menu.cxx
# End Source File # End Source File
# Begin Source File # Begin Source File

15
visualc/fltkdll.dsp

@ -1143,6 +1143,21 @@ DEP_CPP_FL_LIN=\
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\src\Fl_lock.cxx
DEP_CPP_FL_LOC=\
"..\fl\enumerations.h"\
"..\fl\fl_draw.h"\
"..\fl\fl_export.h"\
"..\fl\fl_group.h"\
"..\fl\fl_widget.h"\
"..\fl\fl_window.h"\
"..\fl\mac.H"\
"..\fl\win32.h"\
"..\fl\x.h"\
# End Source File
# Begin Source File
SOURCE=..\src\Fl_Menu.cxx SOURCE=..\src\Fl_Menu.cxx
DEP_CPP_FL_ME=\ DEP_CPP_FL_ME=\
"..\fl\enumerations.h"\ "..\fl\enumerations.h"\

Loading…
Cancel
Save