4 years agomodes: Fix the (somewhat dubious) compat code
Andrew Chadwick [Mon, 27 Jan 2014 23:03:36 +0000 (23:03 +0000)]
modes: Fix the (somewhat dubious) compat code

The loose match was favouring svg:plus too much, what with it being the
only one left after trying all the exact matches. Just emit the default if
we've no exact match for now.

4 years agolayerproperties: fix slider not updating
Andrew Chadwick [Mon, 27 Jan 2014 18:49:18 +0000 (18:49 +0000)]
layerproperties: fix slider not updating

Fix a silly bug where the panel slider wouldn't update properly until the
properties dialog had been shown.

4 years agopixops: fix missing Saturation blend mode
Andrew Chadwick [Mon, 27 Jan 2014 18:38:49 +0000 (18:38 +0000)]
pixops: fix missing Saturation blend mode

4 years agotdw: draw checks if rendering knocks out the bg
Andrew Chadwick [Mon, 27 Jan 2014 18:31:28 +0000 (18:31 +0000)]
tdw: draw checks if rendering knocks out the bg

Rendering can now knock out the background's alpha with certain composite
modes, but not all. Destination-in, which works well for masking, is one of
these if applied directly on top of the backdrop; the default source-over
is not. MyPaint was however rendering knocked-out backdrops as black, not
alpha checks.

Fix rendering to allow backdrops *and* alpha checks to render at the same
time, with the appropriate test. Masking composite modes now have a more
obvious effect when accidentally (?) applied directly over the background

4 years agopixops: update composite_mode_info table
Andrew Chadwick [Mon, 27 Jan 2014 18:17:37 +0000 (18:17 +0000)]
pixops: update composite_mode_info table

- Use a nicer name for the existing "zero src alpha affects dst" flag

- Add a new flag for whether modes can ever reduce alpha to less than
  the destination layer's. We'll need it for correct knock-out of the
  backdrop by composite modes like destination-in (or clear, copy, ...)

- Update test/table checker.

4 years agolayerswindow: remove unused var
Andrew Chadwick [Mon, 27 Jan 2014 18:01:53 +0000 (18:01 +0000)]
layerswindow: remove unused var

4 years agolayers: add properties dialog with advanced tab
Andrew Chadwick [Mon, 27 Jan 2014 02:40:43 +0000 (02:40 +0000)]
layers: add properties dialog with advanced tab

Also adds a common place for GUI data objects which affect the current
layer when manipulated.

4 years agogroup isolation: debounce command
Andrew Chadwick [Mon, 27 Jan 2014 02:40:10 +0000 (02:40 +0000)]
group isolation: debounce command

4 years agolayerswindow: helpers: consolidate, remove unused
Andrew Chadwick [Thu, 23 Jan 2014 20:41:55 +0000 (20:41 +0000)]
layerswindow: helpers: consolidate, remove unused

4 years agoresources: new edit & doc properties icons
Andrew Chadwick [Thu, 23 Jan 2014 20:41:13 +0000 (20:41 +0000)]
resources: new edit & doc properties icons

4 years agolayerswindow: use layer class specific UI XML
Andrew Chadwick [Thu, 23 Jan 2014 20:31:27 +0000 (20:31 +0000)]
layerswindow: use layer class specific UI XML

Use layer class specific UI XML for the popup menu. Not every type of layer
permits every action.

4 years agolayers: fix group redraw glitch
Andrew Chadwick [Thu, 23 Jan 2014 20:23:56 +0000 (20:23 +0000)]
layers: fix group redraw glitch

Fix a glitch when calculating the redraw bounding box for a layer group.
Need to acknowledge the layer's own compositing mode too.

4 years agoisolated groups: fix, add minimal UI, load/save
Andrew Chadwick [Wed, 22 Jan 2014 01:32:45 +0000 (01:32 +0000)]
isolated groups: fix, add minimal UI, load/save

Implement compositing-1's layer stacking model more correctly, and make it
accessible to the user:

- Layer isolation is now off (or rather, "auto") by default
- The forced isolation="isolated" flag is now saved and loaded to ORA
- Added some simple, temporary UI for it.


4 years agodrawwindow: fix scratchpad exceptions
Andrew Chadwick [Mon, 20 Jan 2014 20:23:30 +0000 (20:23 +0000)]
drawwindow: fix scratchpad exceptions

Fix a pair of related exceptions when managing the scratchpad.

4 years agofilehandling: fix exception in File→New
Andrew Chadwick [Sun, 19 Jan 2014 19:55:15 +0000 (19:55 +0000)]
filehandling: fix exception in File→New

4 years agolayers: preview layer compositing
Andrew Chadwick [Sat, 18 Jan 2014 03:49:47 +0000 (03:49 +0000)]
layers: preview layer compositing

When a layer blinks, show it with normal blend mode, composite mode, and
opacity for the duration of the blink. Serves the purpose of showing what a
layer *really* contains when moving around.

When previewing or soloing a layer in a substack, ensure that parent layers
are all included in the explicit rendering list, but aren't declared as the
one being previewed.

Layer solo mode is nice for editing masks, so maybe solo mode should render
similarly to the blink state too?

4 years agolayer: fix layer property redraw glitches
Andrew Chadwick [Sat, 18 Jan 2014 01:26:30 +0000 (01:26 +0000)]
layer: fix layer property redraw glitches

Fix glitches outside the data bounding box when redrawing an entire layer
due to changing global layer properties like its opacity.

Same thing for clearing a layer.

4 years agocompositing: fix destination-over rendering bug
Andrew Chadwick [Sat, 18 Jan 2014 01:25:29 +0000 (01:25 +0000)]
compositing: fix destination-over rendering bug

Correct typo.

4 years agolayers: composite/blend modes: UI, save+load
Andrew Chadwick [Fri, 17 Jan 2014 20:44:31 +0000 (20:44 +0000)]
layers: composite/blend modes: UI, save+load

Implement saving and loading of "blend" and "composite" XML attributes
according to the OpenRaster proposal.

Add some UI for setting the composite mode. We could do with a simpler way
of setting a layer as a mask / adding a mask to a layer than expecting the
user to know what "-in" and "-out" compositing modes do.

Redraws need fixing: if a zero-alpha src nevertheless affects the backdrop
when compositing, the entire canvas will need redrawing when anything
changes that globally affects how the layer renders. In this case, we can't
just limit it to the layer bbox.

4 years agoblend/composite: split up operations, add compops
Andrew Chadwick [Fri, 17 Jan 2014 03:41:30 +0000 (03:41 +0000)]
blend/composite: split up operations, add compops

Split compositing out of blending, to allow different modes to be invoked
from python code for each stage. Experimental layer mask blending will need
source-in; not sure how necessary the others will be, but implemented for
completeness anyway.


Old template functor code replaced with inline functions and pair of big
inline switcheroos. Not every new composite mode allows the old shortcut of
skipping empty source tiles and pixels, so add an experimentally derived :)
lookup table detailing which compositing modes we can use this hack for.

Just needs GUI code writing now, and support in the loader, but this can be
played with.

4 years agolayers window: add context menu
Andrew Chadwick [Mon, 13 Jan 2014 00:57:04 +0000 (00:57 +0000)]
layers window: add context menu

Add a context menu which allows layer commands to be issued by
right-clicking in the layers list (or tree).

4 years agoVarious string and doc fixes
Andrew Chadwick [Mon, 13 Jan 2014 00:54:51 +0000 (00:54 +0000)]
Various string and doc fixes

Rename the background toggle to "Show Background". This is now rather
relevant for merge though, so maybe it should be "Use Background"?

Minor __repr__ and docstring changes.

4 years agoTrim Layer: convert to path-based API
Andrew Chadwick [Mon, 13 Jan 2014 00:53:57 +0000 (00:53 +0000)]
Trim Layer: convert to path-based API

Update the Trim Layer command to use paths too.

4 years agoNormalize Layer Mode: convert to path-based API
Andrew Chadwick [Mon, 13 Jan 2014 00:51:07 +0000 (00:51 +0000)]
Normalize Layer Mode: convert to path-based API

Update the API for the old Convert Layer Mode. "Normalize" sounds a little
better to me, so rename it too.

Do slightly more in the internal function call rather than the undo stack
command, and don't compose commands together.

4 years agoMerge Down: convert to new path-based API
Andrew Chadwick [Mon, 13 Jan 2014 00:46:15 +0000 (00:46 +0000)]
Merge Down: convert to new path-based API

Update Merge Down command to use paths, and not to not use composition in
its undo stack object.

The old Merge Down is *highly* contextual in the new model, so reflect that
in the command's status.

4 years agoSave as PNG: simplify, remove use of merge_into()
Andrew Chadwick [Mon, 13 Jan 2014 00:11:11 +0000 (00:11 +0000)]
Save as PNG: simplify, remove use of merge_into()

Pass through a background parameter when saving too (just like the
thumbnailing fix).  Layer merging is not too finicky about layers having
backing surfaces to be used for anything other than the user-facing

4 years agoLayer modes: add to the main menu
Andrew Chadwick [Sun, 12 Jan 2014 15:45:26 +0000 (15:45 +0000)]
Layer modes: add to the main menu

4 years agoNFC: whitespace tweaks/dead code removal/add docs
Andrew Chadwick [Sun, 12 Jan 2014 15:38:17 +0000 (15:38 +0000)]
NFC: whitespace tweaks/dead code removal/add docs

4 years agofill: rework Sample Merged for new layer stack API
Andrew Chadwick [Thu, 9 Jan 2014 12:18:12 +0000 (12:18 +0000)]
fill: rework Sample Merged for new layer stack API

Just doing a big pile of Merge Downs is not the same thing as compositing a
tree-structured layers stack properly. It's inefficient too, for flood
fill. Instead, composite the tiles that flood_fill() needs to sample from
using a temporary on-demand adaptor, caching the readonly source tiles for
efficiency when fills reenter already visited tiles.

Abstract out the main flood_fill() routine so it isn't tied to a particular
source surface implementation.

Layer stacks can now be flood_fill()ed into another layer (although they
don't support read+write tile access), so Sample Merged just becomes a side
effect of using the root layer stack as source.

4 years agoNFC: docs, comments and whitespace
Andrew Chadwick [Thu, 9 Jan 2014 02:18:01 +0000 (02:18 +0000)]
NFC: docs, comments and whitespace

4 years agocommand: remove unused code
Andrew Chadwick [Thu, 9 Jan 2014 02:07:34 +0000 (02:07 +0000)]
command: remove unused code

ReorderSingleLayer was replaced by layer bubbling commands.

4 years agothumbnailing: allow backgroundless thumbnails
Andrew Chadwick [Thu, 9 Jan 2014 00:01:50 +0000 (00:01 +0000)]
thumbnailing: allow backgroundless thumbnails

Fix the thumbnail generator not creating backgroundless thumbnails for
backgroundless save modes.

No longer deprecate doc.render_thumbnail() - it's a convenient shorthand
given that only the model document has any idea of what the frame size is.

Slight rendering API change to support a yes/no/state-based rendering of
the doc background. We don't need to render over custom background tiles
any more.

4 years agoUpdate some commands to use the path-based API
Andrew Chadwick [Wed, 8 Jan 2014 23:56:30 +0000 (23:56 +0000)]
Update some commands to use the path-based API

- pick layer+stroke
- rename layer
- layer visibility & locked flags
- layer compositing

4 years agofilehandling: update layer iteration API
Andrew Chadwick [Wed, 8 Jan 2014 02:05:22 +0000 (02:05 +0000)]
filehandling: update layer iteration API

4 years agolayer stack: set-opacity fixes
Andrew Chadwick [Wed, 8 Jan 2014 02:03:02 +0000 (02:03 +0000)]
layer stack: set-opacity fixes

Fix opacity changes not updating the canvas for layer groups.

Fix SetLayerOpacity description.

Update SetLayerOpacity to use the new path-based API.

4 years agotoolbar style fixes; use inline-toolbar for layers
Andrew Chadwick [Tue, 7 Jan 2014 21:36:44 +0000 (21:36 +0000)]
toolbar style fixes; use inline-toolbar for layers

Style these common UI parts consistently, and provide suitable hints to
theme engines.

Add some generic list manipulation icons.

Simplify the layers tool's icons hugely. We have enough context to do this,
at least here.

4 years agoapp: use a less glaringly white bg by default
Andrew Chadwick [Tue, 7 Jan 2014 02:08:10 +0000 (02:08 +0000)]
app: use a less glaringly white bg by default

Remove the default shipped "default.png" for now, and pick a default bg
colour based on how bright the UI is assumed to be, but not so dark that if
we get it wrong the bg looks strange.

I dunno. Maybe we should use an actual paper texture out of the box? Maybe
something subtly off-grey and polychrome so that users can experiment with
colorize etc.

4 years agolayerswindow: fix exception with anon layers
Andrew Chadwick [Tue, 7 Jan 2014 01:44:08 +0000 (01:44 +0000)]
layerswindow: fix exception with anon layers

+ remove some debugging cruft elsewhere

4 years agolib.command: sectionify
Andrew Chadwick [Tue, 7 Jan 2014 00:45:21 +0000 (00:45 +0000)]
lib.command: sectionify

4 years agogui.document: comment and document all the things
Andrew Chadwick [Tue, 7 Jan 2014 00:45:04 +0000 (00:45 +0000)]
gui.document: comment and document all the things

4 years agostategroup: derive from object
Andrew Chadwick [Tue, 7 Jan 2014 00:44:40 +0000 (00:44 +0000)]
stategroup: derive from object

4 years agogui.document: rename some internal methods
Andrew Chadwick [Tue, 7 Jan 2014 00:43:31 +0000 (00:43 +0000)]
gui.document: rename some internal methods

4 years agogui.document: rename layer above/below
Andrew Chadwick [Tue, 7 Jan 2014 00:39:32 +0000 (00:39 +0000)]
gui.document: rename layer above/below

The old names (LayerFG/LayerBG) were a bit opaque.

4 years agolayer numbering & construction fixes
Andrew Chadwick [Mon, 6 Jan 2014 19:52:43 +0000 (19:52 +0000)]
layer numbering & construction fixes

Update how newly created layers receive names and numbers.

Make unique name assignment for layers more reliable. Names don't
technically have to be unique in OpenRaster, but it's better if they are.

Split out vector (SVG) layers to their own class.

Remove old nameless layer pseudo-name code, and assign anonymous layers a
name whenever the UI needs one.

Layers window now uses italics for sub-stacks, or "Groups" in user-parlance.

4 years agoMerge branch 'master' into layer-enhancements-wip
Andrew Chadwick [Sun, 5 Jan 2014 21:21:40 +0000 (21:21 +0000)]
Merge branch 'master' into layer-enhancements-wip

4 years agoprefs: UI updates; large toolbar icons by default
Andrew Chadwick [Sun, 5 Jan 2014 17:38:10 +0000 (17:38 +0000)]
prefs: UI updates; large toolbar icons by default

Space out the prefs window a bit more, and add an explanatory note to the
bottom of the View page telling users they'll have to restart to see the
icon size and dark theme variants.

The "large" (24x24, same size as before) icons are prettier, so turn them
on by default. There is a known problem with Ubuntu 12.04 LTS (and similar
versions of GTK) where larger symbolic icons do not render correctly. This
can be worked around by upgrading or by selecting small icons.

4 years agoicons: some updates
Andrew Chadwick [Wed, 20 Nov 2013 15:07:08 +0000 (15:07 +0000)]
icons: some updates

4 years agoresources: replace stock with named symbolic icons
Andrew Chadwick [Fri, 8 Nov 2013 17:39:16 +0000 (17:39 +0000)]
resources: replace stock with named symbolic icons

4 years agoprefs: add dark theme variant, toolbar size config
Andrew Chadwick [Fri, 8 Nov 2013 17:34:11 +0000 (17:34 +0000)]
prefs: add dark theme variant, toolbar size config

4 years agoprefs: move slowness note to tooltip
Andrew Chadwick [Fri, 8 Nov 2013 17:33:16 +0000 (17:33 +0000)]
prefs: move slowness note to tooltip

4 years agotoolbar: reorganize tools
Andrew Chadwick [Sun, 5 Jan 2014 20:08:45 +0000 (20:08 +0000)]
toolbar: reorganize tools

- Don't show NormalBlendMode since eraser, lock alpha etc. enable that mode
  when they're toggled off.
- Blend modes fancier than eraser off by default.
- Line modes on by default.

4 years agotoolbar: remove brush settings dropdown, move cmds
Andrew Chadwick [Fri, 8 Nov 2013 17:14:15 +0000 (17:14 +0000)]
toolbar: remove brush settings dropdown, move cmds

Remove the brush settings dropdown, since all its knobs and buttons have
homes elsewhere now.

The options panel is now available on the toolbar.

Add pressure gain to options panel for freehand and line modes. Also add
translator notes for the drawing mode sliders in the options panel.

4 years agotoolbar: put blendmodes on the toolbar by default
Andrew Chadwick [Fri, 8 Nov 2013 17:07:49 +0000 (17:07 +0000)]
toolbar: put blendmodes on the toolbar by default

Move eraser mode to the toggleable section once again, but have that
section be on by default.

We probably want a better way of doing this in the long run, however.

4 years agotoolbar: remove line mode dropdown
Andrew Chadwick [Fri, 8 Nov 2013 17:04:28 +0000 (17:04 +0000)]
toolbar: remove line mode dropdown

Options panel now takes care of the pressure curve.

These are far better done as side-by-side tools on the toolbar.

4 years agovarious panels: use symbolic icons for tabs
Andrew Chadwick [Fri, 8 Nov 2013 16:59:07 +0000 (16:59 +0000)]
various panels: use symbolic icons for tabs

4 years agotopbar: use symbolic icons for fullscreen menu
Andrew Chadwick [Fri, 8 Nov 2013 16:58:17 +0000 (16:58 +0000)]
topbar: use symbolic icons for fullscreen menu

4 years agoglade: 16px icons in footer, better spacing
Andrew Chadwick [Fri, 8 Nov 2013 16:56:49 +0000 (16:56 +0000)]
glade: 16px icons in footer, better spacing

4 years agoworkspace: FIXME use 16x16 for the tab size
Andrew Chadwick [Fri, 8 Nov 2013 16:55:29 +0000 (16:55 +0000)]
workspace: FIXME use 16x16 for the tab size

Some of the icons used here will be symbolic.

4 years agoresources: use basic file and edit op icons
Andrew Chadwick [Fri, 8 Nov 2013 17:57:13 +0000 (17:57 +0000)]
resources: use basic file and edit op icons

4 years agoOpenRecent: define in XML, use symbolic icon
Andrew Chadwick [Fri, 8 Nov 2013 18:01:24 +0000 (18:01 +0000)]
OpenRecent: define in XML, use symbolic icon

4 years agostyle: EXPERIMENTAL configurable toolbar icon size
Andrew Chadwick [Mon, 4 Nov 2013 02:56:50 +0000 (02:56 +0000)]
style: EXPERIMENTAL configurable toolbar icon size

Symbolic icons are designed for 16x16, but we'd like to use them on the
toolbar too, for which 24x24 is optimal. Users also like to see the 16x16
size instead, and cram more onto the bar. Allow the size to be configured
via a prefs setting (no UI for it right now).

4 years agostyle: EXPERIMENTAL use dark GTK3 theme variants
Andrew Chadwick [Mon, 4 Nov 2013 02:54:38 +0000 (02:54 +0000)]
style: EXPERIMENTAL use dark GTK3 theme variants

Allow use of GTK3 theme dark variants (if they exist) via a prefs setting.
No UI written for this yet.

4 years agovarious icons: use symbolic
Andrew Chadwick [Mon, 4 Nov 2013 02:53:09 +0000 (02:53 +0000)]
various icons: use symbolic

Use symbolic icons for various icons, and remove old stock definitions for
them since we're moving away from that model.

4 years agofooter/picker: use symbolic icons
Andrew Chadwick [Mon, 4 Nov 2013 02:52:12 +0000 (02:52 +0000)]
footer/picker: use symbolic icons

4 years agofullscreen: use symbolic icons
Andrew Chadwick [Mon, 4 Nov 2013 02:50:42 +0000 (02:50 +0000)]
fullscreen: use symbolic icons

4 years agoundo/redo: use symbolic icons
Andrew Chadwick [Mon, 4 Nov 2013 02:48:47 +0000 (02:48 +0000)]
undo/redo: use symbolic icons

Have to present different ones for LTR and RTL modes.

4 years agoblend modes: move to XML; use symbolic icons
Andrew Chadwick [Mon, 4 Nov 2013 02:42:55 +0000 (02:42 +0000)]
blend modes: move to XML; use symbolic icons

Move the brush blend mode actions to resources.xml.

Use symbolic icons for brush blend modes.

4 years agolayers panel: use symbolic locked/visible icons
Andrew Chadwick [Fri, 8 Nov 2013 17:48:58 +0000 (17:48 +0000)]
layers panel: use symbolic locked/visible icons

Classic use of symbolic icons here. Use the new symbolic icons.

4 years agosymbolic icons: extract from contact sheet
Andrew Chadwick [Fri, 8 Nov 2013 17:53:56 +0000 (17:53 +0000)]
symbolic icons: extract from contact sheet

4 years agosymbolic icons: add contact sheet & extractor
Andrew Chadwick [Fri, 8 Nov 2013 17:52:02 +0000 (17:52 +0000)]
symbolic icons: add contact sheet & extractor

4 years agoLayerStack: add support for saving
Andrew Chadwick [Sun, 5 Jan 2014 03:08:24 +0000 (03:08 +0000)]
LayerStack: add support for saving

Layers are now responsible for making XML elements when they save, and for
recursively saving themselves if they happen to be stacks.

Saved filenames in OpenRaster data/ dirs are changed by this commit: the
names now reflect the stack structure, to ensure uniqueness.

4 years agoLayerStack: implement blit_tile_into/save_as_png()
Andrew Chadwick [Sun, 5 Jan 2014 03:04:12 +0000 (03:04 +0000)]
LayerStack: implement blit_tile_into/save_as_png()

Support exporting.

4 years agopixbufsurface: add exception handling
Andrew Chadwick [Sun, 5 Jan 2014 02:57:53 +0000 (02:57 +0000)]
pixbufsurface: add exception handling

The C++-side code doesn't report Python exceptions generated when blitting
into scanlines: it just crashes. Wrap blit_tile_into() calls inside the
generator used by fastpng to log the exception even if we can't raise it
normally at this point.

4 years agolayer: NFC: nerf flood-fill base impl. + comments
Andrew Chadwick [Sun, 5 Jan 2014 02:55:12 +0000 (02:55 +0000)]
layer: NFC: nerf flood-fill base impl. + comments

Base layer class implementations for things that make no sense for certain
derived classes shouldn't raise an exception, even if they're hidden via

Various doc comment and whitespace changes.

4 years agoduplicate layer: extend support to sub-stacks
Andrew Chadwick [Sun, 5 Jan 2014 02:41:01 +0000 (02:41 +0000)]
duplicate layer: extend support to sub-stacks

Allow sub-stacks to be cloned with Duplicate Layer.

Simplify the undo stack command for Duplicate Layer to work with layer
paths only, and use only the current layer.

Add an interface for giving a layer a unique name, and begin using it when

Semantics have changed: snapshots must now save and restore everything the
user would expect in Duplicate Layer, including the name.

4 years agolayer: bubbling up and down from commands
Andrew Chadwick [Fri, 3 Jan 2014 21:08:23 +0000 (21:08 +0000)]
layer: bubbling up and down from commands

Allow layers to be moved up and down through the tree structure from
keypress and UI button commands.

Update some state tracking.

Better to use a generic "layers" icon of some kind for sub-stacks, and draw
expanders and lines. Some themes have tiny expander arrows, so still let
LayerStack's special action perform an expand/collapse toggle.

Remove some warnings and debugging cruft.

4 years agolayer walking: use postorder traversal for up/down
Andrew Chadwick [Thu, 2 Jan 2014 21:31:19 +0000 (21:31 +0000)]
layer walking: use postorder traversal for up/down

When calculating above/below, traverse in the same way as a GUI using a
TreeView of some kind, i.e. postorder in the bottom-to-top ordering. This
makes PageUp/PageDown much nicer to use.

4 years agodoc: fix selection bug
Andrew Chadwick [Fri, 3 Jan 2014 11:43:22 +0000 (11:43 +0000)]
doc: fix selection bug

We can't ever afford to be without a valid current layer, so make
noninteractive calls to select_layer() always set a current layer
immediately while still deferring the notification.

4 years agolayer loading: support sub-stacks
Andrew Chadwick [Thu, 2 Jan 2014 21:08:55 +0000 (21:08 +0000)]
layer loading: support sub-stacks

Delegate loading of layer stacks to the layer classes.

4 years agolayers window: various look and feel tweaks
Andrew Chadwick [Wed, 1 Jan 2014 00:45:05 +0000 (00:45 +0000)]
layers window: various look and feel tweaks

Eye and lock icon to the right hand side. Type icon or expander in a column
to the left.

Allow layers to invoke a type-specific action when their type icon is
clicked on. The LayerStack class now expands or collapses itself as its
action so that its expander icon can occupy the same column as other
layers' type action icon.

Sizing and ellipsis tweaks.

Add expander icons.

4 years agolayer root stack canonpath(): fix error reporting
Andrew Chadwick [Tue, 31 Dec 2013 14:02:09 +0000 (14:02 +0000)]
layer root stack canonpath(): fix error reporting

4 years agolayer stack move: fix so that it actually works
Andrew Chadwick [Tue, 31 Dec 2013 14:00:43 +0000 (14:00 +0000)]
layer stack move: fix so that it actually works

4 years agolayerswindow: use a tree-based view of the stack
Andrew Chadwick [Sun, 29 Dec 2013 22:03:46 +0000 (22:03 +0000)]
layerswindow: use a tree-based view of the stack

Use a GtkTreeView rather than a GtkListView for the layer stacking tree.
Update the associated display-side cache objects accordingly.

Beginnings of drag-and-drop for reparenting.

Various method renames.

It's only possible to move a single layer at a time with any UI, so lose
the lazy "assign this new order" command in the backend.

Use an icon to denote sub-stacks.

Implement compositing of sub-stacks.

Moving a layer "into" another layer may result in both layers being
children of a newly created parent. All undoable.

4 years agolayer: remove debugging statements, equality+truth
Andrew Chadwick [Sun, 29 Dec 2013 21:56:16 +0000 (21:56 +0000)]
layer: remove debugging statements, equality+truth

4 years agolayerswindow: convert to GTK3
Andrew Chadwick [Tue, 24 Dec 2013 00:09:37 +0000 (00:09 +0000)]
layerswindow: convert to GTK3

4 years agolayer: make code clearer
Andrew Chadwick [Fri, 20 Dec 2013 17:35:17 +0000 (17:35 +0000)]
layer: make code clearer

Document the relationship between effective_opacity() and composite_tile()
more clearly.

4 years agolayers window: fix behavioural regression
Andrew Chadwick [Fri, 20 Dec 2013 17:20:54 +0000 (17:20 +0000)]
layers window: fix behavioural regression

- Check we're not already updating, to ensure stability of the list
- Now consume every click in the listview: much more stable
- Normal clicks on any eye in layer-solo mode cancel the mode
- Remove the cursor-changed handler, since it's not directly keyboard
  navigable. There are (or should be) keystrokes or bindable actions for
  every command which affects the list.

4 years agolayer stacks: begin implementing & migrating
Andrew Chadwick [Thu, 19 Dec 2013 22:31:51 +0000 (22:31 +0000)]
layer stacks: begin implementing & migrating

Begin implementing layer stacks and migrating to a tree-based layer model.

- add LayerStack class, for use in sublayers
- implement a RootLayerStack, and make lib.document.Document render via it
- begin migrating layer indices from a flat model to a path-based model
- implement a backwards-compatibility hack for flat layer addressing

4 years agolayer: refactor: add a largely no-op base class
Andrew Chadwick [Thu, 19 Dec 2013 21:18:27 +0000 (21:18 +0000)]
layer: refactor: add a largely no-op base class

- add a largely nonfunctional LayerBase & derive from it
- base class now defines and documents the common layer API
- move Surface-backed details to a minimal SurfaceBackedLayer
- make this the class for overlay layers
- supercalls via super(), for preference

4 years agoflood-fill: move implementation to PaintingLayer
Andrew Chadwick [Thu, 19 Dec 2013 21:03:11 +0000 (21:03 +0000)]
flood-fill: move implementation to PaintingLayer

Only painting layers can be usefully flood filled, so have the base
implementation do nothing.

4 years agohide-layers-above: remove functionality
Andrew Chadwick [Thu, 19 Dec 2013 19:43:34 +0000 (19:43 +0000)]
hide-layers-above: remove functionality

The HideLayersAbove toggle complicates the view handling code greatly, and
may be better handled by toggling layer groups' visibility on and off in
future. Therefore remove it.

Layer Solo is still present, and will probably remain.

4 years agostrokemap/layer interaction: better encapsulation
Andrew Chadwick [Tue, 17 Dec 2013 21:17:55 +0000 (21:17 +0000)]
strokemap/layer interaction: better encapsulation

Allow strokemaps to render to surfaces, and add a load_from_strokemap()
method to Layer which uses it. Invoke when blinking the layer.

4 years agolayer: add some test framework stuff
Andrew Chadwick [Tue, 17 Dec 2013 21:10:25 +0000 (21:10 +0000)]
layer: add some test framework stuff

4 years agofill: fix to allow testing tdw interactively again
Andrew Chadwick [Wed, 11 Dec 2013 02:03:10 +0000 (02:03 +0000)]
fill: fix to allow testing tdw interactively again

Fix an import order issue when running gui/ from the
command line for testing.

4 years agoobservable: removal, iteration, copying
Andrew Chadwick [Tue, 10 Dec 2013 02:11:28 +0000 (02:11 +0000)]
observable: removal, iteration, copying

- Support removal of a registered observer using -=
- Add iteration across registered observers
- Add support for copy() and deepcopy() of observed objects which retains
  the same observers

4 years agorendering: refactor bg, add isolated render
Andrew Chadwick [Wed, 4 Dec 2013 02:25:17 +0000 (02:25 +0000)]
rendering: refactor bg, add isolated render

- Remove the hardcoded checkerboard background hack.
- Replace with isolated rendering over a cached Cairo checkerboard pattern.
- Move Layer Solo, Layers Above, and "Layerblink" state to the model. Even
  if they're not saved, they're needed for rendering, and rendering is an
  unchanging, GUI-independent aspect of the model.
- Recast "layer blink" as layer preview. Really just a temporary
  layer-solo without any major state notifications.
- Add a Show Background toggle, and allow access to the background chooser
  from the Layers dockable panel.
- Shift and Ctrl-click in the Layers dockable now toggle Layer Solo and
  Layers Above Current. These modes now show in the dockable too.

4 years agofilehandling, layer: better fix for loading
Andrew Chadwick [Wed, 4 Dec 2013 02:22:27 +0000 (02:22 +0000)]
filehandling, layer: better fix for loading

4 years agocommand: bugfix SelectLayer
Andrew Chadwick [Tue, 3 Dec 2013 02:39:07 +0000 (02:39 +0000)]
command: bugfix SelectLayer

Can't make a weak proxy to a weak proxy, so if we compose commands like
this, the composition has to be done in the construction phase.

4 years agolayer: continue refactoring
Andrew Chadwick [Tue, 3 Dec 2013 02:19:46 +0000 (02:19 +0000)]
layer: continue refactoring

- Move merging funcs to the base class, and extend as necessary in
- Define snapshot classes, and start considering cleanup for external
- External-layer snapshots perform versioning. Kinda heavyweight and
  inefficient currently - copy() could shortcut this.
- Permit background layer to be initialized from RGB triples.

4 years agoVarious doc and comment fixes
Andrew Chadwick [Tue, 3 Dec 2013 02:13:49 +0000 (02:13 +0000)]
Various doc and comment fixes