#pragma once #include "gui/views/View.h" #include "gui/materialDesign.h" class MaterialColorScheme; class IVramManager; class IconButtonView : public View { public: typedef void (*button_action_t)(IconButtonView* sender, void* arg); enum class Type { Standard, Filled, Tonal }; enum class State { NoToggle, ToggleUnselected, ToggleSelected }; IconButtonView() : _iconVramOffset(0), _action(nullptr), _actionArg(nullptr) , _type(Type::Standard), _state(State::NoToggle) { } IconButtonView(Type type, State state, md::sys::color backgroundColor, const MaterialColorScheme* materialColorScheme) : _iconVramOffset(0), _backgroundColor(backgroundColor) , _action(nullptr), _actionArg(nullptr), _type(type), _state(state) , _materialColorScheme(materialColorScheme) { } void SetIconVramOffset(u32 vramOffset) { _iconVramOffset = vramOffset; } Rectangle GetBounds() const override { return Rectangle(_position, 32, 32); } void SetAction(button_action_t action, void* arg) { _action = action; _actionArg = arg; } void SetState(State state) { _state = state; } bool HandleInput(const InputProvider& inputProvider, FocusManager& focusManager) override; protected: u32 _iconVramOffset; md::sys::color _backgroundColor; button_action_t _action; void* _actionArg; Type _type; State _state; const MaterialColorScheme* _materialColorScheme; bool IsCircleBackgroundVisible() const; md::sys::color GetCircleBackgroundColor() const; md::sys::color GetForegroundColor() const; };