diff --git a/Libraries/LibDraw/Painter.cpp b/Libraries/LibDraw/Painter.cpp index 24642c715a..3b08c67bc4 100644 --- a/Libraries/LibDraw/Painter.cpp +++ b/Libraries/LibDraw/Painter.cpp @@ -71,7 +71,6 @@ void Painter::clear_rect(const Rect& a_rect, Color color) } } - void Painter::fill_rect(const Rect& a_rect, Color color) { if (color.alpha() == 0) @@ -774,7 +773,7 @@ void Painter::draw_pixel(const Point& position, Color color, int thickness) fill_rect(rect, color); } -void Painter::draw_line(const Point& p1, const Point& p2, Color color, int thickness) +void Painter::draw_line(const Point& p1, const Point& p2, Color color, int thickness, bool dotted) { auto clip_rect = this->clip_rect(); @@ -797,8 +796,13 @@ void Painter::draw_line(const Point& p1, const Point& p2, Color color, int thick return; int min_y = max(point1.y(), clip_rect.top()); int max_y = min(point2.y(), clip_rect.bottom()); - for (int y = min_y; y <= max_y; ++y) - draw_pixel({ x, y }, color, thickness); + if (dotted) { + for (int y = min_y; y <= max_y; y += 2) + draw_pixel({ x, y }, color, thickness); + } else { + for (int y = min_y; y <= max_y; ++y) + draw_pixel({ x, y }, color, thickness); + } return; } @@ -815,11 +819,19 @@ void Painter::draw_line(const Point& p1, const Point& p2, Color color, int thick return; int min_x = max(point1.x(), clip_rect.left()); int max_x = min(point2.x(), clip_rect.right()); - for (int x = min_x; x <= max_x; ++x) - draw_pixel({ x, y }, color, thickness); + if (dotted) { + for (int x = min_x; x <= max_x; x += 2) + draw_pixel({ x, y }, color, thickness); + } else { + for (int x = min_x; x <= max_x; ++x) + draw_pixel({ x, y }, color, thickness); + } return; } + // FIXME: Implement dotted diagonal lines. + ASSERT(!dotted); + const double adx = abs(point2.x() - point1.x()); const double ady = abs(point2.y() - point1.y()); diff --git a/Libraries/LibDraw/Painter.h b/Libraries/LibDraw/Painter.h index 75cdecad6d..1e64557bf6 100644 --- a/Libraries/LibDraw/Painter.h +++ b/Libraries/LibDraw/Painter.h @@ -26,7 +26,7 @@ public: void draw_bitmap(const Point&, const CharacterBitmap&, Color = Color()); void draw_bitmap(const Point&, const GlyphBitmap&, Color = Color()); void set_pixel(const Point&, Color); - void draw_line(const Point&, const Point&, Color, int thickness = 1); + void draw_line(const Point&, const Point&, Color, int thickness = 1, bool dotted = false); void draw_scaled_bitmap(const Rect& dst_rect, const GraphicsBitmap&, const Rect& src_rect); void blit(const Point&, const GraphicsBitmap&, const Rect& src_rect, float opacity = 1.0f); void blit_dimmed(const Point&, const GraphicsBitmap&, const Rect& src_rect);