Pioneer
GuiScreen.h
Go to the documentation of this file.
1 // Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _GUISCREEN_H
5 #define _GUISCREEN_H
6 
7 #include "FontCache.h"
8 #include "Gui.h"
9 #include "graphics/Graphics.h"
10 #include "graphics/RenderState.h"
11 #include "text/TextureFont.h"
12 #include <list>
13 #include <stack>
14 
15 namespace Graphics {
16  class Renderer;
17 }
18 
19 namespace Gui {
20  class Screen {
21  public:
22  static void Init(Graphics::Renderer *renderer, int real_width, int real_height, int ui_width, int ui_height);
23  static void Uninit();
24  static void Draw();
25  static void AddBaseWidget(Widget *w, int x, int y);
26  static void RemoveBaseWidget(Widget *w);
27  static void OnMouseMotion(SDL_MouseMotionEvent *e);
28  static void OnClick(SDL_MouseButtonEvent *e);
29  static void OnKeyDown(const SDL_Keysym *sym);
30  static void OnKeyUp(const SDL_Keysym *sym);
31  static void OnTextInput(const SDL_TextInputEvent *e);
32  static void EnterOrtho();
33  static void LeaveOrtho();
34  static int GetWidth() { return width; }
35  static int GetHeight() { return height; }
36  // gluProject but fixes UI/screen size mismatch
37  static bool Project(const vector3d &in, vector3d &out);
38  friend void Widget::SetShortcut(SDL_Keycode key, SDL_Keymod mod);
39  friend Widget::~Widget();
40  static bool IsBaseWidget(const Widget *);
41  static void GetCoords2Pixels(float scale[2])
42  {
43  scale[0] = fontScale[0];
44  scale[1] = fontScale[1];
45  }
46  static const float *GetCoords2Pixels() { return fontScale; }
47  static void SetFocused(Widget *w, bool enableKeyRepeat = false);
48  static void ClearFocus();
49  static bool IsFocused(Widget *w)
50  {
51  return w == focusedWidget;
52  }
53 
54  static void PushFont(RefCountedPtr<Text::TextureFont> font) { s_fontStack.push(font); }
55  static void PushFont(std::string name) { PushFont(s_fontCache.GetTextureFont(name)); }
56  static void PopFont() { s_fontStack.pop(); };
57  static RefCountedPtr<Text::TextureFont> GetFont() { return s_fontStack.size() ? s_fontStack.top() : s_defaultFont; }
58  static RefCountedPtr<Text::TextureFont> GetDefaultFont() { return s_defaultFont; }
59 
60  static float GetFontHeight(Text::TextureFont *font = 0);
61  static float GetFontDescender(Text::TextureFont *font = 0);
62 
63  static void RenderStringBuffer(RefCountedPtr<Graphics::VertexBuffer> vb, const std::string &s, float xoff, float yoff, const Color &color = Color::WHITE, Text::TextureFont *font = 0);
64  static void RenderMarkupBuffer(RefCountedPtr<Graphics::VertexBuffer> vb, const std::string &s, const Color &color = Color::WHITE, Text::TextureFont *font = 0);
65  static void MeasureString(const std::string &s, float &w, float &h, Text::TextureFont *font = 0);
66  static int PickCharacterInString(const std::string &s, float x, float y, Text::TextureFont *font = 0);
67  static void MeasureCharacterPos(const std::string &s, int charIndex, float &x, float &y, Text::TextureFont *font = 0);
68 
69  static Graphics::Renderer *GetRenderer() { return s_renderer; }
70 
73 
74  private:
75  static void AddShortcutWidget(Widget *w);
76  static void RemoveShortcutWidget(Widget *w);
77  static void SDLEventCoordToScreenCoord(int sdlev_x, int sdlev_y, float *x, float *y);
78 
79  static bool initted;
80  static int width, height;
81  static int realWidth, realHeight;
82  static float invRealWidth, invRealHeight;
83  static std::list<Widget *> kbshortcut_widgets;
84  static std::list<Widget *> mouseHoveredWidgets;
85  static float fontScale[2];
86  static Gui::Fixed *baseContainer;
87  static Gui::Widget *focusedWidget;
88  static void OnDeleteFocusedWidget();
89  static matrix4x4f modelMatrix;
90  static matrix4x4f projMatrix;
91  static Graphics::Viewport viewport;
92 
93  static FontCache s_fontCache;
94  static std::stack<RefCountedPtr<Text::TextureFont>> s_fontStack;
95  static RefCountedPtr<Text::TextureFont> s_defaultFont;
96 
97  static Graphics::Renderer *s_renderer;
98  };
99 } // namespace Gui
100 
101 #endif /* _GUISCREEN_H */
Definition: FontCache.h:12
RefCountedPtr< Text::TextureFont > GetTextureFont(const std::string &name)
Definition: FontCache.cpp:10
Definition: Material.h:81
Definition: RenderState.h:25
Definition: Renderer.h:39
Definition: GuiFixed.h:14
Definition: GuiScreen.h:20
static void PopFont()
Definition: GuiScreen.h:56
static bool IsBaseWidget(const Widget *)
Definition: GuiScreen.cpp:157
static void GetCoords2Pixels(float scale[2])
Definition: GuiScreen.h:41
static float GetFontHeight(Text::TextureFont *font=0)
Definition: GuiScreen.cpp:237
static void Init(Graphics::Renderer *renderer, int real_width, int real_height, int ui_width, int ui_height)
Definition: GuiScreen.cpp:35
static float GetFontDescender(Text::TextureFont *font=0)
Definition: GuiScreen.cpp:244
static void Draw()
Definition: GuiScreen.cpp:148
static void AddBaseWidget(Widget *w, int x, int y)
Definition: GuiScreen.cpp:163
static void LeaveOrtho()
Definition: GuiScreen.cpp:138
static Graphics::Renderer * GetRenderer()
Definition: GuiScreen.h:69
static void RenderStringBuffer(RefCountedPtr< Graphics::VertexBuffer > vb, const std::string &s, float xoff, float yoff, const Color &color=Color::WHITE, Text::TextureFont *font=0)
Definition: GuiScreen.cpp:284
static RefCountedPtr< Text::TextureFont > GetDefaultFont()
Definition: GuiScreen.h:58
static void RenderMarkupBuffer(RefCountedPtr< Graphics::VertexBuffer > vb, const std::string &s, const Color &color=Color::WHITE, Text::TextureFont *font=0)
Definition: GuiScreen.cpp:323
static Graphics::Material * flatColorMaterial
Definition: GuiScreen.h:72
static Graphics::RenderState * alphaBlendState
Definition: GuiScreen.h:71
static void PushFont(std::string name)
Definition: GuiScreen.h:55
static void OnKeyUp(const SDL_Keysym *sym)
Definition: GuiScreen.cpp:225
static int GetHeight()
Definition: GuiScreen.h:35
static void MeasureCharacterPos(const std::string &s, int charIndex, float &x, float &y, Text::TextureFont *font=0)
Definition: GuiScreen.cpp:261
static int GetWidth()
Definition: GuiScreen.h:34
static bool Project(const vector3d &in, vector3d &out)
Definition: GuiScreen.cpp:95
static void OnTextInput(const SDL_TextInputEvent *e)
Definition: GuiScreen.cpp:229
static RefCountedPtr< Text::TextureFont > GetFont()
Definition: GuiScreen.h:57
static int PickCharacterInString(const std::string &s, float x, float y, Text::TextureFont *font=0)
Definition: GuiScreen.cpp:273
static void OnKeyDown(const SDL_Keysym *sym)
Definition: GuiScreen.cpp:210
static void OnClick(SDL_MouseButtonEvent *e)
Definition: GuiScreen.cpp:192
static const float * GetCoords2Pixels()
Definition: GuiScreen.h:46
static void Uninit()
Definition: GuiScreen.cpp:66
static void OnMouseMotion(SDL_MouseMotionEvent *e)
Definition: GuiScreen.cpp:179
static void MeasureString(const std::string &s, float &w, float &h, Text::TextureFont *font=0)
Definition: GuiScreen.cpp:251
static void RemoveBaseWidget(Widget *w)
Definition: GuiScreen.cpp:168
static void EnterOrtho()
Definition: GuiScreen.cpp:124
static void SetFocused(Widget *w, bool enableKeyRepeat=false)
Definition: GuiScreen.cpp:81
static bool IsFocused(Widget *w)
Definition: GuiScreen.h:49
static void ClearFocus()
Definition: GuiScreen.cpp:88
static void PushFont(RefCountedPtr< Text::TextureFont > font)
Definition: GuiScreen.h:54
Definition: GuiWidget.h:14
virtual ~Widget()
Definition: GuiWidget.cpp:176
void SetShortcut(SDL_Keycode key, SDL_Keymod mod)
Definition: GuiWidget.cpp:70
Definition: TextureFont.h:34
Definition: Background.h:13
Definition: Gui.cpp:10
Definition: Color.h:66
static const Color4ub WHITE
Definition: Color.h:141
Definition: Graphics.h:58