Files
MuditaOS/module-gui/gui/core/renderers/LineRenderer.hpp
Maciej Janicki e6fdf0e22c [EGD-5333] Change renderer to follow command design pattern
Changes draw command implementation to properly follow
command design pattern. All drawing commands have been
moved to separate inheriting draw commands from renderer.

Other changes:
- New draw methods overloads have been added to pixel renderer.
 Now pixel rendering methods are in one class.
- Simplified draw commands naming.
- Changed variable naming in draw commands to be more verbose.
- Changed {x,y} pairs to Points where possible.
2021-02-03 16:24:48 +01:00

61 lines
1.7 KiB
C++

// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
#include "Color.hpp"
#include "Common.hpp"
#include "DrawCommand.hpp"
namespace gui
{
class Context;
} // namespace gui
namespace gui::renderer
{
enum class LineExpansionDirection
{
Up = 1,
Down = (1 << 1),
Left = (1 << 2),
Right = (1 << 3)
};
class LineRenderer
{
public:
struct DrawableStyle
{
Length penWidth{1};
Color color{ColorFullBlack};
LineExpansionDirection direction = LineExpansionDirection::Down;
static auto from(const DrawLine &command) -> DrawableStyle;
DrawableStyle &setExpansionDirection(LineExpansionDirection value) noexcept
{
direction = value;
return *this;
}
};
static void draw(Context *ctx, Point start, Point end, Color color);
static void drawHorizontal(Context *ctx, Point start, Length width, const DrawableStyle &style);
static void drawVertical(Context *ctx, Point start, Length height, const DrawableStyle &style);
static void draw45deg(Context *ctx, Point start, Length length, const DrawableStyle &style, bool toRight);
private:
static void drawSlanting(Context *ctx,
Point start,
Point end,
Length penWidth,
Color color,
LineExpansionDirection expansionDirection);
};
} // namespace gui::renderer