File indexing completed on 2024-04-28 04:32:07

0001 /*
0002  * Copyright (C) 2010-2015 by Stephen Allewell
0003  * steve.allewell@gmail.com
0004  *
0005  * This program is free software; you can redistribute it and/or modify
0006  * it under the terms of the GNU General Public License as published by
0007  * the Free Software Foundation; either version 2 of the License, or
0008  * (at your option) any later version.
0009  */
0010 
0011 #ifndef Renderer_H
0012 #define Renderer_H
0013 
0014 #include <QFont>
0015 #include <QPolygon>
0016 #include <QRect>
0017 
0018 #include "configuration.h"
0019 
0020 class QPainter;
0021 
0022 class Backstitch;
0023 class Document;
0024 class Knot;
0025 class Pattern;
0026 class RendererData;
0027 class Stitch;
0028 class StitchQueue;
0029 
0030 class Renderer
0031 {
0032 public:
0033     Renderer();
0034     Renderer(const Renderer &);
0035     ~Renderer();
0036 
0037     void setCellGrouping(int, int);
0038     void setGridLineWidths(double, double);
0039     void setGridLineColors(QColor, QColor);
0040 
0041     void setRenderStitchesAs(Configuration::EnumRenderer_RenderStitchesAs::type);
0042     void setRenderBackstitchesAs(Configuration::EnumRenderer_RenderBackstitchesAs::type);
0043     void setRenderKnotsAs(Configuration::EnumRenderer_RenderKnotsAs::type);
0044 
0045     void render(QPainter *, Pattern *, QRect updateCells, bool renderGrid, bool renderStitches, bool renderBackstitches, bool renderKnots, int colorHighlight);
0046 
0047     Renderer &operator=(const Renderer &);
0048 
0049 private:
0050     typedef void (Renderer::*renderStitchCallPointer)(StitchQueue *);
0051     typedef void (Renderer::*renderBackstitchCallPointer)(Backstitch *);
0052     typedef void (Renderer::*renderKnotCallPointer)(Knot *);
0053 
0054     static const renderStitchCallPointer renderStitchCallPointers[];
0055     static const renderBackstitchCallPointer renderBackstitchCallPointers[];
0056     static const renderKnotCallPointer renderKnotCallPointers[];
0057 
0058     void renderStitchesAsStitches(StitchQueue *);
0059     void renderStitchesAsBlackWhiteSymbols(StitchQueue *);
0060     void renderStitchesAsColorSymbols(StitchQueue *);
0061     void renderStitchesAsColorBlocks(StitchQueue *);
0062     void renderStitchesAsColorBlocksSymbols(StitchQueue *);
0063     void renderStitchHints(Stitch *);
0064 
0065     void renderBackstitchesAsColorLines(Backstitch *);
0066     void renderBackstitchesAsBlackWhiteSymbols(Backstitch *);
0067 
0068     void renderKnotsAsColorBlocks(Knot *);
0069     void renderKnotsAsColorBlocksSymbols(Knot *);
0070     void renderKnotsAsColorSymbols(Knot *);
0071     void renderKnotsAsBlackWhiteSymbols(Knot *);
0072 
0073     QSharedDataPointer<RendererData> d;
0074 };
0075 
0076 #endif // Renderer_H