4 years agoframewindow: bugfix frame size edit button
Andrew Chadwick [Sun, 2 Mar 2014 18:21:09 +0000 (18:21 +0000)]
framewindow: bugfix frame size edit button

Bugfix: frame size editor button was displaying pixel sizes even if
the units were something other than pixels.

4 years agocombine-mode strings: rework, add coverage tests
Andrew Chadwick [Thu, 27 Feb 2014 13:28:23 +0000 (13:28 +0000)]
combine-mode strings: rework, add coverage tests

Rework the way the layer combining modes' UI strings are stored in order
to make not having a UI string non-fatal at runtime. This is handy during
development of new modes.

Add a coverage test to spot missing strings.

4 years agolayer: correct spelling for forced-isolation value
Andrew Chadwick [Tue, 18 Feb 2014 14:09:50 +0000 (14:09 +0000)]
layer: correct spelling for forced-isolation value

4 years agolayer model: use Compositing-1's. Add mask modes.
Andrew Chadwick [Tue, 11 Feb 2014 12:27:32 +0000 (12:27 +0000)]
layer model: use Compositing-1's. Add mask modes.

Re-enable the useful group features that OpenRaster 0.0.2 doesn't allow,
like visibility, locking etc.

Implement a useful subset of compositing modes to allow masking, and use an
SVG-like layer stack rendering model similar to that defined by

Masking is achieved by making an isolated group containing a mask layer as
its uppermost layer, and setting the mask layer's mode to "Destination In"
or "Destination Out".  Yes, that's a bit fiddly at the moment. Yes, special
"Masked group" or "Masked layer" classes would probably be more usable.

Update the UI to make all this machinery available to the user.

These new rendering modes can be less efficient than just src-over
compositing on top of a solid background, but expose flags on the C++ mode
objects to allow the Python code to make smart decisions about whether to
skip things or invoke faster code paths.

Add test code for the speedup flags and general error-freeness of the new
layer mode code.

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 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 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 agolayers: allow empty layers to be saved
Andrew Chadwick [Fri, 7 Feb 2014 21:33:31 +0000 (21:33 +0000)]
layers: allow empty layers to be saved

By user request:

Empty layers might express an artist's plans for document structure - which
can be fancier now we have nesting - or working state expressed in names.
Best to retain them when saving.

4 years agoFile→New: fix exception
Andrew Chadwick [Fri, 7 Feb 2014 21:12:24 +0000 (21:12 +0000)]
File→New: fix exception

4 years agodocument: OpenRaster 0.0.2 conformance
Andrew Chadwick [Wed, 5 Feb 2014 01:44:58 +0000 (01:44 +0000)]
document: OpenRaster 0.0.2 conformance

- Declare saved version
- Save fully rendered image to mergedimage.png

4 years agolayer groups: use symbolic icon
Andrew Chadwick [Wed, 5 Feb 2014 00:10:11 +0000 (00:10 +0000)]
layer groups: use symbolic icon

4 years agoOpenRaster conformance: nobble some group features
Andrew Chadwick [Sun, 2 Feb 2014 23:08:30 +0000 (23:08 +0000)]
OpenRaster conformance: nobble some group features

To fully conform to the current OpenRaster draft specification, rendering
flags like opacity or compositeop need to be disallowed on layer stacks,
which implies that layer groups must not render in isolated mode, to use
terminology from the W3C Compositing-1 specification.

For now, since I'd like to get the other parts of this crazy refactor back
into master, we must silently prevent the user from changing, loading,
saving, or seeing certain layer properties if the layer is a layer group.
In other words, turn off the new, useful things that layer groups would
allow until the specification can be updated, a process which will require
agreement from the GIMP and Krita devs.

4 years agocopy: fix copying of layer groups
Andrew Chadwick [Sun, 2 Feb 2014 23:03:49 +0000 (23:03 +0000)]
copy: fix copying of layer groups

Copy wasn't making clipboard images with an alpha channel if the current
layer was a group. Fix by simply asking for alpha.

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 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 [Tue, 4 Feb 2014 00:54:49 +0000 (00:54 +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

4 years agolayer: implement copy(), use for Duplicate Layer
Andrew Chadwick [Thu, 28 Nov 2013 12:40:42 +0000 (12:40 +0000)]
layer: implement copy(), use for Duplicate Layer

Add a generic but customizable copy() method for layers, for use by
DuplicateLayer. Mostly just shorthand for save/load snapshot, but we also
replicate layer flags.

Background layers cannot currently be copy()ed.

Implement save/load snapshot for ExternalLayer so that it can be copied.
The copy and snapshot semantics both demand an independent copy of the
file, so make load_snapshot() perform a copy within the document working

4 years agolayer: rename/refactor some internal methods
Andrew Chadwick [Thu, 28 Nov 2013 12:27:14 +0000 (12:27 +0000)]
layer: rename/refactor some internal methods

Layer's methods for loading its surface from "stuff" are internal, so mark
them as such. Make them just utility methods in the base too.

4 years agocommand & layer: minor bugfixes
Andrew Chadwick [Thu, 28 Nov 2013 12:16:26 +0000 (12:16 +0000)]
command & layer: minor bugfixes

- FloodFill to a new layer now creates PaintingLayers rather than base
  class instances
- Fix layer's __repr__ for the visible flag.

4 years agolayers dialog: show icon for layer type
Andrew Chadwick [Thu, 28 Nov 2013 12:15:03 +0000 (12:15 +0000)]
layers dialog: show icon for layer type

4 years agotiledsurface: indent fix
Andrew Chadwick [Tue, 19 Nov 2013 23:38:31 +0000 (23:38 +0000)]
tiledsurface: indent fix

Tabs -> spaces.

4 years agotiledsurface: don't create mipmap list for bg surf
Andrew Chadwick [Tue, 19 Nov 2013 23:36:08 +0000 (23:36 +0000)]
tiledsurface: don't create mipmap list for bg surf

The background surface uses its own incompatible mipmap implementation, so
skip some unnecessary work when initializing background surfaces. Mark the
internal list as internal to avoid confusion.

4 years agolayers: fillable/paintable capabilities
Andrew Chadwick [Tue, 19 Nov 2013 16:40:33 +0000 (16:40 +0000)]
layers: fillable/paintable capabilities

Expose fillable and paintable capabilities via a class constant, and as a
convenience method on instances for determining whether the layer can
currently perform the action in question.

4 years agolayer: formatting bugfix
Andrew Chadwick [Sun, 17 Nov 2013 21:05:05 +0000 (21:05 +0000)]
layer: formatting bugfix

This bit of code was broken but is currently unused. However the API or the
way layers are arranged may change enough to warrant it one day.

4 years agomodel: distinguish painting-only docs from others
Andrew Chadwick [Sun, 17 Nov 2013 20:29:35 +0000 (20:29 +0000)]
model: distinguish painting-only docs from others

Add a flag describing whether a model should only have painting layers in
its stack (plus the usual backdrop). This sort of model doesn't need to
maintain a temporary directory.

4 years agocommand: invoke base class constructor
Andrew Chadwick [Wed, 13 Nov 2013 12:11:11 +0000 (12:11 +0000)]
command: invoke base class constructor

4 years agocommand: use explicit methods for clearing stacks
Andrew Chadwick [Wed, 13 Nov 2013 12:10:23 +0000 (12:10 +0000)]
command: use explicit methods for clearing stacks

4 years agoNFC: various doc fixes
Andrew Chadwick [Wed, 13 Nov 2013 12:07:53 +0000 (12:07 +0000)]
NFC: various doc fixes

4 years agocommand: improve observer interface for the stack
Andrew Chadwick [Wed, 13 Nov 2013 19:01:41 +0000 (19:01 +0000)]
command: improve observer interface for the stack

A few API changes to the way the command stack works:

 - Replace the observer callback list owned by lib.document with an
   observable event, stack_updated()

 - The stack object now persists for the lifetime of the document, and is
   clear()ed when necessary

4 years agocommand: new-style classes, break a circular ref
Andrew Chadwick [Wed, 13 Nov 2013 16:47:38 +0000 (16:47 +0000)]
command: new-style classes, break a circular ref

Fix up the command stack to use new-style classes.

Break a circular reference loop {doc -> cmdstack -> action -X> doc} with
a weakref.

4 years agoexternal layers: add load from/save to ORA
Andrew Chadwick [Tue, 27 Aug 2013 17:41:20 +0000 (18:41 +0100)]
external layers: add load from/save to ORA

Add a basic OpenRaster load and save subsystem for non-bitmap data which
GdkPixbuf knows how to support. SVG is pretty much the only useful example
of this sort of data right now.

The vague idea here is that past revisions of the external file to be
edited will reside in the layer's private tempdir for the duration of a
session, and that editing will be modal so that MyPaint's undo and redo
work.  However, this isn't set in stone just yet: could add a file watcher
interface instead, at a later date.

4 years agolayer: add utils for loading from GdkPixbuf files
Andrew Chadwick [Tue, 27 Aug 2013 17:31:45 +0000 (18:31 +0100)]
layer: add utils for loading from GdkPixbuf files

Add an internal API for loading layer data from files which GdkPixbuf can
handle. Basically copied here from lib.document, with some API completeness
stuff added in.

4 years agolayer snapshots and trimming: refactor
Andrew Chadwick [Tue, 27 Aug 2013 17:24:34 +0000 (18:24 +0100)]
layer snapshots and trimming: refactor

Move snapshotting and trimming to the base class, in part.
- Split up base and painting layer responsibilities tidily.
- External layers cannot be trimmed usefully, so provide a no-op override.
- Layer snapshots are now to be considered opaque

4 years agolayer ora: load ExternalLayers, allow fail return
Andrew Chadwick [Wed, 13 Nov 2013 20:53:28 +0000 (20:53 +0000)]
layer ora: load ExternalLayers, allow fail return

Wire in the ExternalLayer code for SVG layers.

Also provide a mechanism for layer ORA reader methods to return the fact
that they weren't able to load anything from an open zipfile.

4 years agomodel: working-doc tempdir, and cleanup at exit
Andrew Chadwick [Thu, 14 Nov 2013 02:39:51 +0000 (02:39 +0000)]
model: working-doc tempdir, and cleanup at exit

Add a working-doc tempdir which persists for as long as a document is open,
i.e. from opening one document to opening the next. This tempdir
persists for as long as the undo stack (and its actions) have a meaningful
relationship with the loaded document.

External layers are expected to keep loaded files at various undo points in
the temp dir. It may be useful to add detection and cleanup of unreachable
disk state to things that drop off the undo and redo stacks too, in order
to prevent this area growing too big. This will do for now though.

Automatically clean up this area at application exit, and when
transitioning from one doc to the next. Both are guarded by dialogs.

4 years agonon-painting layers: fix loading, painting
Andrew Chadwick [Tue, 27 Aug 2013 16:57:14 +0000 (17:57 +0100)]
non-painting layers: fix loading, painting

Fixes necessary to support layers which cannot be painted to.
- Reject attempts to paint to layers with no stroke_to() method
- Allow ORAs to be loaded with current layers that don't have a strokemap

4 years agolayer: move symmetry axis to base class
Andrew Chadwick [Tue, 27 Aug 2013 16:51:50 +0000 (17:51 +0100)]
layer: move symmetry axis to base class

Sure, it's pointless for non-painting layers, but the surface
implementation exposes it and so should each layer type that uses surfaces
I guess.

4 years agolayer moves: refactor cleanup(), split+customize
Andrew Chadwick [Tue, 27 Aug 2013 16:45:41 +0000 (17:45 +0100)]
layer moves: refactor cleanup(), split+customize

The cleanup method is now called after everything has been done. This
allows it to be overridden to initiate more events, e.g. moving strokemaps
in later idle routines. Update API docs to reflect this.

Add custom layer move classes for painting layers, and the external layer

4 years agodoc: various NFC changes
Andrew Chadwick [Sun, 25 Aug 2013 19:49:47 +0000 (20:49 +0100)]
doc: various NFC changes

Remove 3 unused methods, add section headings.

4 years agoLayer reordering: rename callback
Andrew Chadwick [Sun, 25 Aug 2013 19:46:23 +0000 (20:46 +0100)]
Layer reordering: rename callback

Let "move" and "translate" refer to moving layers in the x and y
directions, and "reorder" refer to its z-order position.

4 years agolayers refactor: add BackgroundLayer
Andrew Chadwick [Tue, 19 Nov 2013 17:32:32 +0000 (17:32 +0000)]
layers refactor: add BackgroundLayer

The background is now a layer in its own right, albeit outside the layer
stack the user can see.

4 years agolayers refactor: use separate classes
Andrew Chadwick [Tue, 19 Nov 2013 17:18:30 +0000 (17:18 +0000)]
layers refactor: use separate classes

* Use different classes for different types of layer.
* Move OpenRaster saving and loading details to the layer implementations.

4 years agoUpdate README: librsvg dep.; remove gtk3 notes
Andrew Chadwick [Wed, 15 Jan 2014 15:06:45 +0000 (15:06 +0000)]
Update README: librsvg dep.; remove gtk3 notes

Mention librsvg as a runtime dependency. As noted in , the GtkPixbuf loader module is commonly
supplied in a separate optional package, and users will need to make sure
that it's installed in order to get icons now.

Remove the GTK3 notes, since the migration bug has now been closed.

4 years agoImprove GEGL example
Manuel Quiñones [Tue, 14 Jan 2014 19:51:25 +0000 (16:51 -0300)]
Improve GEGL example

By adding the surface node to a graph, the box glitch that appeared
while drawing is gone.

Draw the background as a GEGL node, to show off composition.

4 years agodoc: Update PERFORMANCE with possible GPU-based processing
Jon Nordby [Sun, 12 Jan 2014 21:26:39 +0000 (22:26 +0100)]
doc: Update PERFORMANCE with possible GPU-based processing

4 years agodoc: Update PEFORMANCE with possible mipmapped rendering strategy
Jon Nordby [Sun, 12 Jan 2014 21:12:34 +0000 (22:12 +0100)]
doc: Update PEFORMANCE with possible mipmapped rendering strategy

This idea largely comes from GEGL.

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