- Now we have a view::RealRange (with real frames, fr_t) and a
view::VirtualRange (with virtual frames, columns, col_t). The timeline
uses a virtual range internally and makes the conversion to a real
range when it's appropiated (e.g. to execute an old DocRange operation
using ranges with real frames).
- Added Context::range() to access to the real selected range
instead of accessing directly to the timeline. In this way commands
that were using the DocRange can access to the real range using the
context, instead of the timeline's virtual range.
- Added a new ShowTagTimelineAdapter that can show just one tag in the
timeline filtering out/hiding all other frames/tags.
We need an extra code layer (view::TimelineAdapter) to convert between
old "real frames" (view::fr_t = doc::frame_t) and new "virtual
frames" (view::col_t). These new types are strongly-typed ints (enum
classes).
* Moved app::DocRange to view::Range
* Moved range_utils to view/cels.cpp
* Moved layer_utils to view/layers.cpp
* Created more functions in app::Site to access selected cels
(they use the functions from view/cels.h)
* Re-use the ToolStrip widget/logic to show the list of hidden
tools. This fixes some issues with the size/alignment of the group
and keep consistent with the current look & feel.
* Simplify ToolStrip logic using a vector of tools inside instead of
iterating the whole toolbox/filtering the group.
* Fixed the "overflow" button style to be highlighted when we hover
the mouse on it.
* Don't create one "Show more..." tooltip window for each mouse move
above the button.
* Show tooltips for tools inside the overflow popup window.
* Clicking the button again closes the group.
GitHub doesn't require this .git at the end of the URL but it's the
URL they gave in the "Clone" button when the HTTPS protocol is
selected. Just to keep all URLs consistent.
Added symmetry UI buttons, 45 and -45 degrees axis.
Now are possible activate all four symmetries, both
diagonal symmetries, individual diagonal symmetry, and
the old horizontal/vertical combinations.
Also added symmetry to image brushes (prior to this fix:
only the brush position was symmetrical, the image brush
was not flipped).
Now each widget is responsible to enable/disable its own HAS_MOUSE flag
in response to the kMouseEnter/Leave message received. Also there is no
need to iterate over the parents since these messages are propagated
to the parent
Instead of wrapping the MouseEnter and MouseLeave OS events handling
inside a UI CallbackMessage, we now enqueue the corresponding
kMouseEnterMessage and kMouseLeaveMessage
Callback messages were not being handled and since MouseEnter and
MouseLeave events were wrapped into CallbackMessages they were lost
and so never got called
This could happen when painting text with CHARWRAP, where we removed
byte by byte from the end of the string, instead of removing (or
adding) well-formed UTF-8 string spans.
Improves the way we can write text to search a font, use up/down keys
to navigate through the font list, and use Enter/Esc keys to select
the font and go back to the text box.
Added REPORT_MOUSE/PAINT/TIMER_MESSAGES macros, and change _EVENTS to
_MESSAGES to avoid confusion with the current terminology.
The output string for each message was also simplified.