Files
hot-step-cpp-ROCm/engine/vendor/vst3sdk/vstgui4/vstgui/lib/controls/cbuttons.h
T
2026-08-16 18:24:52 +07:00

289 lines
10 KiB
C++

// This file is part of VSTGUI. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
#pragma once
#include "ccontrol.h"
#include "../cfont.h"
#include "../ccolor.h"
#include "../cbitmap.h"
#include "../cgradient.h"
#include "../cgraphicspath.h"
#include "../cstring.h"
#include "../cdrawmethods.h"
namespace VSTGUI {
//-----------------------------------------------------------------------------
// COnOffButton Declaration
//! @brief a button control with 2 states
/// @ingroup controls
//-----------------------------------------------------------------------------
class COnOffButton : public CControl
{
public:
COnOffButton (const CRect& size, IControlListener* listener = nullptr, int32_t tag = -1, CBitmap* background = nullptr, int32_t style = 0);
COnOffButton (const COnOffButton& onOffButton);
//-----------------------------------------------------------------------------
/// @name COnOffButton Methods
//-----------------------------------------------------------------------------
//@{
virtual int32_t getStyle () const { return style; }
virtual void setStyle (int32_t newStyle) { style = newStyle; }
//@}
// overrides
void draw (CDrawContext*) override;
CMouseEventResult onMouseDown (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseMoved (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseUp (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseCancel () override;
void onKeyboardEvent (KeyboardEvent& event) override;
bool sizeToFit () override;
CLASS_METHODS(COnOffButton, CControl)
protected:
~COnOffButton () noexcept override = default;
int32_t style;
};
//-----------------------------------------------------------------------------
// CCheckBox Declaration
/// @brief a check box control with a title and 3 states
/// @ingroup controls
/// @ingroup new_in_4_0
//-----------------------------------------------------------------------------
class CCheckBox : public CControl
{
public:
CCheckBox (const CRect& size, IControlListener* listener = nullptr, int32_t tag = -1, UTF8StringPtr title = nullptr, CBitmap* bitmap = nullptr, int32_t style = 0);
CCheckBox (const CCheckBox& checkbox);
enum Styles
{
/** automatically adjusts the width so that the label is completely visible */
kAutoSizeToFit = 1 << 0,
/** draws a crossbox instead of a checkmark if no bitmap is provided */
kDrawCrossBox = 1 << 1,
/** do not limit the box drawing to the cap height */
kIgnoreCapHeightOnDraw = 1 << 2,
};
//-----------------------------------------------------------------------------
/// @name CCheckBox Methods
//-----------------------------------------------------------------------------
//@{
virtual void setTitle (const UTF8String& newTitle);
const UTF8String& getTitle () const { return title; }
virtual void setFont (CFontRef newFont);
const CFontRef getFont () const { return font; }
virtual void setFontColor (const CColor& newColor) { fontColor = newColor; invalid (); }
const CColor& getFontColor () const { return fontColor; }
virtual void setBoxFrameColor (const CColor& newColor) { boxFrameColor = newColor; invalid (); }
const CColor& getBoxFrameColor () const { return boxFrameColor; }
virtual void setBoxFillColor (const CColor& newColor) { boxFillColor = newColor; invalid (); }
const CColor& getBoxFillColor () const { return boxFillColor; }
virtual void setCheckMarkColor (const CColor& newColor) { checkMarkColor = newColor; invalid (); }
const CColor& getCheckMarkColor () const { return checkMarkColor; }
virtual int32_t getStyle () const { return style; }
virtual void setStyle (int32_t newStyle);
CCoord getFrameWidth () const { return frameWidth; }
virtual void setFrameWidth (CCoord width);
CCoord getRoundRectRadius () const { return roundRectRadius; }
virtual void setRoundRectRadius (CCoord radius);
//@}
// overrides
void draw (CDrawContext* context) override;
CMouseEventResult onMouseDown (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseMoved (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseUp (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseCancel () override;
void onKeyboardEvent (KeyboardEvent& event) override;
bool sizeToFit () override;
void setBackground (CBitmap *background) override;
bool getFocusPath (CGraphicsPath& outPath) override;
CLASS_METHODS(CCheckBox, CControl)
protected:
~CCheckBox () noexcept override = default;
UTF8String title;
int32_t style;
CColor fontColor;
CColor boxFrameColor;
CColor boxFillColor;
CColor checkMarkColor;
CCoord frameWidth {1};
CCoord roundRectRadius {0};
SharedPointer<CFontDesc> font;
private:
float previousValue {0.f};
bool hilight {false};
};
//-----------------------------------------------------------------------------
// CKickButton Declaration
//!
/// @ingroup controls uses_multi_frame_bitmaps
//-----------------------------------------------------------------------------
class CKickButton : public CControl,
public MultiFrameBitmapView<CKickButton>
#if VSTGUI_ENABLE_DEPRECATED_METHODS
,
public IMultiBitmapControl
#endif
{
public:
CKickButton (const CRect& size, IControlListener* listener, int32_t tag, CBitmap* background);
CKickButton (const CKickButton& kickButton);
void draw (CDrawContext*) override;
CMouseEventResult onMouseDown (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseUp (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseMoved (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseCancel () override;
void onKeyboardEvent (KeyboardEvent& event) override;
bool sizeToFit () override;
#if VSTGUI_ENABLE_DEPRECATED_METHODS
void setNumSubPixmaps (int32_t numSubPixmaps) override { IMultiBitmapControl::setNumSubPixmaps (numSubPixmaps); invalid (); }
CKickButton (const CRect& size, IControlListener* listener, int32_t tag,
CCoord heightOfOneImage, CBitmap* background,
const CPoint& offset = CPoint (0, 0));
#endif
CLASS_METHODS(CKickButton, CControl)
protected:
~CKickButton () noexcept override = default;
#if VSTGUI_ENABLE_DEPRECATED_METHODS
CPoint offset {};
#endif
};
//-----------------------------------------------------------------------------
// CTextButton Declaration
/// @brief a button which renders without bitmaps
/// @ingroup controls
/// @ingroup new_in_4_0
//-----------------------------------------------------------------------------
class CTextButton : public CControl
{
public:
/** CTextButton style */
enum Style
{
kKickStyle = 0,
kOnOffStyle
};
CTextButton (const CRect& size, IControlListener* listener = nullptr, int32_t tag = -1, UTF8StringPtr title = nullptr, Style = kKickStyle);
//-----------------------------------------------------------------------------
/// @name CTextButton Methods
//-----------------------------------------------------------------------------
//@{
virtual void setTitle (const UTF8String& newTitle);
const UTF8String& getTitle () const { return title; }
virtual void setFont (CFontRef newFont);
CFontRef getFont () const { return font; }
virtual void setTextColor (const CColor& color);
const CColor& getTextColor () const { return textColor; }
virtual void setTextColorHighlighted (const CColor& color);
const CColor& getTextColorHighlighted () const { return textColorHighlighted; }
virtual void setGradient (CGradient* gradient);
CGradient* getGradient () const;
virtual void setGradientHighlighted (CGradient* gradient);
CGradient* getGradientHighlighted () const;
virtual void setFrameColor (const CColor& color);
const CColor& getFrameColor () const { return frameColor; }
virtual void setFrameColorHighlighted (const CColor& color);
const CColor& getFrameColorHighlighted () const { return frameColorHighlighted; }
virtual void setFrameWidth (CCoord width);
CCoord getFrameWidth () const { return frameWidth; }
virtual void setRoundRadius (CCoord radius);
CCoord getRoundRadius () const { return roundRadius; }
virtual void setStyle (Style style);
Style getStyle () const { return style; }
virtual void setIcon (CBitmap* bitmap);
CBitmap* getIcon () const;
virtual void setIconHighlighted (CBitmap* bitmap);
CBitmap* getIconHighlighted () const;
virtual void setIconPosition (CDrawMethods::IconPosition pos);
CDrawMethods::IconPosition getIconPosition () const { return iconPosition; }
virtual void setTextMargin (CCoord margin);
CCoord getTextMargin () const { return textMargin; }
virtual void setTextAlignment (CHoriTxtAlign hAlign);
CHoriTxtAlign getTextAlignment () const { return horiTxtAlign; }
//@}
// overrides
void draw (CDrawContext* context) override;
bool getFocusPath (CGraphicsPath& outPath) override;
bool drawFocusOnTop () override;
void setViewSize (const CRect& rect, bool invalid = true) override;
bool removed (CView* parent) override;
bool sizeToFit () override;
CMouseEventResult onMouseDown (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseUp (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseMoved (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseCancel () override;
void onKeyboardEvent (KeyboardEvent& event) override;
CLASS_METHODS_NOCOPY (CTextButton, CControl)
protected:
~CTextButton () noexcept override = default;
void invalidPath ();
CGraphicsPath* getPath (CDrawContext* context, CCoord lineWidth);
SharedPointer<CFontDesc> font;
SharedPointer<CGraphicsPath> _path;
SharedPointer<CBitmap> icon;
SharedPointer<CBitmap> iconHighlighted;
SharedPointer<CGradient> gradient;
SharedPointer<CGradient> gradientHighlighted;
CColor textColor;
CColor frameColor;
CColor textColorHighlighted;
CColor frameColorHighlighted;
CCoord frameWidth;
CCoord roundRadius;
CCoord textMargin;
CHoriTxtAlign horiTxtAlign;
CDrawMethods::IconPosition iconPosition;
Style style;
UTF8String title;
private:
float fEntryState;
};
} // VSTGUI