On Windows XP, after creating the HWND, when we add the scrollbars with
SetScrollInfo() in WinWindow<T>::createHwnd(), it generates a WM_SIZE,
which is calling resizeImpl(). And as SkiaWindow expects an already
created SkiaDisplay on SkiaWindow::resizeImpl(), the program crashes.
The timeline must update its internal range before it fires an active
site changed (Editor::setFrame/Layer()). So
ContextObserver::onActiveSiteChange() observers can access the updated
timeline range.
This is needed if we change the user data color for some cels and we're
navigating the Undo History to undo/redo those changes. In this way we
see how the user data is updated in the Timeline.
* Enable cel opacity slider when any transparent cel is selected
(it doesn't matter if there are cels from a background layer selected
too, the slider must be enabled for the transparent ones)
* Enable editing user data when we have a range of cels selected
(it doesn't matter if the active cel is nullptr, we've to enable
editing user data if there is any selected cel in the timeline range)
As .dmp files are useful only for official releases (i.e. when we have the
compiled .exe+.pdb), this is an alternative message to stop receiving
.dmp files at support@aseprite.org that cannot be used to debug a crash.
Steps to reproduce the crash without this patch:
1. Create a new sprite
2. Copy the first cel from the Timeline
3. Create a new sprite
4. Close the first sprite
5. Paste the copied cel to the second sprite
The program crashed because the original sprite is invalid now. With this
patch we observe the main DocumentsObserver to check when the document is
closed/destroyed. In this way we can invalidate the clipboard content.
With this change we are removing specific code to scroll the Editor widget.
Now if we use Editor::setEditorScroll() to scroll it should work as
View::setViewScroll(). In this way we remove the ugly "blitValidRegion"
parameter from setEditorScroll().
Changes:
* Removed Widget::scrollRegion() because each widget must control
valid/invalid regions after a ui::move_region() in a very specific way
(see View::setViewScroll() or Window::moveWindow)
* Invalidate the whole widget on Widget::setBoundsQuietly()
* Fixed problems blitting invalid regions/not yet updated/painted: using
the new ui::Manager::m_invalidRegion.
* Added View::onSetViewScroll() and View::onScrollRegion()
* Added FileListView to avoid moving the thumbnail region when we scroll
We don't have to close the OS window when its close button is pressed.
We just generate an CloseDisplay event and the client (app/ui layer) must
process it (e.g. check if there are no unsaved changes) and then close
the she::Display manually.