mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-04 09:42:40 +02:00
86 lines
2.4 KiB
C++
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);
|
|
}
|