-
Notifications
You must be signed in to change notification settings - Fork 16
TODO
Jan Wielemaker edited this page Jul 30, 2025
·
31 revisions
- E.g., the tree images of
navshould use foreground and background colour. Think about dark theme!- Support
kind<-bitmap. This maps black pixels to the foreground and white pixels to the background.
- Support
- How can we deal with grabbing the mouse?
- Wayland grabs the pointer in a down/drag/up sequence.
- Forward to initial window
- Wayland refuses to grab the pointer except for down/drag/up sequence
- Set this in the application and forward all mouse events
to the grabbing window?
- Add event->frame to keep track of the original frame
- Adjust get_xy_event() to use the proper logic:
- If receiver in ev->frame, we can do the usual logic
- Else we cannot determine the position. Fail?
- Wayland grabs the pointer in a down/drag/up sequence.
- How to deal with monitors/displays? As is, we had multiple X11 connections, each represented by a display and on that sub-areas which represented multiple monitors. SDL only has multiple displays. Displays may have different "pixel densities"
- Removed class
monitor - Allow for multiple instances of display and handle dynamic adding/deleting displays
- Update the
frame-displaywhen a frame is moved to another display. - How to deal with hi-res displays? SDL uses logical coordinates. By default, these are 1:1 mapped on traditional displays and typically 1:2 on hi-res displays such as 4K monitors and Mac retina displays.
- Tell SDL we are hi-res aware. This means the SDL window is in raw pixels
- Make our XPCE window backing pixmap match the SDL window resolution
- Use cairo_scale() to allow us using logical coordinates
- Make frame (SDL window) redraw aware of the scaling.
- Use the logical/physical mapping to rescale windows using Ctrl+0-
- Currently, several classes can change there font using these shortcuts.
- Support multiple displays with different logical/physical mappings. It seems SDL takes care of that "by magic".
- Removed class
- How to deal with frame<-confirm and
frame<-confirm_centered- Pass window instead of point?
- How to deal with waiting for sockets, etc.
- Have a thread waiting for them and send a user event?
- How to introduce transparency? At the device/graphical level? Alternatively, at the colour level.
- Class colour now support RGBA. We probably still will introduce the alpha channel at other places.
- Fill with images?
- Work around SDL main thread issues. Windows can only be created in the
thread that called
SDL_Init(). But, right now, it seems we can no longer callSDL_Init()from a background thread. Possibly we can initialize the video subsystem in a background thread? This seems to lock the SDL notion of the main thread.- It is claimed that on MacOS, SDL_Init() can only be used from the main thread.
- After the latest Fedora 42 update, calling SDL_Init() from another thread causes the Gtk window decoration to fail.
- We need better support for using multiple threads interactively
- Deal with Prolog flags. Introduce globally scoped flags? Is this a
flag property or a
set_prolog_flag/2alternative? Cause new flags to be globally scoped? - Deal with command line history
- Deal with Prolog flags. Introduce globally scoped flags? Is this a
flag property or a
- Support
image<-greyedinlibrary(imageops).- Added
image<-grayscale
- Added
- Draw inside images.
- Handle failure of get_xy_event()
- Implement tooltips
- Not properly placed and resized when moving between adjacent objects with a tooltip. See PceDraw graphical menu.
- Implement graphical selection using inverted colours
- Close popup if pointer leaves the owning window and popup?
- Allow for a delay?
- Graphics
- Arc
- Arrow
- Use cairo's subpixel scaling for better rendering of rotated arrows
- Ellipse
- Bezier curve
- Now uses interpolated path. Should use Cairo native
- Allow fill patterns to be specified as
foregroundorbackground. This makes them adjust to the current colour. - Modify frame drawing by (1) pre-paint window areas with the
window background (removes need for r_clear_outside()) and
draw nice lines for dragable borders. The advantage is that
that works server-side. Basically, that is the border around
all windows and lines between the sub tiles.
- Clean windows and remove r_clear_outside()
- Paint frame background as border and areas between tiles, indicating which can be resized.
- Use SDL_SetAppMetadata() and friends before SDL_init()
- Reimplement in_pce_thread() using SDLs primitives for that. See sdl.c,
sdl_send() - Implement creating cursors from images.
- Implement receiving drop events from other applications. Generates an
SDL_DropEventevent. See https://wiki.libsdl.org/SDL3/SDL_DropEvent
- Implement class
epilogand allow running a Prolog thread with I/O attached to it, replacingswipl-win. Nicknamed Epilog See Replacing swipl‐win - Introduce floats for dimensions. This is required for sub-pixel rendering using logical coordinates. SDL uses floats, Cairo doubles and Pango fixed points (1/1024pt).
- Replace xpce Int type to represent a tagged float, loosing 1 bit mantisse.
- Support this in the Prolog interface
- Introduce C
Numtype as synonym forInt - Introduce type
numfor the new non-object numeric type. - Re-introduce type
intfor values that need to be integer. - Modify class
numberto be the class equivalent of `num'. - Make class
realand deprecated subclass of classnumber. - Replace most use of the
realtype withnum. - Gradually change the
sdldraw.cfunctions to use doubles and arithmetic inside graphical classes to use doubles. Start with classes where it matters most- arrow (avoid skewed arrows under non-90-degrees angles)
- class
text_cursorto make triangle neat on even-pitched fonts.
- Add automatic theme selection. See
SDL_GetSystemTheme()- Added
display<-system_theme.
- Added
- Use Pango font metrics to replace
UNDERLINE_PENandUNDERLINE_SEP. - Replace Postscript generation by Cairo.
- Add PDF generation based on Cairo
- Add transparency for graphicals
- Add (matrix) transform to graphics. Should this be at the level
of class
deviceorgraphical?
- ws_load_image() should properly cleanup the SDL surface or create the ciaro surface as a copy.
- According to nvdia-smi, there is a video memory leak while scrolling around in a big file.
- Scrolling a long file (library(clpfd)) lags while dragging the scrollbar. Can we early skip the redraw? Maybe poll
for messages until we get none? Yes, see
SDL_HasEvents() - Popup window is a little too big
- When displayed on a sub-window, popup is misplaced.
- Opening a popup on a tab label raises an error (wrong
@arg1context) - Moving and resizing objects "sprays"
- In part solved using
FloatArea(). Seer_box()andr_ellipse()
- In part solved using
- GUI debugger shows background below binding window
- GUI debugger variable window toggle of pin bitmap does not clear.
- PceDraw menus are white. Somehow the converted .png does not draw transparent.
- Select tool of visual hierarchy does not handle cursor well.
- Visual hierarchy finding sub-graphicals seems buggy.
- Gui tracer on test_chat/0: jump over sentence/5 messes up the stack view.
- Handle double-width characters in Epilog. One option might be to fill two cells. First with the real char and the one after with a special char value, e.g.,
-1. That would keep wrapping work as it should. - xpce colour demo does not work properly
-
gxref/0does not work properly.- Popups do now show
- Drag and drop does not work. Does SDL support that?
- Repaint in Epilog windows is sometimes incomplete, requires some interaction with the window to complete painting.
- Epilog window does not go to start of line after entering a query.
- Unicode
> 0xffffsupport- Displaying
textobjects to respect UTF-16. - Class
text_image(editor). Probably useuint32_tfor character array - Class
terminal_image(Epilog) uses own defineduchar_t. - Use
uchar_tfor wide PceString?
- Displaying
- Set
TERMtoxtermin bundle. Possibly on all platforms for Epilog. - For the bundle
- Set initial working directory to ~/Documents/Prolog
- Save and restore working directory in an XDG file
- Test X11:
SDL_VIDEODRIVER=x11 src/swipl gr.pl. Seems to work nicely. - Headless testing:
SDL_VIDEODRIVER=dummy src/swipl gr.pl