mirror of
https://github.com/aseprite/aseprite.git
synced 2025-04-16 05:42:32 +00:00
Add option to reduce opacity of non-active layers
This commit is contained in:
parent
4813936a3a
commit
26b1a2ebb4
@ -136,6 +136,7 @@
|
||||
<section id="experimental" text="Experimental">
|
||||
<option id="use_native_file_dialog" type="bool" default="false" />
|
||||
<option id="flash_layer" type="bool" default="false" migrate="Options.FlashLayer" />
|
||||
<option id="nonactive_layers_opacity" type="int" default="255" />
|
||||
</section>
|
||||
<section id="news">
|
||||
<option id="cache_file" type="std::string" />
|
||||
|
@ -202,6 +202,10 @@
|
||||
<separator text="User Interface" horizontal="true" />
|
||||
<check id="native_file_dialog" text="Use native file dialog" />
|
||||
<check id="flash_layer" text="Flash layer when it is selected" />
|
||||
<hbox>
|
||||
<label text="Opacity for non-active layers:" />
|
||||
<slider id="nonactive_layers_opacity" min="0" max="255" width="128" />
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
</panel>
|
||||
|
@ -156,6 +156,8 @@ public:
|
||||
if (m_pref.experimental.flashLayer())
|
||||
flashLayer()->setSelected(true);
|
||||
|
||||
nonactiveLayersOpacity()->setValue(m_pref.experimental.nonactiveLayersOpacity());
|
||||
|
||||
if (m_pref.editor.showScrollbars())
|
||||
showScrollbars()->setSelected(true);
|
||||
|
||||
@ -302,6 +304,7 @@ public:
|
||||
// Experimental features
|
||||
m_pref.experimental.useNativeFileDialog(nativeFileDialog()->isSelected());
|
||||
m_pref.experimental.flashLayer(flashLayer()->isSelected());
|
||||
m_pref.experimental.nonactiveLayersOpacity(nonactiveLayersOpacity()->getValue());
|
||||
|
||||
ui::set_use_native_cursors(m_pref.cursor.useNativeCursor());
|
||||
ui::set_mouse_cursor_scale(m_pref.cursor.cursorScale());
|
||||
|
@ -326,7 +326,9 @@ void Editor::setLayer(const Layer* layer)
|
||||
if (// If the onion skinning depends on the active layer
|
||||
m_docPref.onionskin.currentLayer() ||
|
||||
// If the user want to see the active layer edges...
|
||||
m_docPref.show.layerEdges()) {
|
||||
m_docPref.show.layerEdges() ||
|
||||
// If there is a different opacity for nonactive-layers
|
||||
Preferences::instance().experimental.nonactiveLayersOpacity() < 255) {
|
||||
// We've to redraw the whole editor
|
||||
invalidate();
|
||||
}
|
||||
@ -546,6 +548,8 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& sprite
|
||||
rendered.reset(Image::create(IMAGE_RGB, rc.w, rc.h, m_renderBuffer));
|
||||
|
||||
m_renderEngine.setRefLayersVisiblity(true);
|
||||
m_renderEngine.setSelectedLayer(m_layer);
|
||||
m_renderEngine.setNonactiveLayersOpacity(Preferences::instance().experimental.nonactiveLayersOpacity());
|
||||
m_renderEngine.setProjection(m_proj);
|
||||
m_renderEngine.setupBackground(m_document, rendered->pixelFormat());
|
||||
m_renderEngine.disableOnionskin();
|
||||
|
@ -480,6 +480,7 @@ bool has_visible_reference_layers(const LayerGroup* group)
|
||||
|
||||
Render::Render()
|
||||
: m_flags(0)
|
||||
, m_nonactiveLayersOpacity(255)
|
||||
, m_sprite(nullptr)
|
||||
, m_currentLayer(NULL)
|
||||
, m_currentFrame(0)
|
||||
@ -505,6 +506,11 @@ void Render::setRefLayersVisiblity(const bool visible)
|
||||
m_flags &= ~Flags::ShowRefLayers;
|
||||
}
|
||||
|
||||
void Render::setNonactiveLayersOpacity(const int opacity)
|
||||
{
|
||||
m_nonactiveLayersOpacity = opacity;
|
||||
}
|
||||
|
||||
void Render::setProjection(const Projection& projection)
|
||||
{
|
||||
m_proj = projection;
|
||||
@ -535,6 +541,11 @@ void Render::setBgCheckedSize(const gfx::Size& size)
|
||||
m_bgCheckedSize = size;
|
||||
}
|
||||
|
||||
void Render::setSelectedLayer(const Layer* layer)
|
||||
{
|
||||
m_selectedLayer = layer;
|
||||
}
|
||||
|
||||
void Render::setPreviewImage(const Layer* layer,
|
||||
const frame_t frame,
|
||||
const Image* image,
|
||||
@ -622,7 +633,7 @@ void Render::renderLayer(
|
||||
renderLayer(
|
||||
layer, dstImage, area,
|
||||
frame, compositeImage,
|
||||
true, true, blendMode);
|
||||
true, true, blendMode, false);
|
||||
}
|
||||
|
||||
void Render::renderSprite(
|
||||
@ -685,7 +696,8 @@ void Render::renderSprite(
|
||||
area, frame, compositeImage,
|
||||
true,
|
||||
false,
|
||||
BlendMode::UNSPECIFIED);
|
||||
BlendMode::UNSPECIFIED,
|
||||
false);
|
||||
|
||||
// Draw onion skin behind the sprite.
|
||||
if (m_onionskin.position() == OnionskinPosition::BEHIND)
|
||||
@ -698,7 +710,7 @@ void Render::renderSprite(
|
||||
area, frame, compositeImage,
|
||||
false,
|
||||
true,
|
||||
BlendMode::UNSPECIFIED);
|
||||
BlendMode::UNSPECIFIED, false);
|
||||
|
||||
// Draw onion skin in front of the sprite.
|
||||
if (m_onionskin.position() == OnionskinPosition::INFRONT)
|
||||
@ -778,8 +790,7 @@ void Render::renderOnionskin(
|
||||
// when opacity is < 255
|
||||
(m_globalOpacity < 255 &&
|
||||
m_onionskin.position() == OnionskinPosition::INFRONT),
|
||||
true,
|
||||
blendMode);
|
||||
true, blendMode, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -862,12 +873,16 @@ void Render::renderLayer(
|
||||
const CompositeImageFunc compositeImage,
|
||||
const bool render_background,
|
||||
const bool render_transparent,
|
||||
const BlendMode blendMode)
|
||||
const BlendMode blendMode,
|
||||
bool isSelected)
|
||||
{
|
||||
// we can't read from this layer
|
||||
if (!layer->isVisible())
|
||||
return;
|
||||
|
||||
if (m_selectedLayer == layer)
|
||||
isSelected = true;
|
||||
|
||||
gfx::Rect extraArea;
|
||||
bool drawExtra = (m_extraCel &&
|
||||
m_extraCel->frame() == frame &&
|
||||
@ -940,11 +955,13 @@ void Render::renderLayer(
|
||||
ASSERT(imgLayer->opacity() >= 0);
|
||||
ASSERT(imgLayer->opacity() <= 255);
|
||||
|
||||
// Multiple three opacities: cel*layer*global
|
||||
// Multiple three opacities: cel*layer*global (*nonactive-layer-opacity)
|
||||
int t;
|
||||
int opacity = cel->opacity();
|
||||
opacity = MUL_UN8(opacity, imgLayer->opacity(), t);
|
||||
opacity = MUL_UN8(opacity, m_globalOpacity, t);
|
||||
if (!isSelected && m_nonactiveLayersOpacity != 255)
|
||||
opacity = MUL_UN8(opacity, m_nonactiveLayersOpacity, t);
|
||||
|
||||
ASSERT(celImage->maskColor() == m_sprite->transparentColor());
|
||||
|
||||
@ -982,7 +999,8 @@ void Render::renderLayer(
|
||||
compositeImage,
|
||||
render_background,
|
||||
render_transparent,
|
||||
blendMode);
|
||||
blendMode,
|
||||
isSelected);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -105,6 +105,7 @@ namespace render {
|
||||
Render();
|
||||
|
||||
void setRefLayersVisiblity(const bool visible);
|
||||
void setNonactiveLayersOpacity(const int opacity);
|
||||
|
||||
// Viewport configuration
|
||||
void setProjection(const Projection& projection);
|
||||
@ -116,6 +117,8 @@ namespace render {
|
||||
void setBgColor2(color_t color);
|
||||
void setBgCheckedSize(const gfx::Size& size);
|
||||
|
||||
void setSelectedLayer(const Layer* layer);
|
||||
|
||||
// Sets the preview image. This preview image is an alternative
|
||||
// image to be used for the given layer/frame.
|
||||
void setPreviewImage(const Layer* layer,
|
||||
@ -192,7 +195,8 @@ namespace render {
|
||||
const CompositeImageFunc compositeImage,
|
||||
const bool render_background,
|
||||
const bool render_transparent,
|
||||
const BlendMode blendMode);
|
||||
const BlendMode blendMode,
|
||||
bool isSelected);
|
||||
|
||||
void renderCel(
|
||||
Image* dst_image,
|
||||
@ -220,6 +224,7 @@ namespace render {
|
||||
const Layer* layer);
|
||||
|
||||
int m_flags;
|
||||
int m_nonactiveLayersOpacity;
|
||||
const Sprite* m_sprite;
|
||||
const Layer* m_currentLayer;
|
||||
frame_t m_currentFrame;
|
||||
|
Loading…
x
Reference in New Issue
Block a user