diff --git a/src/app/color_picker.cpp b/src/app/color_picker.cpp index b463a6fff..f15fcf18e 100644 --- a/src/app/color_picker.cpp +++ b/src/app/color_picker.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2019-2024 Igara Studio S.A. +// Copyright (C) 2019-2025 Igara Studio S.A. // Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of @@ -108,7 +108,7 @@ void ColorPicker::pickColor(const Site& site, plan.addLayer(sprite->root(), site.frame()); doc::CelList cels; - sprite->pickCels(pos, kOpacityThreshold, plan, cels); + sprite->pickCels(pos, plan, cels, kOpacityThreshold); if (!cels.empty()) m_layer = cels.front()->layer(); @@ -181,7 +181,7 @@ void ColorPicker::pickColor(const Site& site, plan.addLayer(refLayer, site.frame()); doc::CelList cels; - sprite->pickCels(pos, kOpacityThreshold, plan, cels); + sprite->pickCels(pos, plan, cels, kOpacityThreshold); for (const Cel* cel : cels) { doc::color_t imageColor; diff --git a/src/app/ui/editor/standby_state.cpp b/src/app/ui/editor/standby_state.cpp index c601d0e89..53ed095b7 100644 --- a/src/app/ui/editor/standby_state.cpp +++ b/src/app/ui/editor/standby_state.cpp @@ -60,6 +60,7 @@ #include "doc/layer.h" #include "doc/layer_tilemap.h" #include "doc/mask.h" +#include "doc/render_plan.h" #include "doc/slice.h" #include "doc/sprite.h" #include "fmt/format.h" @@ -153,12 +154,14 @@ bool StandbyState::onMouseDown(Editor* editor, MouseMessage* msg) // Handle "Auto Select Layer" if (editor->isAutoSelectLayer()) { gfx::PointF cursor = editor->screenToEditorF(msg->position()); - ColorPicker picker; - picker.pickColor(site, cursor, editor->projection(), ColorPicker::FromComposition); + doc::RenderPlan plan; + plan.addLayer(site.sprite()->root(), site.frame()); + doc::CelList cels; + site.sprite()->pickCels(cursor, plan, cels); const view::RealRange& range = context->range(); - if (picker.layer() && !range.contains(picker.layer())) { - layer = picker.layer(); + if (!cels.empty() && !range.contains(cels.front()->layer())) { + layer = cels.front()->layer(); if (layer) { editor->setLayer(layer); editor->flashCurrentLayer(); diff --git a/src/doc/sprite.cpp b/src/doc/sprite.cpp index a698eb572..35af82e59 100644 --- a/src/doc/sprite.cpp +++ b/src/doc/sprite.cpp @@ -1,5 +1,5 @@ // Aseprite Document Library -// Copyright (C) 2018-2024 Igara Studio S.A. +// Copyright (C) 2018-2025 Igara Studio S.A. // Copyright (C) 2001-2018 David Capello // // This file is released under the terms of the MIT license. @@ -656,9 +656,9 @@ void Sprite::remapTilemaps(const Tileset* tileset, const Remap& remap) // Drawing void Sprite::pickCels(const gfx::PointF& pos, - const int opacityThreshold, const RenderPlan& plan, - CelList& cels) const + CelList& cels, + const int opacityThreshold) const { // Iterate cels in reversed order (from the front-most to the // bottom-most) so we pick first visible cel in the given position. diff --git a/src/doc/sprite.h b/src/doc/sprite.h index f4b6852f5..37451ce91 100644 --- a/src/doc/sprite.h +++ b/src/doc/sprite.h @@ -212,9 +212,9 @@ public: void remapImages(const Remap& remap); void remapTilemaps(const Tileset* tileset, const Remap& remap); void pickCels(const gfx::PointF& pos, - const int opacityThreshold, const RenderPlan& plan, - CelList& cels) const; + CelList& cels, + const int opacityThreshold = 1) const; //////////////////////////////////////// // Iterators