aboutsummaryrefslogtreecommitdiff
path: root/include/cru
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru')
-rw-r--r--include/cru/osx/graphics/quartz/Font.h2
-rw-r--r--include/cru/platform/graphics/Font.h1
-rw-r--r--include/cru/ui/components/Input.h77
3 files changed, 80 insertions, 0 deletions
diff --git a/include/cru/osx/graphics/quartz/Font.h b/include/cru/osx/graphics/quartz/Font.h
index d53c6a20..50703dfe 100644
--- a/include/cru/osx/graphics/quartz/Font.h
+++ b/include/cru/osx/graphics/quartz/Font.h
@@ -17,9 +17,11 @@ class OsxCTFont : public OsxQuartzResource, public virtual IFont {
CTFontRef GetCTFont() const { return ct_font_; }
+ String GetFontName() override;
float GetFontSize() override;
private:
+ String name_;
CTFontRef ct_font_;
};
} // namespace cru::platform::graphics::osx::quartz
diff --git a/include/cru/platform/graphics/Font.h b/include/cru/platform/graphics/Font.h
index 24c35f7c..7144fdc2 100644
--- a/include/cru/platform/graphics/Font.h
+++ b/include/cru/platform/graphics/Font.h
@@ -3,6 +3,7 @@
namespace cru::platform::graphics {
struct CRU_PLATFORM_GRAPHICS_API IFont : virtual IGraphicsResource {
+ virtual String GetFontName() = 0;
virtual float GetFontSize() = 0;
};
} // namespace cru::platform::graphics
diff --git a/include/cru/ui/components/Input.h b/include/cru/ui/components/Input.h
new file mode 100644
index 00000000..e808afd7
--- /dev/null
+++ b/include/cru/ui/components/Input.h
@@ -0,0 +1,77 @@
+#pragma once
+#include "../controls/TextBox.h"
+#include "Component.h"
+
+namespace cru::ui::components {
+struct CRU_UI_API InputValidateResult {
+ bool valid;
+ String message;
+};
+
+struct CRU_UI_API IInputValidator : public virtual Interface {
+ virtual InputValidateResult Validate(StringView text) const = 0;
+};
+
+struct CRU_UI_API InputChangeEventArgs {
+ String text;
+ bool valid;
+ String message;
+};
+
+class CRU_UI_API Input : public Component {
+ public:
+ Input();
+ ~Input() override;
+
+ public:
+ controls::Control* GetRootControl() override;
+
+ String GetText() const;
+ void SetText(String text);
+
+ IInputValidator* GetValidator() const;
+ void SetValidator(IInputValidator* validator);
+
+ InputValidateResult Validate();
+ InputValidateResult GetLastValidateResult() const;
+
+ IEvent<InputChangeEventArgs>* ChangeEvent() { return &change_event_; }
+
+ private:
+ controls::TextBox text_box_;
+ IInputValidator* validator_;
+ InputValidateResult last_validate_result_;
+
+ Event<InputChangeEventArgs> change_event_;
+};
+
+class CRU_UI_API FloatInputValidator : public Object,
+ public virtual IInputValidator {
+ public:
+ InputValidateResult Validate(StringView text) const override;
+
+ std::optional<float> min;
+ std::optional<float> max;
+};
+
+class CRU_UI_API FloatInput : public Input {
+ public:
+ FloatInput();
+ ~FloatInput() override;
+
+ public:
+ float GetValue() const;
+ void SetValue(float value);
+
+ std::optional<float> GetMax() const;
+ void SetMax(std::optional<float> max);
+
+ std::optional<float> GetMin() const;
+ void SetMin(std::optional<float> min);
+
+ private:
+ float value_;
+
+ FloatInputValidator validator_;
+};
+} // namespace cru::ui::components