1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-26 22:57:00 +02:00
vcmi/client/widgets/GraphicalPrimitiveCanvas.cpp
2024-02-19 16:55:07 +02:00

86 lines
2.4 KiB
C++

/*
* GraphicalPrimitiveCanvas.cpp, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#include "StdInc.h"
#include "GraphicalPrimitiveCanvas.h"
#include "../render/Canvas.h"
GraphicalPrimitiveCanvas::GraphicalPrimitiveCanvas(Rect dimensions)
{
pos = dimensions + pos.topLeft();
}
void GraphicalPrimitiveCanvas::showAll(Canvas & to)
{
auto const & translatePoint = [this](const Point & input){
int x = input.x < 0 ? pos.w + input.x : input.x;
int y = input.y < 0 ? pos.h + input.y : input.y;
return Point(x,y);
};
for (auto const & entry : primitives)
{
switch (entry.type)
{
case PrimitiveType::LINE:
{
to.drawLine(pos.topLeft() + translatePoint(entry.a), pos.topLeft() + translatePoint(entry.b), entry.color, entry.color);
break;
}
case PrimitiveType::FILLED_BOX:
{
to.drawColorBlended(Rect(pos.topLeft() + translatePoint(entry.a), translatePoint(entry.b)), entry.color);
break;
}
case PrimitiveType::RECTANGLE:
{
to.drawBorder(Rect(pos.topLeft() + translatePoint(entry.a), translatePoint(entry.b)), entry.color);
break;
}
}
}
}
void GraphicalPrimitiveCanvas::addLine(const Point & from, const Point & to, const ColorRGBA & color)
{
primitives.push_back({color, from, to, PrimitiveType::LINE});
}
void GraphicalPrimitiveCanvas::addBox(const Point & topLeft, const Point & size, const ColorRGBA & color)
{
primitives.push_back({color, topLeft, size, PrimitiveType::FILLED_BOX});
}
void GraphicalPrimitiveCanvas::addRectangle(const Point & topLeft, const Point & size, const ColorRGBA & color)
{
primitives.push_back({color, topLeft, size, PrimitiveType::RECTANGLE});
}
TransparentFilledRectangle::TransparentFilledRectangle(Rect position, ColorRGBA color) :
GraphicalPrimitiveCanvas(position)
{
addBox(Point(0,0), Point(-1, -1), color);
}
TransparentFilledRectangle::TransparentFilledRectangle(Rect position, ColorRGBA color, ColorRGBA colorLine, int width) :
GraphicalPrimitiveCanvas(position)
{
addBox(Point(0,0), Point(-1, -1), color);
for (int i = 0; i < width; ++i)
addRectangle(Point(i,i), Point(-1-i*2, -1-i*2), colorLine);
}
SimpleLine::SimpleLine(Point pos1, Point pos2, ColorRGBA color) :
GraphicalPrimitiveCanvas(Rect(pos1, pos2 - pos1))
{
addLine(Point(0,0), Point(-1, -1), color);
}