Skip to content
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
Cannot retrieve contributors at this time
This file is for random notes and specific coding tasks that need to be done
to meet various goals. This includes Roadmap items as well as fixing bugs.
List bug tracker number if any.
When an item is satisfied, put it in the DONE section at bottom of file.
With each release, that section is transfered to the DONE file, and edited
down to major items in ../
--------------bugs: things that do not work like they are already allegedly designed to---------------------
------------ serious bugs to fix right now:
bug: PDF export does not handle object bleeds
bug: severing clone link does some weird things, including crashing
bug: clone tool clones do not have proper bounding box
bug: gegl nodes, connect sinus to waves and also to displace, freeze!
travis is recompiling on non-master branch pushes and it shouldn't
crash: Start blank, then open recent doc with an ObjectTree. click on an object, crash! querying wrong viewport?
------------ other bugs:
ux: if there is a page/file snafu on export, should return to the export dialog after the error
bug: back to not maximizing properly on default ubuntu. Seems to work fine on every other window manager I've tried.
bug: curve is terrible approximation at end points
bug: popup menus: submenus spawning on wrong side on far right monitors
bug: command prompt window cursor often invisible
bug: command prompt window input sometimes unrecoverably locks if cursor not at very end
DONE bug: command prompt window missing Laidout module
bug: lineedit cursor is leaving artifacts
Overwrite dialog box and other centering boxes should center over calling window, or current screen if no specified owner
drag off page, space to duplicate, copy is not in limbo!
duplicate does not duplicate clip_path
packaging woes: update deb/control to have more of the dependencies
booklet, use paper group tool, default paper group no longer displays
evince on ubuntu 14.04, pdf export won't load, says Syntax Error... Dictionary key must be a name object
configure should check for libreadline-dev? apparently not pkg-config ready <- half fix of listing in package requirements
needs to use the new extra_cppflags thing
memory hole in ExportDialog.. open export, cycle through formats, quit
memory hole in reimpose .. reimposed 5 page booklet
memory hole when graphical shell activated
memory hole do laidout -n letter, split a window, then quit. undeleted Objects remain!
DONE memory hole, open up examples/nodes-asciichart.laidout, then quit. 1 object remains
DONE memory hole in calculator
DONE memory hole: start blank, exit. 3 remain!!
DONE memory hole helpwindow -> probably something to do with ShortcutWindow and ShortcutTreeSelector not refcounting as expected
DONE memory hole delaunayinterface
DONE memory hole objectfilters with interface
DONE memory hole ./laidout -n letter then quit
DONE memory hole paper interface, activate tool, lay down one paper, quit, 3 objects remain
DONE memory hole cairo backend (can't duplicate)
"edit imposition", then escape.. removes window, but not the frame!
lineinput not propagating escapable
clones of images scale not like images.. should also snap aspect to start of drag, not when control key pressed
select no doc, select doc, viewport jumps around... it should stay the same area
switch to None document, and units change to unreasonable
shearing or scaling produces null axes occasionally when crossing over opposite edge, borking the display
--> seems to be only when needing to draw images on close to parallel axes, doesn't seem do it with paths
bug: page progress popup is wrong place, and mouse maps at wrong scale ONLY OCCASIONALLY, hard to reproduce
sometimes crash at insert page before (?? can't duplicate)
saving window positions doesn't take into account window decorations, makes pos slide downward each time
_NET_FRAME_EXTENTS? _KDE_NET_WM_FRAME_STRUT? how to get before mapping a window?
scribus plugin: if directory of executable script is not writable, it fails!
-> should find one that is writable
scribus plugin needs a proper dealing with temporary files
object reordering (with home/end) produces outline of unrelated objects on top
cloning, change original, not triggering bbox update in clone
ubuntu maximize window failing (but not on today's debian unstable gnome), resize seems to work now
gnome "application" does one per window, not one per app. this is not a bad thing imnsho, but should be easy to conform to desktop application spec properly
icon needs to be bigger.. is fuzzy on ubuntu alt-tab
DONE App/window icon in window manager not showing..
DONE??? need to implement scale pages to new imposition when reimposing (enable in doc settings dialog)
splitwindow SplitWindow:
create new pane should dup old pane.. currently divide viewport, removes document focus
viewwindow, change to spreadview, change back to view.. Horizontal ruler origin is REALLY off
splitwindow cursors existing in subwindows
create new window, defaults to no doc. should select doc of last pane
headwindow swapping is now REALLY messed up
pane swapping/dropto on maximized, swapping in general...
svg out, EquivalentObject doesn't play nice with defs.. only accessed once.. how to upkeep clones in this case?
-> when equiv objects are composed of groups, what happens?
svg coord numpoints==0???? numpoints doesn't really serve any purpose other than debugging, but....
svg to coord incomplete: arcs needs testing
memory hole in svg in? test svg import, svg path import must be done
object deleting funky, import svg images, select one, hit delete, doesn't delete!!
svg not exporting images when they are children of other non-group objects
place 3 images, object select, must press delete twice...!?!?!?!
sigimp fail for multiple stacks with no folds!!
make sure all imposition types are available in interpreter
resource impositions not showing description when selected
fold indicator foldprogress just at crossover points incorrectly indicating affected folds
object tool shift-control for rotate does not allow positioning on drag bars
'g' for color sample changes cursor to cancel now, and changes on border cross!!!
Need better mouse shape support
possible modifier-pairing error with multiple mice...
file previewer not updating preview when using arrow keys
shrink image lets you go immeasurably small
stackframe seems to be ignoring window borders on layout
----------------0.098 ROADMAP ITEMS: features and enhancements------------------------
DONE website: Rework download to be easier
half the videos are not linking
need to redo screenshots section for mobile friendliness
Color fonts
Caption tool
Text on path tool
Image tool
Engraver tool
How to make booklets
Alignment tool
Page range interface
paper tiler
Color patches
Viewport/navigation/window arrangements
Spread editor
Node tool
rename to Tutorials or maybe Media. Inkscape uses "Learn"
on index should show version and date
for CI, needs to be updated
update fileformat.txt
DONE missing Palette/GradientStrip
DONE missing LineProfile
DONE missing voronoi
DONE missing LineStyle
DONE missing FillStyle
DONE Path: output problem when name - null - non-null-comment
DONE incomplete TextOnPath
check laidout.1 when time to release
DONE update splash image at icons/LaidoutSplash.png
update docs to have new release number
update translation base files
update screenshots, sync with features
some of the old youtube embedding doesn't work any more
update links page
update help page
update quickref.html
update dtpcompare.html
update sweep LEFT-OFF to DONE, edit major items to
update dev page
document pull request process on dev.html page, sync with repo
comment out cairo_debug_reset_static_data before release, since it usually means crash, interferes with pipeout
run through "valgrind --leak-check=full --error-limit=no ./laidout" and fix anything that can be nailed down to laidout
DONE XIQueryPointer? buttons->mask = malloc(buttons->mask_len); needs freeing
./laidout ../examples/test-all-objects.laidout
each export filter (via command line in new script in examples.. ignoring problems in eps)
each window type: about palette view spread command text
help: window pane does funky stuff
test in different window managers
make some test scripts for command line testing
build: building: build process
should be able to specify include directories to configure, to work around hacky existence checks
should be able to specify default icon size as a compile option
should update faq with details about graphicsmagick, harfbuzz, and gegl versioning
update configure message about try installing packages.. when fail on gegl, it's not listed
DONE make a laxkit.pc from laxkit configure
DONE fix hardcoded /usr/include/cups in laxkit/configure
DONE laidout ./configure needs to pass on relevant things to laxkit
DONE in config.log should show actual configure line for easy duplicating
--- 0.099:
should be able to do out-of-source builds
make "make uninstall" work, and remove coop from installed position
remove the lax onamac parts from configure? poorly named, more a bsd issue, not mac
modernize debian/rules. See Laidout PR #5,
use that laxkit.pc from Laidout and laxkit examples
update CI:
--- 0.099
debian (get in to main repository)
DONE appimage, see:
bug: When scrollers come on, does not trigger an inset of widgets
bug: shrink for scroller, scroll to bottom, resize big.. window is still scrolled to bottom!!
FileValue needs a directory hint.. currently turning red on any change
ui hints:
DoubleRectangle [maxy]
[minx] [maxx]
AffineValue: [xx] [xy] {scale x} {rotation}
[yx] [yy] {scale y} {shear}
[x0] [y0]
rearrange set elements
delete elements of list
when you quit, does not remember from open windows
global Laidout settings:
settings dialog
need to be able to set external programs
rearrange dir lists
rebuild icons
set uiscale live
resource search directories, per resource
remove old palette_dir thing, it should be wrapped into resources
need "import settings from..." (but always use hardcoded laidoutrc)
color theme
per tool default settings
thin line width (default 1 pixel, but this is bad for high dpi screens)
load_image() always loads full, even if ping_only (confirm?)
debug inkscape node extension
text on path textonpath: TextOnPath
bug: crash sometimes when click down for new text on path object
bug: offset and baseline handles disappeared for large offset values
bug: bezier length resolution inconsistencies making gaps. need solution with consistent approximation
bug: visible selected bounds not updating?
bug: dragging the offest handle sometimes jumps to really bad
bug: when direction is reversed, offset needs to be reversed
bug: sometimes path weights don't recache along with glyph positions
bug: duplicate isn't always initing the dup properly
bug: some problem with paths when link_to_parent
handle to remove from current path, and possibly attach it to some other path
how to attach to diff path
how to attach to any path
move mouse around hover over objects, indicate when you can apply text on an existing path
bug: change offset on closed path, flips around envelope size
bug: glyph positioning is wrong: position glyphs based on middle of glyph, not start of glyph
bug: final letter in envelope size is wrong size
vertical position bad
horizontal spacing a bit wonky
when baseline is from_path, should indicate path, not offsetted path
select font, key up/down scrolls uncomfortably SOMETIMES!!
dragging size handle with shift|control for precision does not scale properly
mouse click to position caret
size of offset and baseline widgets is not screen space, should they be?
cursor behavior and color should match the caption tool
halignment options for open paths?
need kern control, with kern handles
copy and paste text
should not add new object with special check for blank on interf exit, should cache add point, but only add if new text pressed
rotation handle: glyphs align with path, or orient absolute, or distort with path flow, or distort with absolute angle
option to auto expand line
DONE (apparently) bug: convert to path rendering to wrong place and orientation
DONE bug: baseline options don't work, seem to all use offset path only.
DONE should have menu option to reverse direction on path without actually reversing path itself
DONE bug: when you duplicate, it's linking the path
DONE (? can't dup anymore) doesn't handle transforms with nested objects properly
DONE bug: not setting current color when object entered
DONE bug: color not loading and saving
DONE how to you actually edit path? ^p.. menu option
DONE bug: drag voffset shifts the text start?
DONE bug: drag the baseline handle off to the sides, makes huge bad jumps in value <- restrict to mod only baseline
you can't control unclick selected directories
export/print dialog
ux: if files needed == 1, then should not error about not being able to export many pages to single file, like with page atlas
DONE bug: for Singles export with non-single impositions, defaults to paper layout PaperGroup, instead of just encasing the single page.
DONE pdf
DONE svg
DONE scribus
DONE image
DONE image gs
DONE html
DONE plan
DONE ppt
DONE eps
DONE page atlas
bug: bleeds:
DONE page atlas
what happens about background programs, like opening something in gimp? can't delete temporary files
when there is a failing mismatch between multifile/multipage, dialog should warn, then resume the dialog, should not exit dialog
maybe flag whether to export limbo with spreads?
need proper print dialog.. old ppd cups stuff is deprecated
export should have a preview of what is actually going out, flip through spreads
in papergroups with multiple papers and double sided impositions, need to ensure front and back are output properly for printer
double check: export current appears to be broken
needs to be ScrolledWindow
should convert to use ValueWindow when it's ready
DONE Make export dialog optionally have the to command field:
DONE [] Send files to command: [ -Print commands- v]
DONE load/save external tools config
DONE debug validity check
DONE after manage commands, list doesn't update from export dialog
DONE bug: slider popup shouldn't show item if hide_from_Browse
DONE make print button experimental only? --> disable until a real print dialog happens
DONE For now remove print button, as it produces incorrect results. All it does is allow "to command" option, not vital
file filters: filefilters:
multiple export targets, including per object export settings
export with custom project files: project export project
like html gallery, has project config in coop/
some files templated
project defined by:
directory with project files to copy
export config to create files that go along with copied project files
template vars to replace in set of copied project files
filter: "Html Gallery",
filter_config: { ... },
copy: ["path/to/f1", "path/to/f2", "**/*.png", { from: "here.txt", to: "to/there.txt" } ],
{ pass_id: "template1",
file: "f1.tmpl",
export_as: "%f###.png",
vars: [ { name:"{{FRAME_NUMBER}}", value:"laidout.globals.frame" } ],
eachspread: true
config resource load/save
need to ensure that when bouncing around filters, Export All sets range properly
would be nice to standardize viewport render/obj-traverse so each exporter doesn't have to implement everything themselves
like define an iterator to walk over the view
fix when filtered object has children.. currently skips children
need createImportConfig/createExportConfig to make ImportConfig/DocumentExportConfig objects from parameters for all filters....
selecting out should auto select tofile | tofiles, depending on how many spreads selected for out
export range should optionally allow label not spread indices? labels are only valid for pages.. by name "iii - iv", export preview better?
perhaps switch export/import objects to new cascading Style as base..
standardize basic load such that non-laidout files create new document of proper size then import
todo: electric zine maker export/import?
When there are errors or warnings in exporting, should be able to have the error log such that
you can just jump to the offending bit easily. This would also be used for preflight verifiers,
and maybe also mass edit things, like edit all images..
- have ViewWindow::JumpToObject(&place, objectid);
DONE need to preserve last settings per filter, remember full export settings
DONE open with... on export ? combine with command option, which does basically the same thing.. need to decide about tmp files and unlink them
DONE export by command needs work, bypasses safeties.. what about multiple files?
DONE put command export within export_document()
pageatlas: page atlas:
double check: export current not selecting the proper spread??
DONE export singles nightlife booklet, everything is small??
DONE file names should be like exported-01-05.jpg not exported-1-5.jpg
DONE needs bg color
DONE basically n-up page out, lrtb
should be able to go on a random papergroup, not depend on a doc
for flat, choose lat/long/rotation
for hedron, export projected from hedron
export lines
page clip / object clip
0.099: export textured gltf / Godot based 3d viewer project?
export godot book project
show animation of book folding up
book page turner
importdialog ImportDialog import dialog:
be able to choose importer
should show filename as red if don't know how to import
import option to preserve broken links
importing should not spawn new windows
importing should sort out duplicate names
would be nice to show preview of what is to be imported
html: htmlgallery: html out htmlout:
bug: not handling bleeds
obey object visible
webcomic features:
auto gyrate
control over parallax point
autoplay repeating parallax elements
follow mouse
video objects as mystery data?
path follow
scrolling object: speed direction
clip paths
css 3d transforms
specify image file name, also preview file name "###-s.png"
DONE embedded page svg
DONE implement save and load template vars
DONE include scrim in coop/html
DONE figure out template scheme
DONE standardize save to directory or file, not just assume file
obey object visible
width, height defaults to 0, which is supposed to autocompute correct w,h from dpi.. check!
export depth map based on metadata z
export format should be an enum. need to extract possible save formats from Laxkit
for gs, make sure temp file is removed, should probably locate in user space maybe? or make sure perms set reasonably
DONE should have color select for background color, which would be alternate way to set full transparent
laidout export:
need a Laidout out! for partial exports, or conversions between nets/papergroup lines/etc
implement crop
save option to force path data into svg d style instead of default laidout style
save option to not output line caches
laidout import:
pops up spurious windows
maybe option to create new layers, or insert to existing layers?
option to insert new pages, or merge onto existing pages
need to center within new margin area, as compared to previous margin area
partial import of page ranges
selective import, like blender has:
import of resources
import of master pages
import of limbos
pdf: PDF:
bug: pdf export lines has outlines in evince?
bug: export clones adds extra ref in resources section
bug: text out very broken.. imageout via gs complains about malformed pdf on fonts
bug: fonts are not doubled up, each text object is exporting its own
export complex engraving is really, really slow. probably all the string reallocation?
pdf optimize jpg dump, compress image data
still true? pdf export if a path has null linestyle/fillstyle it buffers until next path drawn
instead of drawing with some default style
pdf out needs clone deref.. needs clone deref still?
graphicsmagick for import? subimage and subrange of image_info passed to ReadImage
page labels?
implement crop
start using podofo instead of custom? higher quality pdf output, pdf input options., soon to be built from
DONE obey object visible
Scribus scribus:
bug: objects are not placed properly on papers
bug: doesn't cope with different paper sizes
needs better error return: use try/catch
outputting with settings that result in 0 pages result in scribus crash
caption as path flips
implement equivalent object
caption export centering
export paths fails on compound paths. scribus has dichotomy Polyline|Polygon
scribus export should show actual version export
make sure it works for 1.5.2
check for updates in file format for 1.5
export color meshes, for recent versions of Scribus
page clipping
import/export color meshes, for recent versions of Scribus
font size confusion
import/export linear and radial gradients
scribus in/out: font sizes, stroke widths
import should try to apply the Scribus layout correctly, at least for 2 page spreads
import should do something meaningful with original Scribus page bleed values
scribus import: need to read page sizes from actual page attributes, as it may well be different than in document attributes
-> this necessitates revamp of singles to use more than one paper type
implement crop
DONE obey object visible (no hidden objects natively)
svg: SVG
bug: gradient with no p1,p2 defaults to 0,0. should perhaps be 0,1
in units should default to csspoints
bug: when stroke+fill presentation atts are not under a "style" att, they are ignored
stroke fill
fill/stroke for text
any clipping
grid guides
sometimes path endpoint spikes
dotted line style
for new docs, should set rulers to use some reasonable units, from either width="100px", or namedview.document-units
DONE locked: sodipodi:insensitive="true"
DONE obey object visible: style="display:none;..."
DONE in: update StyleToFillAndStroke() calls to extra and react to display:none
DONE out
DONE monkey.doc, export then import:
DONE radial gradients not importing
DONE not putting in page bounds even though width/height are fine..
DONE try to open exported svg, says cannot load with no further explanation
DONE finish debugging mesh svg 2.0 out/in, svg-mesh-polyfill/testfiles
DONE test import, then visual similarity of export
DONE conical.svg FAIL! needs check for translatable fill object
DONE mesh1x2.svg
DONE mesh2.svg
DONE mesh2x1.svg
DONE mesh_objectbb.svg
DONE mesh_opacity.svg
DONE mesh.svg
DONE mesh_test.svg
DONE mesh_transform.svg
DONE pepper.svg
DONE bug: bad colors when style atts occur before path in meshpatch
DONE unless fill/stroke is specifically given a color, it should be noop
DONE mesh out
DONE finish debugging powerstroke out/in
DONE try actually implementing powerstroke in
DONE zero width caps not working
DONE width="512px" is mapping to 7.11111 inches (72 dpi)..
DONE images with xlink:href need to be read in relative to the svg file, not cwd
DONE problem with transform sometimes, see icons-tiling.svg
DONE non-1 scale problem
DONE seems like children screw up -> problem with x,y in: rotate(angle, x,y)
DONE "use" transforms not compounding
DONE text placement and size
DONE width/height makes scale 0 when after viewBox
DONE gradient clipping
DONE gradient filling past minimum definition bounds
DONE in needs to account for viewBox
DONE linear gradients
DONE radial gradients
DONE in needs to parse "use" elements and other "#" refs
needs option to not clip by page, or auto to not clip when single page in spread
special check for paths with a single gradient child
text linespacing.. unclear how Msize/linespacing maps to svg options
DONE locked: sodipodi:insensitive="true"
DONE color
bug: export papers currently not going to correct paper
see conical2.svg mesh test (filling text), need to implement text fill/stroke
need more comprehensive parenting handling.. how to output object children and also handle fills properly
test arcs in/out
text on path without path conversion
dump_in svg filter to nodes optionally, once those are renderable
radial: transparent inner circle, patch edges
DONE need to parse units
need an In()
implement paper rotation for out
ppt (passepartout): DEPRECATE
implement crop
implement paper rotation
implement paper rotation
for plain postscript, there's bitmask, but no transparency. maybe optionally do simulation with dithered bitmask..
a lot of work for a deprecated format, but could have other uses, like for PDF/X-1a
paths not filling correctly
engraver no out, equiv object problem?
implement crop
implement crop
export seems to be rather broken
command line export file name defaults to "output#.eps"
implement paper rotation
xtg from quark?
idml from indesign?
inset should be per paper in papergroup
revamp to be art board centric, based on random PaperGroup
what's with the old cached_margin stuff, obsolete now with pagestyles stack?
DONE need to cache page margins properly for papergroup GetPageMarginOutline()
PageLayout() lines
implement double sided
multi page inkscape import needs to assign proper pages
freehand tool:
should have option to output base weighted path, with custom filter resource to copy onto it
keep a stack of lines previously made for fake undo by repeated delete? or just implement undo for object added
path simplification needs to be considerably better, both points and weight nodes
needs to account for time and speed
auto apply line profile
gradient select: custom or resource
pressure curve
mesh outputs should still be Mesh based on path
implement Shape Brush?
output to either "shape brush" line profile, or flattened path
DONE numerical input for brush size
DONE brush_size should be real, not screen units
DONE need "brush size" controls
DONE needs to respond to viewport color change
shape brush shapebrush:
pathi -> save to shape brush should ask for a name
use shape brush should show previews
DONE not saving to file
PathInterface: pathinterface
bug: if path doesn't have linestyle in file, later crashes since it does not fill in
bug: width handle has bit of a hitch when handle near a vertex.. extra temp width node being added?
bug: seems to be possible to move nodes out of order, only occassionally
bug: shift click down then up on a point selects then deselects.. control can toggle
bug: problems for non-bez-controlled corners at endpoint. Also variable offset causes weird connections
bug: applyoffset, the bez part at joins is messed up when no offset, suspect problem in FlatpointToCoordinate, mismatch with bez join next to sample points
bug: should not create new control points by pressing cntl, unless there is movement
bug: delete last weight node, sometimes width is wrong
bug: make new line with freehand tool, cannot move weight nodes in a rational way
drag on handle (not point) to resize handle. cntl to scale only it. cntl+shift to rotate it
when you delete a point, curvertex should go to go to nearest previous
need an easier way to edit gradient fills, like child tool edit for fill items, auto add filler types
need simplify option on point delete to adjust control point lengths
need option for bbox to include line width, not just centerline
need stroke fill
need path combine:
with more than one object selected, turn to path tool, have a multi-object widget that lets you:
Edit all objects at same time (default) -> box that says [3 objects] click for action menu?
Combine to single object (select from menu?)
Combine and merge endpoints (select from menu?)
cross link linestyle or fillstyle
DONE need numerical entry for all weight node characteristics
DONE not show every single handle. only ones associated with active vertices
DONE impliment flip curpoints horizontally or vertically
DONE need invert selection: ^i for total invert, +^i for invert within current paths?
DONE offset handle instead of mystery shift press
DONE shift over endpoint needs add point hint
DONE shift(?) over segment should allow cutting the segment, draw a big red x? highlight whole segment in red?
DONE need to show hints for when new points will be placed
DONE implement open at any point to possibly break into separate subpaths
DONE need way to turn off selectability of path points (thus leaving only width nodes selectable)
DONE if background is green or red, hard to see the direction indicator
investigate Raph Levien's new curve offset method:
that hot new spiro curve from Raph Levien
boolean ops
mirror, array, with join (akin to blender modifiers)
dup path object links the path style, but save and load, it is not linked... need to sort out line/fill style inheritance/linking
needs input boxes for width nodes
compound paths, change width only changes one. no way to affect all
need a way to work on multiple weight nodes:
shift all
width multiply all
set width
need input boxes for weight node info
zero tips not working on mesh edit? with import test-engrave.laidout
debug cache sample point distribution, the interpolator is really bad as is
powerstroke export requires apply offset.. else weight nodes are all messed up
clarify export for weighted paths, use outlinecache and areacache as needed, check all filetypes exporters: svg pdf scribus image/ps/eps
finish implementing joins. need to clarify weight behavior at corner joins
weight computation is currently done based on even t spacing, but probably should be mapped based on distance weights not being shown unless '_'
be able to pull points back along path near endpoints
debug extrapolate
need to protect against reentrants at corner joins.. makes holes unless nonzero rule, and sometimes sticks out the other side
sliding around the nodes is really annoying.. should do according to proximity to center line
inkscape has multiple interpolators, we should too!
actions to implement:
need arbitrary cut
need better apply offset: not simplifying offset path
need path combine (combine path stacks of multiple PathsData)
need break apart (make new PathsData from each in paths stack)
need special break apart to make new PathsData, but preserve totally enclosed paths as intential holes
need mechanism to be able to add custom path actions to context menu
implement work on multiple path objects at once
ApplyTransform() and MatchTransform() should adjust scaling of width nodes?
custom caps.. define cap to a horizontal line, take endpoints and endpoint tangents, return the cap warped to fit the tangents
custom dashes, with custom start/end dash caps
so called vector brushes, that allow sweeping out an area with a whole shape
need some kind of extrema fill in for angled paths, so it matches sweep of whole segment, not just endpoint sweep lines
should have shortcut to offset ALL weight nodes, or angle ALL nodes
how to deal with bbox when using wacky weights?? -> use bbox of outlinecache (or centercache), non-weighted (optional): use flat bbox + linewidth
need something like path->PointInfo(t, &pp, &vprev_ret, &vnext_ret).. done is GetWeight(t, &width, &offset, &angle)
maybe should revisit PathOperator stuff, such as for spiro paths
per vertex join type?
linestyles are always output independently, can't currently cascade with current code
line join round should add extra point for really wide angles to make them more circular
copy and paste
maybe control when on vertex will create whichever handle does not exist, control nearest drag point determines which is created
align nodes -> create temp set of data to pass to AlignInterface?
transform handles for selected points, including flip
subdivide, repeat key press restores old segment, then adds 1 more point to num of points from last press
toggle between add points / select points?
finish new path/pathoperator/pathsubinterface/pathinterface structure
resource drawables with extra "origin" and "direction", maybe stored as properties?
they need to respond to object color.. marker is a SomeDataRef with filter to respond to obj.marker_color ?
start, end
at specific intervals, or n per line
make circle green when manual, gray when auto
toggle auto snap (control will reverse)
auto snap to h and v when holding down control
debug first point corner issue
implement quadratic
implement cubic
ObjectFilter objectfilters object filter: objectfilterinterface:
debug merge
memory hole: going from nodes to filter editor, objects remain on quit
bug: muting and unmuting many times causing endless loop
bug: muting is not rendered in node view.. and can't toggle in node view
DONE bug: object tool up, you can somehow click through to path tool, then crash on escape
DONE bug: select filter editor tool, does not use currently selected data
DONE need menu options: Apply filters (currently crashes)
DONE when jumping between tools, tool icon needs to update
DONE if mirror plane is node connected, should ask if you want to edit
DONE clicking the eye should only toggle, not select the node
DONE bug: 2 mirrors, eye toggle second, apparently no effect until you mess with the other: no PropagateUpdate??
DONE bug: should auto select correct node when you jump to node view
DONE bug: won't activate when clicking from node interface
DONE need way to go from node interface to interactive
menu option: Create filtered copy
implement unlink if connections locked
implement X for get rid of filter
implement easy menu driven adding of filters, with possible rearrange order of filters
need a way to easily apply one object's filter to another object
clean up filefilter.h definition to allow explicit declaration of ObjectFilter in DrawableObject
filter to anchor to other objects, migrate the old anchor stuff to nodes
Perspective perspective:
map() should be able to map from a different base
bug: deleting path points makes transformed path faulty on updates sometimes
perspective interface needs to allow changing pos of in points, not just use bbox
path transform should transform line widths accurately
finish debugging update path object without reallocating each time
optimize the image mapping
filtering paths needs to detect big distortions and add points, as simply transforming bez points is not enough
implement transform for:
vector transform should be through PointCollection for:
Caption (convert to path first)
text on path (convert to path first)
Refs and groups of any combination of the above
DONE bug: chained filter nodes make context wrong, thus bad Refresh
conditional jump on uninit: strlens in newnstr re 2673, 2192, 2206/1007, 2651
DONE mismatch free 298
node editor node interface NodeInterface nodes: node: interface:
bug: duplicating placing at strange place
need a way to dissolve reroute or nodes, so we don't break routes
bug: multiply v*v after node dup, try to enter a single value, weird things happen
DONE bug: vector display, uses 2e+2 for 200
bug: new object, "Net" is actually a "NetImposition"
bug: new LineStyle object node, object info has fields, but no data, lists type as "anObject"
bug: curve mouse postion is wrong
bug: file prop popup not working... sometimes?!?
CRASH: Math.flatvector((a+b)/2, (c+d)/2) .. also default (1,2) producing a set, not a vec2
bug: red: Lerp
bug: yellow:
DONE Math1 (only on initial add, fine on load in or dup)
DONE MapFromRange
DONE MapToRange
DONE Invert
expressions: Math should be imported
bug: why is captiondata preview render getting triggered every node update?
bug: work on filter, save nodes, switch to object, load nodes, destroys proper in/out of filter
SetTransforms if single in, should be single out
bug: paths should not clip their children by default
need delete frame.. delete objects not deleting frame if empty
bug: sporadic, 1st input edit doesn't stick, maybe related to sometimes duplicate is not spawning near original.. not saving last prop?
bug: reroute nodes doing weird colors
grouped nodes: need to properly propagate MarkMustUpdate() past container node directly to output props
check NodeBase::GetStatus() when no outs, but topropproxy
memory hole page info? drawableinfo, objectinfo
bug: new object caption, attach to object function, crash!!
bug: CaptionData is creating a new font every single instantiation
bug: Need to make text objects have expected preview orientations
bug: trying to open menu for enum with 0 entries should not pop up a window
bug: ObjectInfo should reset id and type on disconnection or null object, but keep any props that are connected
bug: adaptive nodes need to cache previous in and check that rather than just update on connection change, since could change upstream
bug: load in recovery: should ensure only one connection to input, and only one to exec_out
bug: transform object is linking, not copying images in an ImageData, need to dup the actual image data
bug: height of resizable property not saved
bug: duplicating objectfilter does not transfer values for the most part
bug: when loading in, need to force update nodes in Resources
bug: gegl to image, disconnect, it is still updating the image, because LaxImage is linked through
bug: memory hole TransformAffineNode??
if a node is in error state, error color overrides the selected highlight.. maybe increase width instead?
need to figure out safe way to duplicate DrawableObjects that have filters and/or children
implement objectfilterinterface/nodeinterface interchange with nested node groups
drop files into FileValue properties?
drop text/numbers to properties
drag on vec2 x/y should shift values
would be nice to have a property type PROP_List so you can input "1px,2%,3,4" and have it parse to [1,.02,3,4] automatically
GetGlobal needs to use a menu
undo redo
edit filter nodes for the first time should center nodes in viewport
would be nice to have a "Collapse unlinked properties" option
need option to turn off main viewport render while tool up, since sometimes that render takes a long time
some people are going to want grid snapping
some people are going to want straight connection lines
DONE BBoxPoint
DONE Math1 needs transpose
DONE JsonFileNode, by adding or by drag and drop
DONE changing node width (like many image ones you drop in): all by same diff, all to same width
DONE bug: top filter "out" is outputting data
DONE bug: JoinSets is not loading/saving properly.. variable list props need unique names
DONE bug: when in error state, tries again EVERY refresh.. should only try when values change again
DONE bug: make circle, link set, dup, now node in error state.. copies set?
DONE MakeSet
DONE GetElement should be able to access drawable children or dict elements, also either int index or string name
DONE SetRotations
DONE SetTransforms
DONE SetScales
DONE (can't duplicate) bug: why are nodes yellow sometimes after load in: PerspectiveFilter, PointsToDots, Affine, Affine2.. DONE: String Circle
DONE bug: ObjectInfo if props connected to outs, change object, bad things happen
DONE reroute needs click on connection to add (via shift-control)
DONE bug: control click on connection for pan traversal not working all the way
DONE bug: duplicate reroute doesn't make a new reroute
DONE bug: duplicate a caption, goes status 1
DONE bug: node duplicating, reminder default DOES NOT DUP TYPE!! it dups NodeBase.. double check this is fine, might need to imp duplicate()
DONE bug: math2 error message not being cleared properly
DONE bug: empty reroute, click no drag on prop slot, crash!
DONE bug: expression node broken, won't update expression
DONE drag value, doesn't trigger update, but click and input does
DONE if you take away a variable that was connected, bad things happen
DONE execution order: Update() should ONLY update current.. UpdateRecursively() parse backwards Update()ing as necessary
DONE bug: TransformAffine using PointSet outputing "out" to file
DONE bug: memory hole in objectfilter interface
DONE ConvertNumberNode
DONE KidsToSetNode
DONE concat should support sets
DONE bug: expression auto parse parameters not working when unknowns in paretheses
DONE need solution for shared interface getting messages for different nodes.. probably need to do one instance per whatever <-(yes)
DONE bug: say Vector2, edit value, tab to next, does not save previous value
DONE but: Color node only has output, but outputting data of output nodes currently forbidden.. make exception when output is editable?
DONE Get document node
DONE Number list
DONE NumToString
DONE bug: color property doesn't show transparency checkerboard
DONE Switch: variable in list, index element
expand list i..j
GetFromEach: set in, get specified index from each element of in set, element must be hash, index, or have property with that name
multi-input revamp:
make new ExpressionEach node to allow process on each element
ModifyObject? ObjectFunction?
DONE MapRange
DONE mouse down/up
greyed out depending on properties
adaptive text balloons:
tail point + direction
tail attach point + direction
text -> get extent from CaptionData bbox
target rect to fit in if possible
data node types:
how to systematize read only field overrides (like minx,maxx,...), also "const" functions for sanity re duping before ObjectFunction returns
fit obj in rectangle, with alignment
EditDrawable: bring up appropriate interface to edit
Reparent? restrict to particular top object? otherwise you will mess things up terribly
Perturb: random point/rotation/scale shifting, from rng or sample from NumberField?
RandomColors,RandomFill,RandomStroke: select from gradient, or array of colors
anchor nodes (double up with revamped AnchorInterface):
in anchor: object local space, or parent space
out anchor: other object point (of non-parent), page, spread
type: x,y
2 point anchor: change position + scale|rotation
DONE create clones: make array of clones
DONE NewObject/ModifyObject based on an ObjectDef.
DONE need to make sure all types have dump_out_atts defined, otherwise the paltry Value::dump_out_atts gets used in data out
DONE each need to double check: dereference, assign, Evaluate, extend from Group, not affine
DONE LCaptionData from array of text
DONE need a "text is escaped" option
image (double check objdef setup)
DONE check: dereference assign Evaluate extend from Group, not affine
DONE check: dereference assign Evaluate extend from Group, not affine
color list to gradient
gradient interpolation type?
nodes must receive correct color messages from viewport color box
needs a little settings button to pop interpolation or do strip resource selection
create radial or linear gradient image
missing radial/linear flip, color strip fields in NewObject with GradientData
DONE(?) bug: gradient controls broken sometimes
DONE check: dereference assign Evaluate extend from Group, not affine
DONE double click to call up color box
delaunay/point set tool: Vector2 + properties
DONE delaunay
DONE voronoi
path from points
polyline, quartic, cubic, spiro, spiro2, lofi curve
convex hull
relax (optionally within path)
sample relax: each iteration sample image/object for value, use that as a size. push based on it
conformal relax
quadrilateralize and relax -> work Net into a full Drawable?
voronoi region centroid replacement relax: strength, iterations
stipple from
poisson disc
create without initial flush to reduce allocations?
optionally do set of affine?
set from drawables
perturb set.. perturb ANY PointCollection
DONE double time with path generators
DONE grid, hexgrid, random square, random circle
DONE apply positions to groups of drawables
DONE check: dereference assign Evaluate extend from Group, not affine
DONE imp property access for VoronoiData
generator is flushing path each time, would be better to overwrite when possible
DONE need linewidth, stroke, fill
DONE squircles
rounded rect:
needs stroke/fill/line width
DONE need variant with rounded per corner -> pass in list
DONE at all
stroke should accept color, gradient, or LineStyle.. LineStyle overrides line width
fill should accept color, gradient, FillStyle.. or other path object?
weight controls:
weight edit: index: width, offset, angle
weights set: t[], width[], offset[], angle[]
present as line profile?
DONE path corners: points past a certain angle threshhold
DONE path endpoints
DONE path extrema
path ops:
apply LineProfile (along s, not t)
path morph
path from points: linear or smooth
sample path to points, optionally with transforms. sample at t OR s by step OR by n points OR squishy step
SampleAt: t | t[], t is dist
offset, step, step is dist, fit step
SampleN: n times within path, padstart, padend
boolean pathops
project onto heightmap? onto mesh?
make net then inset
bug: when you use another object for the extrude path, no automatic update happens
this should probably be a path function
needs to check for same tree and transform points before using
set line profile from resource
apply weights
DONE ClosestPoint(s)
DONE path length
DONE combine
DONE break apart
DONE fill and stroke controls (by using ModifyObjectNode)
DONE check: dereference assign Evaluate extend from Group, not affine
DONE check: dereference assign Evaluate extend from Group, not affine
DONE check: dereference assign Evaluate extend from Group, not affine
DONE check: dereference assign Evaluate extend from Group, not affine
caption text
DONE needs color property
DONE check: dereference assign Evaluate extend from Group, not affine
text on a path
DONE dereference assign Evaluate extend from Group, not affine
object/resource management nodes:
find drawable:
from project or doc root, not just from particular drawable?
direct parent
in whole tree
other pages?
DONE child of
DONE self
DONE resources?
DONE SetParent: take list of objs, and just put as kids
alignment nodes:
align to page (with page type)
access to alignment/nup tool config?
anchor nodes to mostly replace alignment rules
anchor point transforms
mirror node
filter interface icons crunched when interf has small name (like Mirror)
filter interface buttons not working
edit with filter interface from node view not working
crash on exit after filter interface
boolean pathops node
"Object Properties".. maybe have a string field with list of desired properties? Array of props that show enum but output value?
have a dangerous "Object Function" node? needs to dup in, then run function
ref other object
clone tool access
nup tool access
DONE create clones for further manipulation, like apply point set origins
DONE inverse affine transform.. also invert number, vector, or quaternion
DONE rename "Object Info" to "Drawable Info"
DONE ALL ObjectDef data types need to be installed on startup, or at least when node tool starts up
group nodes, connect to (new in) or (new out):
should take names from props.
doesn't update the parent props
curve node needs y expand ability
should probably bring forward any selected
load/save custom properties needs to preserve name, label, tooltip, types, custom info
check for double linking
control drag on slot to reconnect all connections
duplicate linked nodes needs to preserve connections
find node:
by label(done), name, or type
search node or property name, or data contents
stack of last searches
search in child groups
find all
gegl nodes:
maybe have gegl node preview gen be in different thread, as they can be quite lengthy
not responding to curve updates
reload file, load node out of sync or something, not showing preview after file load in
need browser buttons on "path" properties of IsSaveNode()s
need needtoupdate caching or force work on small proxy images.. gegl with big images takes a long time
scale-size has runaway render for undefined rect
make sure deleting/rearranging nodes correctly removes gegl connections
inkscape filter read in, set up as gegl nodes internally
make sure input/outputs can translate from other data types
need protection against unknown gegl ops, like when "gpl" is toggled
some process actions bog everything down like overlay a crop with a non-cropped input.. need a check for unbounded nodes before process
some nodes define a particular extent, like gradients. preview should detect
need a gegl <-> Value converter to allow interacting with Get/SetVariableNode
do something decent with property types: GeglCurve GeglPath. ignore these for now: GeglAudioFragment GeglBuffer GdkPixbuf GeglNode
DONE Gegl to LaxImage
DONE LaxImage to Gegl
svg/inkscape specific filter interface, io passthrough
inkscape multipage
import new Inkscape margin features
pages are defined upside down.. has to scale to viewbox?
need to insert pages at load time, and assign objects to proper pages
Need to test actual exporting mechanism
svg color properties are strings, but there should be button for color select
need full "length" readin, not just floats, ie "100%", "15in"
feTurbulence->baseFrequency is TWO numbers, not one, need data[] support
handle child groups
handle chaining full filter group nodes
Embossed Leather fails
Plastify has an orphan feFlood node
nodes with children, loading in puts the child properties at the end
DONE bug: says bad svg path string??
for memory saving, need to determine what is a "final" node, since intermediate nodes can free data, or pass it on
node browser
tooltips for operation, not just properties
in menu, so many nodes, need way to classify favorites, maybe custom arrangements of menu
progressive search
need a way to collect custom property types, so they can be added to custom nodes
for preview resizer, shouldn't have it when preview is too tiny, since then usually you want to move the node, not resize
save needs to remember file name per loader, plus default file
no overlap needs to stack siblings as nicely as possible
image object creation node, tie node output to a custom LaxImage importer (the proof of concept node for 0.097)
load something already loaded makes dups of everything.. need to check for name collision!!
extensibility: need easy way to extend functionality, both menu actions and new nodes
ideally whole node core codebase should not explicitly depend on laidout
allow editable labels for input props
add dummy prop on in/out to hot link data (only from within group)
linked vs appended node groups, to allow mass changing of particular effects
GroupRef : NodeGroup, with some sort of relay to actual group internals
node libraries: nodes as resources
need to check for cyclic dependency in resources (and disallow)
auto shift placement on connection
auto connect when dragging nodes.. needs parsing of compatible properties
view area things:
node magnifier for easier browsing when otherwise zoomed way out
toggle show only selected nodes?
exec paths
events for ui tool construction?
exec tick speed control for debugging
make sure entire nodes don't go totally offscreen
deferred update when massive operations, maybe highlight nodes in yellow?
color code pipes by value type, color: yellow, number: gray, vector: purple
need better styling.. too much is hardcoded. problems later with high dpi screens
finish implementing no cycle check: on load in could be a crash magnet currently if constructed with loops
other node systems:
examine imgflo for compatibility
imgflo lets you compile and load new operations on the fly
css named filter: brightness(1) contrast(67%) saturate(250%) grayscale(0%) invert(0%) hue-rotate(330deg) sepia(40%) blur(0px)
see for svg filter equivalents
gmic nodes
graphicsmagick nodes
antiprism nodes
examine blender for compatibility -> animation node addon seems fuller for general data processing, everything/geometry nodes
examine godot for compatibility -> does full scripting execution
examine Natron for compatibility
examine pure data for compatibility
examine BespokeSynth for compatibility:
proprietary import like substance, houdini, archimatix, Photo Reactor?
any crossover with mypaint brushes or krita???
Viewer/Debug node, resizable
simplex noise node
label/comment font size should be adjustable.. draggable size triangle on right?
changeable color:
DONE receive bg color messages from viewport color box
receive fg color messages from viewport color box (stalled pending impl of fg+bg colorbox in viewerwindow)
grouping framed objects have complications
DONE frames need to be moveable
DONE nodes within frames need to be moveable
DONE pressing f: any selected objs in any frame, then unframe. Else group selected objects into frame
DONE drag and drop nodes to insert into frame
DONE shift-drag to remove from frame
DONE selecting frame needs to update viewer current color
bug: wrap sizes are different start up vs move frame
implement comment
have visible/togglable comment
convert frame to panel
expression node:
DONE any number of inputs (pulled from expression)
scriptify nodes
nodify script
use PlainText objects.. ScriptNode ?
edit text externally or in different text editor frame
string ops:
nested node group resources:
implement NodeBase.proxy to point to a resource NodeGroup, which relays changes
list nodes
set range [start,end] = value, optionally linked
create list [type, number]
ScriptForeach in list, create new list with transformed elements
sort with function
DONE concat
DONE subset [start, end], neg nums for from end
DONE element [index]
math nodes
function nodes need a smooth option, not just polyline
should always be 'using Math'
need to allow sets of numbers as inputs, output set in that case
more math:
interpolate with easing
select from panel:
+ - * / % ^
< > != ==
min max avg
and or xor not << >>
---one arg---
abs neg sqrt sgn
sin cos tan asin acos atan
sinh cosh tanh asinh acosh atanh
DONE for connecting, drop onto a property at all should link, not just on slot
DONE foreach thread processor
DONE need reroute node
DONE file properties need browser button
DONE basic path creation nodes, including math function plotting
DONE resize preview broken
DONE image from file node
DONE (using Name) idea seen in anim nodes: collapsing math shows expression as label
color fonts issue #6 svg otf svg
see this freetype gsoc 2019 project:
captioninterface CaptionInterface captiondata CaptionData
default text size is super small
bug: bitstream vera sans, "Text" convert to path puts e correct, but screen render puts it out too far. huh??
should be able access fonts as resources, to preserve links on load/save
implement proper pdf export
color fonts: consider native otf:
Mozilla and Adobe’s svg table, microsoft's colr/cpal, Google’s PNG images (CBDT/CBLC tables), Apple’s PNG images (SBIX table)
freetype dev branch maybe supports colr/cpal and google's way?
implement the different layout modes: rtl ttb
debug for rtl and vertical as returned by hb, or set explicitly with direction
right to left (figure out how to do with harfbuzz)
need to do proper coordinate finding for mouseposition when paste into a nested group
text to path:
option to do all one path,
or separate objects per character (or glyph), but clones of a resourced group of glyphs
need handling when opening a file and the font is not found!!!!!!! options for substitution
opentype variations
select, copy
for overstretched alignment, bounding box not updating correctly
should adapt from multiline edit, since it already has cut/paste, selections, and is mostly debugged??
control-u hack for poweruser unicode character insertion
toggle for evaluated text? only allow edit on the raw text, run {{expression}} through calcualtor?
use selected text as sample when popping up font dialog
lorem ipsum
markov ipsum
DONE right click menu options for insert char and select font
DONE bug: why is a font being created and destroyed each refresh??
fontdialog: FontDialog
bug: makeinwindow SOMETIMES not working, select one, puts on bottom line
bug: click down+up with minimal drag makes zero length handles that we can't move. should not make a really tiny new data, should keep old if any
bug: input box and you change tool, does not abort the box
bug: need fill color response, also line width handle
switch between rounded rect and ellipse?
incorporate as special mode in path tool so we don't have to duplicate all the weight node interface
angle drag lapping should preserve large arc
need rotate handles
del on center cross hair should straighten?
DONE bug: drag size movement is not 1:1
DONE better drag indicators
DONE bug: double click on ellipse, does not activate controls
DONE center cross hair should be slanted when shape is slanted
DONE incorporate to mesh tool
DONE derive from Value in LEllipseData, needed to make object property i/o work correctly
DONE bug: inner radius hint not using center
DONE memory hole
DONE implement minimal fill:color, stroke:color+width
DONE should have menu options for wedge and toggle circle
DONE debug wedge hover
DONE draw dotted for wedge edge?
DONE click or drag to/away from origin on open arc edge to toggle wedge, open, chord
DONE render with inner bad since drawfocusellipse ignores inner
DONE drag radii, toggle control, original center point should also be remembered
DONE angles mess up when foci flip
DONE snap angles with control
DONE control drag on x or y should move center, keep opposite
DONE inner radius
DONE snap closed if drag start to end near enough (multiple of 2*pi)
DONE outer, inner, center hover need indicators
DONE need numerical entry
DONE implement angles.. bug with bez_ellipse, not spanning start to end properly
DONE shift, control down up to toggle hover
DONE Remove old rect interface stuff, debug basic render and new object creation
Clean up patch/mesh controls: Mesh PatchInterface
bug: convert path to mesh inserting null patches at each point
bug: rotate/scale single or more control points should move attached controls in smooth mode
bug: base on path remove/add should try to remember previous weight nodes, scratch only when mod points (not colors) too far off
bug: should still be able to edit colors while based on path
need ability to rect select points, like for cone gradient, points on overlapping edge can't be selected
no ellipse right click options
DONE circle warp:
DONE bug: circle: non-circle breaks ellipse scan
DONE bug: circle: drag center, breaks ellipse scan
DONE bug: sets "circle" property, but does not output the data to file
DONE bug: render initially displaying in small rect. changing inner radius gets it to sync
DONE bug: select whole edge fails when points overlap and select near active
DONE when color points overlap like with circle warp, have a way to change all coincident color points -> workaround: auto_select_close
DONE selected nodes should probably be more prominent and colored, just gray disappears, hard to work with
DONE bug: can't change point types with menu... path is not getting any menu messages
DONE maybe should not be able to escape off path tool when editing as path, since that breaks path connection
DONE bug: when edit as path, path is below the mesh, so can't see path
DONE bug: subdividing is broken beyond 1st subdivide on anything other than outer patches
DONE bug: selected points, hover over edge, try to drag deselects then moves whole mesh. Should select for hovered and move that
DONE bug: when on edge, it highlights, but if you are outside of mesh, it will switch to other object
DONE bug: smooth edit fails along edges
DONE add new patches should smoothify joins when in smooth edit
DONE smooth edit not working when more than one square
DONE just as moving edges, should be able to move any vert column or horizontal row of points
DONE implement more right button config options to make the settings more discoverable
DONE smooth edit mode should be default.
0.099: ImagePatch:
abstract to be a filter, with optional stand alone object
0.099: ColorPatch / MeshGradient:
need bicubic color interpolation, as just cairo bilinear is pretty ugly
need sampling from beneath
convert from/to linear/radial gradient as possible
DONE flip colors vertically or horizontally
0.099: PatchData:
smooth edit needs to adjust for interior point smoothness
reverse lookup is not very precise: need to warp back and forth ONLY when necessary, as when
switching to different, non-point-distort mode
perspective arrangement: approximate transform controls through perspective grid
maybe have status message say how many points are selected
need bez path to mesh, and extract bez from mesh
krita mesh tool has "uv preserving" move edge, yowza!
edit multi objects in mesh tool.. should be able to move around many nodes?
rect select nodes
coons are not really smooth at internal edges? try with engraver, makes corners with current inner interpolation
tracing infrastructure should be part of base mesh class.. would make easy for color mesh to use
nudge mode with shift + arrow keys?
See that lgm talk about "local mod" to do subdivided mesh modifications that reduces control point clutter
make base path dump_out as Path, not PathsData? make it easier to read file removing the unnecessary??
GroupInterface groupinterface ObjectInterface objectinterface: group: object interface object tool
select/unselect all
new drag/scale/rotate behavior:
anchor point drag should use the new widgets as appropriate
DONE rotation circle, inner: number +-/absolute, mid: free rotate, outer: snap rotate
DONE scale slide bar, go above or below, allow number input
DONE drag with shift lock to nearest drag axis
constrain aspect for corner scale handles should do so from drag start, not moment of mod press
control-move flip line to snap to horizontal, vertical, 45 deg, or common gravity points
maybe show flip and 90 deg rotate handles only when mouse outside the selection area?
need to be able to control click outside box to create? currenty you must click inside, then drag it out
world / local transforms:
object parent
object parent parent (etc)
object select, 'a' toggle select or not, select all in current selection area (ie page or layer base)
'm' should be able to move whole groups, means must be in object tool?
For objects that appear very small, the drag handles should not be operable.. shift only
For objects that are really skinny, it is not practical to have the handles be a percentage of the skinny
part.. should have minimum drag areas?
parent options colors don't really make sense
real menuify the clone options
need consistent system to coordinate selection changes between any tools or windows that need to be in sync
viewport should fully utilize Selection::CurrentObject(), keep curobj in sync
implement move to "Some other page..." when 'm' in groupinterface
things to allow editing of wrap, inset, clip paths(done), and chains
DONE hide/unhide
DONE default hide draggable flip, but have as right click option
DONE menuify parent options
the label hint should have "Parent: ItsId" and "Child:Id"
need option to select parent from current selected, like Parent to > (list)
ObjectIndicator objectindicator:
current should be bold
clicking around in hierarchy should remember children we just clicked from
need ability to click on object to select that object. Rename only when already selected
allow drag reparenting
hover over parents to pop list of alternate children to reparent to
show (root) at bottom of stack
voronoi Voronoi delaunay Delaunay: point set pointset
stipple sample:
pull in the eggbot stippler? results are way better, plus they implement voronoi center relaxing already
DONE custom radii
need to be able to cache need to recalc shapes
bug: coincident points cause weird problems
be able to control inset shapes
is double rendering when object is selected
importing raw points or data without matrix should map so that it all appears on screen
draw outline
snapshot current bbox
draw area from other object
box + padding
color per point:
color by weight as index into gradient
auto fill with randomized colors
sample point color from background?
merge different voronoi objects
multiple point select
separate selection to new object
convert voronoi or delaunay tris to graph
less than three points doesn't remap rationally, need to update extra lines to something proper
DONE should not recalc shapes that we are not viewing
DONE repeat last generator shortcut
DONE Number input of random n, grid, hex
DONE right click
DONE start new object
DONE generators
DONE toggle delaunay lines
DONE toggle voronoi lines
DONE toggle points
DONE implement show_points
tab/left/right/enter not doing anything. should be able to control with keys
FileDialog filedialog:
when on recent, going back should just revert to directory view
click on big image/pdf, takes time to generate preview. click on already selected, regenerates preview
need a click to generate preview, gen preview in background
file dialog, single click should not enter directory, double click should do that
bug: layer on a page won't allow collapse/expand
bug: sort caseless, other sorts not working
should be able to click on column header to sort
focus should start on file line
^l should shift focus to file line
when something is not openable or saveable, buttons should be greyed out
file dialog needs click on parent dir to jump to the dir, but still be able to easily return to prev dir
implement icon list selector
Resizing zaps view to top, should preserve 1st in window
need laidout only bookmarks file
edits color style: bg alternating isn't highlighting
tooltip to show full path of bookmarks
need drag and drop bookmarking
when you change directories, it should indicate if it corresponds to a bookmark
DONE implement option for (or just show) directories first
DONE bug: saving before asking for overwrite?
DONE bug: overwrite not escapable?
DONE enter on file line: if has dir, change dir, else trigger save
DONE should probably have a scroll bar
dual monitors: multi monitor multimonitor
centering windows should center on monitor of originating window
open in same screen as mouse
when you open a new window, ensure that it is always on screen
DONE Menus should respect actual screen borders, not just full virtual screen
high dpi hidpi:
uiscale option
passing in 1 is different than having no uiscale, why??? forcing it to check screen??
should have option to use native icons.. otherwise they render kind of bad.
prefs.scale_icons ?
DONE don't hardcode for instance thin as 1
DONE check interfaces, make sure everything uses ScreenLine,Threshhold,UIScale:
DONE curvemap
DONE freehand
DONE perspective
DONE simplepath
DONE textonpath
DONE align
DONE-ish nup
DONE clone
DONE object
DONE nodes
DONE engraver
DONE ellipse
DONE character
DONE caption
DONE patch
DONE imagepatch
DONE colorpatch
DONE gradient
DONE image
DONE path
DONE voronoi
DONE spread editor
check windows, need ThemeUpdate
DONE overwrite
DONE reimpose
DONE filedialog
DONE export
DONE import
DONE Import images
DONE palette
DONE newdoc
DONE fontdialog
DONE viewport
DONE color sliders
DONE error message box
rebuild icons in app:
need to install the source svg
detect if scaled icons make fuzzy and ask to rebuild
detect if missing icons, ask to build
need in app themeeditor to easily adjust things that are off
per monitor ui scaling:
xrandr only gives monitor names like DP-5 DP-0
xrandr --verbose lists EDID hex block that usually contains monitor model somehow
auto scale by detected pixel density
perhaps respond to GDK_SCALE or QT_SCREEN_SCALE_FACTOR (or maybe only QT_SCALE_FACTOR)
update all widgets accordingly
font sizes
window bevel, padding
thin line in interfaces
various interface threshholds, like path node indicator size, touch distance
DONE supply a "default" ppi? for instance xlib thinks: 94.1467h or 94.0741v of multisync lcd2490wiki2 (specs say 94)
allow changing theme from command line, config file, or settings window
have alternatives whenever a tool expects modifiers + mouse movement
option to use different go/don't go colors
on ThemeUpdated events, things need to account for:
color styling
font size/type
refreshing icons
should be able to access theme files/directories, instead of define all in laidoutrc
should be all cascading, bare minimum font size should be defaultable
so like a common style is loaded FIRST, then particulars dumped in afterward:
windowstyle common
category common
laxkit interface manager interfacemanager:
touch threshholds:
near point: default 5 px ? try to find a real world measure based on monitors?
draw point sizes:
normal bez point, for instance
hovered size
DONE make DraggedThreshhold an InterfaceManager ui scalable setting
DONE laxprofile not working
resource names should default to object->Id(). Is Name important? refactor with "label" instead of "Name"?
should probably go all in on stacks of data, with container pointers to the data.. would help with name collisions
migrate the Value system to Laxkit
Value whattypes() should just be the type, rather than c++ class name
inotify hooks?
save dialog should probably ignore clobber safety and allow enter key in edit to be "save". also auto focus file edit on start and on ^l
if you enter a new location in file edit, first go to that place. else save with that file name
FileDialog, when you instantiate with particular thing, it should be highlighted and shown in file pane
need more mechanism so that popup dialogs stay on top of window they are "children" of
need better indication of focused/not focused
need to make sure the weird stuff with xim/xim_ic in anXApp::CreateXInputContext() still works after not creating new xim_ics
need to investigate using ibus
should revamp the viewport color events to exclusively use Color objects and handle specials
lists need move semantics
CheckDirs / check_dirs is confusing
when resizing viewportwindow and a temp_input window active, make sure it stays on screen?
instead of _LAX_PLATFORM_MAC, do relevant check with _LAX_ON_NON_GNU instead? currently only place this is necessary is where getline is used
from laxkit: clear up focus handling which currently REALLY SUCKS especially when dialogs are up
focus off a dialog, then refocus, must manually set control focus. should store which subwindow
gets the focus when autofocused.
having managers as singletons in Laidout seems to make crash on exit.. for some reason manager destructor order matters
should take precautions so that dialogs do not get buried, would need to respond to circulate events
in laxkit, key and mouse state should already be filtered to only contain laxkit modifiers,
reserve names for CommandMask (macs), and a few other custom masks for other weird keyboards
seems to be an occasional redo bug, reinserting in wrong position
DONE dir
for blend modes, maybe place name conversion in Displayer, in case there are a ton of custom blend modes??
rowframe/squishybox would be nice to have aspect preserving squishes
DONE interfs example has memory hole: interfaces are not being destroyed
DONE shortcutmanager should be singleton
DONE unitmanager should be singleton
DONE interfacemanager should be singleton
DONE dlopen seems to be wiping singletons???? -> making them static in files seems to fix
click open jumping current to 0
option to use markup for labels
tree display flat option
makeinwindow() doesn't account for columns
DONE? with text colors, mouse over highlight is off (can't dup?!?)
DONE? not showing alternate gray/white bgs (can't dup?!?)
DONE left and right need to open and close
if no png icons detected, try to autogenerate
test how fast, have autogenerate as option on startup
image batch export: ...wrap this into general Selection export
id pattern:
0: [A-Z].*
1: *-s*
padding: [by grid] [l r t b]
unit size: .5 in
output unit size: 24px
from files:
- icons.svg
- icons-tiling.svg
- lax-icons.svg
output directory: _____ ...
implement clobber_protection: "%f~", %f is basename, save in same dir as file (clobber file will be clobbered)
saving templates
save as
save a copy
make drag and drop selections work dnd
bug: seems like errant end of dnd animation after you drop something from nautilus??
implement viewport vector file drop
implement image file drop to nodes:
drop text onto specific properties
gegl file in node
DONE csv file
DONE json file
DONE LaxImage node
DONE text file
dnd to CaptionInterface
dnd to ImageInterface
dnd to ImagePatchInterface
dnd colors somehow? interpret text "#fff" as a color
drag from lax edits to other places (in and outside app)
implement proper action querying, like when you press shift, control for copy or replace while dragging.. is it necessary, we always copy?
DONE Initiate dnd
DONE set up system dnd state
DONE send regular updates per protocol
DONE send data per protocol on drop if to other process, or internally if drop on ourself
DONE accept dnd
DONE mouse moves around due to ourself or some other process
DONE window needs to decide whether dropping is ok, and choose which window will take the drop
DONE handle drop of data
DONE LineEdit
DONE implement viewport bitmap image drop
DONE xlib_dnd->preferred_type not being set?? -> was bad child selection coords
DONE do proper translation between screen coords and window coords during acceptance query
align tool: aligninterface AlignInterface align:
needs polishing, the lines and indicators get a bit lost
context menu seems to be the group interface menu
need way to specify center of rotation per object
need to make discoverable, not just as key shortcuts
-> make as standalone tools, now that viewport stores selection?
endpoints should be oriented triangle, not circles which make it look like path nodes
explode in normal align
should be able to scale and rotate a non-line path when not in path mode
need manual mode.. drag grid marks to position manually... have that option available on others, auto transform to auto
gap looks ugly.. have indicator highlight path itself, drag that around
would be VERY handy to be able to recall previous arrangements, so you can partially redo
final layout options: unoverlap -> possibly snap to path, then spread out on path to not overlap
extra custom finishing per object?
reorder on layouts? -> how to handle reorder in gap and unoverlap?
trace out order path... show with numbers
drag out path, order of intersection is new object order?
maybe grid drag control to reorder
snap to page middle, left, right, top, bottom
snap to original selection bounds
snap to first bounds
snap to last bounds
snapping to 0/50/100
number box while dragging, goes away after a second, or click on it to edit
if inc/dec arrows, have it inc or dec the decimal place cursor is on
default presets: inkscape crossover
need display object to make visible if truly empty.. display object is not exported
DONE need node just for empty.. remembering NewObject->Group is irritating
DONE use as targets in, for instance, node alignments
need infrastructure to propagate and save tool settings
Tools should remember their settings
remember tool settings: double click on tool icon? right click...
remember tool settings
figure out which settings need to be remembered, and install as resource.. what happens when diff
windows are using diff tools? which settings are remembered? have tool styles that are saved, as
well as the running tool use settings
paperinterface: papergroupinterface papergroup interface
should be able to snap to spread pages also
when reset scale or rotation, preserve relative orientations
bug: sometimes clicking around when you have custom papergroup in viewport crashes
options to edit order of papers.. drag indices (front or "back")
define papergroup, convert papergroup to NetImposition
need snap to:
spread/page borders
need to be able to edit margins: edit the art box
need an easy toggle for landscape/portrait
menu options:
fit to selection
fit to page
fit to spread
center on selection
center on page
center on spread
orient viewport to paper
export options:
meta name
export settings
more that one settings per paper
debug papergroup tool in spread editor
paperinterface: in spread editor (done), and able to print it out
in spread editor (done), and be able to print it out
DONE option to show numeric print dimensions.. with the label? with indicator that it is not 1:1, maybe like show "110%"
DONE maybebox needs to snap
DONE if page is too big, need indicator around mouse that we are placing something
DONE space while dragging should dup boxes
DONE bug: custom paper size window starts as 0 size window?
DONE option for "Sync Physical Sizes when scaling"
DONE bug: dash outline is way out of whack
DONE drag should not deselect
DONE paper name should be within boundary
DONE when scaling should try to preserve relative orientations
DONE snap to angle
DONE show paper numbers
DONE indices should be underlined
maybe need to be able to edge drag custom paper to resize, maybe with grid snapping
when you add gray bars/reg marks, center on paper?
buff out the paper interface to be the net builder?
PaperSize/PaperGroup as resource:
papersize names are not translated. Should they be??
implement paper favorites:
be able to nest favorites, item->favorite = "submenu/23", item2->favorite="2", final element is number?
laidoutrc needs list of custom paper sizes
need reusable resource [ name ][load][save][dup][delete]
renaming.. resources should default to obj->Id()?
Load(DONE), save(DONE), add(DONE), delete paper groups..
PaperGroup should be a Value
work out scheme for resource ownership: they can be owned by:
1.DONE Document: if no project, save with document by default
2.DONE Project: save in project file
3.or Global resource: save in ~/.laidout/version/papergroups
class FileRef
papergroup->owner=Document, Project, or FileRef
DONE Use new custom paper size window
DONE rotate paper shortcut should be around paper center, not origin
DONE snap other papers to various boxes
DONE bug: maybebox zooming off on mouse move
DONE need a paper size editor stand alone window, entering numbers should convert name to custom
new PaperSizeWindow:
bug: rowframe WrapToExtent() doesn't work
DONE integrate with:
DONE signature interface
DONE singles editor
DONE newdoc
DONE paper interface
DONE from gimp: in either field, input aspect like 1:2 or 16:9 and it autocomputes value
bug: not showing highlight on rectangle
bug: drag rect turns off scale handles until you click down again
need gap around arrows
need numerical input
need gap adjustments
what is "sized grid" supposed to be doing?? perhaps auto size rect when this?
doesn't appear to update random target area when you resize area
implement flowed
unclump. Lloyds algo? voronoi of points, move original point to centroid
unoverlap -> define strategy, either shift H, Vert, along v, or shift on axes between objects
object reorder: drag outline of object to new position (when you enter another object, assume you want to slide to that place
scale panel should allow control zoom around point
show flow with numbers and arrows?
DONE fill in box
bug: string output not escaping things to display correctly
bug: dump_out_atts should output raw toStr things.. Strings currently return "str" which is output "\"str\""
bug: run command with BuildIcons, error is not propagating up to cout
bug: function calls, assigning named parameters, checks for '=', but only single char, fails when it's actually a ==
bug: for loops broken
bug: var a if a already exists in current scope should fail. currently just says ok, but keeps old value
test heavily nested assignments like a.v.x = 5
showing defined functions should show the code
showing variables should show name = value and the class def (such as laidout.globals)
set dump_out_atts should do full atts if any subattribute has full atts, else output "set": "{1,2,3}"
security restrictions?
need multiple assignment
debug generic with operators, doesn't seem to be working
debug operator definitions
debug using and import... maybe remove using, use import Math.* instead
error reporting up function calls doesn't say pos/line for each expression
overloading does not handle parameter mapping per overloaded, it is scanning only the first, and using that
print string plus any non string should stringify the thing and append to string
curline not getting incremented properly when there is skipping or looping going on
allow if statements on single line without curly braces
inputting lines when open {"( maybe prompt "... " to wait for closure?
how best to allow created object defs to be referenced as parameter, variable, or set types, it is a mess right now
show overloaded entries
DONE bug: function a(b,c) = b+c fails, says unknown name b
DONE bug: number deref: var a={1,2}.. out of bounds not returning cannot deref.. returning "Ok"
DONE bug: explicit var a=flatvector() fails with unknown name flatvector <- using Vector2 now
DONE bug: Math.oeuaeou does not produce an error, Math.aoeeou+3 crashes
DONE do string*int or int*string to duplicate string
DONE bug: ln(3) -> cannot compute with given values
DONE bug: var x =0; x^3 -> "cannot compute 0^x"
DONE implement a PaperSizes object that recognizes all the names, or maybe a set somewhere with all names? -> Paper.SetFromName(str)
DONE need special Parse(expression, &unknown_names) to assist expression node
DONE bug: a={a:1,b:2}; a.a -> crash! ..sometimes.. a.b crash other times
DONE bug: var a={a:1,b:2}; a["a"]=3 -> cannot assign like a["b"] = c or a.b = c
DONE bug: can't remove dict elements
DONE bug: var a={a:1,b:2}, cannot add to dict, like a.c = 234; a["d"] = 5655
image import: ImportImagesDialog
bug: import all to one page with scale up/scale down doesn't scale properly
bug: cancel button is white and no mouseover??
bug: cannot import images directly from recents
SelectFile should update file/path.. right now only updates filelist
ImageImport dialog: (actually, needs a total redesign) import images importimage
need thumbnail preview of images in directories
when you have a filter, should still show directories(?)
Import image list: default previews
should have preview for alignment options.. grab destination page to show preview
auto bookmarks, one for examples, or save as template
Choose/Review tabbed window
horizontal stack frame between choose/review and preview window
fancier path selector
for preview field, show green or something and change tooltip if preview will get generated
click on file to preview file, preview to preview preview
generate image previews progress box...
autogenerate should do special check for ~/.thumbnails to conform to freedesktop spec size and type...
importimages-> eps --> they are fit into boxes!! they should maybe be inserted into a stream..
importimages: remember last settings
DumpImages within Arrangements? a template of rect regions (2-d guides)? maybe use custom papergroups?
would also implement the dump into Limbo
dump into any chain of objects, this is really the same thing as laying out a stream, maybe merge this?
a "Place" tool like indesign?? preview images and place by dragging out one by one, as well as optionally into Arrangements
DONE need drag and drop from system for multi-image import
shortcut dialog: shortcuts: shortcut manager shortcutmanager
bug: ObjectInterface Duplicate objects has key u0000 ???
bug: on pulling up window, action list shows current tool, but that is not highlighted in area list
bug: keyboard display stretched way too much, general window arrangement is really bad
bug: sort by columns is not sorting by anything rational
saving keys for first time should default to config directory
need to be able to delete keys
layout needs to save
need mode column, mode based shortcuts have no display capability
area heads need to have human titles, _("Image Tool") instead of "ImageInterface"
mode for shortcut check not quite working, such as ' ' with button to duplicate
need hierarchy overlap features... it is easy to get lost in different zones
panning f'd up, close but incorrect bounds checking when drag
needs to make in window for cursor moving
char names for wacky xf86 codes.. accept 0x*
implement search
svg keyboard out
DONE need ability to add multiple keys for same action
signature editor Signature editor Signature Editor signatureeditor
bug: edit imp from viewport, change page number, should it insert pages??
bug: background colors are wrong now.. supposed to be gray background
mouse roll on paper size is confusing
number input for everything
symmetric trim
be able to enter final size, and adjust trim to match
should be able to drag and drop stacks
making new paper size should try to find matching paper name for a given size
fold replay should start showing FRONT page of stack, not back. THIS IS A BUG
if start from whichever, should show inverse of folds to normal as necessary
scale pages preview needs to use margin area, not page area
needs indicator of number of groups, show 3/10 for current sheet in little box above stack, allow numerical input
show margin, trim, binding when not totally folded
for large page counts, need number entry in stacks
would be nice to indicate when there is a centerfold of any signature
mixing different page sizes mixes up the PageLayout at boundaries. alignment should be either always centered, or custom
after you add stack, the added one should be selected
must implement dragging around instance blocks...
helper controls to adjust inset to match up final size for sigs of different size
indicators for different signature instances when viewing page spreads
need to be able to designate particular sheets with properties (like color),
as current insert mechanism assumes folds happen before insert
tab to cycle through handles for numerical input
mouse over and drag show numbers on canvas
export pdf or lo doc template
implement work and turn, work and tumble interface
should probably be some kind of tooltip to say shift for fold under.
binding edge must be same orientation for all stacks and inserts
need a paper size editor stand alone window, entering numbers should convert name to custom
paper select should give hints as to whether paper size can hold actual final size
detect non staplable binding edge, show red rather than green
test impose-only for all imposition types
be able to specify single sided.. allows bound accordian foldings?
implement creep
---------------- 0.099 ROADMAP ITEMS: features and enhancements ------------------------
external tools: external commands:
need to be able to rearrange order, first in list is default or select one for default
need access anywhere an object links to a file
use in image importer
use to import to objects
associate (laidout object type) <-> (external editor)
DONE command_name, ie "lp"
DONE binary_path "/usr/bin/lp"
DONE description "Print"
DONE doc_website ""
DONE parameters: $f {files} {file} {dirname} {basename}
DONE function to verify file is executable
extra config: additional context that may be used for templates?
glob for expected output files (so that we can import generated images, for instance)
command structure "command {file} --stuff {extra.stuff} {{laidout.globals.frame}} {extra3}"
DONE Image editor (gimp, krita)
DONE plain text editor (gvim, console vim, command, etc)
DONE figure out a way to standardize verifying that tool exists: command name: search in $PATH, check if executable
layers palette Layers ObjectTree
need to update tree list, not flush and repopulate which wrecks selection and open/closed
should have document list at top, showing current doc
need icons for object types
hidden/locked objects should grey out contained objects
visible gray out non-visible
drag change flags
selectable flag
key controls for navigation within menu:
space/enter toggle open and closed submenu
filter by:
rename in place
implement buttons
new empty
move up .. maybe do away with the button, and just implement drag and drop?
move down
copy item path?
object clipping:
menu should bold the object names.. hard to read as is
clip path shouldn't have to be a path.. be able to be text, or whatever provides an Area path
clip-path export: pdf(done), image(done), svg(done), scribus
page object overlap export: DONE pdf, DONE image, DONE svg, scribus
generate default clip path for editing from area path or bounding box
Label widget:
harfbuzzed, fribidi
abstract to form base of both widgets and CaptionData
replace all MessageBar with these
make editable one replace LineEdit/MultiLineEdit
need more automatic way to install:
mechanism for plugin config files
plugins maybe have plugin.conf resources/
beef up the config window, to allow toggling plugins.
plugin config window should list which file corresponds to the plugin
if there is a plugin conflict, should say which one is actually loaded
figure out proper de-loading.. have to restart?
check for already loaded
think through plugin infrastructure better, and from external perspective
need to beef out the plugin readme
usually, a plugin dev downloads an sdk that might just have selected headers, and .so file
how to specify plugin is built at all
how to specify plugin is compiled in, or exists as .so
plugins (c++) vs extensions (scripted)
bbox and aabb need to build in kids?
should transplant child to SomeData? would simplify making new objects considerably. or do (parenting shell)-data like blender
DONE SomeData should derive from DumpUtility
fontdialog: FontDialog
need a way to remember layered fonts, to easily activate and deactivate
read from standard fonts places, like .config/laidout/(version)/fonts
favorites: tag and column
user tags, not just fontmatrix tags, option to update fontmatrix?
should be able to access list of font favorites, and a user's preferred organization of fonts..
need to implement load specific file for a font
font->SetFromFile() should do more fontconfig checking to grab propper file+family+style+size
FindFont() is faulty, as it only lookes up family/style.. should search by the unique file name
sometimes family+style is not unique, but has different languages.. should detect this
use postscriptname: "DroidSansHebrew-Bold" --> "Droid Sans Hebrew"/"Bold"
bookman font style names getting chopped off: due to name collision and using psname as reported by fontconfig
this is unreliable! need to have proper unique font naming
sample block should be multiline
need support for svg fonts.. useful for pure svg fonts, and opentype svg, see cairo user fonts
pgup and down doesn't select a reasonable one
fontconfig directory config options
should REALLY have a LayerFont head containing the whole list, not a stand alone list which causes too many problems
figure out why some color fonts are not scanned by fontconfig
needs line spacing slider
option to search by spacing, ie monospace, see fontconfig: FC_PROPORTIONAL, FC_DUAL, FC_MONO, FC_CHARCELL
vague search via fontconfig matching, to find a match for something like a "sans"
font preview column in list, custom sample
language coverage search
select default language/script
select opentype features
optional common font finishers? like centering, underline, color, highlight, fg/bg, etc
Find interface: findinterface:
bug: key presses aren't propagating up to viewport?
bug: FindWindow is not remembering placement
iconselector needs: click-select, drag rect to select, shift to add to selection
iconselector needs to scroll
____pattern_____ .* Aa all (is regex, case sensitive)
Criteria: [dropdown of predefined criteria] [ ___type:"Image", brokenimages, expr:"obj.maxy <"__ ]
[next] [prev] [all]
[ 5 found: (found object thumbnail list) ]
id desc other-meta
broken images
empty groups
empty text
by type
scriptable pre-flighty conditions
current view only | in current selection | everywhere
foreach: scriptable action
sort found by: modtime, name, page, size, type
iconselector should have force image to particular size option so we could use object preview directly
cairo image save should use importer to do non-file creation?
cairo render has color problems with gradients
cairo development is dead? investigate alternatives
engraving tool: Engraving engraver
bug: trace object opacity is not working for non-image trace objects.. stroke and fill needs mask integration!!
bug: 'z' zaps mesh, but does not change cache border or point mapping
cairo render NEEDS VAST IMPROVEMENT.. the clunky xlib approximation was fast, but not transferrable to cairo
object lines in group list needs eye per object, affect actual object visibility
need to enforce resource unique names
need ability to store overall styles of a patch, not just each individually
on resource menus, should check mark if current matches a resource??
should adjust all linked
with test-engrave-trace2.laidout, do the quick adjust, does not preserve width the first time, using old value of thickness?
option to remember old values while adjusting position, rotation, spacing
-> when manual tweaking of spacing, need to produce value reference so that future line orienting preserves line thicknesses
seems to be grabbing spurious tracing values outside of the tracing object, and at borders of trace object
tracing object, lines abort just inside the image, maybe should just go one off the edge?
trace object needs flip, at least h and v, not really needing the whole affine thing
need option to export trace object in same position as the traced lines, so it can be further processed elsewhere
custom sample of channels
sharp edge detection in tracing
snapshot should be for all in selection
shift-drag (or drag anything not covered by trace object) should drag ANY of the meshes in selection, not just current
when multi objects, the traceobject is interweaved, based on draw order, only under current object, should be under all?
make gradient interface work in trace mode
freehand not being interpreted correctly: non-equal smooth is adding erroneous extra mesh column
drawing custom freehand (with width) lines within the mesh area
mesh path:
'a' not selecting all in line
curvemap needs predefined ramp profiles, remember last, load/save (per context?)
-> options to insert various predefined patterns
need magnify do dads for easy expanding of countour without having to place each and every node
need accuracy modifiers for dragging controls around
only when at endpoints, lineprofile not producing smooth results at random spots inside
should be able to adjust number of sample points to match up well enough for points in lineprofile
random end point sliders should inc or dec according to which side mouse clicked down on compared to absolute end point
spiral spacing computation bad when spokes are nearer radial
save the opensimplex line displacement from line/point randomness, to be used to also adjust a spacing map to preserve value when viewed at a distance
be able to trigger a reline on load in
be able to set a 3-d parameter for noise? useful for animated noise
option for "adjust for spacing", making weight reflect the spacing, either for constant width or trace
line profiles: (done) linear, circular, radial, spiral?
be able to edit and create new profiles
spiral arm count makes poor resolution
line generation:
grow: implement custom line merge and break to preserve spacing across mesh contraction
grow: edge abutment when generating
sample point generation should be based on lines per mesh square, not total mesh field
finish implementing spacing section -> spacing map
add special group: half offset, perpendicular
need stroke+fill options?
need convert to path object ability
current blockout is not very precise, needs approximation between existing point samples
fully implement resolution adjustments for auto lines -> needs resolution tool
single group (not group list) view is too old, doesn't do link circle, and can only select from current object groups.. remove it entirely?
export doesn't work for: nothing for scribus, eps, ps
edit brush ramp as symmetric ramp
resolution tool: click to add between points within brush, control to destroy points in brush
need merge group
screen view, need option for Fast|Accurate
no writability check on exportsnapshot
allow temp override of linked to adjust only current?
establish path needs better smoothness assignments
keys being caught in patch, not in child path
test: bez cache needs updating when points are moved around
test: dash cache needs updating when points are moved OR thickness changed
always brings current object to front (normal refresh in place, and then interface draw on top).. should be very optional, as it blocks out white overlays
don't warp, move points, then warp, almost always has bad points: PatchData::getPointReverse() is too inaccurate
finish implement making the circle lines be closed circles
need some kind of smooth out: smooth out width, and smooth out path
hover over mode icons should show text of what you are hovering over (verbose mode?).. hard to remember, annoying to look at status bar otherwise
should be able to draw a line and have that be a baseline for dash division
option: either drop out of bounds points, or zap mesh to point bounds
numsliders should have click on arrows for single increase, and a dismiss x for input box
should probably abstract control panel creation so we don't have to hardcode everything all the time
sampling could be more sophisticated, currently just grabs pixels, could downsample the image based on current spacing
Danger! coons patch produces discontinuous contours within multiblock meshes!! who knew!?
perhaps allow path objects to be adjusted with engrave tool for custom outlier lines not part of mesh?
must implement mode based shortcuts in Laxkit. currently all mesh shortcuts are active
stippling/decal mode, each sample is either a point, or map on an arbitary object, or sampled object?
per stipple, adjust rotation, scale, color, morph
from big import:
bug: delete discontinous range of pages doesn't delete all sometimes
thumbs refreshing a lot unnecessarily
load in seems to wholely load images, instead of only grabbing info
need some kind of "loading" indication when loading in large images
load in of many images needs threaded load
need image path mass reassign
spread editor:
need a force thumb refresh, or actually make modified propagation work
there should be a paper view for previewing purposes
select all for current marker type
arrange in rows at current scale not scaling and placing correctly
crash during thumbnail generation if you delete pages while there are still some to render
auto-arrange not consistent.. doesn't really respect the screen aspect
should be able to save from any window
undo extremely necessary
for images, need edit image feature, with watch for changes, or "reload image"
save as should have sample file names: from directory name with ".laidout", incremented from any *.laidout
large images all being loaded in, need way to ask about creating proxy images. only img info is supposed to be read in until img data is actually needed
need better ui for selecting templates
load in autosave should ask if you want to save as the original
spread editor needs edge dragging
DONE export directory should default to last loaded file
DONE selecting ranges
MirrorInterface: LineGuideInterface
should be able to mirror non-paths: arbitrary objects
merge widget, near and outside p1. show merge distance as max(actual, th/2)
label editing
double click to force p1 or p2 to be under mouse when p1 or p2 way off screen?
Gradients: gradientinterface
constrain to x/y/45 dragging end points
dragging around color points from inside to outside should allow going out of bounds
DONE linear
perhaps split radial and linear gradients to different tools? makes more sense
tool: drag define gradients ala substance
tool: sketch define gradient fields ala sketch studio
do dithering to reduce banding
color interpolation: render to image, then use that as color source
linear (current default and only option)
auto bez
curve editor rgba
gradient data should be able to use resource GradientStrip
owner: file/user global/system global
color strip:
r1, r2
option to lock label size to real space? make export contact sheets a little prettier in some cases
right click option to turn off? sometimes it overrides other interface clicks, mouseovers are confusing
page thumbnail should be rational, ie image should be whole page, not just contents+transform,
and thumb transform makes image dims to page coords
global resources:
build use case of setting a global var for current language, then have objects update according to it
need a Revert option
Reconfigure text edits. Need something that works in interface land, with harfbuzz, that integrates with lax fontmanager
lgm 2019 feedback and ideas:
path tool:
hard to see helper graphics, needs haloing
press space to dup weight node while dragging
method to fix all broken images at once
mass image edit, need to remap dirs for old files!!
option: do just this one, or fix all
old path: _____ new path: _____
method to collect all used resources of a doc for distribution
be able to load old docs
from here on out, ensure backwards compatibility of files still works (at least loading, saving is stretch goal)
enhance mystery data to work with laidout data too?
some kind of graphicsmagick LoadToMemory bug.. could be only on loading old file, bad config translation?
out clicking from a dialog should probably destroy that dialog.. too easy to get buried confusedly in windows
make connecting to online information easy: click to open web browser, xdg-open?
from talk: diffusion curves, "local mod" mesh manipulation
maybe drawaxes should show dotted line from origin to bbox?
load palette should have a preview: file dialog preview function
allow editing palette strips, import those to gradient tools
custom palettes
if height < 2*textheight, then hide name info
wheel between loaded palettes?
have a none color
right click for:
load palette
select palette
save palette
dup palette
New from a generator (like rainbow)
Soup up the color box so one can recall previous colors, and/or integration with palette window
-->delay until proper color implementation in place
WATCH OUT for when preview file is OLDER than original file!!
panel editing:
selecting objects really sucks
bulk assign meta
meta edit:
should allow both name+value for new
parenting and unparenting really sucks
options should be:
Jump to parent --hover to show what is the parent
Parent under first --hover to show potential parent
Parent under last --hover to show potential parent
need something like laximages->Save(file, format, native_save_only), in case object doesn't know how to save to that format.. maybe default to something like static ImageLoader::Save
need ability to show "reprocessing.." or "progress.." indicator in different thread to what is actually processing
must multithread long operations
object content selector menu to more easily flip between tools for object-content-streams-otherSpecials
need a better file preview system
need to wrap laidout_preview_maker(), which previews EPS with the help of gs
createlaidoutrc() should migrate to a LaidoutPrefs::CreateLaidoutrc(), not a direct LaidoutApp func
remove imlib/"xlib" font, image, and render backends, replace with GraphicsMagick and cairo, keep imlib loader but load to cairo image only
remove displayer-xlib
remove fontmanager-xlib
image loaders:
implement loader priorities
some way to prioritize image saving
rework ui to be programmable. Perhaps an ui builder
make sure image counters are ok, such as in new Crop()
gif flipbooks:
mod to center trims in sig editor
need a revert to last save option
for one offs, need to implement progressive repeat imposing
auto format partition so final page size has same aspect as image
sig editor needs number input
gif exporter:
use graphicsmagick? C example:
set custom timing in page properties
text (see also src/text/text.txt):
need options per font on export to: convert to path, subset, embed
need standard way to have default font, apart from defaultlaxfont, as well as default color/other visual attributes
global font list, finish implementing uniquinizing font names, need final step of some kind of file name diff
freetype/fribidi/harfbuzz all over everything?
interface base for utf8 based editing.. share this with window edits somehow
maybe fonts should point to their creators to make duplication more reliable if there are more than just default fontmanager
need support for font substitution
harfbuzz support
math mode
track bookmarks
inline graphics
css import/export
tabs on arbitrary paths
google font import
common property editor tool: ..overlay and put editor box in a corner?
- select a bunch of objects
- tool determines properties in common:
name + type
whether properties are equal
if not equal provide menu to select from existing to apply to all
- Provides widgets to change those properties all at once
maybe other mode, where you can copy certain properties, then apply those to other objects?
large files:
note that most object dump_out routines now use Attribute intermediary rather that write directly to file.
if this becomes a problem with large files, need to revert that, or update so less heap thrashing
page range file refs, so you can make massive docs without the whole thing in memory at once?
Whenever there's a byte read in, like with read_in_whole_file to string, really should do some minimal string validation before using it?
resource manager needs to store unknown objects as Attribute trees, so they can still be preserved
for future processing. for instance, be able to recover from when a plugin is missing
need to implement DRAW_Hires for all interfaces that default to preview renders. needed for proper image out
includes at least image(done), path, engraver
mousemove decorations shouldn't change when an interface absorbs one
dataobjects/datafactory should somehow combine with stylemanager.. seems redundant as is
raster paint layers, mypaint?
open on image should create a new singles with default paper and image centered
page units should be adjustible so that node enthusiasts don't have to use inches.. maybe make page layer transforms scale by a units conversion
need something like Convert(value, units_from, units_to, &error, overrides), where overrides is
something like: list of [units_id, newscaling], like for temp redefining "Em" or "px"
selecting in viewwindow
on limbo, and spread/page, papergroup, select first object it finds
if curobj, select only siblings of currently selected
if no curobj, select only children of current context
if you click on something, then single click again, search for anything else under
double click group to descend into group
double click or enter non-group to edit content
cntl-double click or cntl-enter to descend into non-groups' kids
currently on selected object, click not on handles:
C left click drag: scale around mouse
S+C Left drag: rotate
Left drag: move object
C left click: place/remove anchor points
Nudge tool nudgeinterface nudge interface:
break off from engraver tool, to operate on any PointCollection
build net interface graph
start fresh doc, autosaves which may be saving into confusing location. maybe save in config dir?
autorecover.. -> when an autosave is newer than the file we are opening
option to choose how many to save near original file, and how to remove old
[ ] Backup on save to: __%f~__ ___%f#~___ <-- use '#' to signal increment save
%f=filename, %b=basename (without extension), %e=extension, # for numbered autosave
[ ] Autosave.
Time between autosaves:___5_minute__ millisecond s sec seconds second m minute min hr hour h
Naming for autosaves: __%f-autosave#____
Number of different autosaves: ___1___
need option for always write relative links.. now defaults to absolute
file button expansion:
Collect... <- gather all refd files into one place. ask to specifically not collect per file
Commit (git) <- ensure file is git tracked.. add if necssary before commit
double check that other files refd by this one are tracked in same repo as well?
maintain list of what to collect, what to ignore when committing?
Commit settings... <- choose or set up repository, how to handle passwords?? libgit?
Revert... <- show log, select old
open from template:
needs to be incorporated in newdoc dialog
get template list:
scan all template dirs: ~/.config/laidout/version/templates, or SHAREDIR/templates
name -- file path -- basic info about file
really thin objects should still be selectable, need to add a slight grab area outside bounding box
should be able to click within selection box to move all and not click right down on one of them
need to implement image cache clearing on low memory, to substitute for cairo not doing it like imlib did
minimum dp size is not small enough
anInterface::PreRefresh(), for instance to get engraver trace object to render below all selected objects
need to clarify what happens when you open and close documents.
open and close docs always leaves limbos behind
open already open pops new window
not sure if it should also record ownership of limbos
open doc: limbo->SetResourceOwner(document);
close doc: if (limbo->ObjectOwner() == doc) limbo->SetResourceOwner(nullptr);
colorbox color box:
hsv slide, configurable clicks
color slider popup: colorpicker color picker colorsliders
optionally show numbers, click to edit
color strips for full transparent should show checkers in all strips, not just the alpha strip
have a "Done"/"Dismiss" button
be able to choose which color sets are visible
make color slider box be able to be a pane
need palette selection tab
click without dragging select color
click and drag shifts, but DOES not set value under mouse
out click on hex edit is picking color
clicking anywher in the new/old should swap
show numbers to click on: 255, 65535, float
toggle sets of sliders: rgb, cmyk, alpha, cielab, hsl
DONE bug: text is not showing at correct size at first
color picker that previews text?
convert to using Color objects instead of all ScreenColor:
color patch gradient
image patch
DONE images (doesn't use color per se)
need a global Laidout method of making unique ids
-> update in Engraver tool, and object indicator overlay
plugin for easy antiprism import for net creation
for purely command line execution, should be able to make a binary totally not X dependent.
externally saved pages, for long documents
save "page" files? reference from Document?
and/or save "object" files, with layers in the file, have special DrawableObject flag to save its contents externally
conformal mapping option instead of mesh? see
command prompt window: command line
bug: delete at pos 1 deletes space after prompt, then does not allow any input
option to record/save/load whole session of prompt window
up/down should traverse history
control-up/down, break out so you can go anywhere
load document, should load images on display only(done), or create previews in background..
snap guides to objects
snap objects edges to various things
straigt lines at any angle
polar grids
Spread Editor:
need to make pagelocation ref count pages, or (need to anyway) check all known views for errant page refs after delete pages
would be nice if apply and reset should be grayed as relevant
adjust page preview resolution
after an insert, have temp wheelable number indicator, update on screen?
need to be able to move empty spreads
need to remove hidden pages from pagemarker
debug select spreads with rectangle -> need real box intersect? do we?
modify page range gui, click on a page label, where ever it might be... select pages in spread editor
debug spread limbo threads and page groups
implement render
debug drag and drop
create new document from spread view?
hide should collapse into a single thing so you can arrange more simply, instead of still having to sift through many
animated beacons for anchor points to make them visible
curvemap needs predefined ramp profiles, remember last, load/save
curvemap needs brush ramp mode to show symmetric graph
clip wrap render to graph rect
brush ramp edit mode: incompatible with wrap? or just have editor move points symmetrically?
Convert impose-only to be based on feeding it an ExportConfig
clarify how locks, visible, selectable works. base in Laxkit?
overlays should get first pick of input, BUT if another has a button lock, it shouldn't mouse move update
standardize new Impositions: convert to new ResourceManager system. each has:
interface OR window editor
class type
default resources
possible to define other editors for any imposition type
option to select region by intersect, not by corner inclusion...
When importing from an image list file, should be able to say if and when to auto-make previews
new option in file, should be easy
mystery data enhancement: import as placeholder objects: if convertible to laidout elements, do not actually
expose them as such. Keep source in external location, current laidout only rearranges.
---> this is same as import as image, but using laidout objects to render them with, not bitmap images
---> this is useful to have a standard object indicator built from laidout objects, but
do not let them be editable
when importing, have MysteryData, which has special attributes "@file-pos" which says
where in the original file the attribute starts:
title (shown in screen)
file format the data is from
attribute style listing of the object? or straight from file
in: convert file to attributes, or provide method to tailor to an output format (eps, pdf objs, raster image),
and provide a preview image or object to stand in for the file..
allow multiple, positionable spread views visible on same viewport
should have a way to narrow down what resources are saved when you save a single document.. right now, if you
have multiple docs open, the resources are mixed
really should have option to separate or merge resources when multiple documents open, rather than always merge?
textobjects,limbos,papergroups should maybe be able to be stored per document, not just file, project, or temp
either that, or do away with whole project/document difference, and use only
projects with their own directory, and documents without their own directory
should be resources:
DONE PaperGroups
DONE PlainTextObject
when closing a document window, decide whether this removes access to it, or just the view to it
how best to integrate Styles, Attributes, and Values???
various object types:
draw objects: Image, ImagePatch, Paths, Path, LinearGradient, RadialGradient, PatchGradient
Imposition: Singles, DSS, Booklet, Signature, Net:Box, Dod, etc...
-->Styles are Values that can be cascaded from other Styles
Values by themselves cannot be cascaded
-->C++ classes represent data that can be accessed and modified through:
onscreen: compels direct c++ access
file saved to disk: uses Laxkit::Attribute as intermediary for disk i/o
interpreter: parses input using Value objects which have ObjectDefs defined at runtime
would be advantageous to write a single object def, and output options and documention to each of the 3 targets
each class:Value potentially has:
- "internal" variables/funcs that don't correspond to ObjectDef entries which are all "public"
- scriptable variables/funcs defined in ObjectDef
these are vaguely compatible, but it is not a 1 to 1 match
some kind of preprocessor (ugg!!) to convert the header file to object def
pointin should check to visual boundary, not bounding box (? maybe just optionally)
customizable object child relationships to parent, rather than simple transform
this needs to be reworked to be an object filter instead of special anchor properties
incorporate gss?
DONE scale x
scale y
scale free
stretch, proxy displays ok, but after install stretch doesn't work
shear *** seems to be off from point, need shear protection, produces null axes sometimes
DONE scale
DONE rotate
DONE scale+rotate
DONE move
add page target anchor
add parent target anchor
add object anchor
margin area not working
implement rules list click remove
implement click rule, update display, watch for offset
anchor names should not have quotes in them, because disk i/o is easier and I'm lazy
problems when anchors are on a page that is not at origin?
check for only align objects that are on pages
margin area anchors not staying when margins change
transform relative to alignment point of parent (50,50) for center, for instance
edge magnet
when trying to move an anchor when you still need to select invariants, flash the invariants
need edge indicators for more convenient snapping
privacy/security gotchas to watch out for:
autolaidoutrc with export settings can potentially save user data in templatevars..
maybe have special project/autolaidoutrc to save such things?
file system access in scripts?
needs massive testing
type "tool." (for instance), you can highlight choice with mouse, but does not insert into edit, only inserts when nothing had been typed
*** not getting options for all tool and object!!
searching seems to be messed up, improper matches when mid stream
mid stream search is messing up match names
completion should be worked into the edit.. "object.|" then tab is replacing all text with field name
when in function, search among parameter names also
need to search for context names before searching for calculator names
search within area, not total tree
text delete to nothing should only show the top areas in search results
thoroughly test object access
object.translate((1,0)) -> MapParameters should map the flatvector to p, not to x
shift up/down for showing completion
reposition cursor to error
for parameters, facility for special edit dodads
custom tools:
normal tools, but jump to special settings for those tools..
implement marks
bleed marks
color bars from a palette
spread info: spread type, current date and time, creator, spread number/total number of spreads
dynamic objects (generated images, dynamic images, rendered images)
eps objects to pdf: export as image, plant in PDF as image
group objects with laidout elements, updateable with script
image objects using ImageImportFilters
perhaps add TEX_BIN, LATEX_BIN, and text editor to quickly add stuff like that!!
external commands:
website to recommend learn more
needs what type of file
needs how many files
needs what other info
ImageProperties image properties imageinfo image info:
click for file should show preview... there are two "..." !!
select file, not updating view?
In image properties dialog, have the popup list of potential previews
preview style needs debugging and testing so as not to fry the freedesktop ones
if you change an eps to a non eps with the insert file, it still thinks it is an eps..
image objects should auto change between the available image formats:
bitmap--eps--embedded svg--dynamic
Dynamic Content:
displayed as images, or displayed as group of laidout objects
possibly multiple images or objects in linked list:
one source creates multipage ps, for instance, each page gets its own object
controller source object:
generator command + context
ps/tex/pdf/etc to eps files, import the eps files
broken down equirect panorama to net
Image import chain:
1. eps|EPS: Laidout builtin
2. svg|SVG: inkscape command line export
3. other external renderer: asymptote, structure synth, sunflow, pov-ray, lilypond, latex, graphviz, gnuplot
3. * images: graphicsmagick
4. jpg, png, gif, tiff: Imlib2
move Value and FieldPlace to laxkit? ValueHash would be very useful to ease configs
soft masking
mask object optionally converted to grayscale
incorporate IndexRange?
drag off screen should toggle off
need overlay close box?
edit base in place
should remember old label format strings, to easily select back to them
have option to specify language from command line
reimpose option: center images, but not rescale?
improve split window
control wheel to expand bevel
load/save split bevel settings
debug mouse cursor change when over gap
simplify pane customization, docking
accordion folds:
map style
various pamphlet types
wacky minimal origami:
maze books / meander scrapbook
cootie catcher
explodion books with cross folds on pages
Make extension to be able to use Inkscape live path effects (lpe)!! Then run on svg snippets, so should be somewhat
straightforward to call externally.. BUT have optional tool overlay. Figure out how to reverse implement to also
run within Inkscape.
printer mark rendering default to a single color? editing of net outline allowed, but
then changes not stored
probably should decide how to handle making windows based on interfaces.. it is a more productive route than window dominant
import/export styledefs should use the extendsdef mechanism!!!
views with multiple spreads
messages to the status line should have priorities? so once mouse over messages are cleared, it would revert
back to a lower priority message
WhateverImposition, to only have limbos, but extra handling for exporting
all at once imposition... this would allow mapping of scribus layout without fuss. that
could be a special case of n-up, where you specify n to be infinity, with m number of
columns, not necessarily aligned, as scribus does.
templates Templates:
partial templates, fill in non defined, like use booklet but manually define paper size
DONE save as default, or just save as.
Master Pages master pages / template pages:
have objects be tagged with ref object, so you can create a page with a master page
that has a "text frame" for instance, but different properties per page
ProxyObjects : public SomeDataRef
SomeData *proxy_of; // <- object on master page, for instance, but the real ref object is editable
option to revert edited object to base proxy
need option to import master pages from scribus docs
some kind of grease pencil?
Saving: multiple documents open, save only the headwindows that refer only to that doc,
OR save no window configs (saved with project), OR save custom configs
need conversions: gradient->color patch
image -> imagepatch <- do with image filters rather than specific object type
imagepatch -> image
colorpatch -> image?
engraver -> path
path -> engraver
text -> path
bool reversible;
char *from;
char *to;
int support; //like how reliable it is to convert, warnings for what is lost
CanConvert(object, from, to, warnings_ret);
newobject = Convert(object, to);
file format prettification --file-format
dump should differentiate between DrawableObject and pure resource objects... right now, all lumped together
adapt the scribus xml/att convertor to parse the output of laidout --file-format into something meaningful...
#-------blah-------- <- mark a new section
thing #thing's docs
subthing #subthing's docs
#docs for following atts indented same as previous atts
next_att #(one or more) next_att docs
DONE make names/values/comments all kind of line up for those that use dump_out_atts
export with limbo, and no doc or papergroup, means use bounding box for limbo?
measure tool.. configure measurements to be:
displayer units
object units
units mapped to either type of units, so can use light years for units that are actually inch physical paper units
have arrows, and write on screen what the size is...
collect for out:
define directory to pull all files and external resources in
write out new .laidout file linked for the new system
define map of oldfile -> newfile
name mangling as necessary to prevent clobbering
need limited collect for only resources used by exported items
resources/ <- that were laidout resources linked in
file.laidout with proper links to new dirs
collect.log <- what was collected / rasterized?
specify layout and spread range
specify checking functions
step through each object
run checking function(s) on object
append trouble spots to error log
needs path to object: project.limbo / / project.papergroup
possible remedy
show window with list of offenders, offer remedies
check for empty groups
check for broken images
check for transparency
check for bad fonts/missing chars
compatibility should be determined by file type managers, not individual objects
return if object is currently compatible with some standard,
like "PS LL3", "EPS 3.0", "SVG 1.2", "PDF 1.3", "PDF 1.4" "HTML/CSS2"
1==yes, straight out
2==yes, but needs rasterizing
this would simplify preflight checking
maybe expand the page label system to have some kind of to-do markup.. this could be combined with preflight verifiers
or other search activities as work-in-progress annotations
cloning: convert to master: make a clone be the original..
means swapping the actual master with the clone
..if an object is cloned, maybe just have them all be clones, and original becomes a remote "data block"
to be dumped to file in a defs section? if all refs gone but one, then it takes place of clone?
for clones, it would be easier to have a "defs" group or something, so deleting the original of a ref will
not cause problems. When deleting objects, must then take care to update parent, so it is immediately known
if an object is without a home.
tiling cloner: clone tiler CloneInterface
escape doesn't let you go back to object tool
show/not-show base + source_clones
embed origin in pattern
embed pattern in final
should have option to apply clones as an object filter, not as actual clones
should have option to map cell size to cell objects for easier tiling
default should be use lines only when there is no source object.
new tiling should update viewport color per basecells
should not assume preview has I transform
memory hole back, third time!!!
radial needs wind scale input
DONE fill out the Tiling objectdef
DONE bug: Tiling doesn't save, need to make Tiling be a Value so it can be io with drawable->properties
DONE various source refs should take names from ref'd objects
need path morphing
spiral needs:
number of spirals: color different for each
direction of spiral
need more distinction between what is a base object, and grabbing a copy of existing object.. too easy to confuse the two!
copies should be selectable, at least so you can adjust the colors: gave current_base, current_copy
should have z order controls for base cell stuff
clipping options when source images overlap in final layout
maybe be able to modify base cell outline, use that as clip? autocorrect for overlapping?
snap sources to fit/fill in base cell areas
implement proper shear/aspect protection for:
allow shear of p1, p2
allow non-locked aspect of p1,p2,pm,pg,pmm,pmg,pgg,cm,cmm
highlighting in selection box should draw name next to the thing on hover
making new id names needs to make unique
1m and mg do not seem to work: need a final transform to apply, NOT repeatX/YDir().. those shift without rotate
bug: not showing orientation arrows correctly when outline cuts through middle of bounding box
really need undo
save color hints of base cells with Tiling object
change color of boundary, and outline preview
select objects, wrap base cell around it
implement circular interface
need rudimentary editor
need flag for ok for cell to shear, ok for cell to scale x/y independently, and have it apply as it should afterwards
default line/fill render style (if any)
boundary outline style
base cell outline styles
should have a render preview to show actual grid coverage
need finishing tool
design interface for clone on path
Hirschhorn Medallion, and other pentagon tilings
truchet tiling
einstein's hat:
penrose/heesch/net clone interface
penrose p1: pentagons, pentagrams, rhombus, sliced pentagram
penrose p2: kite and dart
penrose p3: 2 rhombs
need progressive search when mouse over box
autocreate seamless tile image
autofit source objects/images to the pattern to minimize gaps
map to inkscape tiling clone on export?
Imposition use cases:
for sig editor, need paper partitioner, then stack sections
for same document, have stack of impostions, each with its own page set? would make docs with body pages and
cover easier, without having to implement full "project"
booklet contains two threads, read one way, flip book over, read the other way
remember custom views, to swap rotated display, for instance
booklet but each paper is trimmed differently, like for tabs
need cutting marks for posterizing for lining up different sheets
impose only needs access to papergroups
maybe any spread setup temporarily to another imposition on export?
Net imposition
create from papergroup: one papergroup used as page spreads, another used as actual paper group?
net extra scaling non-functional
NetImposition needs import/export net,
export svg
convert to/from laidout elements
interactive unwrapper and build net interface figure out bleeding and connectivity infrastructure
figure out more efficient clipping of Imlib images
finish implementing double sided nets
saving when net is internal is not proper.. does not distinguish between diff. nets and whole
import/export cff2?
export pdf 1.6?
save different setups: papertile AND net layout
load save nets from: files or 2.OFF files(done)
bug: won't set custom net/paper after edit imposition with polyptych
can't seem to save new bookmarks or use old ones in polyptych, but it's ok in Laidout
hedron window:
opengl impl needs a modern refresh
send imp
receive imp
remember net and paper placement
sometimes paper disappears
auto generate equirectangular -> flat
reverse project net onto an equirect for export
highlight paper when dragging will move it
need to draw other nets in outline (at least) in paper view
need to preview sides on hedron
memory hole in polyptych
file open, preview hedra
file open, preview equirects
need to implement more options for polyhedron connections, to allow mobius strips...
DONE proper units for papers
implement undo.. ideally use same code for both undo and recordable/assignable actions
object interface
need to account for:
DONE dragging matrix changes
key flip, or non-dragging changes
object deletion
inside curve editors
paper interface
spread editor
metadata stuff
during scripting?!
PlainTextWindow plaintextwindow PlainText plain text window:
bug: ref count 2 remain on exit
bug: not loading text when stored as file
bug: doesn't handle tabs
need control zoom to change font size
clicking around doesn't properly update caret drawing
plain text edit window specify interpreter to process the text with
DONE PlainTextObjects should be resources
move selected lines up/down
regex searching
jump to line
jump to previous/next edit (in stack)
bookmark spots
option to show line numbers
indent/unindent selected lines
toggle expandtab
comment/uncomment: // or /**/ or #
multicursor edit
some day should have syntax highlighting in Laxkit::MultiLineEdit
pixels units should be set as per document dpi
CharacterInterface characterinterface
should show unicode number/glyph name if available
implement recent
implement suggestions
alternate glyphs
Spread editor: SpreadEditor spread editor spreadeditor
should have border drag to move, not middle drag
python plugin:
need python implementation of Attribute and class structure in/out to help file importers in other python based environments
need headless, no-x compile option to allow minimal usage as python plugins for Scribus
limbo transform should be obeyed. It can be moved, scaled, etc,
page layers should be simplified, each layer behaves according to its transform, and more controls inserted to handle layer maneuvering
configurable command buttons to automate certain things with minimal window clutter....
dump OUT an image list? Scribus has "review images" feature.. can jump to location, edit print/view, etc
repeater tool on path: could be adapted to help animation tweening
animation: real time
animation interface can set laidout->globals.frame, but how best to add callbacks when a Value is modified?
anything even remotely real time needs serious rewrite of rendering, and use compute shaders opengl? vulcan?
animationinterface animation interface:
way to set start, end
way to set fps
DONE be able to move strip
DONE make strip an overlay that can trigger filter updates
how to keep track of class hierarchy? impositions are now listed by resource instance, what is
best way of keeping track of base imposition classes? this is needed for file format description output
polish: ux:
when you save, also save a preview of current spread in freedesktop thumbs?
resizeable ui
should be able to mass disconnect clones
current page should be highlighted
in menus, click down, then drag, will return what is under mouse.. should default to not do anything but stay in menu
page navigator should allow type in shortcuts like "end" or "-2" for second from last
General design usability
to be a decent editing platform, Laidout needs:
viewport rendering needs to be far,far better
master pages with auto page number is important.. for image based page numbers, dynamic objects important!!
would be convenient to send to gimp for editing, update later live
when delete/add pages, need option to reposition to same orientation in margin area
selection snapping: select a bunch of stuff, mark as snap sources, next selection tries to snap against those in old sel, not in new sel
rotation, maybe drag handle with control?
snap to bbox vs aabb
drag constraints more accessible in only y or x direction
per object visibility
per object opacity
better key shortcut edits, right click on menu items to ch key
select only within group zone
easy selection of proper group zone
remove 'i' from common shortcuts for all tools to let it be used for ObjectIndicator
DONE more specific control over transform.. numerical specification
DONE clipping
ebook conversion, such as by importing from Project Gutenberg
spell checker.. aspell (oldest, lgpl 2.1)? hunspell (used by libreoffice, firefox, lgpl 2.1)? nuspell (c++, lgpl 3.0)?
============== Future of Laidout ================
2D Vector graphics editor built for multiple output types, such as multi-page physical prints, html, or image files
While 2D focused, has some limited capabilities to lay out on 3d surfaces made out of flat but bent or folded surfaces
Current deficiencies:
Render update is way too slow
Too many bugs/quirks in object management, resource coordiation
undo/redo barely implemented
cairo is only 8 bit, limits use for animation
Way too hard to have user created tools
internal object system is flexible, but not without a huge amount of boilerplate-like code to tie to scripter
Being Linux only limits user base, and thus also limits user testing
no color management
raster/paint/editable image layers, or stroke based on non-destructive vector paths would help
too many complex custom systems is not attractive to new devs
Pure svg/pdf vector graphics is limiting, current custom format is very flexible
Game engine-esque, real time animation and 3d tools are rising in importance as everyone aquires powerful cheap devices
Compute shader/ graphics shaders are very powerful and should be used for speed and image effects
Ways forward:
maybe gegl-ify everything?
- fixes 8 bit limit
- babl flexibility
- cross code with gimp/gegl has long term benefits
- gegl already can access hardware acceleration for many things
consider gigantic revamp so that ui is all made with python..
- essentially the blender route
- makes tool development way more accessible to new users
===================Consider anything below here food for thought, not active dev notes================
for translations, there is a difference between locale translations and language translations!
not sure if it is worth paying attention to... need to investigate if locale as it affects keyboard input
is separate from what locale we read in translations from. If it is distinguishable, that is fabulous, in that
we can maintain the current locale key input, but change the language translation at will...
investigate pdfcreator as method to reduce file size
historical impositions:
Name Abbr. Folds Leaves Pages
Folio fo, f 1 2 4
Quarto 4to 2 4 8
Sexto, Sixmo 6to, 6mo 3 6 12
Octavo 8vo 3 8 16
Duodecimo, Twelvemo 12mo 4 12 24
Sextodecimo, Sixteenmo 16mo 4 16 32
On duodecimo: 3x4 on a side, cut off the bottom 4, fold, use as insert into more traditional 2x4
food for thought:
haskell envelope function:
When releasing new version, combine these with ROADMAP items for release notes.
These must be moved to the DONE file at each release.
DONE freetype-config is deprecated
DONE object indicator should show actual page label in it's description
DONE Page Clip: clip in viewer
DONE Page Clip: svg .. set clip-path on each page layer to page outline
DONE Remove old laxutils based drawing calls in favor of Displayer based drawing.
DONE website: make twitterable
DONE make sure gegl points to 0.4, and no freetype-config
DONE bug: input edit cursor placement is wrong now
DONE Meta window for doc meta
DONE Meta window for html out
DONE html out
DONE bug: text selection and highlighting is really out of whack.. int/float troubles? <-- dp->textextent is NOT returning same as font->Extent!!
DONE skip pages (at regular intervals) on multi-image import.
DONE animated gif import
DONE Remove obsolete HelpWindow code?
DONE finish phasing out MenuSelector
DONE laidout settings option to always load last file on startup
DONE added rudimentary plugin list window
DONE when using static SingletonKeeper in ColorManager, dlopen would wipe its object. wuuuuh? <-- something about dlopen process wipes some non-statics in some files
DONE ftgl problem in polyptych... font not rendering <-- just needed ftgl update
DONE Gradient:
DONE dragging colors in radial is still really bad
DONE sliding radial colors not 1:1
DONE p1, p2 need little indicator nugget
DONE resize inner circle, make small past a threshhold makes circle go away
DONE double click to call up color selector
DONE dragging p1/2 bars should not rotate
DONE spread modes
DONE change object, curpoints still selected
DONE clipping path is double applying parent path transform
DONE bug: NONE of the interfaces are initializing shortcuts
DONE bug: DocumentExportConfig subclasses need duplicate()
DONE directory reorganization
DONE ui/ <-- purely ui elements
DONE core/ <-- implies isolating core functions
DONE etc
DONE save as should default to same directory as existing file
DONE save as should change save/import/export/current directory to that directory
DONE bug: crash! import images, select image. boom!
DONE bug: switching export types in export dialog not clearing extra fields
DONE icon generation trouble spots: LaidoutIcon.png has wrong bounds, cut in half p3m1 p6 circular_rm 101 icons in main icons.svg:
DONE old, Inkscape .92: 8.5 minutes
DONE new, Laidout: 39 seconds !!!
DONE new new: 3.1 seconds!!!!
DONE all images: 203 icons, 39 seconds!
DONE still to optimize: render to single image, image subset, save that
DONE laidout shell command: Laidout.BuildIcons(["icons/icons.svg","icons/icons-tiling.svg","../laxkit/lax/icons/icons.svg"],
grid_cell_size = .5,
output_px_size = 24,
DONE bug: patchinterface point select when object transform not identify broken
DONE detect when a resource section is ONLY built in ones, and don't output that section on save
DONE export ranges should accept "1-4, 6, 20-25" and "5-1"
DONE for range on import/export, should have a range parser that accepts unconnected ranges, ie "2,4, 5-10"
DONE perhaps laidout configure should call laxkit configure if it thinks laxkit is not configured yet
DONE Be able to create empties
DONE bug: filters repeatedly writing \"\"\"\" reading in quoted names?
DONE don't allow reparent to a child!! or reparent as appropriate
DONE bug: ImagePatchData crashes in preview generation
DONE add FontValue
DONE bug: experimental in laidoutrc is ignored
DONE MenuInfo AddItem functions are really terrible overload nightmare, need something simpler like, with no menu combined:
DONE AddItem (const char *name, int id = 0, int info = 0, int where = -1);
DONE AddIconItem (const char *name, LaxImage *icon, int id = 0, int info = 0, int where = -1);
DONE AddToggleItem(const char *name, LaxImage *icon, int id, int info, int state, int where = -1);
DONE bug: tabframe not showing tabs, such as in help window
DONE bug: spread editor, selected pages have almost not noticeable selected emphasis.. line width problem?
DONE (? can't duplicate) bug: svg out, select to files, often the first time goes to file, not files
DONE exportdialog export dialog: incorporate IndexRange
DONE bug: debug registration, cut marks, trim marks
DONE custom papergroup, add registration/bars/, can't move it
DONE can't add cut marks to signatures
DONE bug: menus, left click down, drag to other item, lbup then selects other, but initial still highlighted
DONE object indicator: click on object, does not update selection
DONE bug: space bar for centering not working anymore.. shift-space seems to... fixed somehow
DONE scroll bar zoom handles don't appear to work ?? can't duplicate
DONE bug: calculator: using Math; 1*2*pi -> "Cannot compute with those values"
DONE bug: laxkit, spelled Delaunay wrong
DONE bug: Gradient load in not reading one of the two points
DONE Implement passing on configure options to Laxkit configure
DONE bug: can't duplicate gradient nodes.. causes seg fault
DONE bug: gradients always loading as linear instead of radial
DONE bug: edit singles imposition, change portrait to landscape, apply, ok, now back to portrait, doesn't change!
DONE bug: initial warning about could not load ?? not showing the ??
DONE bug: freehand tool, press any key, crash!!
DONE bug: lax: slight hitch, about 1/4 sec on every button down, XCreateIC() in app->CreateXInputContext() takes forever
DONE bug: scrollbars drawing extra line in bottom half
DONE bug: caption mouse controls don't work on first object??
DONE bug: new doc, pop up spread editor with f3, close the window: crash!
DONE when you try to open something bad with control-o, fails silently.. should show error log
DONE bug: imported white images are not white, very slightly gray. gm load problem? (255) becomes 254 -> LaxCairoImage::createFromData_ARGB8
DONE bug: SliderPopup: select something that has SLIDER_IGNORE_ON_BROWSE, now it isn't ignored anymore
DONE make lax templates be only .h includes, since gcc complains when .cc isn't included anyway...
DONE need to do compile speed tests -> marginally faster as separate, makes binary ~1mb larger for some reason?! dup funcs not optimized out?
DONE BBoxValue: needs width and height functions for convenience in scripting
DONE turning off overlays should revert icon to current tool
DONEish configure still sucks:
DONE laidout configure needs to drive laxkit configure more thoroughly.
DONE automate default laxkit detection, or git download of laxkit if missing
DONE mageia: makedepend trouble? replace with custom script to get rid of x11-dev dependency?
DONE a built in global variable: current frame/time
DONE bug: ImagePatch doing anything with it causes crash.. before crash, image distorts incorrectly
DONE get splash image working..
DONE have an actual splash image shown
DONE bug: expressions are broken again!!
DONE bug: export, switch off current target then back on: error: missing export source!
DONE bug: home and end throw selection bounds out of whack.. try with gradient tool for instance, controls bad until reselect
DONE should not be able to group select an object and another object nested within
DONE utf8string: move semantics to be more efficient
DONE Gradients: gradientinterface
DONE check svg export of gradients with new spread method
DONE should have menu option for radial/linear
DONE bug: radial gradient not loading
DONE SHOWCOLORS should be off by default
DONE bug: Engraver fill, just moving mouse around is rerendering to buffer for preview
DONE bug: Initial zoom for new doc bad. space to center only sporadically works
DONE in singles view, spread number in box should be page label instead of spread number
DONE FindInterface:
DONE pressing enter should trigger last search type (next/prev/all)