Plutonium framework API  0.3
Simple UI framework for libnx and SDL2
render_Renderer.hpp
Go to the documentation of this file.
1 
2 /*
3 
4  Plutonium library
5 
6  @file render_Renderer.hpp
7  @brief A Renderer is the object performing basic rendering. (simply, a SDL2 wrapper)
8  @author XorTroll
9 
10  @copyright Plutonium project - an easy-to-use UI framework for Nintendo Switch homebrew
11 
12 */
13 
14 #pragma once
15 #include <pu/ui/ui_Types.hpp>
17 #include <string>
18 #include <fstream>
19 #include <vector>
20 
21 namespace pu::ui::render
22 {
24  {
25  u32 SDLFlags;
27  u32 Width;
28  u32 Height;
29  bool InitTTF;
30  std::vector<u32> DefaultFontExtraSizes;
32  bool InitMixer;
34  bool InitIMG;
35  u32 IMGFlags;
36  bool InitPL;
37  bool InitRomFs;
38 
39  RendererInitOptions(u32 sdl_flags, u32 render_flags, u32 w = 1280, u32 h = 720) : SDLFlags(sdl_flags), RenderFlags(render_flags), Width(w), Height(h) {}
40 
41  // Empty font path = using shared font
42  inline RendererInitOptions WithTTF(String default_font_path = "")
43  {
44  this->InitTTF = true;
45  if(default_font_path.HasAny()) this->DefaultFontPath = default_font_path;
46  else this->InitPL = true;
47  return *this;
48  }
49 
51  {
52  this->DefaultFontExtraSizes.push_back(font_size);
53  return *this;
54  }
55 
56  inline RendererInitOptions WithMixer(u32 flags)
57  {
58  this->InitMixer = true;
59  this->MixerFlags = flags;
60  return *this;
61  }
62 
63  inline RendererInitOptions WithIMG(u32 flags)
64  {
65  this->InitIMG = true;
66  this->IMGFlags = flags;
67  return *this;
68  }
69 
71  {
72  this->InitRomFs = true;
73  return *this;
74  }
75  };
76 
77  static constexpr u32 MixerAllFlags = (MIX_INIT_FLAC | MIX_INIT_MOD | MIX_INIT_MP3 | MIX_INIT_OGG);
78  static constexpr u32 IMGAllFlags = (IMG_INIT_PNG | IMG_INIT_JPG | IMG_INIT_TIF | IMG_INIT_WEBP);
79  static constexpr u32 RendererSoftwareFlags = SDL_RENDERER_SOFTWARE;
80  static constexpr u32 RendererHardwareFlags = (SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
81 
83  {
87  float Angle;
88 
89  // No extra alpha, no custom size, no rotation
91  };
92 
93  inline constexpr const TextureRenderOptions TextureRenderOptions::Default = { .AlphaMod = -1, .Width = -1, .Height = -1, .Angle = -1.0f };
94 
95  class Renderer
96  {
97  public:
100 
101  void Initialize();
102  void Finalize();
103  bool HasInitialized();
104  bool HasRomFs();
105  void InitializeRender(Color Color);
106  void FinalizeRender();
107  void RenderTexture(sdl2::Texture Texture, i32 X, i32 Y, TextureRenderOptions Options = TextureRenderOptions::Default);
108  void RenderRectangle(Color Color, i32 X, i32 Y, i32 Width, i32 Height);
109  void RenderRectangleFill(Color Color, i32 X, i32 Y, i32 Width, i32 Height);
110  void RenderRectangleOutline(Color Color, u32 X, u32 Y, u32 Width, u32 Height, u32 BorderWidth);
111  void RenderRoundedRectangle(Color Color, i32 X, i32 Y, i32 Width, i32 Height, i32 Radius);
112  void RenderRoundedRectangleFill(Color Color, i32 X, i32 Y, i32 Width, i32 Height, i32 Radius);
113  void RenderCircle(Color Color, i32 X, i32 Y, i32 Radius);
114  void RenderCircleFill(Color Color, i32 X, i32 Y, i32 Radius);
115  void RenderShadowSimple(i32 X, i32 Y, i32 Width, i32 Height, i32 BaseAlpha, u8 MainAlpha = 255);
116  void SetBaseRenderPosition(i32 X, i32 Y);
117  void UnsetBaseRenderPosition();
118  void SetBaseRenderAlpha(u8 Alpha);
119  void UnsetBaseRenderAlpha();
120  private:
121  RendererInitOptions initopts;
122  bool okromfs;
123  bool okpl;
124  bool initialized;
125  i32 basex;
126  i32 basey;
127  int basea;
128  };
129 
130  // Global rendering
131 
135 
136  std::pair<u32, u32> GetDimensions();
137 
138  // Text rendering
139 
140  void AddSharedFont(String font_name, u32 font_size, PlSharedFontType type);
141  void AddAllSharedFonts(String font_name, u32 font_size);
142  void AddFontFile(String font_name, u32 font_size, String path);
143 
144  inline void AddDefaultFontFromShared(u32 font_size)
145  {
146  std::string font_name = "DefaultFont@" + std::to_string(font_size);
147  AddAllSharedFonts(font_name, font_size);
148  }
149 
150  inline void AddDefaultFontFromFile(u32 font_size, String path)
151  {
152  std::string font_name = "DefaultFont@" + std::to_string(font_size);
153  AddFontFile(font_name, font_size, path);
154  }
155 
156  sdl2::Texture RenderText(String font_name, String Text, Color Color);
157  i32 GetTextWidth(String font_name, String Text);
158  i32 GetTextHeight(String font_name, String Text);
159 
160 }
i32 AlphaMod
Definition: render_Renderer.hpp:84
Definition: pu_String.hpp:21
RendererInitOptions WithMixer(u32 flags)
Definition: render_Renderer.hpp:56
i32 Width
Definition: render_Renderer.hpp:85
RendererInitOptions WithDefaultFontSize(u32 font_size)
Definition: render_Renderer.hpp:50
bool InitRomFs
Definition: render_Renderer.hpp:37
Definition: ui_Types.hpp:24
i32 GetTextHeight(String font_name, String Text)
sdl2::Renderer GetMainRenderer()
void AddDefaultFontFromFile(u32 font_size, String path)
Definition: render_Renderer.hpp:150
bool InitMixer
Definition: render_Renderer.hpp:32
static constexpr u32 RendererHardwareFlags
Definition: render_Renderer.hpp:80
sdl2::Texture RenderText(String font_name, String Text, Color Color)
SDL_Window * Window
Definition: sdl2_Types.hpp:12
Definition: render_Renderer.hpp:21
void AddFontFile(String font_name, u32 font_size, String path)
u32 RenderFlags
Definition: render_Renderer.hpp:26
std::vector< u32 > DefaultFontExtraSizes
Definition: render_Renderer.hpp:30
bool InitPL
Definition: render_Renderer.hpp:36
SDL_Texture * Texture
Definition: sdl2_Types.hpp:11
RendererInitOptions WithTTF(String default_font_path="")
Definition: render_Renderer.hpp:42
sdl2::Window GetMainWindow()
String DefaultFontPath
Definition: render_Renderer.hpp:31
s32 i32
Definition: pu_Macros.hpp:17
#define PU_SMART_CTOR(type)
Definition: pu_Macros.hpp:8
i32 GetTextWidth(String font_name, String Text)
sdl2::Surface GetMainSurface()
u32 IMGFlags
Definition: render_Renderer.hpp:35
void AddDefaultFontFromShared(u32 font_size)
Definition: render_Renderer.hpp:144
u32 MixerFlags
Definition: render_Renderer.hpp:33
Definition: render_Renderer.hpp:95
static constexpr u32 IMGAllFlags
Definition: render_Renderer.hpp:78
static const TextureRenderOptions Default
Definition: render_Renderer.hpp:90
SDL_Renderer * Renderer
Definition: sdl2_Types.hpp:13
float Angle
Definition: render_Renderer.hpp:87
Definition: render_Renderer.hpp:23
RendererInitOptions WithRomfs()
Definition: render_Renderer.hpp:70
u32 SDLFlags
Definition: render_Renderer.hpp:25
RendererInitOptions(u32 sdl_flags, u32 render_flags, u32 w=1280, u32 h=720)
Definition: render_Renderer.hpp:39
u32 Width
Definition: render_Renderer.hpp:27
SDL_Surface * Surface
Definition: sdl2_Types.hpp:15
bool InitTTF
Definition: render_Renderer.hpp:29
i32 Height
Definition: render_Renderer.hpp:86
std::pair< u32, u32 > GetDimensions()
static constexpr u32 RendererSoftwareFlags
Definition: render_Renderer.hpp:79
bool InitIMG
Definition: render_Renderer.hpp:34
void AddAllSharedFonts(String font_name, u32 font_size)
u32 Height
Definition: render_Renderer.hpp:28
void AddSharedFont(String font_name, u32 font_size, PlSharedFontType type)
Definition: render_Renderer.hpp:82
RendererInitOptions WithIMG(u32 flags)
Definition: render_Renderer.hpp:63
static constexpr u32 MixerAllFlags
Definition: render_Renderer.hpp:77