FIFE  be64c707dea6b3250bd4355bf5c825d25920087d
gui_font.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005-2019 by the FIFE team *
3  * http://www.fifengine.net *
4  * This file is part of FIFE. *
5  * *
6  * FIFE is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU Lesser General Public *
8  * License as published by the Free Software Foundation; either *
9  * version 2.1 of the License, or (at your option) any later version. *
10  * *
11  * This library is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
14  * Lesser General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU Lesser General Public *
17  * License along with this library; if not, write to the *
18  * Free Software Foundation, Inc., *
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
20  ***************************************************************************/
21 
22 // Standard C++ library includes
23 
24 // 3rd party library includes
25 #include <fifechan.hpp>
26 
27 // FIFE includes
28 // These includes are split up in two parts, separated by one empty line
29 // First block: files included from the FIFE root src directory
30 // Second block: files included from the same folder
31 #include "util/structures/rect.h"
32 #include "video/image.h"
33 #include "video/renderbackend.h"
34 
35 #include "gui_font.h"
36 
37 namespace FIFE {
38  GuiFont::GuiFont(IFont* font): m_font(font) {
39  assert(font);
40  }
41 
43  delete m_font;
44  }
45 
46  int32_t GuiFont::getStringIndexAt(const std::string& text, int32_t x) const {
47  return m_font->getStringIndexAt(text, x);
48  }
49 
50  void GuiFont::drawString(fcn::Graphics* graphics, const std::string& text, int32_t x, int32_t y) {
51  if (text == "") {
52  return;
53  }
54 
55  int32_t yoffset = getRowSpacing() / 2;
56 
57  const fcn::ClipRectangle& clip = graphics->getCurrentClipArea();
58  FIFE::Rect rect;
59  rect.x = x + clip.xOffset;
60  rect.y = y + clip.yOffset + yoffset;
61  rect.w = getWidth(text);
62  rect.h = getHeight();
63 
64  if (!rect.intersects(Rect(clip.x,clip.y,clip.width,clip.height)) ) {
65  return;
66  }
67 
68  Image* image;
69  if (isDynamicColoring()) {
70  SDL_Color color = getColor();
71  setColor(graphics->getColor().r, graphics->getColor().g, graphics->getColor().b, graphics->getColor().a);
72  image = getAsImage(text);
73  setColor(color.r, color.g, color.b, color.a);
74  } else {
75  image = getAsImage(text);
76  }
77  image->render(rect);
78  }
79 
80  void GuiFont::drawMultiLineString(fcn::Graphics* graphics, const std::string& text, int32_t x, int32_t y) {
81  if (text == "") {
82  return;
83  }
84 
85  int32_t yoffset = getRowSpacing() / 2;
86 
87  const fcn::ClipRectangle& clip = graphics->getCurrentClipArea();
88 
89  Image* image;
90  if (isDynamicColoring()) {
91  SDL_Color color = getColor();
92  setColor(graphics->getColor().r, graphics->getColor().g, graphics->getColor().b, graphics->getColor().a);
93  image = getAsImageMultiline(text);
94  setColor(color.r, color.g, color.b, color.a);
95  } else {
96  image = getAsImageMultiline(text);
97  }
98 
99  FIFE::Rect rect;
100  rect.x = x + clip.xOffset;
101  rect.y = y + clip.yOffset + yoffset;
102  rect.w = image->getWidth();
103  rect.h = image->getHeight();
104  if (!rect.intersects(Rect(clip.x,clip.y,clip.width,clip.height)) ) {
105  return;
106  }
107  image->render(rect);
108  }
109 
110  void GuiFont::setRowSpacing (int32_t spacing) {
111  m_font->setRowSpacing(spacing);
112  }
113 
114  int32_t GuiFont::getRowSpacing() const {
115  return m_font->getRowSpacing();
116  }
117 
118  void GuiFont::setGlyphSpacing(int32_t spacing) {
119  m_font->setGlyphSpacing(spacing);
120  }
121 
122  int32_t GuiFont::getGlyphSpacing() const {
123  return m_font->getGlyphSpacing();
124  }
125 
126  void GuiFont::setAntiAlias(bool antiAlias) {
127  m_font->setAntiAlias(antiAlias);
128  }
129 
130  bool GuiFont::isAntiAlias() const {
131  return m_font->isAntiAlias();
132  }
133 
134  void GuiFont::setBoldStyle(bool style) {
135  m_font->setBoldStyle(style);
136  }
137 
138  bool GuiFont::isBoldStyle() const {
139  return m_font->isBoldStyle();
140  }
141 
142  void GuiFont::setItalicStyle(bool style) {
143  m_font->setItalicStyle(style);
144  }
145 
146  bool GuiFont::isItalicStyle() const {
147  return m_font->isItalicStyle();
148  }
149 
150  void GuiFont::setUnderlineStyle(bool style) {
151  m_font->setUnderlineStyle(style);
152  }
153 
155  return m_font->isUnderlineStyle();
156  }
157 
160  }
161 
163  return m_font->isStrikethroughStyle();
164  }
165 
166  void GuiFont::setDynamicColoring(bool coloring) {
167  m_font->setDynamicColoring(coloring);
168  }
169 
171  return m_font->isDynamicColoring();
172  }
173 
174  Image* GuiFont::getAsImage(const std::string& text) {
175  return m_font->getAsImage(text);
176  }
177 
178  Image* GuiFont::getAsImageMultiline(const std::string& text) {
179  return m_font->getAsImageMultiline(text);
180  }
181 
182  std::string GuiFont::splitTextToWidth (const std::string& text, int32_t render_width) {
183  return m_font->splitTextToWidth(text,render_width);
184  }
185 
187  m_font->setColor(r, g, b, a);
188  }
189 
190  SDL_Color GuiFont::getColor() const {
191  return m_font->getColor();
192  }
193 
194  int32_t GuiFont::getWidth(const std::string& text) const {
195  return m_font->getWidth(text);
196  }
197 
198  int32_t GuiFont::getHeight() const {
199  return m_font->getHeight();
200  }
201 
203  m_font->invalidate();
204  }
205 }
void invalidate()
Definition: gui_font.cpp:202
std::string splitTextToWidth(const std::string &text, int32_t render_width)
Definition: gui_font.cpp:182
virtual void setItalicStyle(bool style)=0
Sets the use of italic style.
bool isStrikethroughStyle() const
Checks if strikethrough style is used.
Definition: gui_font.cpp:162
void setUnderlineStyle(bool style)
Sets the use of underline style.
Definition: gui_font.cpp:150
void drawString(fcn::Graphics *graphics, const std::string &text, int32_t x, int32_t y)
Definition: gui_font.cpp:50
virtual bool isDynamicColoring() const =0
Base Class for Images.
Definition: image.h:48
void setDynamicColoring(bool coloring)
Definition: gui_font.cpp:166
T h
Height of the rectangle.
Definition: rect.h:93
T x
The X Coordinate.
Definition: rect.h:84
virtual bool isUnderlineStyle() const =0
Checks if underline style is used.
GuiFont(IFont *font)
Constructor Takes the ownership of given font.
Definition: gui_font.cpp:38
Image * getAsImage(const std::string &text)
Gets given text as Image The rsulting image is pooled, so it&#39;s not that time critical.
Definition: gui_font.cpp:174
virtual bool isBoldStyle() const =0
Checks if bold style is used.
void setBoldStyle(bool style)
Sets the use of bold style.
Definition: gui_font.cpp:134
virtual Image * getAsImage(const std::string &text)=0
Gets given text as Image The rsulting image is pooled, so it&#39;s not that time critical.
virtual Image * getAsImageMultiline(const std::string &text)=0
Gets given text as Image.
virtual void setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t a=255)=0
Set the color the text should be rendered in.
virtual std::string splitTextToWidth(const std::string &text, int32_t render_width)=0
virtual int32_t getRowSpacing() const =0
Gets the spacing between rows in pixels.
virtual bool isStrikethroughStyle() const =0
Checks if strikethrough style is used.
virtual ~GuiFont()
Definition: gui_font.cpp:42
virtual void invalidate()=0
virtual void setUnderlineStyle(bool style)=0
Sets the use of underline style.
virtual SDL_Color getColor() const =0
Get the color the text was rendered in.
void drawMultiLineString(fcn::Graphics *graphics, const std::string &text, int32_t x, int32_t y)
Definition: gui_font.cpp:80
SDL_Color getColor() const
Get the color the text was rendered in.
Definition: gui_font.cpp:190
void setRowSpacing(int32_t spacing)
Sets the spacing between rows in pixels.
Definition: gui_font.cpp:110
Image * getAsImageMultiline(const std::string &text)
Gets given text as Image.
Definition: gui_font.cpp:178
bool intersects(const RectType< T > &rect) const
Check whether two rectangles share some area.
Definition: rect.h:227
unsigned char uint8_t
Definition: core.h:38
uint32_t getHeight() const
Definition: image.cpp:160
virtual int32_t getStringIndexAt(const std::string &text, int32_t x) const =0
IFont * m_font
Definition: gui_font.h:77
virtual void setStrikethroughStyle(bool style)=0
Sets the use of strikethrough style.
void setGlyphSpacing(int32_t spacing)
Sets the spacing between letters in pixels.
Definition: gui_font.cpp:118
virtual int32_t getHeight() const =0
gets height of this font
virtual void setGlyphSpacing(int32_t spacing)=0
Sets the spacing between letters in pixels.
bool isAntiAlias() const
Checks if anti aliasing is used.
Definition: gui_font.cpp:130
virtual void setBoldStyle(bool style)=0
Sets the use of bold style.
T y
The Y Coordinate.
Definition: rect.h:87
virtual int32_t getGlyphSpacing() const =0
Gets the spacing between letters in pixels.
virtual bool isAntiAlias() const =0
Checks if anti aliasing is used.
int32_t getStringIndexAt(const std::string &text, int32_t x) const
Definition: gui_font.cpp:46
bool isUnderlineStyle() const
Checks if underline style is used.
Definition: gui_font.cpp:154
Pure abstract Font interface.
Definition: ifont.h:43
virtual void render(const Rect &rect, uint8_t alpha=255, uint8_t const *rgb=0)=0
Renders itself to the current render target (main screen or attached destination image) at the rectan...
int32_t getHeight() const
gets height of this font
Definition: gui_font.cpp:198
void setAntiAlias(bool antiAlias)
Sets the use of anti aliasing.
Definition: gui_font.cpp:126
virtual void setRowSpacing(int32_t spacing)=0
Sets the spacing between rows in pixels.
bool isItalicStyle() const
Checks if italic style is used.
Definition: gui_font.cpp:146
int32_t getWidth(const std::string &text) const
gets width of given text
Definition: gui_font.cpp:194
virtual bool isItalicStyle() const =0
Checks if italic style is used.
int32_t getGlyphSpacing() const
Gets the spacing between letters in pixels.
Definition: gui_font.cpp:122
int32_t getRowSpacing() const
Gets the spacing between rows in pixels.
Definition: gui_font.cpp:114
virtual int32_t getWidth(const std::string &text) const =0
gets width of given text
virtual void setAntiAlias(bool antiAlias)=0
Sets the use of anti aliasing.
void setItalicStyle(bool style)
Sets the use of italic style.
Definition: gui_font.cpp:142
bool isDynamicColoring() const
Definition: gui_font.cpp:170
T w
Width of the rectangle.
Definition: rect.h:90
void setStrikethroughStyle(bool style)
Sets the use of strikethrough style.
Definition: gui_font.cpp:158
void setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t a=255)
Set the color the text should be rendered in.
Definition: gui_font.cpp:186
bool isBoldStyle() const
Checks if bold style is used.
Definition: gui_font.cpp:138
virtual void setDynamicColoring(bool coloring)=0
uint32_t getWidth() const
Definition: image.cpp:151