Add simple ui::color_view element
This commit is contained in:
parent
932e64a991
commit
5af0c66599
2 changed files with 67 additions and 0 deletions
32
libs/ui/include/psemek/ui/color_view.hpp
Normal file
32
libs/ui/include/psemek/ui/color_view.hpp
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
#pragma once
|
||||
|
||||
#include <psemek/ui/element.hpp>
|
||||
#include <psemek/ui/box_shape.hpp>
|
||||
|
||||
namespace psemek::ui
|
||||
{
|
||||
|
||||
struct color_view
|
||||
: ui::element
|
||||
{
|
||||
virtual gfx::color_rgba color() const { return color_; }
|
||||
virtual void set_color(gfx::color_rgba value) { color_ = value; }
|
||||
|
||||
virtual bool square() const { return square_; }
|
||||
virtual void set_square(bool value) { square_ = value; }
|
||||
|
||||
struct shape const & shape() const override { return shape_; }
|
||||
void reshape(geom::box<float, 2> const & box) override { shape_.box = box; }
|
||||
|
||||
geom::interval<float> width_constraints(float height) const override;
|
||||
geom::interval<float> height_constraints(float width) const override;
|
||||
|
||||
void draw(painter & p) const override;
|
||||
|
||||
private:
|
||||
box_shape shape_;
|
||||
gfx::color_rgba color_ = {255, 0, 0, 255};
|
||||
bool square_ = true;
|
||||
};
|
||||
|
||||
}
|
||||
35
libs/ui/source/color_view.cpp
Normal file
35
libs/ui/source/color_view.cpp
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
#include <psemek/ui/color_view.hpp>
|
||||
#include <psemek/log/log.hpp>
|
||||
|
||||
namespace psemek::ui
|
||||
{
|
||||
|
||||
geom::interval<float> color_view::width_constraints(float height) const
|
||||
{
|
||||
if (square_)
|
||||
return {height, height};
|
||||
return element::width_constraints(height);
|
||||
}
|
||||
|
||||
geom::interval<float> color_view::height_constraints(float width) const
|
||||
{
|
||||
if (square_)
|
||||
return {width, width};
|
||||
return element::height_constraints(width);
|
||||
}
|
||||
|
||||
void color_view::draw(painter & p) const
|
||||
{
|
||||
geom::box<float, 2> box = shape_.box;
|
||||
if (square_)
|
||||
{
|
||||
if (box[0].length() > box[1].length())
|
||||
box[0] = geom::expand(geom::interval<float>::singleton(box[0].center()), box[1].length() / 2.f);
|
||||
else
|
||||
box[1] = geom::expand(geom::interval<float>::singleton(box[1].center()), box[0].length() / 2.f);
|
||||
}
|
||||
|
||||
p.draw_rect(box, color_);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue