fixed iBook keyboard bug.

all message handling now in Carbon.
mouse capture support added.
timer support added.
overlay support added.

getting there...


git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@1881 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Matthias Melcher 2001-12-20 05:27:14 +00:00
parent a2e149d132
commit 0215c7986c
9 changed files with 191 additions and 62 deletions

View File

@ -1,5 +1,9 @@
CHANGES IN FLTK 1.1.0b8
- MacOS: fixed iBook keyboard handling, moved
remaining message handling to Carbon, added mouse
capture support, added timer support, added overlay
support, fixed doublebuffering side effects.
- The configure script wasn't using the -fpermissive or
-fno-exceptions options with GCC.
- Fl_JPEG_Image and friends didn't set the depth if the

View File

@ -1,5 +1,5 @@
//
// "$Id: Fl_Double_Window.H,v 1.7.2.3 2001/01/22 15:13:37 easysw Exp $"
// "$Id: Fl_Double_Window.H,v 1.7.2.3.2.1 2001/12/20 05:27:14 matthiaswm Exp $"
//
// Double-buffered window header file for the Fast Light Tool Kit (FLTK).
//
@ -31,6 +31,7 @@
class Fl_Double_Window : public Fl_Window {
protected:
FL_EXPORT void flush(int eraseoverlay);
char force_doublebuffering_; // force db, even if the OS already buffers windows (overlays need that on MacOS and Windows2000)
public:
FL_EXPORT void show();
void show(int a, char **b) {Fl_Window::show(a,b);}
@ -38,13 +39,14 @@ public:
FL_EXPORT void resize(int,int,int,int);
FL_EXPORT void hide();
FL_EXPORT ~Fl_Double_Window();
Fl_Double_Window(int W, int H, const char *l = 0) : Fl_Window(W,H,l) {}
Fl_Double_Window(int W, int H, const char *l = 0)
: Fl_Window(W,H,l), force_doublebuffering_(0) {}
Fl_Double_Window(int X, int Y, int W, int H, const char *l = 0)
: Fl_Window(X,Y,W,H,l) {}
: Fl_Window(X,Y,W,H,l), force_doublebuffering_(0) {}
};
#endif
//
// End of "$Id: Fl_Double_Window.H,v 1.7.2.3 2001/01/22 15:13:37 easysw Exp $".
// End of "$Id: Fl_Double_Window.H,v 1.7.2.3.2.1 2001/12/20 05:27:14 matthiaswm Exp $".
//

View File

@ -1,5 +1,5 @@
//
// "$Id: Fl_Overlay_Window.H,v 1.5.2.3 2001/01/22 15:13:37 easysw Exp $"
// "$Id: Fl_Overlay_Window.H,v 1.5.2.3.2.1 2001/12/20 05:27:14 matthiaswm Exp $"
//
// Overlay window header file for the Fast Light Tool Kit (FLTK).
//
@ -41,14 +41,14 @@ public:
FL_EXPORT int can_do_overlay();
FL_EXPORT void redraw_overlay();
Fl_Overlay_Window(int W, int H, const char *l=0)
: Fl_Double_Window(W,H,l) {overlay_ = 0;}
: Fl_Double_Window(W,H,l) {overlay_ = 0; force_doublebuffering_=1;}
Fl_Overlay_Window(int X, int Y, int W, int H, const char *l=0)
: Fl_Double_Window(X,Y,W,H,l) {overlay_ = 0;}
: Fl_Double_Window(X,Y,W,H,l) {overlay_ = 0; force_doublebuffering_=1;}
void show(int a, char **b) {Fl_Double_Window::show(a,b);}
};
#endif
//
// End of "$Id: Fl_Overlay_Window.H,v 1.5.2.3 2001/01/22 15:13:37 easysw Exp $".
// End of "$Id: Fl_Overlay_Window.H,v 1.5.2.3.2.1 2001/12/20 05:27:14 matthiaswm Exp $".
//

View File

@ -29,8 +29,8 @@ Mac OS X platform:
- (MPW - future releases)
FLTK for Mac is carbonized, i.e. all applications should run on Mac
OS 8.1 and higher and OS X without changes.
FLTK for Mac is fully carbonized, i.e. all applications should run
on Mac OS 8.1 and higher and OS X without changes.
gcc (Carbon) - how to build
@ -75,16 +75,13 @@ find . -name 'Make*' -exec $SET_MAC_TYPE {} \;
echo "done."
known MacFLTK bugs
------------------
known MacFLTK bugs and ToDo's
-----------------------------
- file handles not supported
- timing not fully supported
- line styles not fully supported
- cut, copy, paste
- line styles not fully implemented
- cut, copy, paste not implemented
- sub-sub-subwindow not tested
- modal windows are not modal
- overlay not complete
- image transparency not implemented
- 'shiny' needs work (flush/aglFlush)
- threads not implemented
@ -101,9 +98,9 @@ clock(++), colbrowser(++), color_chooser(++), cube(++), cursor(++),
curve(++), demo(++), doublebuffer(++), editor(++), fast_slow(++),
file_chooser(++), fonts(++), forms(++), fractals(++), fullscreen(++),
gl_overlay(++), glpuzzle(++), hello(++), help(++), iconize(++), image(+),
inactive(++), input(++), keyboard(+), label(++), line_style(+),
inactive(++), input(++), keyboard(++), label(++), line_style(+),
mandelbrot(++), menubar(++), message(++), minimum(++), navigation(++),
output(++), overlay(-), pack(++), pixmap(++), pixmap_browser(++),
output(++), overlay(++), pack(++), pixmap(++), pixmap_browser(++),
radio(++), resizebox(++), scroll(++), shape(++), shiny(-), subwindow(++),
symbols(++), tabs(++), tile(++), tiled_image(++), valuators(++),
fluid(++)
@ -137,6 +134,8 @@ FLTK 1.0.6 for Mac is not supported by the FLTK team and will not
be further developed by the author. Instead it will be replaced
by FLTK 1.1.x for Mac in the near future.
Matthias Melcher

View File

@ -1,5 +1,5 @@
//
// "$Id: Fl_Double_Window.cxx,v 1.12.2.4.2.3 2001/12/06 00:17:47 matthiaswm Exp $"
// "$Id: Fl_Double_Window.cxx,v 1.12.2.4.2.4 2001/12/20 05:27:14 matthiaswm Exp $"
//
// Double-buffered window code for the Fast Light Tool Kit (FLTK).
//
@ -146,10 +146,18 @@ void fl_begin_offscreen(GWorldPtr gWorld) {
GetGWorld( &prevPort, &prevGD );
if ( gWorld )
{
SetGWorld( gWorld, 0L ); // sets the correct port
SetGWorld( gWorld, 0 ); // sets the correct port
PixMapHandle pm = GetGWorldPixMap(gWorld);
LockPixels(pm);
fl_window = GetWindowFromPort( gWorld );
Boolean ret = LockPixels(pm);
if ( ret == false )
{
Rect rect;
GetPortBounds( gWorld, &rect );
UpdateGWorld( &gWorld, 0, &rect, 0, 0, 0 );
pm = GetGWorldPixMap( gWorld );
LockPixels( pm );
}
fl_window = 0;
}
fl_push_no_clip();
}
@ -190,7 +198,7 @@ void Fl_Double_Window::flush(int eraseoverlay) {
#ifdef __APPLE__
// the Apple OS X window manager double buffers ALL windows anyway, so there is no need to waste memory and time
// BTW: Windows2000 and later also forces doublebuffering if transparent windows are beeing used (alpha channel)
if ( !QDIsPortBuffered( GetWindowPort(myi->xid) ) )
if ( ( !QDIsPortBuffered( GetWindowPort(myi->xid) ) ) || force_doublebuffering_ )
myi->other_xid = fl_create_offscreen(w(), h());
#else
myi->other_xid = fl_create_offscreen(w(), h());
@ -233,12 +241,14 @@ void Fl_Double_Window::flush(int eraseoverlay) {
DeleteDC(fl_gc);
fl_gc = _sgc;
#elif defined(__APPLE__)
if ( myi->other_xid ) fl_begin_offscreen( myi->other_xid );
fl_restore_clip(); // duplicate region into new gc
draw();
if ( myi->other_xid ) fl_end_offscreen();
} else {
fl_clip_region( 0 );
if ( myi->other_xid ) {
fl_begin_offscreen( myi->other_xid );
fl_clip_region( 0 );
draw();
fl_end_offscreen();
} else {
draw();
}
#else // X:
fl_window = myi->other_xid;
draw();
@ -286,5 +296,5 @@ Fl_Double_Window::~Fl_Double_Window() {
}
//
// End of "$Id: Fl_Double_Window.cxx,v 1.12.2.4.2.3 2001/12/06 00:17:47 matthiaswm Exp $".
// End of "$Id: Fl_Double_Window.cxx,v 1.12.2.4.2.4 2001/12/20 05:27:14 matthiaswm Exp $".
//

View File

@ -1,5 +1,5 @@
//
// "$Id: Fl_grab.cxx,v 1.1.2.4.2.3 2001/12/12 07:50:37 matthiaswm Exp $"
// "$Id: Fl_grab.cxx,v 1.1.2.4.2.4 2001/12/20 05:27:14 matthiaswm Exp $"
//
// Grab/release code for the Fast Light Tool Kit (FLTK).
//
@ -44,6 +44,11 @@ extern void fl_fix_focus(); // in Fl.cxx
extern HWND fl_capture;
#endif
#ifdef __APPLE__
// MacOS Carbon does not seem to have a mechanism to grab the mouse pointer
extern WindowRef fl_capture;
#endif
void Fl::grab(Fl_Window* w) {
if (w) {
if (!grab_) {
@ -51,7 +56,9 @@ void Fl::grab(Fl_Window* w) {
SetActiveWindow(fl_capture = fl_xid(first_window()));
SetCapture(fl_capture);
#elif defined(__APPLE__)
BeginAppModalStateForWindow( fl_xid(first_window()) );
// BeginAppModalStateForWindow( fl_xid(first_window()) ); //+ please check if we need this (sample app?)
fl_capture = fl_xid( first_window() );
SetUserFocusWindow( fl_capture );
#else
XGrabPointer(fl_display,
fl_xid(first_window()),
@ -78,7 +85,9 @@ void Fl::grab(Fl_Window* w) {
fl_capture = 0;
ReleaseCapture();
#elif defined(__APPLE__)
EndAppModalStateForWindow( fl_xid(first_window()) );
// EndAppModalStateForWindow( fl_xid(first_window()) ); //+ Please check if we need this
fl_capture = 0;
SetUserFocusWindow( (WindowRef)kUserFocusAuto );
#else
XUngrabKeyboard(fl_display, fl_event_time);
XUngrabPointer(fl_display, fl_event_time);
@ -93,5 +102,5 @@ void Fl::grab(Fl_Window* w) {
}
//
// End of "$Id: Fl_grab.cxx,v 1.1.2.4.2.3 2001/12/12 07:50:37 matthiaswm Exp $".
// End of "$Id: Fl_grab.cxx,v 1.1.2.4.2.4 2001/12/20 05:27:14 matthiaswm Exp $".
//

View File

@ -1,5 +1,5 @@
//
// "$Id: Fl_mac.cxx,v 1.1.2.7 2001/12/19 09:10:00 matthiaswm Exp $"
// "$Id: Fl_mac.cxx,v 1.1.2.8 2001/12/20 05:27:14 matthiaswm Exp $"
//
// MacOS specific code for the Fast Light Tool Kit (FLTK).
//
@ -23,6 +23,22 @@
// Please report all bugs and problems to "fltk-bugs@fltk.org".
//
/**
* From the inner edge of a MetroWerks CodeWarrior CD:
* (without permission)
*
* Three Compiles for 68Ks under the sky,
* Seven Compiles for PPCs in their fragments of code,
* Nine Compiles for Mortal Carbon doomed to die,
* One Compile for Mach-O Cocoa on its Mach-O throne,
* in the Land of MacOS X where the Drop-Shadows lie.
*
* One Compile to link them all, One Compile to merge them,
* One Compile to copy them all and in the bundle bind them,
* in the Land of MacOS X where the Drop-Shadows lie.
*/
// we don't need the following definition because we deliver only
// true mouse moves. On very slow systems however, this flag may
// still be useful.
@ -178,6 +194,50 @@ void printMacEvent( const EventRecord &ev )
printf("Event: w:0x%04x m:0x%08x mod:0x%04x flags:%08x x:%d, y:%d\n", ev.what, ev.message, ev.modifiers, 0, ev.where.h, ev.where.v );
}
WindowRef fl_capture = 0; // we need this to compensate for a missing(?) mouse capture
WindowRef fl_os_capture = 0; // the dispatch handler will redirect mose move and drag events to these windows
/**
* We can make every event pass through this function
* - mouse events need to be manipulated to use a mouse focus window
* - keyboard, mouse and some window events need to quit the Apple Event Loop
* so FLTK can continue its own management
*/
pascal OSStatus carbonDispatchHandler( EventHandlerCallRef nextHandler, EventRef event, void *userData )
{
OSStatus ret = eventNotHandledErr;
switch ( GetEventClass( event ) )
{
case kEventClassMouse:
switch ( GetEventKind( event ) )
{
case kEventMouseUp:
case kEventMouseMoved:
case kEventMouseDragged:
if ( fl_capture )
ret = SendEventToEventTarget( event, GetWindowEventTarget( fl_capture ) );
else if ( fl_os_capture )
ret = SendEventToEventTarget( event, GetWindowEventTarget( fl_os_capture ) );
break;
}
break;
}
if ( ret == eventNotHandledErr )
ret = CallNextEventHandler( nextHandler, event ); // let the OS handle the activation, but continue to get a click-through effect
QuitApplicationEventLoop();
return ret;
}
/**
* this callback simply quits the main event loop handler, so FLTK can do its magic
*/
static void timerProcCB( EventLoopTimerRef, void* )
{
QuitApplicationEventLoop();
}
/**
* This function iss the central event handler.
* It reads events from the event queue using the given maximum time
@ -222,7 +282,38 @@ static double do_queued_events( double time = 0.0 )
OSStatus ret;
EventRef ev;
static EventTargetRef target = 0;
if ( !target ) target = GetEventDispatcherTarget();
static EventLoopTimerRef timer = 0;
if ( !target )
{
target = GetEventDispatcherTarget();
EventHandlerUPP dispatchHandler = NewEventHandlerUPP( carbonDispatchHandler ); // will not be disposed by Carbon...
static EventTypeSpec dispatchEvents[] = {
{ kEventClassWindow, kEventWindowShown },
{ kEventClassWindow, kEventWindowHidden },
{ kEventClassWindow, kEventWindowActivated },
{ kEventClassWindow, kEventWindowDeactivated },
{ kEventClassWindow, kEventWindowClose },
{ kEventClassKeyboard, kEventRawKeyDown },
{ kEventClassKeyboard, kEventRawKeyRepeat },
{ kEventClassKeyboard, kEventRawKeyUp },
{ kEventClassKeyboard, kEventRawKeyModifiersChanged },
{ kEventClassMouse, kEventMouseDown },
{ kEventClassMouse, kEventMouseUp },
{ kEventClassMouse, kEventMouseMoved },
{ kEventClassMouse, kEventMouseWheelMoved },
{ kEventClassMouse, kEventMouseDragged } };
ret = InstallEventHandler( target, dispatchHandler, 14, dispatchEvents, 0, 0L );
ret = InstallEventLoopTimer( GetMainEventLoop(), 0, 0, NewEventLoopTimerUPP( timerProcCB ), 0, &timer );
}
// InstallEventLoopTimer(); SetEventLoopNextFireTime();
if ( time > 0.0 )
SetEventLoopTimerNextFireTime( timer, time );
RunApplicationEventLoop();
// ;;;; printf("Left Event Loop!\n");
//RunCurrentEventLoop(0.1);
/*
ret = ReceiveNextEvent( 0, NULL, time, true, &ev );
if ( ret == noErr )
{
@ -235,6 +326,7 @@ static double do_queued_events( double time = 0.0 )
}
ReleaseEvent( ev );
}
*/
#else
EventRecord ev;
unsigned long ticks = (int)(time*60.0); // setting ticks to 7fffffff will wait forever
@ -385,11 +477,10 @@ pascal OSStatus carbonWindowHandler( EventHandlerCallRef nextHandler, EventRef e
if ( !window->parent() ) Fl::handle(FL_UNFOCUS, window);
break;
case kEventWindowClose:
//printf("Close\n");
Fl::handle( FL_CLOSE, window );
Fl::handle( FL_CLOSE, window ); // this might or might not close the window
// if there are no more windows, send a high-level quit event
if (!Fl_X::first) QuitAppleEventHandler( 0, 0, 0 );
ret = noErr;
ret = noErr; // returning noErr tells Carbon to stop following up on this event
break;
}
@ -456,26 +547,30 @@ pascal OSStatus carbonMouseHandler( EventHandlerCallRef nextHandler, EventRef ev
switch ( GetEventKind( event ) )
{
case kEventMouseDown:
//printf("mouse down window %08x (%08x) [%08x]\n", window, xid, nextHandler );
// ;;;; printf("Carb-win-hdlr: mouse down (x:%d, y:d)\n", pos.h, pos.v );
part = FindWindow( pos, &tempXid );
if ( part != inContent )
return CallNextEventHandler( nextHandler, event ); // let the OS handle this for us
if ( !IsWindowActive( xid ) )
CallNextEventHandler( nextHandler, event ); // let the OS handle the activation, but continue to get a click-through effect
// normal handling of mouse-down follows
fl_os_capture = xid;
sendEvent = FL_PUSH;
Fl::e_is_click = 1; px = pos.h; py = pos.v;
Fl::e_clicks = clickCount;
Fl::e_clicks = clickCount-1;
// fall through
case kEventMouseUp:
if (!window) break;
// ;;;; if ( !sendEvent ) printf("Carb-win-hdlr: mouse up (x:%d, y:d)\n", pos.h, pos.v );
if ( !window ) break;
if ( !sendEvent ) sendEvent = FL_RELEASE;
Fl::e_keysym = keysym[ btn ];
// fall through
case kEventMouseMoved:
// ;;;; if ( !sendEvent ) printf("Carb-win-hdlr: mouse moved (x:%d, y:d)\n", pos.h, pos.v );
if ( !sendEvent ) { sendEvent = FL_MOVE; chord = 0; }
// fall through
case kEventMouseDragged:
// ;;;; if ( !sendEvent ) printf("Carb-win-hdlr: mouse dragged (x:%d, y:d)\n", pos.h, pos.v );
if ( !sendEvent ) {
sendEvent = FL_DRAG;
if (abs(pos.h-px)>5 || abs(pos.v-py)>5) Fl::e_is_click = 0;
@ -542,6 +637,7 @@ pascal OSStatus carbonKeyboardHandler( EventHandlerCallRef nextHandler, EventRef
GetEventParameter( event, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &keyCode );
char key;
GetEventParameter( event, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(char), NULL, &key );
// ;;;; printf( "kb: %08x %08x %02x %04x\n", mods, keyCode, key, GetEventKind( event ) );
switch ( GetEventKind( event ) )
{
case kEventRawKeyDown:
@ -551,10 +647,12 @@ pascal OSStatus carbonKeyboardHandler( EventHandlerCallRef nextHandler, EventRef
case kEventRawKeyUp:
if ( !sendEvent ) sendEvent = FL_KEYUP;
Fl::e_keysym = macKeyLookUp[ keyCode & 0x7f ];
if ( key=='\t' || key==27 || key>=32 )
{
if ( key=='\t' || key==27 || ( key>=32 && key!=0x7f ) ) {
buffer[0] = key;
Fl::e_length = 1;
} else if ( key==3 || key==0x0d ) {
buffer[0] = 0x0d;
Fl::e_length = 1;
} else {
buffer[0] = 0;
Fl::e_length = 0;
@ -782,7 +880,7 @@ static unsigned short macKeyLookUp[128] =
FL_F+5, FL_F+6, FL_F+7, FL_F+3, FL_F+8, FL_F+9, 0, FL_F+11,
0, 0, 0, 0, 0, FL_F+10, 0, FL_F+12,
0, 0, FL_Pause, FL_Home, FL_Page_Up, 0, FL_F+4, 0,
0, 0, FL_Pause, FL_Home, FL_Page_Up, FL_Delete, FL_F+4, 0,
FL_F+2, FL_Page_Down, FL_F+1, FL_Left, FL_Right, FL_Down, FL_Up, 0,
};
@ -1217,6 +1315,7 @@ void Fl_X::make(Fl_Window* w)
//++ hmmm, this should maybe set by the activate event?!
Fl::handle(FL_FOCUS, w);
//++ if (w->modal()) { Fl::modal_ = w; fl_fix_focus(); }
// ;;;; printf("Created subwindow %08x (%08x)\n", w, x->xid );
}
else // create a desktop window
{
@ -1360,6 +1459,7 @@ void Fl_X::make(Fl_Window* w)
//++ hmmm, this should maybe set by the activate event?!
Fl::handle(FL_FOCUS, w);
//++ if (w->modal()) { Fl::modal_ = w; fl_fix_focus(); }
//;;;; printf("Created top level window %08x (%08x)\n", w, x->xid );
}
}
@ -1432,7 +1532,7 @@ void Fl_Window::show() {
{
if ( IsWindowCollapsed( i->xid ) ) CollapseWindow( i->xid, false );
//++ do we need to do grab and icon handling here?
/*if (!fl_capture)*/
if (!fl_capture) //++ Do we need this? It should keep the mouse modal window in front
BringToFront(i->xid);
}
}
@ -1470,7 +1570,6 @@ void Fl_Window::make_current()
{
if ( !fl_window_region )
fl_window_region = NewRgn();
//- printf(" make current: 0x%08x\n", this);
fl_window = i->xid;
current_ = this;
@ -1590,7 +1689,10 @@ elapsedNanoseconds = AbsoluteToNanoseconds(elapsedTime);
*/
//++ when using OpenGL in a Mach-O executable and include<aglMacro.h>
//++ we MUST call aglConfigure(AGL_TARGET_OS_MAC_OSX, GL_TRUE);
//
// End of "$Id: Fl_mac.cxx,v 1.1.2.7 2001/12/19 09:10:00 matthiaswm Exp $".
// End of "$Id: Fl_mac.cxx,v 1.1.2.8 2001/12/20 05:27:14 matthiaswm Exp $".
//

View File

@ -1,5 +1,5 @@
//
// "$Id: fl_font_mac.cxx,v 1.1.2.2 2001/12/04 03:03:17 matthiaswm Exp $"
// "$Id: fl_font_mac.cxx,v 1.1.2.3 2001/12/20 05:27:14 matthiaswm Exp $"
//
// MacOS font selection routines for the Fast Light Tool Kit (FLTK).
//
@ -106,7 +106,7 @@ Fl_Fontdesc* fl_fonts = built_in_table;
void fl_font(Fl_FontSize* s) {
fl_fontsize = s;
SetPort( GetWindowPort(fl_window) );
if (fl_window) SetPort( GetWindowPort(fl_window) );
TextFont(fl_fontsize->font); //: select font into current QuickDraw GC
TextFace(fl_fontsize->face);
TextSize(fl_fontsize->size);
@ -172,5 +172,5 @@ void fl_draw(const char* str, int x, int y) {
}
//
// End of "$Id: fl_font_mac.cxx,v 1.1.2.2 2001/12/04 03:03:17 matthiaswm Exp $".
// End of "$Id: fl_font_mac.cxx,v 1.1.2.3 2001/12/20 05:27:14 matthiaswm Exp $".
//

View File

@ -1,5 +1,5 @@
//
// "$Id: fl_rect.cxx,v 1.10.2.4.2.5 2001/12/18 00:24:01 matthiaswm Exp $"
// "$Id: fl_rect.cxx,v 1.10.2.4.2.6 2001/12/20 05:27:14 matthiaswm Exp $"
//
// Rectangle drawing routines for the Fast Light Tool Kit (FLTK).
//
@ -340,14 +340,17 @@ void fl_restore_clip() {
SelectClipRgn(fl_gc, r); //if r is NULL, clip is automatically cleared
#elif defined(__APPLE__)
# if 1
GrafPtr port = GetWindowPort( fl_window );
if ( port ) { // port will be NULL if we are using a GWorld (and fl_window_region is invalid)
RgnHandle portClip = NewRgn();
CopyRgn( fl_window_region, portClip ); // changed
if ( r )
SectRgn( portClip, r, portClip );
SetPortClipRegion( port, portClip );
DisposeRgn( portClip );
if ( fl_window )
{
GrafPtr port = GetWindowPort( fl_window );
if ( port ) { // port will be NULL if we are using a GWorld (and fl_window_region is invalid)
RgnHandle portClip = NewRgn();
CopyRgn( fl_window_region, portClip ); // changed
if ( r )
SectRgn( portClip, r, portClip );
SetPortClipRegion( port, portClip );
DisposeRgn( portClip );
}
}
# else
if (r) SetClip(r);
@ -500,5 +503,5 @@ int fl_clip_box(int x, int y, int w, int h, int& X, int& Y, int& W, int& H){
}
//
// End of "$Id: fl_rect.cxx,v 1.10.2.4.2.5 2001/12/18 00:24:01 matthiaswm Exp $".
// End of "$Id: fl_rect.cxx,v 1.10.2.4.2.6 2001/12/20 05:27:14 matthiaswm Exp $".
//