34 #if defined(IGRAPHICS_NANOVG) + defined(IGRAPHICS_CANVAS) + defined(IGRAPHICS_SKIA) != 1 35 #error Either NO_IGRAPHICS or one and only one choice of graphics library must be defined! 40 #include "IPlugAAX_view_interface.h" 47 #include "IGraphicsConstants.h" 48 #include "IGraphicsStructs.h" 52 #ifdef IGRAPHICS_IMGUI 53 #include "IGraphicsImGui.h" 61 #include <unordered_map> 77 BEGIN_IGRAPHICS_NAMESPACE
88 :
public IPlugAAXView_Interface
92 #pragma mark - Drawing API implementation 120 virtual void DrawRotatedSVG(
const ISVG& svg,
float destCentreX,
float destCentreY,
float width,
float height,
double angle,
const IBlend* pBlend = 0);
159 virtual void DrawLine(
const IColor& color,
float x1,
float y1,
float x2,
float y2,
const IBlend* pBlend = 0,
float thickness = 1.f);
169 virtual void DrawDottedLine(
const IColor& color,
float x1,
float y1,
float x2,
float y2,
const IBlend* pBlend = 0,
float thickness = 1.f,
float dashLen = 2.f);
181 virtual void DrawTriangle(
const IColor& color,
float x1,
float y1,
float x2,
float y2,
float x3,
float y3,
const IBlend* pBlend = 0,
float thickness = 1.f);
207 virtual void DrawRoundRect(
const IColor& color,
const IRECT& bounds,
float cRTL,
float cRTR,
float cRBR,
float cRBL,
const IBlend* pBlend = 0,
float thickness = 1.f);
218 virtual void DrawArc(
const IColor& color,
float cx,
float cy,
float r,
float a1,
float a2,
const IBlend* pBlend = 0,
float thickness = 1.f);
227 virtual void DrawCircle(
const IColor& color,
float cx,
float cy,
float r,
const IBlend* pBlend = 0,
float thickness = 1.f);
245 virtual void DrawEllipse(
const IColor& color,
float x,
float y,
float r1,
float r2,
float angle = 0.0,
const IBlend* pBlend = 0,
float thickness = 1.f);
272 virtual void FillTriangle(
const IColor& color,
float x1,
float y1,
float x2,
float y2,
float x3,
float y3,
const IBlend* pBlend = 0);
319 virtual void FillEllipse(
const IColor& color,
float x,
float y,
float r1,
float r2,
float angle = 0.0,
const IBlend* pBlend = 0);
329 virtual void FillArc(
const IColor& color,
float cx,
float cy,
float r,
float a1,
float a2,
const IBlend* pBlend = 0);
350 void DrawText(
const IText& text,
const char* str,
float x,
float y,
const IBlend* pBlend = 0);
399 #pragma mark - Base implementation - drawing helpers 419 void DrawBitmapedText(
const IBitmap& bitmap,
const IRECT& bounds,
IText& text,
IBlend* pBlend,
const char* str,
bool vCenter =
true,
bool multiline =
false,
int charWidth = 6,
int charHeight = 12,
int charOffset = 0);
464 void DrawRadialLine(
const IColor& color,
float cx,
float cy,
float angle,
float rMin,
float rMax,
const IBlend* pBlend = 0,
float thickness = 1.f);
473 virtual void DrawGrid(
const IColor& color,
const IRECT& bounds,
float gridSizeH,
float gridSizeV,
const IBlend* pBlend = 0,
float thickness = 1.f);
483 virtual void DrawData(
const IColor& color,
const IRECT& bounds,
float* normYPoints,
int nPoints,
float* normXPoints =
nullptr,
const IBlend* pBlend = 0,
float thickness = 1.f);
489 virtual bool LoadFont(
const char* fontID,
const char* fileNameOrResID);
496 virtual bool LoadFont(
const char* fontID,
void* pData,
int dataSize);
503 bool LoadFont(
const char* fontID,
const char* fontName, ETextStyle style);
505 #pragma mark - Layer management 570 #pragma mark - Drawing API path support 583 void PathLine(
float x1,
float y1,
float x2,
float y2)
595 void PathRadialLine(
float cx,
float cy,
float angle,
float rMin,
float rMax);
604 void PathTriangle(
float x1,
float y1,
float x2,
float y2,
float x3,
float y3);
629 virtual void PathArc(
float cx,
float cy,
float r,
float a1,
float a2, EWinding winding = EWinding::CW) = 0;
647 void PathEllipse(
float x,
float y,
float r1,
float r2,
float angle = 0.0);
658 virtual void PathMoveTo(
float x,
float y) = 0;
663 virtual void PathLineTo(
float x,
float y) = 0;
676 virtual void PathCubicBezierTo(
float c1x,
float c1y,
float c2x,
float c2y,
float x2,
float y2) = 0;
739 virtual void PathTransformSetMatrix(
const IMatrix& matrix) = 0;
741 void DoTextRotation(
const IText& text,
const IRECT& bounds,
const IRECT& rect)
746 IRECT rotated = rect;
755 IPattern GetSVGPattern(
const NSVGpaint& paint,
float opacity);
757 void DoDrawSVG(
const ISVG& svg,
const IBlend* pBlend =
nullptr);
761 void PrepareRegion(
const IRECT& bounds)
765 SetClipRegion(bounds);
771 virtual void CompleteRegion(
const IRECT& bounds) {}
773 virtual void SetClipRegion(
const IRECT& r) = 0;
776 #pragma mark - Platform implementation 807 ECursor oldCursorType = mCursorType;
808 mCursorType = cursorType;
809 return oldCursorType;
818 virtual void*
OpenWindow(
void* pParentWnd) = 0;
848 virtual EMsgBoxResult
ShowMessageBox(
const char* str,
const char* caption, EMsgBoxType type, IMsgBoxCompletionHanderFunc completionHandler =
nullptr) = 0;
855 virtual void PromptForFile(WDL_String& fileName, WDL_String& path, EFileAction action = EFileAction::Open,
const char* extensions = 0) = 0;
866 virtual bool PromptForColor(
IColor& color,
const char* str =
"", IColorPickerHandlerFunc func =
nullptr) = 0;
874 virtual bool OpenURL(
const char* url,
const char* msgWindowTitle = 0,
const char* confirmMsg = 0,
const char* errMsgOnFailure = 0) = 0;
909 virtual PlatformFontPtr
LoadPlatformFont(
const char* fontID,
const char* fileNameOrResID) = 0;
916 virtual PlatformFontPtr
LoadPlatformFont(
const char* fontID,
void* pData,
int dataSize) = 0;
923 virtual PlatformFontPtr
LoadPlatformFont(
const char* fontID,
const char* fontName, ETextStyle style) = 0;
928 virtual void CachePlatformFont(
const char* fontID,
const PlatformFontPtr& font) = 0;
935 virtual void ActivateGLContext() {};
938 virtual void DeactivateGLContext() {};
954 #pragma mark - Base implementation 1023 mMinScale = std::min(lo, hi);
1024 mMaxScale = std::max(lo, hi);
1033 void Resize(
int w,
int h,
float scale,
bool needsPlatformResize =
true);
1040 void SetLayoutOnResize(
bool layoutOnResize);
1052 int WindowWidth()
const {
return static_cast<int>(
static_cast<float>(mWidth) * mDrawScale); }
1056 int WindowHeight()
const {
return static_cast<int>(
static_cast<float>(mHeight) * mDrawScale); }
1060 int FPS()
const {
return mFPS; }
1111 mEnableMultiTouch = enable;
1115 mEnableMultiTouch =
false;
1171 void AttachImGui(std::function<
void(
IGraphics*)> drawFunc, std::function<
void()> setupFunc =
nullptr);
1185 virtual void CreatePlatformImGui() {}
1188 virtual void PlatformResize(
bool parentHasResized) {}
1191 virtual void DrawResize() {}
1196 void Draw(
const IRECT& bounds,
float scale);
1202 void DrawControl(
IControl* pControl,
const IRECT& bounds,
float scale);
1213 void StartDragResize() { mResizingInProcess =
true; }
1216 void EndDragResize();
1218 #pragma mark - Control management 1227 template<
typename T,
typename... Args>
1238 template<
typename T,
typename... Args>
1265 void AttachCornerResizer(EUIResizerMode sizeMode = EUIResizerMode::Scale,
bool layoutOnResize =
false,
const IColor& color = COLOR_TRANSLUCENT,
const IColor& mouseOverColor = COLOR_BLACK,
const IColor& dragColor = COLOR_BLACK,
float size = 20.f);
1293 void ShowBubbleControl(
IControl* pCaller,
float x,
float y,
const char* str, EDirection dir = EDirection::Horizontal,
IRECT minimumContentBounds =
IRECT());
1335 for (
auto itr = mCtrlTags.begin(); itr != mCtrlTags.end(); ++itr)
1337 if (itr->second == pControl)
1351 return std::find_if(std::begin(mCapturedMap), std::end(mCapturedMap), [pControl](
auto&& press) {
return press.second == pControl; }) != mCapturedMap.end();
1357 for (
auto i = mCapturedMap.begin(), j = mCapturedMap.end(); i != j; ++i)
1358 if (i->second == pControl)
1359 touchesOnThisControl.push_back(i->first);
1443 int GetMouseControlIdx(
float x,
float y,
bool mouseOver =
false);
1452 IControl* GetMouseControl(
float x,
float y,
bool capture,
bool mouseOver =
false, ITouchID touchID = 0);
1454 #pragma mark - Event handling 1457 void OnMouseDown(
const std::vector<IMouseInfo>& points);
1460 void OnMouseUp(
const std::vector<IMouseInfo>& points);
1463 void OnMouseDrag(
const std::vector<IMouseInfo>& points);
1507 void OnDrop(
const char* str,
float x,
float y);
1535 #pragma mark - Plug-in API Specific 1570 #pragma mark - Resource/File Loading 1584 virtual IBitmap LoadBitmap(
const char* fileNameOrResID,
int nStates = 1,
bool framesAreHorizontal =
false,
int targetScale = 0);
1594 virtual IBitmap LoadBitmap(
const char *name,
const void* pData,
int dataSize,
int nStates = 1,
bool framesAreHorizontal =
false,
int targetScale = 0);
1599 virtual ISVG LoadSVG(
const char* fileNameOrResID,
const char* units =
"px",
float dpi = 72.f);
1608 virtual ISVG LoadSVG(
const char* name,
const void* pData,
int dataSize,
const char* units =
"px",
float dpi = 72.f);
1614 virtual WDL_TypedBuf<uint8_t>
LoadResource(
const char* fileNameOrResID,
const char* fileType);
1636 virtual APIBitmap*
LoadAPIBitmap(
const char* fileNameOrResID,
int scale, EResourceLocation location,
const char* ext) = 0;
1653 virtual APIBitmap*
CreateAPIBitmap(
int width,
int height,
int scale,
double drawScale,
bool cacheable =
false) = 0;
1659 virtual bool LoadAPIFont(
const char* fontID,
const PlatformFontPtr& font) = 0;
1682 EResourceLocation
SearchImageResource(
const char* fileName,
const char* type, WDL_String& result,
int targetScale,
int& sourceScale);
1722 IMatrix GetTransformMatrix()
const {
return mTransform; }
1726 void ClearMouseOver()
1728 mMouseOver =
nullptr;
1732 WDL_PtrList<IControl> mControls;
1733 std::unordered_map<int, IControl*> mCtrlTags;
1736 std::unique_ptr<ICornerResizerControl> mCornerResizer;
1737 WDL_PtrList<IBubbleControl> mBubbleControls;
1738 std::unique_ptr<IPopupMenuControl> mPopupControl;
1739 std::unique_ptr<IFPSDisplayControl> mPerfDisplay;
1740 std::unique_ptr<ITextEntryControl> mTextEntryControl;
1741 std::unique_ptr<IControl> mLiveEdit;
1745 WDL_String mSharedResourcesSubPath;
1747 ECursor mCursorType = ECursor::ARROW;
1751 float mScreenScale = 1.f;
1752 float mDrawScale = 1.f;
1756 std::vector<EGestureType> mRegisteredGestures;
1758 std::unordered_map<int, IGestureFunc> mGestureRegionFuncs;
1759 std::unordered_map<ITouchID, IControl*> mCapturedMap;
1763 void* mPlatformContext =
nullptr;
1764 bool mIsContextMenu =
false;
1765 int mTextEntryValIdx = kNoValIdx;
1766 int mPopupMenuValIdx = kNoValIdx;
1767 int mMouseOverIdx = -1;
1768 float mMouseDownX = -1.f;
1769 float mMouseDownY = -1.f;
1772 int mLastClickedParam = kNoParameter;
1773 bool mEnableMouseOver =
false;
1774 bool mStrict =
false;
1775 bool mEnableTooltips =
false;
1776 bool mShowControlBounds =
false;
1777 bool mShowAreaDrawn =
false;
1778 bool mResizingInProcess =
false;
1779 bool mLayoutOnResize =
false;
1780 bool mEnableMultiTouch =
false;
1781 EUIResizerMode mGUISizeMode = EUIResizerMode::Scale;
1782 double mPrevTimestamp = 0.;
1783 IKeyHandlerFunc mKeyHandlerFunc =
nullptr;
1784 IDisplayTickFunc mDisplayTickFunc =
nullptr;
1788 bool mCursorHidden =
false;
1789 bool mCursorLock =
false;
1790 bool mTabletInput =
false;
1791 float mCursorX = -1.f;
1792 float mCursorY = -1.f;
1793 float mXTranslation = 0.f;
1794 float mYTranslation = 0.f;
1800 std::stack<ILayer*> mLayers;
1804 std::stack<IMatrix> mTransformStates;
1806 #ifdef IGRAPHICS_IMGUI 1808 std::unique_ptr<ImGuiRenderer> mImGuiRenderer;
1812 END_IGRAPHICS_NAMESPACE
bool LiveEditEnabled() const
int FPS() const
Gets the drawing frame rate.
virtual IColor GetPoint(int x, int y)=0
Get the color at an X, Y location in the graphics context.
void PathRect(const IRECT &bounds)
Add a rectangle to the current path.
virtual bool RevealPathInExplorerOrFinder(WDL_String &path, bool select=false)
IRECT GetPixelSnapped() const
void PathConvexPolygon(float *x, float *y, int nPoints)
Add a convex polygon to the current path.
virtual void PathMoveTo(float x, float y)=0
Move the current point in the current path.
int NBubbleControls() const
virtual void DrawPoint(const IColor &color, float x, float y, const IBlend *pBlend=0)
Fill a rectangle corresponding to a pixel on a 1:1 screen with a color.
Used to manage a list of rectangular areas and optimize them for drawing to the screen.
virtual void PathClose()=0
Close the path that is being specified.
void ShowAreaDrawn(bool enable)
void StartLayer(IControl *pOwner, const IRECT &r, bool cacheable=false)
Create an IGraphics layer.
bool ShowAreaDrawnEnabled() const
int GetRoundedScreenScale() const
Gets the screen/display scaling factor, rounded up.
The lowest level base class of an IGraphics control.
A Text entry widget drawn by IGraphics.
void OnMouseDrag(const std::vector< IMouseInfo > &points)
Called when the platform class sends drag events.
Used to manage a rectangular area, independent of draw class/platform.
virtual void DrawGrid(const IColor &color, const IRECT &bounds, float gridSizeH, float gridSizeV, const IBlend *pBlend=0, float thickness=1.f)
Draw a grid to the graphics context.
void SetControlSize(int idx, float w, float h)
Resize a control, redrawing the interface correctly.
void * GetPlatformContext()
Get the platform level draw context - an HDC or CGContextRef.
void DrawRotatedLayer(const ILayerPtr &layer, double angle)
Draw a layer to the main IGraphics context, with rotation.
virtual bool FlippedBitmap() const =0
void PathTransformTranslate(float x, float y)
Apply a translation transform to the current path.
virtual void DrawRect(const IColor &color, const IRECT &bounds, const IBlend *pBlend=0, float thickness=1.f)
Draw a rectangle to the graphics context.
void RemoveTextEntryControl()
Remove the IGraphics text entry, use platform text entry if available.
virtual void PathArc(float cx, float cy, float r, float a1, float a2, EWinding winding=EWinding::CW)=0
Add an arc to the current path.
void AttachTextEntryControl()
Attach a control for text entry, to override platform text entry.
virtual void DrawConvexPolygon(const IColor &color, float *x, float *y, int nPoints, const IBlend *pBlend=0, float thickness=1.f)
Draw a convex polygon to the graphics context.
Used to manage composite/blend operations, independent of draw class/platform.
User-facing bitmap abstraction that you use to manage bitmap data, independant of draw class/platform...
void ApplyLayerDropShadow(ILayerPtr &layer, const IShadow &shadow)
Applies a drop shadow directly onto a layer.
virtual ECursor SetMouseCursor(ECursor cursorType=ECursor::ARROW)
Sets the mouse cursor to one of ECursor (implementations should return the result of the base impleme...
Encapsulates a MIDI message and provides helper functions.
virtual APIBitmap * CreateAPIBitmap(int width, int height, int scale, double drawScale, bool cacheable=false)=0
Creates a new API bitmap, either in memory or as a GPU texture.
void EnableTooltips(bool enable)
bool MultiTouchEnabled() const
Used to manage fill behaviour for path based drawing back ends.
void SetDisplayTickFunc(IDisplayTickFunc func)
Sets a function that is called at the frame rate, prior to checking for dirty controls.
void AttachCornerResizer(EUIResizerMode sizeMode=EUIResizerMode::Scale, bool layoutOnResize=false, const IColor &color=COLOR_TRANSLUCENT, const IColor &mouseOverColor=COLOR_BLACK, const IColor &dragColor=COLOR_BLACK, float size=20.f)
Attach the default control to scale or increase the UI size by dragging the plug-in bottom right-hand...
void CreateTextEntry(IControl &control, const IText &text, const IRECT &bounds, const char *str="", int valIdx=0)
Create a text entry box.
void ReleaseMouseCapture()
Used to tell the graphics context to stop tracking mouse interaction with a control.
void SetTranslation(float x, float y)
Called by some platform IGraphics classes in order to translate the graphics context, in response to e.g.
void SetScaleConstraints(float lo, float hi)
virtual const char * GetPlatformAPIStr()
virtual bool GetTextFromClipboard(WDL_String &str)=0
Get text from the clipboard.
void ResumeLayer(ILayerPtr &layer)
If a layer already exists, continue drawing to it.
virtual void DrawDottedRect(const IColor &color, const IRECT &bounds, const IBlend *pBlend=0, float thickness=1.f, float dashLen=2.f)
Draw a dotted rectangle to the graphics context.
Used to manage mouse modifiers i.e.
virtual void PathLineTo(float x, float y)=0
Add a line to the current path from the current point to the specified location.
virtual void BeginFrame()
Called at the beginning of drawing.
void OnGUIIdle()
This is an idle timer tick call on the GUI thread, only active if USE_IDLE_CALLS is defined...
void SetControlValueAfterTextEdit(const char *str)
Called by the platform class after returning from a text entry in order to update a control with a ne...
virtual void DrawData(const IColor &color, const IRECT &bounds, float *normYPoints, int nPoints, float *normXPoints=nullptr, const IBlend *pBlend=0, float thickness=1.f)
Draw a line between a collection of normalized points.
void PathTransformSave()
Save the current affine transform of the current path.
void ForAllControls(T method, Args...args)
For all controls, including the "special controls" call a method.
virtual void SetWinModuleHandle(void *pHinstance)
Used on Windows to set the HINSTANCE module handle, which allows graphics APIs to load resources from...
bool ControlIsCaptured(IControl *pControl) const
Check to see if the control is already captured.
virtual PlatformFontPtr LoadPlatformFont(const char *fontID, const char *fileNameOrResID)=0
Load a font from disk or resource in a platform format.
void PopupHostContextMenuForParam(int controlIdx, int paramIdx, float x, float y)
[VST3 primarily] In VST3 plug-ins this enable support for the IContextMenu interface, which allows the host to add contextual options to e.g.
void PathTransformMatrix(const IMatrix &matrix)
Apply an arbitary affine transform matrix to the current path.
virtual void PathCubicBezierTo(float c1x, float c1y, float c2x, float c2y, float x2, float y2)=0
Add a cubic bezier to the current path from the current point to the specified location.
void AttachPanelBackground(const IPattern &color)
Attach an IPanelControl as the lowest IControl in the control stack to fill the background with a sol...
float GetScreenScale() const
Gets the screen/display scaling factor, e.g.
void SetSharedResourcesSubPath(const char *sharedResourcesSubPath)
Sets the name of the shared resources subpath.
EUIResizerMode GetResizerMode() const
virtual void CreatePlatformTextEntry(int paramIdx, const IText &text, const IRECT &bounds, int length, const char *str)=0
virtual bool BitmapExtSupported(const char *ext)=0
Checks a file extension and reports whether this drawing API supports loading that extension...
virtual void FillCircle(const IColor &color, float cx, float cy, float r, const IBlend *pBlend=0)
Fill a circle with a color.
void AttachBackground(const char *fileName)
Attach an IBitmapControl as the lowest IControl in the control stack to be the background for the gra...
void DisableControl(int paramIdx, bool diable)
Disable or enable controls linked to a specific parameter.
Common paths useful for plug-ins.
virtual void OnViewInitialized(void *pContext)
Called after platform view initialization, so that drawing classes can e.g.
IPlug's parameter class.
IControl * GetControl(int idx)
void HideControl(int paramIdx, bool hide)
Hide controls linked to a specific parameter.
void OnMouseUp(const std::vector< IMouseInfo > &points)
Called when the platform class sends mouse up events.
void SetControlPosition(int idx, float x, float y)
Reposition a control, redrawing the interface correctly.
virtual void DrawDottedLine(const IColor &color, float x1, float y1, float x2, float y2, const IBlend *pBlend=0, float thickness=1.f, float dashLen=2.f)
Draw a dotted line to the graphics context.
void RemoveControlWithTag(int ctrlTag)
Remove controls from the control list with a particular tag.
virtual void PathStroke(const IPattern &pattern, float thickness, const IStrokeOptions &options=IStrokeOptions(), const IBlend *pBlend=0)=0
Stroke the current current path.
int WindowHeight() const
Gets the height of the graphics context including draw scaling.
virtual const char * GetBundleID()
Get the bundle ID on macOS and iOS, returns emtpy string on other OSs.
virtual void DrawRoundRect(const IColor &color, const IRECT &bounds, float cornerRadius=5.f, const IBlend *pBlend=0, float thickness=1.f)
Draw a rounded rectangle to the graphics context.
void CalculateTextRotation(const IText &text, const IRECT &bounds, IRECT &rect, double &tx, double &ty) const
Used to manage color data, independent of draw class/platform.
void AttachPopupMenuControl(const IText &text=DEFAULT_TEXT, const IRECT &bounds=IRECT())
Attach a control for pop-up menus, to override platform style menus.
virtual bool PlatformSupportsMultiTouch() const
virtual bool AssetsLoaded()
Specialized in IGraphicsCanvas drawing backend.
virtual void CloseWindow()=0
Close the platform view for this graphics context.
Used to describe a particular gesture.
virtual void RemovePlatformView(void *pView)
Remove a previously attached platform view from the IGraphics view.
int GetLastClickedParamForPTAutomation()
[AAX only]
virtual void PromptForDirectory(WDL_String &dir)=0
Create a platform file prompt dialog to choose a directory path for opening/saving a directory...
void DrawText(const IText &text, const char *str, const IRECT &bounds, const IBlend *pBlend=0)
Draw some text to the graphics context in a specific rectangle.
Used to manage stroke behaviour for path based drawing back ends.
virtual void AttachGestureRecognizer(EGestureType type)
Registers a gesture recognizer with the graphics context.
virtual IPopupMenu * CreatePlatformPopupMenu(IPopupMenu &menu, const IRECT &bounds, bool &isAsync)=0
Calls the platform backend to create the platform popup menu.
void SetKeyHandlerFunc(IKeyHandlerFunc func)
Set a function that is called when key presses are not intercepted by any controls.
bool RespondsToGesture(float x, float y)
Called by platform class to see if the point at x, y is linked to a gesture recognizer.
void CreatePopupMenu(IControl &control, IPopupMenu &menu, float x, float y, int valIdx=0)
Shows a pop up/contextual menu at point.
User-facing SVG abstraction that you use to manage SVG data ISVG doesn't actually own the image data...
void SetStrictDrawing(bool strict)
Enables strict drawing mode.
bool ShowControlBoundsEnabled() const
EResourceLocation SearchImageResource(const char *fileName, const char *type, WDL_String &result, int targetScale, int &sourceScale)
Search for a bitmap image resource matching the target scale.
void OnDrop(const char *str, float x, float y)
void SetScreenScale(float scale)
Called by the platform IGraphics class when moving to a new screen to set DPI.
void RemoveControls(int fromIdx)
Remove controls from the control list above a particular index, (frees memory).
virtual int AlphaChannel() const =0
void GetTouches(IControl *pControl, std::vector< ITouchID > &touchesOnThisControl) const
Populate a vector with the touchIDs active on pControl.
void PushLayer(ILayer *pLayer)
Push a layer on to the stack.
virtual void * GetWinModuleHandle()
void SetAllControlsDirty()
Calls SetDirty() on every control.
void OnMouseDown(const std::vector< IMouseInfo > &points)
Called when the platform class sends mouse down events.
virtual void UpdateLayer()
Implemented by a graphics backend to prepare for drawing to the layer at the top of the stack...
IPlug logging a.k.a tracing functionality.
virtual bool SetTextInClipboard(const char *str)=0
Set text in the clipboard.
void PathTransformRestore()
Restore the affine transform of the current path, to the previously saved state.
bool OnKeyDown(float x, float y, const IKeyPress &key)
void AttachGestureRecognizerToRegion(const IRECT &bounds, EGestureType type, IGestureFunc func)
Attach a gesture recognizer to a rectangular region of the GUI, i.e.
virtual APIBitmap * LoadAPIBitmap(const char *fileNameOrResID, int scale, EResourceLocation location, const char *ext)=0
Drawing API method to load a bitmap, called internally.
void RemoveControl(int idx)
Remove a control at a particular index, (frees memory).
void ForAllControlsFunc(std::function< void(IControl *pControl)> func)
For all controls, including the "special controls" call a method.
IControl * GetControlInTextEntry()
IControl * GetControlWithTag(int ctrlTag) const
virtual void OnViewDestroyed()
Called after a platform view is destroyed, so that drawing classes can e.g.
An editor delegate base class for a SOMETHING that uses IGraphics for it's UI.
int GetControlTag(const IControl *pControl) const
Get the tag given to a control.
virtual void MoveMouseCursor(float x, float y)=0
Force move the mouse cursor to a specific position.
void SetPlatformContext(void *pContext)
Set the platform draw context Used in order to set the platform level draw context - CGContextRef con...
void DoMeasureTextRotation(const IText &text, const IRECT &bounds, IRECT &rect) const
void CreatePopupMenu(IControl &control, IPopupMenu &menu, const IRECT &bounds, int valIdx=0)
Shows a pop up/contextual menu in relation to a rectangular region of the graphics context...
void EnableLiveEdit(bool enable)
Live edit mode allows you to relocate controls at runtime in debug builds.
virtual IBitmap LoadBitmap(const char *fileNameOrResID, int nStates=1, bool framesAreHorizontal=false, int targetScale=0)
Load a bitmap image from disk or from windows resource.
void PathEllipse(const IRECT &bounds)
Add an ellipse to the current path, specifying the rectangular region.
int Height() const
Gets the height of the graphics context.
APIBitmap * SearchBitmapInCache(const char *fileName, int targetScale, int &sourceScale)
Search the static storage cache for a bitmap image resource matching the target scale.
An editor delegate base class for a SOMETHING that uses IGraphics for it's UI.
void AttachSVGBackground(const char *fileName)
Attach an ISVGControl as the lowest IControl in the control stack to be the background for the graphi...
void RemovePopupMenuControl()
Remove the IGraphics popup menu, use platform popup menu if available.
void ForStandardControlsFunc(std::function< void(IControl *pControl)> func)
For all standard controls in the main control stack perform a function.
ILayer * PopLayer()
Pop a layer off the stack.
void DrawRadialLine(const IColor &color, float cx, float cy, float angle, float rMin, float rMax, const IBlend *pBlend=0, float thickness=1.f)
Draw a radial line to the graphics context, useful for pointers on dials.
virtual void EndFrame()
Called by some drawing API classes to finally blit the draw bitmap onto the screen or perform other c...
IText is used to manage font and text/text entry style for a piece of text on the UI...
virtual void AttachPlatformView(const IRECT &r, void *pView)
Add an OS view as a sub-view, on top of the IGraphics view.
virtual void PromptForFile(WDL_String &fileName, WDL_String &path, EFileAction action=EFileAction::Open, const char *extensions=0)=0
Create a platform file prompt dialog to choose a file/directory path for opening/saving a file/direct...
virtual bool LoadAPIFont(const char *fontID, const PlatformFontPtr &font)=0
Drawing API method to load a font from a PlatformFontPtr, called internally.
bool CheckLayer(const ILayerPtr &layer)
Test to see if a layer needs drawing, for instance if the control's bounds were changed.
virtual void DrawCircle(const IColor &color, float cx, float cy, float r, const IBlend *pBlend=0, float thickness=1.f)
Draw a circle to the graphics context.
const char * GetSharedResourcesSubPath() const
Gets the name of the shared resources subpath.
bool OnKeyUp(float x, float y, const IKeyPress &key)
float GetDrawScale() const
Gets the graphics context scaling factor.
void StyleAllVectorControls(const IVStyle &style)
Helper method to style all of the controls which inherit IVectorBase.
bool OnMouseOver(float x, float y, const IMouseMod &mod)
virtual void DrawSVG(const ISVG &svg, const IRECT &bounds, const IBlend *pBlend=0)
Draw an SVG image to the graphics context.
void AssignParamNameToolTips()
Call this method in order to create tool tips for every IControl that show the associated parameter's...
void RemoveAllControls()
Removes all regular IControls from the control list, as well as special controls (frees memory)...
IPlug Constant definitions, Types, magic numbers.
void SetAllControlsClean()
Calls SetClean() on every control.
virtual void * GetWindow()=0
Get a pointer to the platform view e.g.
virtual void PathFill(const IPattern &pattern, const IFillOptions &options=IFillOptions(), const IBlend *pBlend=0)=0
Fill the current current path.
void PathTransformSkew(float xAngle, float yAngle)
Apply a skew transform to the current path.
virtual void RetainBitmap(const IBitmap &bitmap, const char *cacheName)
Adds an IBitmap to the cache/static storage.
void Draw(IRECTList &rects)
Called by the platform class indicating a number of rectangles in the UI that need to redraw...
virtual WDL_TypedBuf< uint8_t > LoadResource(const char *fileNameOrResID, const char *fileType)
Load a resource from the file system, the bundle, or a Windows resource, and returns its data...
Performance display meter, based on code from NanoVG This is a special control that lives outside the...
virtual void GetLayerBitmapData(const ILayerPtr &layer, RawBitmapData &data)=0
Get the contents of a layers pixels as bitmap data.
IBitmap GetScaledBitmap(IBitmap &inBitmap)
Get a version of the input bitmap from the cache that corresponds to the current screen scale For exa...
void OnGestureRecognized(const IGestureInfo &info)
Called by platform class when a gesture is recognized.
void SetPTParameterHighlight(int paramIdx, bool isHighlighted, int color)
[AAX only] See AAX_CEffectGUI::SetControlHighlightInfo()
virtual void FillArc(const IColor &color, float cx, float cy, float r, float a1, float a2, const IBlend *pBlend=0)
Fill an arc segment with a color.
void PathClipRegion(const IRECT r=IRECT())
Clip the current path to a particular region.
void AttachImGui(std::function< void(IGraphics *)> drawFunc, std::function< void()> setupFunc=nullptr)
Set functions to draw DearImGui widgets on top of the IGraphics context (only relevant when IGRAPHICS...
void OnMouseWheel(float x, float y, const IMouseMod &mod, float delta)
virtual void ReleaseBitmap(const IBitmap &bitmap)
Releases an IBitmap from the cache/static storage.
virtual void CachePlatformFont(const char *fontID, const PlatformFontPtr &font)=0
Called to indicate that the platform should cache data about the platform font if needed...
bool OnMouseDblClick(float x, float y, const IMouseMod &mod)
void GetMouseDownPoint(float &x, float &y) const
Get the x, y position of the last mouse down message.
virtual void DrawFastDropShadow(const IRECT &innerBounds, const IRECT &outerBounds, float xyDrop=5.f, float roundness=0.f, float blur=10.f, IBlend *pBlend=nullptr)
NanoVG only.
The lowest level base class of an IGraphics context.
Used to specify properties of a drop-shadow to a layer.
void SearchNextScale(int &sourceScale, int targetScale)
Utility used by SearchImageResource/SearchBitmapInCache.
void PromptUserInput(IControl &control, const IRECT &bounds, int valIdx=0)
Prompt for user input either using a text entry or pop up menu.
IRECT GetBounds() const
Returns an IRECT that represents the entire UI bounds This is useful for programatically arranging UI...
A control for resizing the plug-in window by clicking and dragging in the bottom right-hand corner Th...
void PathTransformScale(float x, float y)
Apply a scale transform to the current path, with independant x, y scales.
void UpdatePeers(IControl *pCaller, int callerValIdx)
This method is called after interacting with a control, so that any other controls linked to the same...
virtual void FillRoundRect(const IColor &color, const IRECT &bounds, float cornerRadius=5.f, const IBlend *pBlend=0)
Fill a rounded rectangle with a color.
void PathCircle(float cx, float cy, float r)
Add a circle to the current path.
virtual void FillRect(const IColor &color, const IRECT &bounds, const IBlend *pBlend=0)
Fill a rectangular region of the graphics context with a color.
void OnMouseOut()
Called when the mouse leaves the graphics context.
void Resize(int w, int h, float scale, bool needsPlatformResize=true)
void OnTouchCancelled(const std::vector< IMouseInfo > &points)
Called when the platform class sends touch cancel events.
void ForControlWithParam(int paramIdx, std::function< void(IControl *pControl)> func)
For all standard controls in the main control stack that are linked to a specific parameter...
virtual void FillEllipse(const IColor &color, const IRECT &bounds, const IBlend *pBlend=0)
Fill an ellipse within a rectangular region of the graphics context.
void ClearGestureRegions()
Remove all gesture recognizers linked to regions.
virtual void DrawEllipse(const IColor &color, const IRECT &bounds, const IBlend *pBlend=0, float thickness=1.f)
Draw an ellipse within a rectangular region of the graphics context.
void DrawFittedLayer(const ILayerPtr &layer, const IRECT &bounds, const IBlend *pBlend)
Draw a layer to the main IGraphics context, fitting it to a rectangle that is different to the layer'...
void PathTransformRotate(float angle)
Apply a rotation transform to the current path.
A control to enable live modification of control layout in an IGraphics context in debug builds This ...
virtual void PathSetWinding(bool clockwise)
NanoVG only.
virtual void ClientToScreen(float &x, float &y)
Convert an x, y position in the view to screen coordinates.
int GetParamIdxForPTAutomation(float x, float y)
[AAX only] This can be called by the ProTools API class (e.g.
virtual void HideMouseCursor(bool hide=true, bool lock=true)=0
Call to hide/show the mouse cursor.
void SetQwertyMidiKeyHandlerFunc(std::function< void(const IMidiMsg &msg)> func=nullptr)
A helper to set the IGraphics KeyHandlerFunc in order to make an instrument playable via QWERTY keys...
virtual void DrawTriangle(const IColor &color, float x1, float y1, float x2, float y2, float x3, float y3, const IBlend *pBlend=0, float thickness=1.f)
Draw a triangle to the graphics context.
virtual void DrawFittedBitmap(const IBitmap &bitmap, const IRECT &bounds, const IBlend *pBlend=0)
Draw a bitmap (raster) image to the graphics context, scaling the image to fit the bounds...
void ShowFPSDisplay(bool enable)
Shows a control to display the frame rate of drawing.
void SetControlBounds(int idx, const IRECT &r)
Set a controls target and draw rect to r, redrawing the interface correctly.
virtual void PathClear()=0
Clear the stack of path drawing commands.
void DrawLayer(const ILayerPtr &layer, const IBlend *pBlend=nullptr)
Draw a layer to the main IGraphics context.
virtual float GetBackingPixelScale() const
float GetTotalScale() const
Gets the combined draw and screen/display scaling factor.
void PathRoundRect(const IRECT &bounds, float ctl, float ctr, float cbl, float cbr)
Add a rounded rectangle to the current path, with independent corner roundness.
virtual void DoDrawText(const IText &text, const char *str, const IRECT &bounds, const IBlend *pBlend=nullptr)=0
virtual IBitmap ScaleBitmap(const IBitmap &inBitmap, const char *cacheName, int targetScale)
Returns a new IBitmap, an integer scaled version of the input, and adds it to the cache...
bool GetResizingInProcess() const
virtual ISVG LoadSVG(const char *fileNameOrResID, const char *units="px", float dpi=72.f)
Load an SVG from disk or from windows resource.
bool TooltipsEnabled() const
virtual void DrawBitmap(const IBitmap &bitmap, const IRECT &bounds, int srcX, int srcY, const IBlend *pBlend=0)=0
Draw a bitmap (raster) image to the graphics context.
int GetControlIdx(IControl *pControl) const
virtual void ApplyShadowMask(ILayerPtr &layer, RawBitmapData &mask, const IShadow &shadow)=0
Implemented by a graphics backend to apply a calculated shadow mask to a layer, according to the shad...
void DrawHorizontalLine(const IColor &color, const IRECT &bounds, float y, const IBlend *pBlend=0, float thickness=1.f)
Draw a horizontal line, within a rectangular region of the graphics context.
virtual void GetMouseLocation(float &x, float &y) const =0
Get the x, y position of the mouse cursor.
virtual void ForceEndUserEdit()=0
Call to force end text entry (will cancel any half input text.
A base class interface for a bitmap abstraction around the different drawing back end bitmap represen...
bool EnableMultiTouch(bool enable)
Enable/disable multi touch, if platform supports it.
virtual void * GetDrawContext()=0
Gets a void pointer to underlying drawing context, for the IGraphics backend See draw class implement...
void ForControlInGroup(const char *group, std::function< void(IControl *pControl)> func)
For all standard controls in the main control stack that are linked to a group, execute a function...
bool CanEnableMouseOver() const
void AttachBubbleControl(const IText &text=DEFAULT_TEXT)
Attach the default control to show text as a control changes.
IGEditorDelegate * GetDelegate()
Gets a pointer to the delegate class that handles communication to and from this graphics context...
int Width() const
Gets the width of the graphics context.
int WindowWidth() const
Gets the width of the graphics context including draw scaling.
void EnableMouseOver(bool enable)
virtual void DrawRotatedBitmap(const IBitmap &bitmap, float destCentreX, float destCentreY, double angle, const IBlend *pBlend=0)
Draw a bitmap (raster) image to the graphics context with rotation.
IBubbleControl * GetBubbleControl(int i=0)
virtual void * OpenWindow(void *pParentWnd)=0
Open a new platform view for this graphics context.
ILayerPtr EndLayer()
End an IGraphics layer.
void PathTransformReset(bool clearStates=false)
Reset the affine transform of the current path, to the default state.
void OnDragResize(float x, float y)
Called by ICornerResizerControl as the corner is dragged to resize.
void DrawBitmapedText(const IBitmap &bitmap, const IRECT &bounds, IText &text, IBlend *pBlend, const char *str, bool vCenter=true, bool multiline=false, int charWidth=6, int charHeight=12, int charOffset=0)
Draws mono spaced bitmap text.
virtual float GetPlatformWindowScale() const
Returns a scaling factor for resizing parent windows via the host/plugin API.
bool IsDirty(IRECTList &rects)
Called repeatedly at frame rate by the platform class to check what the graphics context says is dirt...
A special control to draw contextual info as a slider etc is moved If used in the main IControl stack...
virtual void PathQuadraticBezierTo(float cx, float cy, float x2, float y2)=0
Add a quadratic bezier to the current path from the current point to the specified location...
void DrawVerticalLine(const IColor &color, const IRECT &bounds, float x, const IBlend *pBlend=0, float thickness=1.f)
Draw a vertical line, within a rectangular region of the graphics context.
IControl * AttachControl(IControl *pControl, int ctrlTag=kNoTag, const char *group="")
Attach an IControl to the graphics context and add it to the top of the control stack.
IPopupMenuControl * GetPopupMenuControl()
void OnSetCursor()
Called when the mouse enters the graphics context, to update the cursor to mCursorType.
virtual float DoMeasureText(const IText &text, const char *str, IRECT &bounds) const =0
void PathRadialLine(float cx, float cy, float angle, float rMin, float rMax)
Add a radial line to the current path.
void ShowControlBounds(bool enable)
IRECT GetPixelSnapped(IRECT &r) const
Gets the nearest backing pixel aligned rect to the input IRECT.
void PathLine(float x1, float y1, float x2, float y2)
Add a line to the current path.
void ForMatchingControls(T method, int paramIdx, Args...args)
For all standard controls in the main control stack that are linked to a specific parameter...
virtual bool WindowIsOpen()
ITextEntryControl * GetTextEntryControl()
IPopupMenu & GetPromptMenu()
virtual void DrawRotatedSVG(const ISVG &svg, float destCentreX, float destCentreY, float width, float height, double angle, const IBlend *pBlend=0)
Draw an SVG image to the graphics context with rotation.
virtual void DrawArc(const IColor &color, float cx, float cy, float r, float a1, float a2, const IBlend *pBlend=0, float thickness=1.f)
Draw an arc to the graphics context.
virtual bool PromptForColor(IColor &color, const char *str="", IColorPickerHandlerFunc func=nullptr)=0
Create a platform color chooser dialog.
virtual void FillConvexPolygon(const IColor &color, float *x, float *y, int nPoints, const IBlend *pBlend=0)
Fill a convex polygon with a color.
virtual EMsgBoxResult ShowMessageBox(const char *str, const char *caption, EMsgBoxType type, IMsgBoxCompletionHanderFunc completionHandler=nullptr)=0
Pop up a modal platform message box dialog.
bool IsInPlatformTextEntry()
virtual bool OpenURL(const char *url, const char *msgWindowTitle=0, const char *confirmMsg=0, const char *errMsgOnFailure=0)=0
Open a URL in the platform’s default browser.
std::unique_ptr< ILayer > ILayerPtr
ILayerPtr is a managed pointer for transferring the ownership of layers.
void SetControlValueAfterPopupMenu(IPopupMenu *pMenu)
Called by PopupMenuControl in order to update a control with a new value after returning from the non...
virtual void DrawLine(const IColor &color, float x1, float y1, float x2, float y2, const IBlend *pBlend=0, float thickness=1.f)
Draw a line to the graphics context.
Used to store pattern information for gradients.
virtual bool LoadFont(const char *fontID, const char *fileNameOrResID)
Load a font to be used by the graphics context.
Used to store transformation matrices.
Used for key press info, such as ASCII representation, virtual key (mapped to win32 codes) and modifi...
void SetTabletInput(bool tablet)
Set by the platform class if the mouse input is coming from a tablet/stylus.
virtual void FillTriangle(const IColor &color, float x1, float y1, float x2, float y2, float x3, float y3, const IBlend *pBlend=0)
Fill a triangle with a color.
A struct encapsulating a set of properties used to configure IVControls.
virtual float MeasureText(const IText &text, const char *str, IRECT &bounds) const
Measure the rectangular region that some text will occupy.
int GetIdxOfTaggedControl(int ctrlTag) const
Gets the index of a tagged control.
bool ControlIsCaptured() const
Check to see if any control is captured.
void PathTriangle(float x1, float y1, float x2, float y2, float x3, float y3)
Add a triangle to the current path.
virtual const char * GetDrawingAPIStr()=0
An abstraction that is used to store a temporary raster image/framebuffer.
virtual void UpdateTooltips()=0
Call this if you modify control tool tips at runtime.