Plutonium framework API 0.3.0
UI framework libraries for libnx
ui_Application.hpp
Go to the documentation of this file.
1
2/*
3
4 Plutonium library
5
6 @file ui_Application.hpp
7 @brief An Application is the base to use the UI system of this library.
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_Dialog.hpp>
16#include <pu/ui/ui_Layout.hpp>
17#include <pu/ui/ui_Overlay.hpp>
18#include <chrono>
19
20namespace pu::ui {
21
23 public:
24 using OnInputCallback = std::function<void(const u64, const u64, const u64, const TouchPoint)>;
25 using RenderCallback = std::function<void()>;
26 using RenderOverFunction = std::function<bool(render::Renderer::Ref&)>;
27
28 static constexpr u8 DefaultFadeAlphaIncrement = 35;
29
30 protected:
31 bool loaded;
37 Layout::Ref lyt;
38 Overlay::Ref ovl;
40 std::chrono::steady_clock::time_point ovl_start_time;
41 std::vector<RenderCallback> render_cbs;
43 render::Renderer::Ref renderer;
44 PadState input_pad;
45
46 public:
47 Application(render::Renderer::Ref renderer);
49
50 inline void LoadLayout(Layout::Ref lyt) {
51 this->lyt = lyt;
52 }
53
54 template<typename L>
55 inline std::shared_ptr<L> GetLayout() {
56 static_assert(std::is_base_of_v<ui::Layout, L>);
57 return std::static_pointer_cast<L>(this->lyt);
58 }
59
60 void Prepare();
61
62 // Force create a derived Application class which initializes everything here
63 virtual void OnLoad() = 0;
64
65 inline void AddRenderCallback(RenderCallback render_cb) {
66 this->render_cbs.push_back(render_cb);
67 }
68
70 this->on_ipt_cb = on_ipt_cb;
71 }
72
73 inline i32 ShowDialog(Dialog::Ref &dialog) {
74 return dialog->Show(this);
75 }
76
77 i32 CreateShowDialog(const std::string &title, const std::string &content, const std::vector<std::string> &opts, const bool use_last_opt_as_cancel, const std::string &icon_path = "");
78
79 inline void StartOverlay(Overlay::Ref ovl) {
80 if(this->ovl == nullptr) {
81 this->ovl = ovl;
82 }
83 }
84
85 void StartOverlayWithTimeout(Overlay::Ref ovl, const u64 ms);
86 void EndOverlay();
87 void Show();
88
89 inline void ShowWithFadeIn() {
90 this->FadeIn();
91 this->Show();
92 }
93
94 inline bool IsShown() {
95 return this->is_shown;
96 }
97
98 inline bool CanBeShown() {
99 return this->loaded && (this->lyt != nullptr);
100 }
101
104 void FadeIn();
105 void FadeOut();
106
107 inline bool IsFadedIn() {
108 return this->fade_alpha > 0;
109 }
110
112 this->fade_alpha_increment = fade_alpha_increment;
113 }
114
115 void OnRender();
116 void Close();
117
118 inline void CloseWithFadeOut() {
119 this->FadeOut();
120 this->Close();
121 }
122
123 inline u64 GetButtonsDown() {
124 return padGetButtonsDown(&this->input_pad);
125 }
126
127 inline u64 GetButtonsUp() {
128 return padGetButtonsUp(&this->input_pad);
129 }
130
131 inline u64 GetButtonsHeld() {
132 return padGetButtons(&this->input_pad);
133 }
134
135 inline HidTouchScreenState GetTouchState() {
136 HidTouchScreenState state = {};
137 hidGetTouchScreenStates(&state, 1);
138 return state;
139 }
140 };
141
142}
Definition: ui_Application.hpp:22
bool IsShown()
Definition: ui_Application.hpp:94
bool is_shown
Definition: ui_Application.hpp:34
std::vector< RenderCallback > render_cbs
Definition: ui_Application.hpp:41
HidTouchScreenState GetTouchState()
Definition: ui_Application.hpp:135
virtual void OnLoad()=0
OnInputCallback on_ipt_cb
Definition: ui_Application.hpp:42
std::function< bool(render::Renderer::Ref &)> RenderOverFunction
Definition: ui_Application.hpp:26
Application(render::Renderer::Ref renderer)
Layout::Ref lyt
Definition: ui_Application.hpp:37
void StartOverlay(Overlay::Ref ovl)
Definition: ui_Application.hpp:79
void StartOverlayWithTimeout(Overlay::Ref ovl, const u64 ms)
u64 GetButtonsDown()
Definition: ui_Application.hpp:123
void CloseWithFadeOut()
Definition: ui_Application.hpp:118
u64 GetButtonsUp()
Definition: ui_Application.hpp:127
u64 GetButtonsHeld()
Definition: ui_Application.hpp:131
bool CanBeShown()
Definition: ui_Application.hpp:98
void SetFadeAlphaIncrement(const u8 fade_alpha_increment)
Definition: ui_Application.hpp:111
u8 fade_alpha_increment
Definition: ui_Application.hpp:35
void AddRenderCallback(RenderCallback render_cb)
Definition: ui_Application.hpp:65
void ShowWithFadeIn()
Definition: ui_Application.hpp:89
static constexpr u8 DefaultFadeAlphaIncrement
Definition: ui_Application.hpp:28
PadState input_pad
Definition: ui_Application.hpp:44
i32 CreateShowDialog(const std::string &title, const std::string &content, const std::vector< std::string > &opts, const bool use_last_opt_as_cancel, const std::string &icon_path="")
std::function< void()> RenderCallback
Definition: ui_Application.hpp:25
bool in_render_over
Definition: ui_Application.hpp:32
i32 fade_alpha
Definition: ui_Application.hpp:36
void SetOnInput(OnInputCallback on_ipt_cb)
Definition: ui_Application.hpp:69
bool loaded
Definition: ui_Application.hpp:31
std::shared_ptr< L > GetLayout()
Definition: ui_Application.hpp:55
bool IsFadedIn()
Definition: ui_Application.hpp:107
Overlay::Ref ovl
Definition: ui_Application.hpp:38
RenderOverFunction render_over_fn
Definition: ui_Application.hpp:33
u64 ovl_timeout_ms
Definition: ui_Application.hpp:39
bool CallForRenderWithRenderOver(RenderOverFunction render_over_fn)
render::Renderer::Ref renderer
Definition: ui_Application.hpp:43
void LoadLayout(Layout::Ref lyt)
Definition: ui_Application.hpp:50
i32 ShowDialog(Dialog::Ref &dialog)
Definition: ui_Application.hpp:73
std::function< void(const u64, const u64, const u64, const TouchPoint)> OnInputCallback
Definition: ui_Application.hpp:24
std::chrono::steady_clock::time_point ovl_start_time
Definition: ui_Application.hpp:40
Definition: ui_Layout.hpp:20
Definition: elm_Button.hpp:18
s32 i32
Definition: pu_Include.hpp:28
#define PU_SMART_CTOR(type)
Definition: pu_Include.hpp:19
Definition: ui_Types.hpp:62