• Speed up plotting on 16-bit screenmodes

    • Think this is now largely irrelevant as font_antialiasing:0 makes a huge difference. However, would like to add hardware-accelerated anti-aliased text rendering (CompositeTags() does not support ALPHATEMPLATE so this is not possible at present - see also the chris/composite-text branch)
  • Direct rendering - problems

    • inline image placement
    • grey background for all text
    • won't work with Cairo renderer
    • may crash with certain gfx lib operations (AreaFill - need to alloc AreaInfo/TmpRas, check if this is ok to do on window rastports or if one or the other is allocated already)
    • completely broken with tiled renderer
    • Will probably only leave this in for debugging purposes, has no real use now.
  • Text

    • Replace ligatures?
    • Use splay trees for font cache
  • Simple Refresh

    • Dragging blocking windows (eg. About) over the top of a render area does not redraw at all
    • Favicon and throbbers do not redraw when damaged (the redraw functions just crash when they are initiated from the hook/ami_handle_msg)
    • Change to *queue* redraws same as corewindows
  • bitmap scaling

    • not always accurate
    • switching to triangle mode is more accurate, but causing freezing at least on SAM440 with built-in gfx

User Interface

  • Shiny new treeview toolbar
  • treeview window redraw needs optimising
  • Drag-related
    • Support the drag'n'drop of icons from/to OpenAmiga Filer project
    • Drag to hotlist from WB?
    • Drag selections within text input fields should do a move rather than a copy (might be core bug?)
    • Clicks to become drags only after 5px or so movement (done for treeviews)
    • Text selection should have auto-scroll ability at window's edge
    • Dragging text to the URL or search bar should immediately enact that option
  • Iconify gadget - for non-WB screens. Add extra AppIcons functions, eg Info, Delete. Dynamic updates?
  • Allow multiple homepages - see
  • Add play/stop buttons in sound DT handler
  • Experiment with label.image in clicktabs (favicon; text in more appropriate charset)
    • More appropriate charset also useful for hotlist menu, toolbar and history context menu
  • Use menuclass for pull-down menu
  • Fix passing of commandline options to the core (NSOPTS/M)
  • Use new Ringhio progress notifications for downloads (if we can upload the header)

Core windows

  • Share off-screen bitmaps (with browser etc)
  • Allow simple refresh windows
  • Optimise redraw (on scroll)
  • Drag select redraw not working correctly
  • Regression: dragging from global history no longer working

popupmenu deadlock blockers

These need doing now a bug in popupmenu.library has been fixed.

  • Context sensitive help
    • Add Help key processing in gui_options.c and anywhere else needed (local history, treeviews, etc)
    • Fix asynchronous close signal thing now but is fixed in lib - doesn't appear to need any changes, AFAICT I didn't bother working around this bug


  • Switch to malloc/free so OS3 gets full benefit of clib2's slab allocator
    • should have no impact on OS4 perf, but may be worth abstracting this so we can switch and change easier in future (unless it makes the debug info from clib2 useless... hmm... maybe use #defines)
    • when done, enable clib2's debug mem handler: "The settings for the memory debugging layer can be found in the "stdlib_memory.h" header file, right in the first few lines. Just uncomment the lines for "__MEM_DEBUG", "__MEM_DEBUG_LOG" and "__USE_MEM_TREES" as needed."
    • Enable stats collection so we can tune the slab size - see
  • Reduce signals usage (if possible) - believe this is no longer an issue
  • Replace ExAll() usage in menu.c with whatever the new OS4 equivalent is
  • Font styles in clipboard (might need new chunk defined)
  • Revamp About requester
  • Add a low memory handler which calls llcache_clean(true). Need to somehow guard this as it isn't thread-safe (set a "ok to clean", "clean in progress" flag which is set/cleared/blocks the GUI?)
    • MEM_TRY_AGAIN might help, return this until safe to purge, or until purge can happen in main loop
    • Safe to do this to call __free_unused_slabs() on OS3
  • Ditch libauto
    • Hopefully this fixes starting NetSurf on OS4.0 - program is apparently terminating before it starts running any code. Unable to test, awaiting feedback from the person who reported problems.
    • See also
    • Probably doesn't work on OS4.0, as I saw a note that random() needed a v53 newlib.library when rebuilding the toolchain

OS3 Support

Please see and for various discussion around this topic, as well as for more recent updates.

NetSurf will now build for OS3. For a quick start on building NetSurf see OS3 build notes.

There are some outstanding known issues:

  • Fonts

    • There seems to be a (lack of) spacing problem with some fonts. May need to manually add OT_SpaceWidth?
    • Bitmap fonts (with limitations, ie. no UTF-8) support partially working - line break detection is broken and sometimes causes an infinite loop. (is this still the case?)
    • The font scanner might be broken.
  • Plotters/Bitmaps

    • We are currently ignoring the p96 stuff and treating all screens as palette-mapped. This works but means the faster direct 32-bit bitmap code is not being used when P96 is available. If we take the P96 path, bitmaps work but everything else is rendered unreadable.
    • PDTM_SCALE (used when getting palette mapped bitmaps) only works on v45, need to use BitMapScale for OS3.5 compatibility. (this might be fixed since guigfx change?)
  • GUI

    • Tabs working but closing them causes NetSurf to crash.
    • The status bar is not in the window border (frbuttonclass is irredeemably broken in OS3)
    • A lot of the GUI hasn't tmk been tested.
    • The treeview windows eat memory for breakfast (might be better now using corewindows with tiles and simplerefresh option)
  • Memory freed twice (recoverable alert 010000009) on exit