diff --git a/Userland/Applications/PixelPaint/ImageEditor.cpp b/Userland/Applications/PixelPaint/ImageEditor.cpp index db97609c46..d6bb765397 100644 --- a/Userland/Applications/PixelPaint/ImageEditor.cpp +++ b/Userland/Applications/PixelPaint/ImageEditor.cpp @@ -83,6 +83,16 @@ void ImageEditor::paint_event(GUI::PaintEvent& event) painter.draw_rect(enclosing_int_rect(image_rect_to_editor_rect(m_active_layer->relative_rect())).inflated(2, 2), Color::Black); } + for (auto& guide : m_guides) { + if (guide.orientation() == Guide::Orientation::Horizontal) { + int y_coordinate = (int)image_position_to_editor_position({ 0.0f, guide.offset() }).y(); + painter.draw_line({ 0, y_coordinate }, { rect().width(), y_coordinate }, Color::Cyan, 1, Gfx::Painter::LineStyle::Dashed, Color::LightGray); + } else if (guide.orientation() == Guide::Orientation::Vertical) { + int x_coordinate = (int)image_position_to_editor_position({ guide.offset(), 0.0f }).x(); + painter.draw_line({ x_coordinate, 0 }, { x_coordinate, rect().height() }, Color::Cyan, 1, Gfx::Painter::LineStyle::Dashed, Color::LightGray); + } + } + if (!m_selection.is_empty()) m_selection.paint(painter); } @@ -424,5 +434,4 @@ void ImageEditor::image_select_layer(Layer* layer) { set_active_layer(layer); } - } diff --git a/Userland/Applications/PixelPaint/ImageEditor.h b/Userland/Applications/PixelPaint/ImageEditor.h index 52959e07dd..10e9fedf77 100644 --- a/Userland/Applications/PixelPaint/ImageEditor.h +++ b/Userland/Applications/PixelPaint/ImageEditor.h @@ -6,6 +6,7 @@ #pragma once +#include "Guide.h" #include "Image.h" #include "Selection.h" #include @@ -38,6 +39,12 @@ public: bool undo(); bool redo(); + void add_guide(NonnullRefPtr guide) { m_guides.append(guide); } + void remove_guide(Guide const& guide) + { + m_guides.remove_first_matching([&](auto& entry) { return &guide == entry.ptr(); }); + } + void layers_did_change(); Layer* layer_at_editor_position(Gfx::IntPoint const&); @@ -77,6 +84,8 @@ public: Gfx::FloatPoint image_position_to_editor_position(Gfx::IntPoint const&) const; Gfx::FloatPoint editor_position_to_image_position(Gfx::IntPoint const&) const; + NonnullRefPtrVector const& guides() const { return m_guides; } + private: explicit ImageEditor(NonnullRefPtr); @@ -106,6 +115,8 @@ private: RefPtr m_active_layer; OwnPtr m_undo_stack; + NonnullRefPtrVector m_guides; + Tool* m_active_tool { nullptr }; Color m_primary_color { Color::Black };