8#include "imgui/imgui.h"
13#include <unordered_set>
26 class RasterizeSVGTask;
36 std::unique_ptr<uint8_t[]>
data;
49 PiFace(
const std::string &
svgname, uint16_t startGlyph,
int columns,
int rows) :
52 m_svgcolumns(columns),
53 m_loadrange({ startGlyph, startGlyph + (rows * columns) })
57 const std::string &
ttfname()
const {
return m_ttfname; }
60 const std::string &
svgname()
const {
return m_svgname; }
61 bool isSvgFont()
const {
return !m_svgname.empty(); }
64 int svgCols()
const {
return m_svgcolumns; }
67 ImFont *
addTTFFaceToAtlas(
int pixelSize, ImFontConfig *config, ImVector<ImWchar> *ranges);
77 std::string m_ttfname;
80 std::string m_svgname;
114 m_pixelsize(pixelSize)
118 const std::string &
name()
const {
return m_fontDef.
name; }
119 std::vector<PiFace> &
faces()
const {
return m_fontDef.
faces; }
120 const std::vector<UsedRange> &
used_ranges()
const {
return m_used_ranges; }
126 void describe(
bool withFaces =
false)
const;
128 bool addGlyph(
unsigned short glyph);
133 std::vector<UsedRange> m_used_ranges;
134 std::vector<CustomGlyphData> m_custom_glyphs;
137 class InstanceRenderer;
164 ImFont *
AddFont(
const std::string &name,
int size);
165 ImFont *
GetFont(
const std::string &name,
int size);
167 void AddGlyph(ImFont *font,
unsigned short glyph);
174 std::unique_ptr<InstanceRenderer> m_instanceRenderer;
178 char *m_ioIniFilename;
180 std::map<std::pair<std::string, int>, ImFont *> m_fonts;
181 std::map<ImFont *, std::pair<std::string, int>> m_im_fonts;
182 std::map<std::pair<std::string, int>,
PiFont> m_pi_fonts;
183 bool m_should_bake_fonts;
185 std::map<std::string, PiFontDefinition> m_font_definitions;
187 std::vector<ImVector<ImWchar> *> m_glyphRanges;
188 std::vector<RasterizeSVGTask *> m_svgFontTasks;
189 std::map<std::string, std::vector<RasterizeSVGResult>> m_svgFontRasterData;
191 ImGuiStyle m_debugStyle;
192 bool m_debugStyleActive;
196 m_font_definitions[font.
name] = font;
199 void LoadFontDefinitionFromFile(
const std::string &filePath);
202 void BakeFont(PiFont &font);
205 RasterizeSVGResult *RequestSVGFaceData(PiFace *face,
int pixelsize);
208 int RadialPopupSelectMenu(
const ImVec2 center,
const char *popup_id,
int mouse_button,
const std::vector<ImTextureID> &tex_ids,
const std::vector<std::pair<ImVec2, ImVec2>> &uvs,
const std::vector<ImU32> &colors,
const std::vector<const char *> &tooltips,
unsigned int size,
unsigned int padding);
209 bool CircularSlider(
const ImVec2 ¢er,
float *v,
float v_min,
float v_max);
211 bool LowThrustButton(
const char *label,
const ImVec2 &size_arg,
int thrust_level,
const ImVec4 &bg_col,
int frame_padding, ImColor gauge_fg, ImColor gauge_bg);
212 bool ButtonImageSized(ImTextureID user_texture_id,
const ImVec2 &size,
const ImVec2 &imgSize,
const ImVec2 &uv0,
const ImVec2 &uv1,
int frame_padding,
const ImVec4 &bg_col,
const ImVec4 &tint_col);
214 void ThrustIndicator(
const std::string &id_string,
const ImVec2 &size,
const ImVec4 &thrust,
const ImVec4 &velocity,
const ImVec4 &bg_col,
int frame_padding, ImColor vel_fg, ImColor vel_bg, ImColor thrust_fg, ImColor thrust_bg);
225 DragChangeMode IncrementDrag(
const char *label,
double &v,
float v_speed,
const double v_min,
const double v_max,
const char *format,
bool draw_progress_bar);
229 return ImGui::GetIO().WantCaptureMouse;
234 return ImGui::GetIO().WantCaptureKeyboard;
Definition: Renderer.h:45
Definition: GuiApplication.h:27
Definition: PiGuiRenderer.h:13
InstanceRenderer * GetRenderer()
Definition: PiGui.h:147
bool ProcessEvent(SDL_Event *event)
Definition: PiGui.cpp:424
ImFont * GetFont(const std::string &name, int size)
Definition: PiGui.cpp:315
ImFont * AddFont(const std::string &name, int size)
Definition: PiGui.cpp:353
void AddGlyph(ImFont *font, unsigned short glyph)
Definition: PiGui.cpp:328
void EndFrame()
Definition: PiGui.cpp:486
void Uninit()
Definition: PiGui.cpp:677
void Render()
Definition: PiGui.cpp:495
void SetNormalStyle()
Definition: PiGui.cpp:307
void Init(Graphics::Renderer *renderer)
Definition: PiGui.cpp:386
void NewFrame()
Definition: PiGui.cpp:431
void SetDebugStyle()
Definition: PiGui.cpp:299
ImFont * addTTFFaceToAtlas(int pixelSize, ImFontConfig *config, ImVector< ImWchar > *ranges)
Definition: PiGui.cpp:702
std::pair< uint16_t, uint16_t > UsedRange
Definition: PiGui.h:43
float sizefactor() const
Definition: PiGui.h:58
const std::string & svgname() const
Definition: PiGui.h:60
int svgRows() const
Definition: PiGui.h:63
int svgCols() const
Definition: PiGui.h:64
ImFont * addSVGFaceToAtlas(int pixelSize, ImFontConfig *config, ImVector< ImWchar > *ranges, RasterizeSVGResult *svgData, ImVector< int > *outGlyphRects)
Definition: PiGui.cpp:712
PiFace(const std::string &svgname, uint16_t startGlyph, int columns, int rows)
Definition: PiGui.h:49
PiFace(const std::string &ttfname, float sizefactor)
Definition: PiGui.h:45
bool isSvgFont() const
Definition: PiGui.h:61
const std::string & ttfname() const
Definition: PiGui.h:57
void finishSVGFaceData(ImFont *font, int pixelSize, RasterizeSVGResult *svgData, ImVector< int > *glyphRects)
Definition: PiGui.cpp:745
int pixelsize() const
Definition: PiGui.h:121
std::pair< uint16_t, uint16_t > UsedRange
Definition: PiGui.h:103
void describe(bool withFaces=false) const
Definition: PiGui.cpp:800
std::vector< CustomGlyphData > & custom_glyphs()
Definition: PiGui.h:124
const PiFontDefinition & definition() const
Definition: PiGui.h:122
std::vector< PiFace > & faces() const
Definition: PiGui.h:119
const std::string & name() const
Definition: PiGui.h:118
PiFont(PiFontDefinition &fontDef, int pixelSize)
Definition: PiGui.h:112
bool addGlyph(unsigned short glyph)
Definition: PiGui.cpp:784
const std::vector< UsedRange > & used_ranges() const
Definition: PiGui.h:120
Definition: RefCounted.h:11
Definition: Background.h:14
Definition: GuiApplication.h:18
DragChangeMode IncrementDrag(const char *label, double &v, float v_speed, const double v_min, const double v_max, const char *format, bool draw_progress_bar)
Definition: Widgets.cpp:320
bool WantCaptureMouse()
Definition: PiGui.h:227
DragChangeMode
Definition: PiGui.h:224
bool LowThrustButton(const char *label, const ImVec2 &size_arg, int thrust_level, const ImVec4 &bg_col, int frame_padding, ImColor gauge_fg, ImColor gauge_bg)
Definition: Widgets.cpp:222
std::vector< Graphics::Texture * > & GetSVGTextures()
Definition: PiGui.cpp:36
ImTextureID RenderSVG(Graphics::Renderer *renderer, std::string svgFilename, int width, int height)
Definition: PiGui.cpp:168
int RadialPopupSelectMenu(const ImVec2 center, const char *popup_id, int mouse_button, const std::vector< ImTextureID > &tex_ids, const std::vector< std::pair< ImVec2, ImVec2 > > &uvs, const std::vector< ImU32 > &colors, const std::vector< const char * > &tooltips, unsigned int size, unsigned int padding)
Definition: Widgets.cpp:11
bool CircularSlider(const ImVec2 ¢er, float *v, float v_min, float v_max)
Definition: Widgets.cpp:121
bool WantCaptureKeyboard()
Definition: PiGui.h:232
bool ButtonImageSized(ImTextureID user_texture_id, const ImVec2 &size, const ImVec2 &imgSize, const ImVec2 &uv0, const ImVec2 &uv1, int frame_padding, const ImVec4 &bg_col, const ImVec4 &tint_col)
Definition: Widgets.cpp:280
void ThrustIndicator(const std::string &id_string, const ImVec2 &size, const ImVec4 &thrust, const ImVec4 &velocity, const ImVec4 &bg_col, int frame_padding, ImColor vel_fg, ImColor vel_bg, ImColor thrust_fg, ImColor thrust_bg)
Definition: Widgets.cpp:159
std::string name
Definition: PiGui.h:96
PiFontDefinition(const std::string &name, const std::vector< PiFace > &faces)
Definition: PiGui.h:90
bool loadDefaultRange
Definition: PiGui.h:98
PiFontDefinition(const std::string &name)
Definition: PiGui.h:88
PiFontDefinition()
Definition: PiGui.h:93
std::vector< PiFace > faces
Definition: PiGui.h:97
RasterizeSVGResult * svgData
Definition: PiGui.h:109
std::unique_ptr< ImVector< int > > glyphRects
Definition: PiGui.h:108
ImFont * font
Definition: PiGui.h:106
PiFace * face
Definition: PiGui.h:107
RasterizeSVGResult(uint8_t *data, int width, int height)
Definition: PiGui.h:29
int width
Definition: PiGui.h:37
std::unique_ptr< uint8_t[]> data
Definition: PiGui.h:36
int height
Definition: PiGui.h:38