Commit Graph

1193 Commits

Author SHA1 Message Date
Albrecht Schlosser
b426a3d7c0 Fix two rare potential bugs (NULL pointer dereferencing)
Both bugs can happen if a widget doesn't have an associated window()
or in similar situations. These fixes returns NULL to prevent crashes.

Bugs observed in special test scenarios, not real-life programs.
2022-11-05 19:31:59 +01:00
ManoloFLTK
918395e091 Wayland: simpler handling of the z-order of subwindows
It's not necessary to call wl_subsurface_place_above() because
"A new sub-surface is initially added as the top-most in the stack of its siblings and parent."
2022-11-05 15:28:39 +01:00
ManoloFLTK
425bd5865d Wayland DnD: make insertion cursor follow DnD cursor. 2022-11-04 15:06:45 +01:00
ManoloFLTK
eb679f99a8 Wayland DnD: allow cancel with Fl::pushed(0) as under X11 (#525)
This is a partial fix of issue #525 that reproduces under Wayland the "unofficial",
X11-specific way to cancel a Dnd operation by calling Fl::pushed(0).
2022-11-04 12:37:26 +01:00
Albrecht Schlosser
c570bd8f96 Fix trailing whitespace 2022-11-01 20:06:22 +01:00
ManoloFLTK
31ec6f623a Wayland platform: fix problem with fl_pie() (#512 - cont'd) 2022-10-30 11:46:08 +01:00
ManoloFLTK
7403e333da Wayland platform: fix problem with fl_pie() (#512 - cont'd) 2022-10-30 11:33:10 +01:00
ManoloFLTK
f9acdb6edb Repair commit e0c3fe9 to fix #521 which destroyed DnD from Wayland
It turns out it's necessary to memorize 2 event serial numbers :
- serial changed at each pointer and key event;
- pointer_enter_serial changed when pointer enters a surface
because this one and not any other is needed for exact cursor changes
by wl_pointer_set_cursor() in do_set_cursor().
2022-10-25 19:08:12 +02:00
ManoloFLTK
e0c3fe939f Fix problem with cursor point of action after FL_PUSH (#521) 2022-10-25 10:44:36 +02:00
ManoloFLTK
b0d4c2fd4c Include stdint.h may be needed for uint32_t (#522) 2022-10-24 05:30:33 +02:00
ManoloFLTK
e69d45cde8 Make Fl::display(const char *) active also for the Wayland platform. 2022-10-23 12:19:44 +02:00
ManoloFLTK
eca61ab98a Wayland drag-n-drop: send FL_DND_LEAVE when the dragging mouse leaves the window 2022-10-20 08:30:54 +02:00
ManoloFLTK
24c63c0774 Wayland drag-n-drop: handle subwindows as other platforms do (#516)
The d-n-d target window is now always the top-level window even if the
mouse is over a subwindow. That's what all other platforms do.
Global var fl_dnd_target_surface memorise what's the current d-n-d target
surface and follows changes from top-window to subwindows.
2022-10-19 12:28:04 +02:00
ManoloFLTK
a944758aea Wayland drag-n-drop to Fl_Window: send necessary FL_ENTER event (#516)
Drag-n-drop under Wayland was OK in general except when the drop target is an Fl_Window
because the belowmouse object is not set in this configuration.
Processing an FL_ENTER event before the FL_DND_RELEASE event fixes that.
2022-10-17 10:32:41 +02:00
Albrecht Schlosser
723d8caa9d Fix "Fl::focus() changes Fl_Group::current() to null" (#515)
This issue is caused by setting `Fl_Group::current(0);` in
Fl_Window::show(), i.e. in Fl_X::make_xid(..) in an attempt to
fix a "very common user bug: forgot end()". As long as this is
done, this commit fixes the issue.

For details see GitHub issue #515.
2022-10-16 23:23:04 +02:00
ManoloFLTK
87c8b98a98 Wayland platform: fix for issue #512 with fl_arc(). 2022-10-12 06:12:07 +02:00
ManoloFLTK
1df79078b7 Remove duplications between Fl_Graphics_Driver and derived classes. 2022-10-10 16:58:48 +02:00
ManoloFLTK
e4709b837d Fl_Cairo_Graphics_Driver: fix Fl_Bitmap drawing whatever the endianness. 2022-10-10 11:31:02 +02:00
ManoloFLTK
7fa677f93e Fix for issue #511: allow fl_circle() even without calls to fl_begin/end_loop/polygon(). 2022-10-10 07:08:00 +02:00
ManoloFLTK
cae2b2883b Fl_Cairo_Graphics_Driver: make image drawing correct whatever the host endianness. 2022-10-09 22:45:58 +02:00
ManoloFLTK
1a5d6572e9 Fix issue #510: image transparency is not properly processed. 2022-10-09 17:43:06 +02:00
ManoloFLTK
206d9b17e0 Fix issue #509: Cairo drawing: unexpected behaviour
This commit fixes " "drawing an fl_pie() with dimension 1x1".
But it does not change "drawing fl_line() with begin position = end position does not show"
because the same behaviour is observed with Windows and macOS.
2022-10-05 08:52:30 +02:00
ManoloFLTK
4b70bc32c5 Add missing return value to Fl_WinAPI_Gl_Window_Driver::create_gl_context() 2022-10-02 21:37:35 +02:00
ManoloFLTK
1fc23f8506 Clean use of virtual GLContext Fl_Gl_Window_Driver::create_gl_context(). 2022-10-02 13:35:53 +02:00
ManoloFLTK
abc6709e8e macOS: simpler way to delete the GL1 context of widgets-using GL3 windows. 2022-10-02 08:40:38 +02:00
ManoloFLTK
4196daa77e macOS: fixed problem in resizing of widget-containing OpenGL 3 window. 2022-10-01 07:31:42 +02:00
ManoloFLTK
0627213a82 FLTK widgets in OpenGL 3 windows: rewrite for driver system. 2022-09-30 19:25:23 +02:00
ManoloFLTK
a61d8fb682 macOS: simpler code for auxiliary NSView supporting widgets on a GL3 window. 2022-09-30 16:20:51 +02:00
ManoloFLTK
c96a4f3141 macOS platform: rename Fl_Cocoa_Gl_Window_Driver.cxx to .mm 2022-09-29 16:25:14 +02:00
ManoloFLTK
da66e21e1d Support of FLTK widgets in OpenGL 3 windows - cont'd.
This commit allows to switch between FL_DOUBLE / FL_SINGLE modes
in widget-containing GL3 windows.
Demo program examples/OpenGL3test is modified to show FLTK widgets
even if the platform does not support OpenGL 3.
2022-09-29 09:39:21 +02:00
ManoloFLTK
c2efb0d849 macOS: support of FLTK widgets in OpenGL 3 windows - cont'd.
This code is OK under macOS 10 9 and 13.
2022-09-28 17:06:00 +02:00
ManoloFLTK
3225afaeec Remove use of class Fl_Window_Driver inside libfltk_gl 2022-09-27 16:51:35 +02:00
ManoloFLTK
59fc60ea4c Simpler code to support FLTK widgets in macOS OpenGL 3 windows.
Also, the application-level code to add widgets to a GL3 window becomes
platform-independent.
2022-09-27 14:12:39 +02:00
ManoloFLTK
2ffd4e4f1a Replace all calls to sprintf() by calls to snprintf(). 2022-09-26 16:12:18 +02:00
ManoloFLTK
89f9671b40 Add cross-platform support for adding widgets to an OpenGL3-based Fl_Gl_Window.
Under non-macOS platforms, the key is to call glUseProgram(0); after having used OpenGL 3
which allows to then use OpenGL 1 and draw FLTK widgets over the OpenGL3 scene.

Under macOS, this is impossible because macOS GL3 contexts are not compatible
with GL1. The solution implemented here is to create an additional Fl_Gl_Window
placed above and sized as the GL3-based window, to give it a non opaque,
GL1-based context, and to put the FLTK widgets in that additional window.
2022-09-25 16:39:40 +02:00
ManoloFLTK
0fdc88d2d7 GL3 support under X11: ask for compatibility profile if possible. 2022-09-23 18:09:40 +02:00
ManoloFLTK
647b0a8008 Wayland: fix window closing with titlelbar close button. 2022-09-22 10:51:46 +02:00
ManoloFLTK
699cca8ff4 Make Fl::set_color(r,g,b,a) effective under Wayland and macOS. 2022-09-15 15:01:12 +02:00
ManoloFLTK
700fb1aadd Improve virtual void* Fl_Gl_Window_Driver::GetProcAddress(procName) 2022-09-14 08:53:45 +02:00
ManoloFLTK
e43c2f566d Remove forgotten debug code. 2022-09-13 11:24:08 +02:00
ManoloFLTK
d028f0b37d Fix fl_read_image() under hybrid Wayland/X11 platform.
Function fl_read_image() obliges to keep a minimal use of global variable fl_window
also under the Wayland platform, even if its type (Window) makes little sense for
the hybrid library because it has its X11 value (given by X11/X.h) which is not
meaningful for the Wayland leg of the hybrid platform.

Virtual member function Fl_Surface_Device::as_image_surface() becomes useless.
2022-09-11 19:45:48 +02:00
ManoloFLTK
ef243d6c86 Add needed variable for Wayland-only platform. 2022-09-11 09:52:02 +02:00
ManoloFLTK
203e7b7098 New OPTION_WAYLAND_ONLY for CMake to build pure Wayland platform. 2022-09-09 15:19:15 +02:00
ManoloFLTK
1b0f21cc8f Wayland: support going from borderless to bordered window. 2022-09-09 08:23:09 +02:00
ManoloFLTK
7800c2f3c3 Wayland: fix handling of fast calls to Fl_Window::flush().
Also fix scaling of borderless windows.
2022-09-09 07:26:19 +02:00
ManoloFLTK
0ff31668a1 Wayland: remove memory leak from missing wl_callback_destroy() call.
This hopefully corresponds to the memory leak mentioned in fltk.general
named "FLTK and Wayland".
2022-09-08 16:11:53 +02:00
ManoloFLTK
71069b8570 Add necessary virtual qualifier to ~Fl_Font_Descriptor() and derived. 2022-09-08 16:04:09 +02:00
ManoloFLTK
13e05f4204 Improve support of child windows that may leak outside their parent window.
1) add Wayland code that prevent subwindows from leaking outside their parent.
This does not cover GL subwindows.

2) add macOS code that prevent GL subwindows from leaking outside their parent.
This fixes issue #494 for the macOS platform.

N.B.: Wayland GL subwindows are not prevented from leaking because no solution
that would not require any change in client applications was found. Code that
would cover Wayland GL subwindows but would require client applications to always
use the FL_ALPHA flag is included in this commit in commented out form.
2022-09-07 14:40:16 +02:00
Albrecht Schlosser
deeb977c2e Wayland: fix memory leak on FL_KEYUP events
The old code would allocate memory on FL_KEYDOWN and FL_KEYUP events
and never free the latter.

The fix is to allocate memory only on FL_KEYDOWN events which will
be free'd later as intended.

Also fix two unrelated whitespace errors.
2022-09-06 20:04:33 +02:00
ManoloFLTK
57e0cdec08 Fix for issue #493 2022-09-03 12:36:50 +02:00