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

203 lines
6.7 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 "../cbitmap.h"
#include "../ccolor.h"
#include "../clinestyle.h"
namespace VSTGUI {
//-----------------------------------------------------------------------------
class CKnobBase : public CControl, protected CMouseWheelEditingSupport
{
public:
//-----------------------------------------------------------------------------
/// @name CKnobBase Methods
//-----------------------------------------------------------------------------
//@{
virtual void valueToPoint (CPoint& point) const;
virtual float valueFromPoint (CPoint& point) const;
virtual void setStartAngle (float val);
virtual float getStartAngle () const { return startAngle; }
virtual void setRangeAngle (float val);
virtual float getRangeAngle () const { return rangeAngle; }
virtual void setZoomFactor (float val) { zoomFactor = val; }
virtual float getZoomFactor () const { return zoomFactor; }
virtual CCoord getInsetValue () const { return inset; }
virtual void setInsetValue (CCoord val) { inset = val; }
virtual void setKnobRange (float val) { if (val > 0.f) knobRange = val; }
virtual float getKnobRange () const { return knobRange; }
//@}
// overrides
void onMouseWheelEvent (MouseWheelEvent& event) override;
void onKeyboardEvent (KeyboardEvent& event) override;
void setViewSize (const CRect &rect, bool invalid = true) override;
bool sizeToFit () override;
void setMin (float val) override;
void setMax (float val) 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;
CLASS_METHODS_VIRTUAL(CKnobBase, CControl)
protected:
CKnobBase (const CRect& size, IControlListener* listener, int32_t tag, CBitmap* background);
CKnobBase (const CKnobBase& knob);
void compute ();
float startAngle, rangeAngle;
float zoomFactor;
float knobRange;
CCoord inset;
private:
struct MouseEditingState;
MouseEditingState& getMouseEditingState ();
void clearMouseEditingState ();
};
//-----------------------------------------------------------------------------
// CKnob Declaration
//! @brief a knob control
/// @ingroup controls
//-----------------------------------------------------------------------------
class CKnob : public CKnobBase
{
public:
enum DrawStyle {
kLegacyHandleLineDrawing = 0,
kHandleCircleDrawing = 1 << 0,
kCoronaDrawing = 1 << 1,
kCoronaFromCenter = 1 << 2,
kCoronaInverted = 1 << 3,
kCoronaLineDashDot = 1 << 4,
kCoronaOutline = 1 << 5,
kCoronaLineCapButt = 1 << 6,
kSkipHandleDrawing = 1 << 7,
};
CKnob (const CRect& size, IControlListener* listener, int32_t tag, CBitmap* background, CBitmap* handle, const CPoint& offset = CPoint (0, 0), int32_t drawStyle = kLegacyHandleLineDrawing);
CKnob (const CKnob& knob);
//-----------------------------------------------------------------------------
/// @name CKnob Methods
//-----------------------------------------------------------------------------
//@{
int32_t getDrawStyle () const { return drawStyle; }
virtual void setDrawStyle (int32_t style);
CColor getCoronaColor () const { return coronaColor; }
virtual void setCoronaColor (CColor color);
CCoord getCoronaInset () const { return coronaInset; }
virtual void setCoronaInset (CCoord inset);
CColor getColorShadowHandle () const { return colorShadowHandle; }
virtual void setColorShadowHandle (CColor color);
CColor getColorHandle () const { return colorHandle; }
virtual void setColorHandle (CColor color);
CCoord getHandleLineWidth () const { return handleLineWidth; }
virtual void setHandleLineWidth (CCoord width);
CCoord getCoronaOutlineWidthAdd () const { return coronaOutlineWidthAdd; }
virtual void setCoronaOutlineWidthAdd (CCoord width);
const CLineStyle::CoordVector& getCoronaDashDotLengths () const;
virtual void setCoronaDashDotLengths (const CLineStyle::CoordVector& lengths);
CBitmap* getHandleBitmap () const { return pHandle; }
void setHandleBitmap (CBitmap* bitmap);
//@}
// overrides
void draw (CDrawContext* pContext) override;
bool getFocusPath (CGraphicsPath& outPath) override;
bool drawFocusOnTop () override;
CLASS_METHODS(CKnob, CKnobBase)
protected:
~CKnob () noexcept override;
virtual void drawHandle (CDrawContext* pContext);
virtual void drawCoronaOutline (CDrawContext* pContext) const;
virtual void drawCorona (CDrawContext* pContext) const;
virtual void drawHandleAsCircle (CDrawContext* pContext) const;
virtual void drawHandleAsLine (CDrawContext* pContext) const;
static void addArc (CGraphicsPath* path, const CRect& r, double startAngle, double sweepAngle);
CPoint offset;
int32_t drawStyle;
CColor colorHandle, colorShadowHandle, coronaColor;
CCoord handleLineWidth;
CCoord coronaInset;
CCoord coronaOutlineWidthAdd;
CLineStyle coronaLineStyle;
CBitmap* pHandle;
};
//-----------------------------------------------------------------------------
// CAnimKnob Declaration
//! @brief a bitmap knob control
/// @ingroup controls uses_multi_frame_bitmaps
//-----------------------------------------------------------------------------
class CAnimKnob : public CKnobBase,
public MultiFrameBitmapView<CAnimKnob>
#if VSTGUI_ENABLE_DEPRECATED_METHODS
,
public IMultiBitmapControl
#endif
{
public:
CAnimKnob (const CRect& size, IControlListener* listener, int32_t tag, CBitmap* background);
CAnimKnob (const CAnimKnob& knob);
#if VSTGUI_ENABLE_DEPRECATED_METHODS
CAnimKnob (const CRect& size, IControlListener* listener, int32_t tag, int32_t subPixmaps,
CCoord heightOfOneImage, CBitmap* background, const CPoint& offset = CPoint (0, 0));
void setHeightOfOneImage (const CCoord& height) override;
void setNumSubPixmaps (int32_t numSubPixmaps) override
{
IMultiBitmapControl::setNumSubPixmaps (numSubPixmaps);
invalid ();
}
#endif
//-----------------------------------------------------------------------------
/// @name CAnimKnob Methods
//-----------------------------------------------------------------------------
//@{
void setInverseBitmap (bool val) { bInverseBitmap = val; }
bool getInverseBitmap () const { return bInverseBitmap; }
//@}
// overrides
void draw (CDrawContext* pContext) override;
bool sizeToFit () override;
void setBackground (CBitmap* background) override;
CLASS_METHODS(CAnimKnob, CKnobBase)
protected:
~CAnimKnob () noexcept override = default;
bool bInverseBitmap;
};
} // VSTGUI