Files
EnergyMonitor_Pico/libs/mare/mare_drawables.cpp
Emanuele Trabattoni a77b66e4ef draws wonky line
2021-05-28 00:05:42 +02:00

103 lines
2.9 KiB
C++

#include "mare.h"
namespace Render {
Drawable::Drawable(const size_t id, Drawable* parent, Mare* engine):
_id(id),
_parent(parent),
_engine(engine),
_origin({0,0}),
_bbox({0,0,0,0}),
_blendMode(Render::BlendMode::Intersect),
_dirty(false)
{
}
Drawable::~Drawable() {
}
//--------+--------+--------+--------+--------+--------+--------+--------+--------+--------//
//Point
DrawablePoint::DrawablePoint(const size_t id, Drawable* parent, Mare* engine, dim_t size):
Drawable(id, parent,engine),
_size(size)
{
}
DrawablePoint::~DrawablePoint() {
}
void DrawablePoint::render() {
uint8_t *buf;
if (isDirty()){
buf = getBuffer();
//TODO: implement screen rotation and margin check
auto dx = engine()->getSize().x;
auto dy = engine()->getSize().y;
for (uint16_t xx(0); xx< _size.x; xx++){
for (uint16_t yy(0); yy < _size.y; yy++)
{
engine()->setPixel(buf,dx-(getOrigin().x+xx),getOrigin().y+yy,true);
}
}
resetDirty();
}
}
//--------+--------+--------+--------+--------+--------+--------+--------+--------+--------//
//Line
DrawableLine::DrawableLine(const size_t id, Drawable* parent, Mare* engine):
Drawable(id, parent,engine),
_thickness(1),
_lenght(0),
_rotation(0.0f)
{
}
DrawableLine::~DrawableLine(){
}
void DrawableLine::render(){
uint8_t* buf;
if (isDirty()) {
buf = getBuffer();
float cx,sx;
auto dx = engine()->getSize().x;
auto dy = engine()->getSize().y;
sincosf(_rotation,&sx,&cx); // use optimized float instructions
uint16_t endX = round(cx*(float)_lenght);
for(uint16_t yy(0); yy <= _thickness; ++yy){
for(uint16_t xx(0); xx <= endX; ++xx){
float dydx = cx == 0.0f ? 0 : (sx/cx);
float dxdy = sx == 0.0f ? 0 : (cx/sx);
uint16_t y = getOrigin().y+yy+xx*dydx;
uint16_t x = dx-(getOrigin().x+xx+yy);
engine()->setPixel(buf,x,y,true);
}
}
resetDirty();
}
}
//--------+--------+--------+--------+--------+--------+--------+--------+--------+--------//
//Rectangle
//--------+--------+--------+--------+--------+--------+--------+--------+--------+--------//
//Circle
//--------+--------+--------+--------+--------+--------+--------+--------+--------+--------//
//Character
//--------+--------+--------+--------+--------+--------+--------+--------+--------+--------//
//String
//--------+--------+--------+--------+--------+--------+--------+--------+--------+--------//
//Custom
}