osb/source/windowing/StarButtonWidget.hpp

143 lines
3.7 KiB
C++
Raw Permalink Normal View History

#pragma once
2023-06-20 04:33:09 +00:00
#include "StarButtonGroup.hpp"
namespace Star {
STAR_CLASS(ButtonWidget);
class ButtonWidget : public Widget {
public:
ButtonWidget();
ButtonWidget(WidgetCallbackFunc callback,
String const& baseImage,
String const& hoverImage = "",
String const& pressedImage = "",
String const& disabledImage = "");
virtual ~ButtonWidget();
virtual bool sendEvent(InputEvent const& event) override;
virtual void mouseOver() override;
virtual void mouseOut() override;
virtual void mouseReturnStillDown() override;
virtual void hide() override;
// Callback is called when the checked / pressed state is changed.
void setCallback(WidgetCallbackFunc callback);
ButtonGroupPtr buttonGroup() const;
// Sets the button group for this widget, and adds it to the button group if
// it is not already added. Additionally, sets the button as checkable.
void setButtonGroup(ButtonGroupPtr buttonGroup, int id = ButtonGroup::NoButton);
// If a button group is set, returns this button's id in the button group.
int buttonGroupId();
bool isHovered() const;
bool isPressed() const;
void setPressed(bool pressed);
bool isCheckable() const;
void setCheckable(bool checkable);
bool isHighlighted() const;
void setHighlighted(bool highlighted);
bool isChecked() const;
void setChecked(bool checked);
// Either checks a button, or toggles the state, depending on whether the
// button is part of an exclusive group or not.
void check();
bool sustainCallbackOnDownHold();
void setSustainCallbackOnDownHold(bool sustain);
void setImages(String const& baseImage,
String const& hoverImage = "",
String const& pressedImage = "",
String const& disabledImage = "");
void setCheckedImages(String const& baseImage,
String const& hoverImage = "",
String const& pressedImage = "",
String const& disabledImage = "");
void setOverlayImage(String const& overlayImage = "");
// Used to offset drawing when the button is being pressed / checked
Vec2I const& pressedOffset() const;
void setPressedOffset(Vec2I const& offset);
virtual String const& getText() const;
2023-06-20 04:33:09 +00:00
virtual void setText(String const& text);
virtual void setFontSize(int size);
virtual void setFontDirectives(String directives);
2023-06-20 04:33:09 +00:00
virtual void setTextOffset(Vec2I textOffset);
void setTextAlign(HorizontalAnchor hAnchor);
void setFontColor(Color color);
void setFontColorDisabled(Color color);
void setFontColorChecked(Color color);
virtual WidgetPtr getChildAt(Vec2I const& pos) override;
void disable();
void enable();
void setEnabled(bool enabled);
void setInvisible(bool invisible);
protected:
virtual RectI getScissorRect() const override;
virtual void renderImpl() override;
void drawButtonPart(String const& image, Vec2F const& position);
void updateSize();
WidgetCallbackFunc m_callback;
ButtonGroupPtr m_buttonGroup;
bool m_hovered;
bool m_pressed;
bool m_checkable;
bool m_checked;
bool m_disabled;
bool m_highlighted;
String m_baseImage;
String m_hoverImage;
String m_pressedImage;
String m_disabledImage;
bool m_hasCheckedImages;
String m_baseImageChecked;
String m_hoverImageChecked;
String m_pressedImageChecked;
String m_disabledImageChecked;
String m_overlayImage;
bool m_invisible;
Vec2I m_pressedOffset;
Vec2U m_buttonBoundSize;
TextStyle m_textStyle;
2023-06-20 04:33:09 +00:00
String m_text;
Vec2I m_textOffset;
2023-06-27 12:17:57 +00:00
StringList m_clickSounds;
StringList m_releaseSounds;
StringList m_hoverSounds;
StringList m_hoverOffSounds;
2023-06-20 04:33:09 +00:00
bool m_sustain;
private:
HorizontalAnchor m_hTextAnchor;
Color m_fontColor;
Color m_fontColorDisabled;
Maybe<Color> m_fontColorChecked;
};
}