Simplified the color selector UI. Now RGB/HSV colors are shown correctly
and a new warning icon/button is visible when the color is not part of
the current palette. This button can be used to quickly add the new entry
to the palette.
- Add ContextBarObserver (and MovingPixelsState implements this interface)
- PixelMovements::discardImage() receives a "commit" flag to do a rollback
of the operation if the user needs it.
- Add red/blue onion skin type
- Add app::calculate_next_frame() function to calculate the next frame
depending of the timeline configuration (loop range, animation direction)
- Add app::finder() to simplify the access to widgets loaded from xml files
- If we use a RGB color in a background layer (indexed image),
and the first palette entry (transparent color) matches that RGB color,
we can use that entry, because this is the background (the transparent
color isn't transparent at all in the background layer).
- If we use the same RGB color in a transparent color, we've to avoid the
transparent color, because the user want to paint with that specific
solid color.
- Palette::findBestfit() receives a mask_index now, so we can find what
color best matches a specific RGB avoiding that specific mask color,
or we can use -1 to use any color (e.g. for background layers).
- Added app::ColorTarget() to simplify and fix color_utils::color_for_layer
and app_get_color_to_clear_layer(), so now we can use the new findBestfit
to return the transparent color for background layers (if a RGB color
matches the transparent color RGB values).
- Removed fixup_color_for_layer/background() functions in color_utils
- Fix NewImageFromMask() to use the mask color to clear the image
- Improve the Editor pen preview (cursor.cpp) to draw the bounds of the
pen when it will paint with the transparent color.
This field is disabled, and the program isn't ready to support less than
256 colors in Indexed mode, so it's better if we remove this field to avoid
confusion.
We have to wait to validate not-scrolled regions before we can use
Widget::scrollRegion() or Window::moveWindow() again. This is an issue
to see in the future (to avoid lossing mouse move messages). At the moment,
one solution is to use the last received mouse move message.