Newer
Older
#ifndef SHAPEDEFINITIONS_H
#define SHAPEDEFINITIONS_H
#include <QList>
#include <QtDebug>
#include "../rendering/renderer.h"
namespace shapes {
class ShapeDefinitions
{
public:
static QList<void (*)(rendering::Renderer &, int, int)> OuterShapes();
static QList<void (*)(rendering::Renderer &, int, int)> CenterShapes();
static void outerOne(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "outerOne";
renderer.addTriangle(0, 0, cell, cell, rendering::TriangleDirection::SouthWest);
}
static void outerTwo(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "outerTwo";
renderer.addTriangle(
0, cell / 2.0, cell, cell / 2.0, rendering::TriangleDirection::SouthWest);
}
static void outerThree(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "outerThree";
renderer.addRhombus(0, 0, cell, cell);
}
static void outerFour(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "outerFour";
auto m = cell * 0.16667;
renderer.addCircle(m, m, cell - 2 * m);
}
static void centerOne(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "centerOne";
qreal k = cell * 0.42;
QList<QPointF> polygon = {QPointF(0, 0),
QPointF(cell, 0),
QPointF(cell, cell - k * 2),
QPointF(cell - k, cell),
QPointF(0, cell)};
renderer.addPolygon(polygon);
}
static void centerTwo(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "centerTwo";
auto w = qFloor(cell * 0.5);
auto h = qFloor(cell * 0.8);
renderer.addTriangle(cell - w, 0, w, h, rendering::TriangleDirection::NorthEast);
}
static void centerThree(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "centerThree";
auto s = cell / 3;
renderer.addRectangle(s, s, cell - s, cell - s);
}
static void centerFour(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "centerFour";
qreal tmp = cell * 0.1;
auto inner = tmp > 1 ? qFloor(tmp) : // large icon => truncate decimals
tmp > 0.5 ? 1
: // medium size icon => fixed width
tmp; // small icon => anti-aliased border
// Use fixed outer border widths in small icons to ensure the border is drawn
auto outer = cell < 6 ? 1 : cell < 8 ? 2 : cell / 4;
renderer.addRectangle(outer, outer, cell - inner - outer, cell - inner - outer);
}
static void centerFive(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "centerFive";
auto m = qFloor(cell * 0.15);
auto s = qFloor(cell * 0.5);
renderer.addCircle(cell - s - m, cell - s - m, s);
}
static void centerSix(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "centerSix";
qreal inner = cell * 0.1;
qreal outer = inner * 4;
// Align edge to nearest pixel in large icons
outer = qFloor(outer);
}
renderer.addRectangle(0, 0, cell, cell);
QList<QPointF> polygon = {QPointF(outer, outer),
QPointF(cell - inner, outer),
QPointF(outer + (cell - outer - inner) / 2, cell - inner)};
renderer.addPolygon(polygon, true);
}
static void centerSeven(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "centerSeven";
QList<QPointF> polygon = {QPointF(0, 0),
QPointF(cell, 0),
QPointF(cell, cell * 0.7),
QPointF(cell * 0.4, cell * 0.4),
QPointF(cell * 0.7, cell),
QPointF(0, cell)};
renderer.addPolygon(polygon);
}
static void centerEight(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "centerEight";
renderer.addTriangle(
cell / 2.0, cell / 2.0, cell / 2.0, cell / 2.0, rendering::TriangleDirection::SouthEast);
}
static void centerNine(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "centerNine";
QList<QPointF> polygons = {QPointF(0, 0),
QPointF(cell, 0),
QPointF(cell, cell / 2),
QPointF(cell / 2, cell),
QPointF(0, cell)};
renderer.addPolygon(polygons);
}
static void centerTen(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "centerTen";
qreal tmp = cell * 0.14;
auto inner = cell < 8 ? tmp : // small icon => anti-aliased border
qFloor(tmp); // large icon => truncate decimals
// Use fixed outer border widths in small icons to ensure the border is drawn
auto outer = cell < 4 ? 1 : cell < 6 ? 2 : qFloor(cell * 0.35);
renderer.addRectangle(0, 0, cell, cell);
renderer.addRectangle(outer, outer, cell - outer - inner, cell - outer - inner, true);
}
static void centerEleven(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "center11";
qreal inner = cell * 0.12;
qreal outer = inner * 3;
renderer.addRectangle(0, 0, cell, cell);
renderer.addCircle(outer, outer, cell - inner - outer, true);
}
static void centerTwelve(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "center12";
renderer.addTriangle(
cell / 2.0, cell / 2.0, cell / 2.0, cell / 2.0, rendering::TriangleDirection::SouthEast);
}
static void centerThirteen(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "center13";
qreal m = cell * 0.25;
renderer.addRectangle(0, 0, cell, cell);
renderer.addRhombus(m, m, cell - m, cell - m, true);
}
static void centerFourteen(rendering::Renderer &renderer, int cell, int index)
{
Q_UNUSED(index);
qDebug() << "center14";
qreal m = cell * 0.4;
qreal s = cell * 1.2;
renderer.addCircle(m, m, s);
}
}
};
} // namespace shapes
#endif // SHAPEDEFINITIONS_H