mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 03:27:45 +00:00
PixelPaint: Let Layer track whether it's selected or not
This will simplify a lot of code that keeps getting more confusing.
This commit is contained in:
parent
18d68c8c94
commit
b5788594f9
3 changed files with 16 additions and 20 deletions
|
@ -59,12 +59,17 @@ public:
|
||||||
|
|
||||||
void did_modify_bitmap(Image&);
|
void did_modify_bitmap(Image&);
|
||||||
|
|
||||||
|
void set_selected(bool selected) { m_selected = selected; }
|
||||||
|
bool is_selected() const { return m_selected; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit Layer(const Gfx::Size&, const String& name);
|
explicit Layer(const Gfx::Size&, const String& name);
|
||||||
|
|
||||||
String m_name;
|
String m_name;
|
||||||
Gfx::Point m_location;
|
Gfx::Point m_location;
|
||||||
RefPtr<Gfx::Bitmap> m_bitmap;
|
RefPtr<Gfx::Bitmap> m_bitmap;
|
||||||
|
|
||||||
|
bool m_selected { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ void LayerListWidget::rebuild_gadgets()
|
||||||
m_gadgets.clear();
|
m_gadgets.clear();
|
||||||
if (m_image) {
|
if (m_image) {
|
||||||
for (size_t layer_index = 0; layer_index < m_image->layer_count(); ++layer_index) {
|
for (size_t layer_index = 0; layer_index < m_image->layer_count(); ++layer_index) {
|
||||||
m_gadgets.append({ layer_index, {}, {}, false, false, {} });
|
m_gadgets.append({ layer_index, {}, {}, false, {} });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
relayout_gadgets();
|
relayout_gadgets();
|
||||||
|
@ -95,8 +95,8 @@ void LayerListWidget::paint_event(GUI::PaintEvent& event)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gadget.is_moving) {
|
if (gadget.is_moving) {
|
||||||
painter.fill_rect(adjusted_rect, palette().threed_shadow1());
|
painter.fill_rect(adjusted_rect, palette().selection().lightened(1.5f));
|
||||||
} else if (gadget.is_selected) {
|
} else if (layer.is_selected()) {
|
||||||
painter.fill_rect(adjusted_rect, palette().selection());
|
painter.fill_rect(adjusted_rect, palette().selection());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ void LayerListWidget::paint_event(GUI::PaintEvent& event)
|
||||||
Gfx::Rect text_rect { thumbnail_rect.right() + 10, adjusted_rect.y(), adjusted_rect.width(), adjusted_rect.height() };
|
Gfx::Rect text_rect { thumbnail_rect.right() + 10, adjusted_rect.y(), adjusted_rect.width(), adjusted_rect.height() };
|
||||||
text_rect.intersect(adjusted_rect);
|
text_rect.intersect(adjusted_rect);
|
||||||
|
|
||||||
painter.draw_text(text_rect, layer.name(), Gfx::TextAlignment::CenterLeft, gadget.is_selected ? palette().selection_text() : palette().button_text());
|
painter.draw_text(text_rect, layer.name(), Gfx::TextAlignment::CenterLeft, layer.is_selected() ? palette().selection_text() : palette().button_text());
|
||||||
};
|
};
|
||||||
|
|
||||||
for (auto& gadget : m_gadgets) {
|
for (auto& gadget : m_gadgets) {
|
||||||
|
@ -145,8 +145,8 @@ void LayerListWidget::mousedown_event(GUI::MouseEvent& event)
|
||||||
m_moving_gadget_index = gadget_index;
|
m_moving_gadget_index = gadget_index;
|
||||||
m_moving_event_origin = event.position();
|
m_moving_event_origin = event.position();
|
||||||
auto& gadget = m_gadgets[m_moving_gadget_index.value()];
|
auto& gadget = m_gadgets[m_moving_gadget_index.value()];
|
||||||
if (on_layer_select)
|
auto& layer = m_image->layer(gadget_index.value());
|
||||||
on_layer_select(&m_image->layer(gadget_index.value()));
|
set_selected_layer(&layer);
|
||||||
gadget.is_moving = true;
|
gadget.is_moving = true;
|
||||||
gadget.movement_delta = {};
|
gadget.movement_delta = {};
|
||||||
update();
|
update();
|
||||||
|
@ -190,7 +190,7 @@ void LayerListWidget::image_did_add_layer(size_t layer_index)
|
||||||
m_gadgets[m_moving_gadget_index.value()].is_moving = false;
|
m_gadgets[m_moving_gadget_index.value()].is_moving = false;
|
||||||
m_moving_gadget_index = {};
|
m_moving_gadget_index = {};
|
||||||
}
|
}
|
||||||
Gadget gadget { layer_index, {}, {}, false, false, {} };
|
Gadget gadget { layer_index, {}, {}, false, {} };
|
||||||
m_gadgets.insert(layer_index, move(gadget));
|
m_gadgets.insert(layer_index, move(gadget));
|
||||||
relayout_gadgets();
|
relayout_gadgets();
|
||||||
}
|
}
|
||||||
|
@ -275,18 +275,10 @@ void LayerListWidget::set_selected_layer(Layer* layer)
|
||||||
{
|
{
|
||||||
if (!m_image)
|
if (!m_image)
|
||||||
return;
|
return;
|
||||||
if (!layer) {
|
for (size_t i = 0; i < m_image->layer_count(); ++i)
|
||||||
for (auto& gadget : m_gadgets)
|
m_image->layer(i).set_selected(layer == &m_image->layer(i));
|
||||||
gadget.is_selected = false;
|
if (on_layer_select)
|
||||||
} else {
|
on_layer_select(layer);
|
||||||
auto layer_index = m_image->index_of(*layer);
|
|
||||||
for (auto& gadget : m_gadgets) {
|
|
||||||
if (gadget.layer_index == layer_index)
|
|
||||||
gadget.is_selected = true;
|
|
||||||
else
|
|
||||||
gadget.is_selected = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,6 @@ private:
|
||||||
Gfx::Rect rect;
|
Gfx::Rect rect;
|
||||||
Gfx::Rect temporary_rect_during_move;
|
Gfx::Rect temporary_rect_during_move;
|
||||||
bool is_moving { false };
|
bool is_moving { false };
|
||||||
bool is_selected { false };
|
|
||||||
Gfx::Point movement_delta;
|
Gfx::Point movement_delta;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue