File indexing completed on 2024-04-28 04:05:20

0001 /*
0002     SPDX-FileCopyrightText: 2015 Jakob Gruber <jakob.gruber@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef RENDERER_H
0008 #define RENDERER_H
0009 
0010 #include <QFont>
0011 #include <QList>
0012 #include <QPixmap>
0013 #include <QString>
0014 #include <QSvgRenderer>
0015 #include <QSharedPointer>
0016 
0017 class Renderer
0018 {
0019 public:
0020     enum Resource {
0021         Transparent = 0,
0022         Background,
0023         CellFrame,
0024         Box,
0025         Cross,
0026         Highlight,
0027         Streak1,
0028         Streak2,
0029         Divider,
0030         OverviewBox,
0031         OverviewCross
0032     };
0033 
0034     enum FontSize {
0035         Tiny,
0036         Small,
0037         Regular,
0038         Large,
0039         Huge,
0040         FontSizeLength
0041     };
0042 
0043     static Renderer *instance();
0044 
0045     /* returns the pixmap representing the given resource at the
0046       current tilesize */
0047     QPixmap getPixmap(Renderer::Resource res) const;
0048 
0049     int getTilesize() const;
0050     int getOverviewTilesize() const;
0051 
0052     const QFont &getFont(enum FontSize size) const;
0053 
0054     /* returns the width of streak areas in pixels */
0055     int getYOffset() const;
0056     int getXOffset() const;
0057 
0058     /* returns the width of streak areas in tiles */
0059     int getStreakGridCount() const;
0060 
0061     /* 0 < board_width, board_height */
0062     void setSize(const QSize &size, int board_width, int board_height,
0063                  const QStringList &streaks);
0064 
0065 private:
0066     Renderer();
0067 
0068     QPixmap getCachedPixmap(Renderer::Resource resource, int h, int w) const;
0069     void loadResources();
0070 
0071     /* calculates the largest tile size such that the entire game area fits
0072       into the provided window size */
0073     int gridSize(const QSize &size, int board_width, int board_height) const;
0074 
0075     /* Returns true if the given streaks fit into the current area specified
0076        by m_streak_count and m_tilesize. */
0077     bool streaksFit(const QStringList &streaks) const;
0078 
0079     void setFontSize();
0080 
0081 private:
0082 
0083     int m_tilesize;
0084     int m_overview_tilesize;
0085     int m_streak_grid_count;
0086 
0087     QFont m_fonts[FontSizeLength];
0088 
0089     QSharedPointer<QSvgRenderer> m_renderer;
0090 
0091     QList<QString> m_names;
0092 };
0093 
0094 #endif // RENDERER_H