Skip to content
Snippets Groups Projects
shapedefinitions.h 6.96 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef SHAPEDEFINITIONS_H
    #define SHAPEDEFINITIONS_H
    
    #include <QList>
    #include <QtDebug>
    
    #include <QtMath>
    
    
    #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
    
            if (outer > 3) {
    
                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;
    
    
            if (index != 0) {
    
                renderer.addCircle(m, m, s);
            }
        }
    };
    
    } // namespace shapes
    
    #endif // SHAPEDEFINITIONS_H