Initial release
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
// 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 "../cview.h"
|
||||
#include "../ifocusdrawing.h"
|
||||
|
||||
namespace VSTGUI {
|
||||
namespace Constants {
|
||||
|
||||
static constexpr auto pi = 3.14159265358979323846;
|
||||
static constexpr auto double_pi = 6.28318530717958647692;
|
||||
static constexpr auto half_pi = 1.57079632679489661923f;
|
||||
static constexpr auto quarter_pi = 0.78539816339744830962;
|
||||
static constexpr auto e = 2.7182818284590452354;
|
||||
static constexpr auto ln2 = 0.69314718055994530942;
|
||||
static constexpr auto sqrt2 = 1.41421356237309504880;
|
||||
|
||||
} // Constants
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CControl Declaration
|
||||
//! @brief base class of all VSTGUI controls
|
||||
//-----------------------------------------------------------------------------
|
||||
class CControl : public CView, public IFocusDrawing
|
||||
{
|
||||
public:
|
||||
CControl (const CRect& size, IControlListener* listener = nullptr, int32_t tag = 0, CBitmap* pBackground = nullptr);
|
||||
CControl (const CControl& c);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/// @name Value Methods
|
||||
//-----------------------------------------------------------------------------
|
||||
//@{
|
||||
virtual void setValue (float val);
|
||||
virtual float getValue () const { return value; }
|
||||
|
||||
virtual void setValueNormalized (float val);
|
||||
virtual float getValueNormalized () const;
|
||||
|
||||
virtual void setMin (float val);
|
||||
virtual float getMin () const;
|
||||
virtual void setMax (float val);
|
||||
virtual float getMax () const;
|
||||
float getRange () const { return getMax () - getMin (); }
|
||||
|
||||
virtual void setOldValue (float val);
|
||||
virtual float getOldValue () const;
|
||||
virtual void setDefaultValue (float val);
|
||||
virtual float getDefaultValue () const;
|
||||
|
||||
virtual void bounceValue ();
|
||||
|
||||
/** notifies listener and dependent objects */
|
||||
virtual void valueChanged ();
|
||||
//@}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/// @name Editing Methods
|
||||
//-----------------------------------------------------------------------------
|
||||
//@{
|
||||
virtual void setTag (int32_t val);
|
||||
virtual int32_t getTag () const { return tag; }
|
||||
|
||||
virtual void beginEdit ();
|
||||
virtual void endEdit ();
|
||||
bool isEditing () const;
|
||||
|
||||
/** get main listener */
|
||||
virtual IControlListener* getListener () const { return listener; }
|
||||
/** set main listener */
|
||||
virtual void setListener (IControlListener* l) { listener = l; }
|
||||
|
||||
/** register a sub listener */
|
||||
void registerControlListener (IControlListener* listener);
|
||||
/** unregister a sub listener */
|
||||
void unregisterControlListener (IControlListener* listener);
|
||||
//@}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/// @name Misc
|
||||
//-----------------------------------------------------------------------------
|
||||
//@{
|
||||
virtual void setWheelInc (float val);
|
||||
virtual float getWheelInc () const;
|
||||
//@}
|
||||
|
||||
// overrides
|
||||
void draw (CDrawContext* pContext) override = 0;
|
||||
bool isDirty () const override;
|
||||
void setDirty (bool val = true) override;
|
||||
|
||||
bool drawFocusOnTop () override;
|
||||
bool getFocusPath (CGraphicsPath& outPath) override;
|
||||
|
||||
using CheckDefaultValueEventFuncT = bool (*) (CControl*, MouseDownEvent&);
|
||||
/** Function to check if a mouse down event should reset the value to its default value for a
|
||||
*control. Per default this checks for a left mouse down button and the control modifier key. */
|
||||
static CheckDefaultValueEventFuncT CheckDefaultValueEventFunc;
|
||||
|
||||
/** zoom modifier key, per default is the shift key */
|
||||
inline static int32_t kZoomModifier = kShift;
|
||||
|
||||
#if VSTGUI_ENABLE_DEPRECATED_METHODS
|
||||
/** \deprecated default value modifier key, per default is the control key */
|
||||
inline static int32_t kDefaultValueModifier = kControl;
|
||||
|
||||
using CheckDefaultValueFuncT = bool (*) (CControl*, CButtonState);
|
||||
/** \deprecated Function to check if the button state is the state to set the control value to
|
||||
* its default value. The default implementation uses the kDefaultValueModifier (see above). Use
|
||||
* this to change this to double click per example. But consider to change this to the same
|
||||
* behaviour as the host you are running in for best user experience. */
|
||||
static CheckDefaultValueFuncT CheckDefaultValueFunc;
|
||||
#endif
|
||||
|
||||
CLASS_METHODS_VIRTUAL(CControl, CView)
|
||||
protected:
|
||||
~CControl () noexcept override;
|
||||
VSTGUI_DEPRECATED (static int32_t mapVstKeyModifier (int32_t vstModifier);)
|
||||
|
||||
IControlListener* listener;
|
||||
int32_t tag;
|
||||
float value;
|
||||
|
||||
private:
|
||||
struct Impl;
|
||||
std::unique_ptr<Impl> impl;
|
||||
};
|
||||
|
||||
#if VSTGUI_ENABLE_DEPRECATED_METHODS
|
||||
//-----------------------------------------------------------------------------
|
||||
// IMultiBitmapControl Declaration
|
||||
//! @brief interface for controls with sub images
|
||||
//-----------------------------------------------------------------------------
|
||||
class IMultiBitmapControl
|
||||
{
|
||||
public:
|
||||
virtual ~IMultiBitmapControl() {}
|
||||
virtual void setHeightOfOneImage (const CCoord& height) { heightOfOneImage = height; }
|
||||
virtual CCoord getHeightOfOneImage () const { return heightOfOneImage; }
|
||||
|
||||
virtual void setNumSubPixmaps (int32_t numSubPixmaps) { subPixmaps = numSubPixmaps; }
|
||||
virtual int32_t getNumSubPixmaps () const { return subPixmaps; }
|
||||
|
||||
virtual void autoComputeHeightOfOneImage ();
|
||||
protected:
|
||||
IMultiBitmapControl () : heightOfOneImage (0), subPixmaps (0) {}
|
||||
CCoord heightOfOneImage;
|
||||
int32_t subPixmaps;
|
||||
};
|
||||
#endif
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// CMouseWheelEditingSupport Declaration
|
||||
//! @brief Helper class for mouse wheel editing
|
||||
//-----------------------------------------------------------------------------
|
||||
class CMouseWheelEditingSupport
|
||||
{
|
||||
protected:
|
||||
void invalidMouseWheelEditTimer (CControl* control);
|
||||
void onMouseWheelEditing (CControl* control);
|
||||
private:
|
||||
SharedPointer<CBaseObject> endEditTimer {nullptr};
|
||||
};
|
||||
|
||||
} // VSTGUI
|
||||
Reference in New Issue
Block a user