iPlug2 - C++ Audio Plug-in Framework
Loading...
Searching...
No Matches
IGraphics.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the iPlug 2 library. Copyright (C) the iPlug 2 developers.
5
6 See LICENSE.txt for more info.
7
8 ==============================================================================
9*/
10
11#pragma once
12
33#ifndef NO_IGRAPHICS
34#if defined(IGRAPHICS_NANOVG) + defined(IGRAPHICS_SKIA) != 1
35#error Either NO_IGRAPHICS or one and only one choice of graphics library must be defined!
36#endif
37#endif
38
39#ifdef AAX_API
40#include "IPlugAAX_view_interface.h"
41#endif
42
43#include "IPlugConstants.h"
44#include "IPlugLogger.h"
45#include "IPlugPaths.h"
46
47#include "IGraphicsConstants.h"
48#include "IGraphicsStructs.h"
49#include "IGraphicsPopupMenu.h"
51
52#include "nanosvg.h"
53
54#include <stack>
55#include <memory>
56#include <vector>
57#include <unordered_map>
58
59#ifdef FillRect
60#undef FillRect
61#endif
62
63#ifdef DrawText
64#undef DrawText
65#endif
66
67#ifdef LoadBitmap
68#undef LoadBitmap
69#endif
70
71BEGIN_IPLUG_NAMESPACE
72class IParam;
73BEGIN_IGRAPHICS_NAMESPACE
74class IControl;
79class IBubbleControl;
80
83#ifdef AAX_API
84: public IPlugAAXView_Interface
85#endif
86{
87public:
88#pragma mark - Drawing API implementation
89
91 virtual void BeginFrame();
92
94 virtual void OnViewInitialized(void* pContext) {};
95
97 virtual void OnViewDestroyed() {};
98
100 virtual void EndFrame() {};
101
108 virtual void DrawSVG(const ISVG& svg, const IRECT& bounds, const IBlend* pBlend = 0, const IColor* pStrokeColor = nullptr, const IColor* pFillColor = nullptr);
109
118 virtual void DrawRotatedSVG(const ISVG& svg, float destCentreX, float destCentreY, float width, float height, double angle, const IBlend* pBlend = 0);
119
126 virtual void DrawBitmap(const IBitmap& bitmap, const IRECT& bounds, int srcX, int srcY, const IBlend* pBlend = 0) = 0;
127
132 virtual void DrawFittedBitmap(const IBitmap& bitmap, const IRECT& bounds, const IBlend* pBlend = 0);
133
140 virtual void DrawRotatedBitmap(const IBitmap& bitmap, float destCentreX, float destCentreY, double angle, const IBlend* pBlend = 0);
141
147 virtual void DrawPoint(const IColor& color, float x, float y, const IBlend* pBlend = 0);
148
157 virtual void DrawLine(const IColor& color, float x1, float y1, float x2, float y2, const IBlend* pBlend = 0, float thickness = 1.f);
158
167 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);
168
179 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);
180
186 virtual void DrawRect(const IColor& color, const IRECT& bounds, const IBlend* pBlend = 0, float thickness = 1.f);
187
194 virtual void DrawRoundRect(const IColor& color, const IRECT& bounds, float cornerRadius = 5.f, const IBlend* pBlend = 0, float thickness = 1.f);
195
205 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);
206
216 virtual void DrawArc(const IColor& color, float cx, float cy, float r, float a1, float a2, const IBlend* pBlend = 0, float thickness = 1.f);
217
225 virtual void DrawCircle(const IColor& color, float cx, float cy, float r, const IBlend* pBlend = 0, float thickness = 1.f);
226
232 virtual void DrawEllipse(const IColor& color, const IRECT& bounds, const IBlend* pBlend = 0, float thickness = 1.f);
233
243 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);
244
252 virtual void DrawConvexPolygon(const IColor& color, float* x, float* y, int nPoints, const IBlend* pBlend = 0, float thickness = 1.f);
253
259 virtual void DrawDottedRect(const IColor& color, const IRECT& bounds, const IBlend* pBlend = 0, float thickness = 1.f, float dashLen = 2.f);
260
270 virtual void FillTriangle(const IColor& color, float x1, float y1, float x2, float y2, float x3, float y3, const IBlend* pBlend = 0);
271
276 virtual void FillRect(const IColor& color, const IRECT& bounds, const IBlend* pBlend = 0);
277
283 virtual void FillRoundRect(const IColor& color, const IRECT& bounds, float cornerRadius = 5.f, const IBlend* pBlend = 0);
284
293 virtual void FillRoundRect(const IColor& color, const IRECT& bounds, float cRTL, float cRTR, float cRBR, float cRBL, const IBlend* pBlend = 0);
294
301 virtual void FillCircle(const IColor& color, float cx, float cy, float r, const IBlend* pBlend = 0);
302
307 virtual void FillEllipse(const IColor& color, const IRECT& bounds, const IBlend* pBlend = 0);
308
317 virtual void FillEllipse(const IColor& color, float x, float y, float r1, float r2, float angle = 0.0, const IBlend* pBlend = 0);
318
327 virtual void FillArc(const IColor& color, float cx, float cy, float r, float a1, float a2, const IBlend* pBlend = 0);
328
335 virtual void FillConvexPolygon(const IColor& color, float* x, float* y, int nPoints, const IBlend* pBlend = 0);
336
342 void DrawText(const IText& text, const char* str, const IRECT& bounds, const IBlend* pBlend = 0);
343
350 void DrawText(const IText& text, const char* str, float x, float y, const IBlend* pBlend = 0);
351
356 virtual float MeasureText(const IText& text, const char* str, IRECT& bounds) const;
357
363 virtual void DrawMultiLineText(const IText& text, const char* str, const IRECT& bounds, const IBlend* pBlend = 0) { DrawText(text, "Unsupported", bounds, pBlend); }
364
369 virtual IColor GetPoint(int x, int y) = 0;
370
373 virtual void* GetDrawContext() = 0;
374
376 virtual const char* GetDrawingAPIStr() = 0;
377
383 virtual IBitmap ScaleBitmap(const IBitmap& inBitmap, const char* cacheName, int targetScale);
384
388 virtual void RetainBitmap(const IBitmap& bitmap, const char* cacheName);
389
392 virtual void ReleaseBitmap(const IBitmap& bitmap);
393
399
401 virtual bool BitmapExtSupported(const char* ext) = 0;
402
404 virtual void DrawFastDropShadow(const IRECT& innerBounds, const IRECT& outerBounds, float xyDrop = 5.f, float roundness = 0.f, float blur = 10.f, IBlend* pBlend = nullptr) { /* NO-OP*/ }
405
406#pragma mark - Base implementation - drawing helpers
407
413 void DrawBitmap(const IBitmap& bitmap, const IRECT& bounds, int frame = 1, const IBlend* pBlend = 0);
414
426 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);
427
435 void DrawLineAcross(const IColor& color, const IRECT& bounds, EDirection dir, float pos, const IBlend* pBlend = 0, float thickness = 1.f);
436
443 void DrawVerticalLine(const IColor& color, const IRECT& bounds, float x, const IBlend* pBlend = 0, float thickness = 1.f);
444
451 void DrawHorizontalLine(const IColor& color, const IRECT& bounds, float y, const IBlend* pBlend = 0, float thickness = 1.f);
452
460 void DrawVerticalLine(const IColor& color, float xi, float yLo, float yHi, const IBlend* pBlend = 0, float thickness = 1.f);
461
469 void DrawHorizontalLine(const IColor& color, float yi, float xLo, float xHi, const IBlend* pBlend = 0, float thickness = 1.f);
470
480 void DrawRadialLine(const IColor& color, float cx, float cy, float angle, float rMin, float rMax, const IBlend* pBlend = 0, float thickness = 1.f);
481
489 virtual void DrawGrid(const IColor& color, const IRECT& bounds, float gridSizeH, float gridSizeV, const IBlend* pBlend = 0, float thickness = 1.f);
490
500 virtual void DrawData(const IColor& color, const IRECT& bounds, float* normYPoints, int nPoints, float* normXPoints = nullptr, const IBlend* pBlend = 0, float thickness = 1.f, const IColor* pFillColor = nullptr);
501
506 virtual bool LoadFont(const char* fontID, const char* fileNameOrResID);
507
513 virtual bool LoadFont(const char* fontID, void* pData, int dataSize);
514
520 bool LoadFont(const char* fontID, const char* fontName, ETextStyle style);
521
522#pragma mark - Layer management
523
528 void StartLayer(IControl* pOwner, const IRECT& r, bool cacheable = false);
529
532 void ResumeLayer(ILayerPtr& layer);
533
537
541 bool CheckLayer(const ILayerPtr& layer);
542
546 void DrawLayer(const ILayerPtr& layer, const IBlend* pBlend = nullptr);
547
552 void DrawFittedLayer(const ILayerPtr& layer, const IRECT& bounds, const IBlend* pBlend);
553
557 void DrawRotatedLayer(const ILayerPtr& layer, double angle);
558
562 virtual void ApplyLayerDropShadow(ILayerPtr& layer, const IShadow& shadow);
563
568 virtual void GetLayerBitmapData(const ILayerPtr& layer, RawBitmapData& data) = 0;
569
570protected:
575 virtual void ApplyShadowMask(ILayerPtr& layer, RawBitmapData& mask, const IShadow& shadow) = 0;
576
578 virtual void UpdateLayer() {}
579
582 void PushLayer(ILayer* pLayer);
583
586 ILayer* PopLayer();
587
588#pragma mark - Drawing API path support
589public:
591 virtual void PathClear() = 0;
592
594 virtual void PathClose() = 0;
595
601 void PathLine(float x1, float y1, float x2, float y2)
602 {
603 PathMoveTo(x1, y1);
604 PathLineTo(x2, y2);
605 }
606
613 void PathRadialLine(float cx, float cy, float angle, float rMin, float rMax);
614
622 void PathTriangle(float x1, float y1, float x2, float y2, float x3, float y3);
623
626 void PathRect(const IRECT& bounds);
627
634 void PathRoundRect(const IRECT& bounds, float ctl, float ctr, float cbl, float cbr);
635
639 void PathRoundRect(const IRECT& bounds, float cornerRadius = 5.f);
640
647 virtual void PathArc(float cx, float cy, float r, float a1, float a2, EWinding winding = EWinding::CW) = 0;
648
653 void PathCircle(float cx, float cy, float r);
654
657 void PathEllipse(const IRECT& bounds);
658
665 void PathEllipse(float x, float y, float r1, float r2, float angle = 0.0);
666
671 void PathConvexPolygon(float* x, float* y, int nPoints);
672
676 virtual void PathMoveTo(float x, float y) = 0;
677
681 virtual void PathLineTo(float x, float y) = 0;
682
685 virtual void PathSetWinding(bool clockwise) {};
686
694 virtual void PathCubicBezierTo(float c1x, float c1y, float c2x, float c2y, float x2, float y2) = 0;
695
701 virtual void PathQuadraticBezierTo(float cx, float cy, float x2, float y2) = 0;
702
708 virtual void PathStroke(const IPattern& pattern, float thickness, const IStrokeOptions& options = IStrokeOptions(), const IBlend* pBlend = 0) = 0;
709
714 virtual void PathFill(const IPattern& pattern, const IFillOptions& options = IFillOptions(), const IBlend* pBlend = 0) = 0;
715
717 void PathTransformSave();
718
721
724 void PathTransformReset(bool clearStates = false);
725
729 void PathTransformTranslate(float x, float y);
730
734 void PathTransformScale(float x, float y);
735
738 void PathTransformScale(float scale);
739
742 void PathTransformRotate(float angle);
743
747 void PathTransformSkew(float xAngle, float yAngle);
748
751 void PathTransformMatrix(const IMatrix& matrix);
752
755 void PathClipRegion(const IRECT r = IRECT());
756
757 virtual void PathTransformSetMatrix(const IMatrix& matrix) = 0;
758
759 void DoTextRotation(const IText& text, const IRECT& bounds, const IRECT& rect)
760 {
761 if (!text.mAngle)
762 return;
763
764 IRECT rotated = rect;
765 double tx, ty;
766
767 CalculateTextRotation(text, bounds, rotated, tx, ty);
768 PathTransformTranslate(static_cast<float>(tx), static_cast<float>(ty));
769 PathTransformRotate(text.mAngle);
770 }
771
772private:
773 IPattern GetSVGPattern(const NSVGpaint& paint, float opacity);
774
775 void DoDrawSVG(const ISVG& svg, const IBlend* pBlend = nullptr, const IColor* pStrokeColor = nullptr, const IColor* pFillColor = nullptr);
776
779 void PrepareRegion(const IRECT& bounds)
780 {
781 PathTransformReset(true);
782 PathClear();
783 SetClipRegion(bounds);
784 mClipRECT = bounds;
785 }
786
789 virtual void CompleteRegion(const IRECT& bounds) {}
790
791 virtual void SetClipRegion(const IRECT& r) = 0;
792
793public:
794#pragma mark - Platform implementation
795
799 virtual void AttachPlatformView(const IRECT& r, void* pView) {};
800
803 virtual void RemovePlatformView(void* pView) {};
804
808 virtual void HidePlatformView(void* pView, bool hide) {};
809
813 virtual void GetMouseLocation(float& x, float&y) const = 0;
814
818 virtual void HideMouseCursor(bool hide = true, bool lock = true) = 0;
819
823 virtual void MoveMouseCursor(float x, float y) = 0;
824
828 virtual ECursor SetMouseCursor(ECursor cursorType = ECursor::ARROW)
829 {
830 ECursor oldCursorType = mCursorType;
831 mCursorType = cursorType;
832 return oldCursorType;
833 }
834
836 virtual void ForceEndUserEdit() = 0;
837
841 virtual void* OpenWindow(void* pParentWnd) = 0;
842
844 virtual void CloseWindow() = 0;
845
848 virtual void* GetWindow() = 0;
849
851 virtual bool WindowIsOpen() { return GetWindow(); }
852
856 virtual bool GetTextFromClipboard(WDL_String& str) = 0;
857
861 virtual bool SetTextInClipboard(const char* str) = 0;
862
866 virtual bool SetFilePathInClipboard(const char* path) { return false; }
867
872 virtual bool InitiateExternalFileDragDrop(const char* path, const IRECT& iconBounds) { return false; };
873
875 virtual void UpdateTooltips() = 0;
876
883 virtual EMsgBoxResult ShowMessageBox(const char* str, const char* title, EMsgBoxType type, IMsgBoxCompletionHandlerFunc completionHandler = nullptr) = 0;
884
891 virtual void PromptForFile(WDL_String& fileName, WDL_String& path, EFileAction action = EFileAction::Open, const char* ext = "", IFileDialogCompletionHandlerFunc completionHandler = nullptr) = 0;
892
896 virtual void PromptForDirectory(WDL_String& dir, IFileDialogCompletionHandlerFunc completionHandler = nullptr) = 0;
897
903 virtual bool PromptForColor(IColor& color, const char* str = "", IColorPickerHandlerFunc func = nullptr) = 0;
904
911 virtual bool OpenURL(const char* url, const char* msgWindowTitle = 0, const char* confirmMsg = 0, const char* errMsgOnFailure = 0) = 0;
912
914 virtual const char* GetPlatformAPIStr() { return ""; }
915
919 virtual bool RevealPathInExplorerOrFinder(WDL_String& path, bool select = false) { return false; }
920
923 virtual void SetWinModuleHandle(void* pHinstance) {}
924
926 virtual void* GetWinModuleHandle() { return nullptr; }
927
931 void SetPlatformContext(void* pContext) { mPlatformContext = pContext; }
932
935 void* GetPlatformContext() { return mPlatformContext; }
936
940 virtual void ClientToScreen(float& x, float& y) {};
941
946 virtual PlatformFontPtr LoadPlatformFont(const char* fontID, const char* fileNameOrResID) = 0;
947
953 virtual PlatformFontPtr LoadPlatformFont(const char* fontID, void* pData, int dataSize) = 0;
954
960 virtual PlatformFontPtr LoadPlatformFont(const char* fontID, const char* fontName, ETextStyle style) = 0;
961
965 virtual void CachePlatformFont(const char* fontID, const PlatformFontPtr& font) = 0;
966
968 virtual const char* GetBundleID() const { return ""; }
969
971 virtual const char* GetAppGroupID() const { return ""; }
972
973 // An RAII helper to manage the IGraphics GL context
975 {
976 public:
977 ScopedGLContext(IGraphics* pGraphics)
978 : mIGraphics(*pGraphics) { mIGraphics.ActivateGLContext(); }
979 ~ScopedGLContext() { mIGraphics.DeactivateGLContext(); }
980 private:
981 IGraphics& mIGraphics;
982 };
983
984protected:
985 /* Activate the context for the view (GL only) */
986 virtual void ActivateGLContext() {};
987
988 /* Deactivate the context for the view (GL only) */
989 virtual void DeactivateGLContext() {};
990
997 virtual void CreatePlatformTextEntry(int paramIdx, const IText& text, const IRECT& bounds, int length, const char* str) = 0;
998
1004 virtual IPopupMenu* CreatePlatformPopupMenu(IPopupMenu& menu, const IRECT bounds, bool& isAsync) = 0;
1005
1006#pragma mark - Base implementation
1007public:
1008 IGraphics(IGEditorDelegate& dlg, int w, int h, int fps = DEFAULT_FPS, float scale = 1.);
1009
1010 virtual ~IGraphics();
1011
1012 IGraphics(const IGraphics&) = delete;
1013 IGraphics& operator=(const IGraphics&) = delete;
1014
1017 void SetScreenScale(float scale);
1018
1020 void SetTranslation(float x, float y) { mXTranslation = x; mYTranslation = y; }
1021
1025 bool IsDirty(IRECTList& rects);
1026
1029 void Draw(IRECTList& rects);
1030
1035 void PromptUserInput(IControl& control, const IRECT& bounds, int valIdx = 0);
1036
1042 void CreatePopupMenu(IControl& control, IPopupMenu& menu, const IRECT& bounds, int valIdx = 0);
1043
1049 void CreatePopupMenu(IControl& control, IPopupMenu& menu, float x, float y, int valIdx = 0)
1050 {
1051 return CreatePopupMenu(control, menu, IRECT(x, y, x, y), valIdx);
1052 }
1053
1060 void CreateTextEntry(IControl& control, const IText& text, const IRECT& bounds, const char* str = "", int valIdx = 0);
1061
1064 void SetControlValueAfterTextEdit(const char* str);
1065
1069
1073 void DeleteFromPopupMenu(IPopupMenu* pMenu, int itemIdx);
1074
1078 void SetScaleConstraints(float lo, float hi);
1079
1086 void Resize(int w, int h, float scale, bool needsPlatformResize = true);
1087
1091 void SetStrictDrawing(bool strict);
1092
1093 /* Enables layout on resize. This means IGEditorDelegate:LayoutUI() will be called when the GUI is resized */
1094 void SetLayoutOnResize(bool layoutOnResize);
1095
1098 int Width() const { return mWidth; }
1099
1102 int Height() const { return mHeight; }
1103
1106 int WindowWidth() const { return static_cast<int>(static_cast<float>(mWidth) * mDrawScale); }
1107
1110 int WindowHeight() const { return static_cast<int>(static_cast<float>(mHeight) * mDrawScale); }
1111
1114 int FPS() const { return mFPS; }
1115
1118 float GetDrawScale() const { return mDrawScale; }
1119
1122 float GetScreenScale() const { return mScreenScale; }
1123
1126 int GetRoundedScreenScale() const { return static_cast<int>(std::ceil(GetScreenScale())); }
1127
1130 float GetTotalScale() const { return mDrawScale * mScreenScale; }
1131
1136
1139 IGEditorDelegate* GetDelegate() { return mDelegate; }
1140
1142 IPopupMenu& GetPromptMenu() { return mPromptPopupMenu; }
1143
1145 bool IsInPlatformTextEntry() { return mInTextEntry != nullptr && !mTextEntryControl; }
1146
1148 IControl* GetControlInTextEntry() { return mInTextEntry; }
1149
1151 void ClearInTextEntryControl() { mInTextEntry = nullptr; }
1152
1154 inline bool TooltipsEnabled() const { return mEnableTooltips; }
1155
1157 EUIResizerMode GetResizerMode() const { return mGUISizeMode; }
1158
1160 bool GetResizingInProcess() const { return mResizingInProcess; }
1161
1164 bool EnableMultiTouch(bool enable)
1165 {
1167 {
1168 mEnableMultiTouch = enable;
1169 return true;
1170 }
1171 else
1172 mEnableMultiTouch = false;
1173
1174 return false;
1175 }
1176
1178 bool MultiTouchEnabled() const { return mEnableMultiTouch; }
1179
1181 virtual bool PlatformSupportsMultiTouch() const { return false; }
1182
1184 void EnableTooltips(bool enable);
1185
1188
1190 inline void ShowControlBounds(bool enable) { mShowControlBounds = enable; SetAllControlsDirty(); }
1191
1193 inline void ShowAreaDrawn(bool enable) { mShowAreaDrawn = enable; if(!enable) SetAllControlsDirty(); }
1194
1196 bool ShowAreaDrawnEnabled() const { return mShowAreaDrawn; }
1197
1199 bool ShowControlBoundsEnabled() const { return mShowControlBounds; }
1200
1203 void EnableLiveEdit(bool enable);
1204
1206 bool LiveEditEnabled() const { return mLiveEdit != nullptr; }
1207
1211 IRECT GetBounds() const { return IRECT(0.f, 0.f, (float) Width(), (float) Height()); }
1212
1215 void SetDisplayTickFunc(IDisplayTickFunc func) { mDisplayTickFunc = func; }
1216
1219 void SetUIAppearanceChangedFunc(IUIAppearanceChangedFunc func) { mAppearanceChangedFunc = func; }
1220
1223 void SetKeyHandlerFunc(IKeyHandlerFunc func) { mKeyHandlerFunc = func; }
1224
1227 void SetQwertyMidiKeyHandlerFunc(std::function<void(const IMidiMsg& msg)> func = nullptr);
1228
1230 bool RespondsToGesture(float x, float y);
1231
1233 void OnGestureRecognized(const IGestureInfo& info);
1234
1237 virtual float GetPlatformWindowScale() const { return 1.f; }
1238
1239private:
1240
1243 virtual void PlatformResize(bool parentHasResized) {}
1244
1246 virtual void DrawResize() {}
1247
1249 virtual void PostResize() {}
1250
1254 void Draw(const IRECT& bounds, float scale);
1255
1260 void DrawControl(IControl* pControl, const IRECT& bounds, float scale);
1261
1268 void DoCreatePopupMenu(IControl& control, IPopupMenu& menu, const IRECT& bounds, int valIdx, bool isContext);
1269
1271 void StartDragResize() { mResizingInProcess = true; }
1272
1274 void EndDragResize();
1275
1276#pragma mark - Control management
1277public:
1280 void ForAllControlsFunc(IControlFunction func);
1281
1285 template<typename T, typename... Args>
1286 void ForAllControls(T method, Args... args);
1287
1290 void ForStandardControlsFunc(IControlFunction func);
1291
1296 template<typename T, typename... Args>
1297 void ForMatchingControls(T method, int paramIdx, Args... args);
1298
1302 void ForControlWithParam(int paramIdx, IControlFunction func);
1303
1307 void ForControlWithParam(const std::initializer_list<int>& params, IControlFunction func);
1308
1312 void ForControlInGroup(const char* group, IControlFunction func);
1313
1316 void AttachBackground(const char* fileName);
1317
1320 void AttachSVGBackground(const char* fileName);
1321
1324 void AttachPanelBackground(const IPattern& color);
1325
1328 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);
1329
1333 void AttachCornerResizer(ICornerResizerControl* pControl, EUIResizerMode sizeMode = EUIResizerMode::Scale, bool layoutOnResize = false);
1334
1338 void AttachPopupMenuControl(const IText& text = DEFAULT_TEXT, const IRECT& bounds = IRECT());
1339
1342
1345
1348
1350 void AttachBubbleControl(const IText& text = DEFAULT_TEXT);
1351
1353 void AttachBubbleControl(IBubbleControl* pControl);
1354
1355 /* Called by controls to display text in the bubble control */
1356 void ShowBubbleControl(IControl* pCaller, float x, float y, const char* str, EDirection dir = EDirection::Horizontal, IRECT minimumContentBounds = IRECT());
1357
1358 /* Sets the region of the IGraphics context that should be used for the FPS display */
1359 void SetFPSDisplayBounds(const IRECT& bounds) { mPerfDisplayBounds = bounds; }
1360
1363 void ShowFPSDisplay(bool enable);
1364
1366 bool ShowingFPSDisplay() { return mPerfDisplay != nullptr; }
1367
1373 IControl* AttachControl(IControl* pControl, int ctrlTag = kNoTag, const char* group = "");
1374
1378 IControl* GetControl(int idx) { return mControls.Get(idx); }
1379
1383 int GetControlIdx(IControl* pControl) const { return mControls.Find(pControl); }
1384
1388 int GetIdxOfTaggedControl(int ctrlTag) const
1389 {
1390 IControl* pControl = GetControlWithTag(ctrlTag);
1391 return pControl ? GetControlIdx(pControl) : -1;
1392 }
1393
1397 IControl* GetControlWithTag(int ctrlTag) const;
1398
1402 int GetControlTag(const IControl* pControl) const
1403 {
1404 for (auto itr = mCtrlTags.begin(); itr != mCtrlTags.end(); ++itr)
1405 {
1406 if (itr->second == pControl)
1407 return itr->first;
1408 }
1409
1410 return kNoTag;
1411 }
1412
1416 IControl* GetControlWithParamIdx(int paramIdx);
1417
1419 bool ControlIsCaptured() const { return mCapturedMap.size() > 0; }
1420
1423 bool ControlIsCaptured(IControl* pControl) const
1424 {
1425 return std::find_if(std::begin(mCapturedMap), std::end(mCapturedMap), [pControl](auto&& press) { return press.second == pControl; }) != mCapturedMap.end();
1426 }
1427
1429 void GetTouches(IControl* pControl, std::vector<ITouchID>& touchesOnThisControl) const
1430 {
1431 for (auto i = mCapturedMap.begin(), j = mCapturedMap.end(); i != j; ++i)
1432 if (i->second == pControl)
1433 touchesOnThisControl.push_back(i->first);
1434 }
1435
1436 /* Get the first control in the control list, the background */
1437 IControl* GetBackgroundControl() { return GetControl(0); }
1438
1440 IPopupMenuControl* GetPopupMenuControl() { return mPopupControl.get(); }
1441
1443 ITextEntryControl* GetTextEntryControl() { return mTextEntryControl.get(); }
1444
1446 IBubbleControl* GetBubbleControl(int i = 0) { return mBubbleControls.Get(i); }
1447
1449 int NBubbleControls() const { return mBubbleControls.GetSize(); }
1450
1453 void StyleAllVectorControls(const IVStyle& style);
1454
1458 void UpdatePeers(IControl* pCaller, int callerValIdx);
1459
1461 int NControls() const { return mControls.GetSize(); }
1462
1464 void RemoveControlWithTag(int ctrlTag);
1465
1467 void RemoveControls(int fromIdx);
1468
1470 void RemoveControl(int idx);
1471
1473 void RemoveControl(IControl* pControl);
1474
1476 void RemoveAllControls();
1477
1481 void HideControl(int paramIdx, bool hide);
1482
1486 void DisableControl(int paramIdx, bool diable);
1487
1489 void SetAllControlsDirty();
1490
1492 void SetAllControlsClean();
1493
1498 void SetControlPosition(IControl* pControl, float x, float y);
1499
1504 void SetControlSize(IControl* pControl, float w, float h);
1505
1509 void SetControlBounds(IControl* pControl, const IRECT& r);
1510
1511private:
1517 int GetMouseControlIdx(float x, float y, bool mouseOver = false);
1518
1526 IControl* GetMouseControl(float x, float y, bool capture, bool mouseOver = false, ITouchID touchID = 0);
1527
1528#pragma mark - Event handling
1529public:
1531 void OnMouseDown(const std::vector<IMouseInfo>& points);
1532
1534 void OnMouseUp(const std::vector<IMouseInfo>& points);
1535
1537 void OnMouseDrag(const std::vector<IMouseInfo>& points);
1538
1540 void OnTouchCancelled(const std::vector<IMouseInfo>& points);
1541
1546 bool OnMouseDblClick(float x, float y, const IMouseMod& mod);
1547
1553 bool OnMouseWheel(float x, float y, const IMouseMod& mod, float delta);
1554
1559 bool OnKeyDown(float x, float y, const IKeyPress& key);
1560
1565 bool OnKeyUp(float x, float y, const IKeyPress& key);
1566
1571 bool OnMouseOver(float x, float y, const IMouseMod& mod);
1572
1574 void OnMouseOut();
1575
1577 void OnSetCursor() { SetMouseCursor(mCursorType); }
1578
1582 void OnDrop(const char* str, float x, float y);
1583
1587 void OnDropMultiple(const std::vector<const char*>& paths, float x, float y);
1588
1590 void OnGUIIdle();
1591
1593 void OnDragResize(float x, float y);
1594
1597 void OnAppearanceChanged(EUIAppearance appearance);
1598
1601 virtual EUIAppearance GetUIAppearance() const { return EUIAppearance::Light; }
1602
1604 void EnableMouseOver(bool enable) { mEnableMouseOver = enable; }
1605
1607 void ReleaseMouseCapture();
1608
1610 bool MouseOverEnabled() const { return mEnableMouseOver; }
1611
1613 inline int GetMouseOver() const { return mMouseOverIdx; }
1614
1618 void GetMouseDownPoint(float& x, float&y) const { x = mMouseDownX; y = mMouseDownY; }
1619
1622 void SetTabletInput(bool tablet) { mTabletInput = tablet; }
1623#pragma mark - Plug-in API Specific
1624
1630 int GetParamIdxForPTAutomation(float x, float y);
1631
1635
1640 void SetPTParameterHighlight(int paramIdx, bool isHighlighted, int color);
1641
1648 void PopupHostContextMenuForParam(int controlIdx, int paramIdx, float x, float y);
1649
1656 void PopupHostContextMenuForParam(IControl* pControl, int paramIdx, float x, float y);
1657
1658#pragma mark - Resource/File Loading
1659
1661 const char* GetSharedResourcesSubPath() const { return mSharedResourcesSubPath.Get(); }
1662
1664 void SetSharedResourcesSubPath(const char* sharedResourcesSubPath) { mSharedResourcesSubPath.Set(sharedResourcesSubPath); }
1665
1672 virtual IBitmap LoadBitmap(const char* fileNameOrResID, int nStates = 1, bool framesAreHorizontal = false, int targetScale = 0);
1673
1682 virtual IBitmap LoadBitmap(const char *name, const void* pData, int dataSize, int nStates = 1, bool framesAreHorizontal = false, int targetScale = 0);
1683
1687 virtual ISVG LoadSVG(const char* fileNameOrResID, const char* units = "px", float dpi = 72.f);
1688
1696 virtual ISVG LoadSVG(const char* name, const void* pData, int dataSize, const char* units = "px", float dpi = 72.f);
1697
1702 virtual WDL_TypedBuf<uint8_t> LoadResource(const char* fileNameOrResID, const char* fileType);
1703
1706 virtual void AttachGestureRecognizer(EGestureType type);
1707
1712 void AttachGestureRecognizerToRegion(const IRECT& bounds, EGestureType type, IGestureFunc func);
1713
1715 void ClearGestureRegions();
1716
1717protected:
1724 virtual APIBitmap* LoadAPIBitmap(const char* fileNameOrResID, int scale, EResourceLocation location, const char* ext) = 0;
1725
1732 virtual APIBitmap* LoadAPIBitmap(const char* name, const void* pData, int dataSize, int scale) = 0;
1733
1741 virtual APIBitmap* CreateAPIBitmap(int width, int height, float scale, double drawScale, bool cacheable = false) = 0;
1742
1747 virtual bool LoadAPIFont(const char* fontID, const PlatformFontPtr& font) = 0;
1748
1750 virtual int AlphaChannel() const = 0;
1751
1753 virtual bool FlippedBitmap() const = 0;
1754
1762 EResourceLocation SearchImageResource(const char* fileName, const char* type, WDL_String& result, int targetScale, int& sourceScale);
1763
1769 APIBitmap* SearchBitmapInCache(const char* fileName, int targetScale, int& sourceScale);
1770
1776 virtual float DoMeasureText(const IText& text, const char* str, IRECT& bounds) const = 0;
1777
1783 virtual void DoDrawText(const IText& text, const char* str, const IRECT& bounds, const IBlend* pBlend = nullptr) = 0;
1784
1789 void DoMeasureTextRotation(const IText& text, const IRECT& bounds, IRECT& rect) const;
1790
1797 void CalculateTextRotation(const IText& text, const IRECT& bounds, IRECT& rect, double& tx, double& ty) const;
1798
1800 virtual float GetBackingPixelScale() const { return GetScreenScale() * GetDrawScale(); };
1801
1802 IMatrix GetTransformMatrix() const { return mTransform; }
1803#pragma mark -
1804
1805private:
1806 void ClearMouseOver()
1807 {
1808 mMouseOver = nullptr;
1809 mMouseOverIdx = -1;
1810 }
1811
1812 WDL_PtrList<IControl> mControls;
1813 std::unordered_map<int, IControl*> mCtrlTags;
1814
1815 // Order (front-to-back) ToolTip / PopUp / TextEntry / LiveEdit / Corner / PerfDisplay
1816 std::unique_ptr<ICornerResizerControl> mCornerResizer;
1817 WDL_PtrList<IBubbleControl> mBubbleControls;
1818 std::unique_ptr<IPopupMenuControl> mPopupControl;
1819 std::unique_ptr<IFPSDisplayControl> mPerfDisplay;
1820 std::unique_ptr<ITextEntryControl> mTextEntryControl;
1821 std::unique_ptr<IControl> mLiveEdit;
1822
1823 IPopupMenu mPromptPopupMenu;
1824
1825 IRECT mPerfDisplayBounds;
1826
1827 WDL_String mSharedResourcesSubPath;
1828
1829 ECursor mCursorType = ECursor::ARROW;
1830 int mWidth;
1831 int mHeight;
1832 int mFPS;
1833 float mScreenScale = 1.f; // the scaling of the display that the UI is currently on e.g. 2 for retina
1834 float mDrawScale = 1.f; // scale deviation from default width and height i.e stretching the UI by dragging bottom right hand corner
1835
1836 int mIdleTicks = 0;
1837
1838 std::vector<EGestureType> mRegisteredGestures; // All the types of gesture registered with the graphics context
1839 IRECTList mGestureRegions; // Rectangular regions linked to gestures (excluding IControls)
1840 std::unordered_map<int, IGestureFunc> mGestureRegionFuncs; // Map of gesture region index to gesture function
1841 std::unordered_map<ITouchID, IControl*> mCapturedMap; // associative array of touch ids to control pointers, the same control can be touched multiple times
1842 IControl* mMouseOver = nullptr;
1843 IControl* mInTextEntry = nullptr;
1844 IControl* mInPopupMenu = nullptr;
1845 void* mPlatformContext = nullptr;
1846 bool mIsContextMenu = false;
1847 int mTextEntryValIdx = kNoValIdx;
1848 int mPopupMenuValIdx = kNoValIdx;
1849 int mMouseOverIdx = -1;
1850 float mMouseDownX = -1.f;
1851 float mMouseDownY = -1.f;
1852 float mMinScale;
1853 float mMaxScale;
1854 int mLastClickedParam = kNoParameter;
1855 bool mEnableMouseOver = false;
1856 bool mStrict = false;
1857 bool mEnableTooltips = false;
1858 bool mShowControlBounds = false;
1859 bool mShowAreaDrawn = false;
1860 bool mResizingInProcess = false;
1861 bool mLayoutOnResize = false;
1862 bool mEnableMultiTouch = false;
1863 EUIResizerMode mGUISizeMode = EUIResizerMode::Scale;
1864 double mPrevTimestamp = 0.;
1865 IKeyHandlerFunc mKeyHandlerFunc = nullptr;
1866 IDisplayTickFunc mDisplayTickFunc = nullptr;
1867 IUIAppearanceChangedFunc mAppearanceChangedFunc = nullptr;
1868
1869protected:
1870 IGEditorDelegate* mDelegate;
1871 bool mCursorHidden = false;
1872 bool mCursorLock = false;
1873 bool mTabletInput = false;
1874 float mCursorX = -1.f;
1875 float mCursorY = -1.f;
1876 float mXTranslation = 0.f;
1877 float mYTranslation = 0.f;
1878
1879 friend class IGraphicsLiveEdit;
1880 friend class ICornerResizerControl;
1881 friend class ITextEntryControl;
1882
1883 std::stack<ILayer*> mLayers;
1884
1885 IRECT mClipRECT;
1886 IMatrix mTransform;
1887 std::stack<IMatrix> mTransformStates;
1888};
1889
1890END_IGRAPHICS_NAMESPACE
1891END_IPLUG_NAMESPACE
IPlug Constant definitions, Types, magic numbers.
IPlug logging a.k.a tracing functionality.
Common paths useful for plug-ins.
A base class interface for a bitmap abstraction around the different drawing back end bitmap represen...
User-facing bitmap abstraction that you use to manage bitmap data, independant of draw class/platform...
A special control to draw contextual info as a slider etc is moved If used in the main IControl stack...
The lowest level base class of an IGraphics control.
Definition: IControl.h:49
A control for resizing the plug-in window by clicking and dragging in the bottom right-hand corner Th...
Performance display meter, based on code from NanoVG This is a special control that lives outside the...
An editor delegate base class that uses IGraphics for the UI.
The lowest level base class of an IGraphics context.
Definition: IGraphics.h:86
bool ControlIsCaptured() const
Check to see if any control is captured.
Definition: IGraphics.h:1419
void EnableTooltips(bool enable)
Definition: IGraphics.cpp:1545
void CreatePopupMenu(IControl &control, IPopupMenu &menu, float x, float y, int valIdx=0)
Shows a pop up/contextual menu at point.
Definition: IGraphics.h:1049
virtual float DoMeasureText(const IText &text, const char *str, IRECT &bounds) const =0
Internal method to measure text dimensions.
virtual bool SetFilePathInClipboard(const char *path)
Set a file path in the clipboard.
Definition: IGraphics.h:866
virtual void ClientToScreen(float &x, float &y)
Convert an x, y position in the view to screen coordinates.
Definition: IGraphics.h:940
void Resize(int w, int h, float scale, bool needsPlatformResize=true)
Resizes the graphics context to new dimensions and scale.
Definition: IGraphics.cpp:90
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.
Definition: IGraphics.cpp:2817
virtual void DrawRect(const IColor &color, const IRECT &bounds, const IBlend *pBlend=0, float thickness=1.f)
Draw a rectangle to the graphics context.
Definition: IGraphics.cpp:2517
virtual bool PlatformSupportsMultiTouch() const
Definition: IGraphics.h:1181
virtual void FillEllipse(const IColor &color, const IRECT &bounds, const IBlend *pBlend=0)
Fill an ellipse within a rectangular region of the graphics context.
Definition: IGraphics.cpp:2633
ILayer * PopLayer()
Pop a layer off the stack.
Definition: IGraphics.cpp:2034
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.
Definition: IGraphics.cpp:2538
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.
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.
Definition: IGraphics.cpp:2568
virtual PlatformFontPtr LoadPlatformFont(const char *fontID, const char *fontName, ETextStyle style)=0
Load a system font in a platform format.
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.
Definition: IGraphics.cpp:2794
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.
Definition: IGraphics.cpp:729
void AttachPopupMenuControl(const IText &text=DEFAULT_TEXT, const IRECT &bounds=IRECT())
Attach a control for pop-up menus, to override platform style menus.
Definition: IGraphics.cpp:366
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.
Definition: IGraphics.cpp:2431
void RemoveControl(int idx)
Remove a control at a particular index, (frees memory).
Definition: IGraphics.cpp:169
void DeleteFromPopupMenu(IPopupMenu *pMenu, int itemIdx)
Called by IOS platform (or other supported platforms) in order to update a control with a deletion in...
Definition: IGraphics.cpp:282
virtual const char * GetBundleID() const
Get the bundle ID on macOS and iOS, returns emtpy string on other OSs.
Definition: IGraphics.h:968
void PathConvexPolygon(float *x, float *y, int nPoints)
Add a convex polygon to the current path.
Definition: IGraphics.cpp:2715
virtual void PathFill(const IPattern &pattern, const IFillOptions &options=IFillOptions(), const IBlend *pBlend=0)=0
Fill the current current path.
void SetTabletInput(bool tablet)
Set by the platform class if the mouse input is coming from a tablet/stylus.
Definition: IGraphics.h:1622
virtual float GetPlatformWindowScale() const
Returns a scaling factor for resizing parent windows via the host/plugin API.
Definition: IGraphics.h:1237
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.
Definition: IGraphics.cpp:685
float GetTotalScale() const
Gets the combined draw and screen/display scaling factor.
Definition: IGraphics.h:1130
int GetParamIdxForPTAutomation(float x, float y)
[AAX only] This can be called by the ProTools API class (e.g.
Definition: IGraphics.cpp:1400
virtual IColor GetPoint(int x, int y)=0
Get the color at an X, Y location in the graphics context.
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.
Definition: IGraphics.cpp:1978
void CreateTextEntry(IControl &control, const IText &text, const IRECT &bounds, const char *str="", int valIdx=0)
Create a text entry box.
Definition: IGraphics.cpp:1941
virtual void PathClear()=0
Clear the stack of path drawing commands.
virtual bool InitiateExternalFileDragDrop(const char *path, const IRECT &iconBounds)
Initiate an drag-n-drop operation of an existing file, to be dropped outside of the current window.
Definition: IGraphics.h:872
virtual void MoveMouseCursor(float x, float y)=0
Force move the mouse cursor to a specific position.
virtual void * GetDrawContext()=0
Gets a void pointer to underlying drawing context, for the IGraphics backend See draw class implement...
virtual PlatformFontPtr LoadPlatformFont(const char *fontID, void *pData, int dataSize)=0
Load a font from data in memory.
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.
Definition: IGraphics.cpp:2664
void SetPTParameterHighlight(int paramIdx, bool isHighlighted, int color)
[AAX only] See AAX_CEffectGUI::SetControlHighlightInfo()
Definition: IGraphics.cpp:1414
virtual void PathClose()=0
Close the path that is being specified.
void PathTransformTranslate(float x, float y)
Apply a translation transform to the current path.
Definition: IGraphics.cpp:2750
void ClearInTextEntryControl()
Called when the text entry is dismissed, to reset mInTextEntry.
Definition: IGraphics.h:1151
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.
Definition: IGraphics.cpp:826
void PathRect(const IRECT &bounds)
Add a rectangle to the current path.
Definition: IGraphics.cpp:2655
virtual void RetainBitmap(const IBitmap &bitmap, const char *cacheName)
Adds an IBitmap to the cache/static storage.
Definition: IGraphics.cpp:1858
virtual void * GetWindow()=0
Get a pointer to the platform view e.g.
void ForMatchingControls(T method, int paramIdx, Args... args)
For all standard controls in the main control stack that are linked to a specific parameter,...
Definition: IGraphics.cpp:592
virtual void AttachPlatformView(const IRECT &r, void *pView)
Add an OS view as a sub-view, on top of the IGraphics view.
Definition: IGraphics.h:799
virtual void CreatePlatformTextEntry(int paramIdx, const IText &text, const IRECT &bounds, int length, const char *str)=0
Creates a platform native text entry field.
void ResumeLayer(ILayerPtr &layer)
If a layer already exists, continue drawing to it.
Definition: IGraphics.cpp:2007
ITextEntryControl * GetTextEntryControl()
Definition: IGraphics.h:1443
void PathTransformMatrix(const IMatrix &matrix)
Apply an arbitary affine transform matrix to the current path.
Definition: IGraphics.cpp:2779
void DrawRotatedLayer(const ILayerPtr &layer, double angle)
Draw a layer to the main IGraphics context, with rotation.
Definition: IGraphics.cpp:2085
virtual const char * GetAppGroupID() const
Get the app group ID on macOS and iOS, returns emtpy string on other OSs.
Definition: IGraphics.h:971
int FPS() const
Gets the drawing frame rate.
Definition: IGraphics.h:1114
void PathTransformScale(float x, float y)
Apply a scale transform to the current path, with independant x, y scales.
Definition: IGraphics.cpp:2756
virtual ECursor SetMouseCursor(ECursor cursorType=ECursor::ARROW)
Sets the mouse cursor to one of ECursor (implementations should return the result of the base impleme...
Definition: IGraphics.h:828
void PathLine(float x1, float y1, float x2, float y2)
Add a line to the current path.
Definition: IGraphics.h:601
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.
Definition: IGraphics.cpp:2559
IControl * GetControlWithTag(int ctrlTag) const
Get the control with a particular tag.
Definition: IGraphics.cpp:463
virtual void PathSetWinding(bool clockwise)
NanoVG only.
Definition: IGraphics.h:685
virtual bool SetTextInClipboard(const char *str)=0
Set text in the clipboard.
virtual void HidePlatformView(void *pView, bool hide)
Hide a previously attached platform view from the IGraphics view.
Definition: IGraphics.h:808
void OnMouseDrag(const std::vector< IMouseInfo > &points)
Called when the platform class sends drag events.
Definition: IGraphics.cpp:1170
virtual void ReleaseBitmap(const IBitmap &bitmap)
Releases an IBitmap from the cache/static storage.
Definition: IGraphics.cpp:1852
void ShowControlBounds(bool enable)
Definition: IGraphics.h:1190
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.
Definition: IGraphics.cpp:2524
void SetUIAppearanceChangedFunc(IUIAppearanceChangedFunc func)
Sets a function that is called when the OS appearance (light/dark mode) is changed.
Definition: IGraphics.h:1219
void OnMouseOut()
Called when the mouse leaves the graphics context.
Definition: IGraphics.cpp:1160
void UpdatePeers(IControl *pCaller, int callerValIdx)
This method is called after interacting with a control, so that any other controls linked to the same...
Definition: IGraphics.cpp:618
void RemovePopupMenuControl()
Remove the IGraphics popup menu, use platform popup menu if available.
Definition: IGraphics.cpp:375
virtual float GetBackingPixelScale() const
Definition: IGraphics.h:1800
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.
Definition: IGraphics.cpp:2419
bool OnKeyDown(float x, float y, const IKeyPress &key)
Definition: IGraphics.cpp:1248
virtual int AlphaChannel() const =0
void AttachGestureRecognizerToRegion(const IRECT &bounds, EGestureType type, IGestureFunc func)
Attach a gesture recognizer to a rectangular region of the GUI, i.e.
Definition: IGraphics.cpp:2406
bool MultiTouchEnabled() const
Definition: IGraphics.h:1178
virtual const char * GetDrawingAPIStr()=0
int Width() const
Gets the width of the graphics context.
Definition: IGraphics.h:1098
virtual void SetWinModuleHandle(void *pHinstance)
Used on Windows to set the HINSTANCE module handle, which allows graphics APIs to load resources from...
Definition: IGraphics.h:923
virtual void EndFrame()
Called by some drawing API classes to finally blit the draw bitmap onto the screen or perform other c...
Definition: IGraphics.h:100
void DisableControl(int paramIdx, bool diable)
Disable or enable controls linked to a specific parameter.
Definition: IGraphics.cpp:498
virtual bool GetTextFromClipboard(WDL_String &str)=0
Get text from the clipboard.
void SetControlBounds(IControl *pControl, const IRECT &r)
Set a controls target and draw rect to r, redrawing the interface correctly.
Definition: IGraphics.cpp:230
void PathTriangle(float x1, float y1, float x2, float y2, float x3, float y3)
Add a triangle to the current path.
Definition: IGraphics.cpp:2647
void DoMeasureTextRotation(const IText &text, const IRECT &bounds, IRECT &rect) const
Measures text bounds accounting for rotation.
Definition: IGraphics.cpp:2247
void AttachTextEntryControl()
Attach a control for text entry, to override platform text entry.
Definition: IGraphics.cpp:380
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...
Definition: IGraphics.cpp:330
virtual void AttachGestureRecognizer(EGestureType type)
Registers a gesture recognizer with the graphics context.
Definition: IGraphics.cpp:2398
virtual APIBitmap * CreateAPIBitmap(int width, int height, float scale, double drawScale, bool cacheable=false)=0
Creates a new API bitmap, either in memory or as a GPU texture.
void OnMouseUp(const std::vector< IMouseInfo > &points)
Called when the platform class sends mouse up events.
Definition: IGraphics.cpp:1072
void PathTransformReset(bool clearStates=false)
Reset the affine transform of the current path, to the default state.
Definition: IGraphics.cpp:2738
void OnAppearanceChanged(EUIAppearance appearance)
Called by the platform class if the view changes to dark/light mode.
Definition: IGraphics.cpp:1532
virtual void * OpenWindow(void *pParentWnd)=0
Open a new platform view for this graphics context.
virtual void PromptForDirectory(WDL_String &dir, IFileDialogCompletionHandlerFunc completionHandler=nullptr)=0
Create a platform file prompt dialog to choose a directory path for opening/saving a directory.
void CalculateTextRotation(const IText &text, const IRECT &bounds, IRECT &rect, double &tx, double &ty) const
Calculates rotation parameters for text drawing.
Definition: IGraphics.cpp:2255
bool IsInPlatformTextEntry()
Definition: IGraphics.h:1145
void SetTranslation(float x, float y)
Called by some platform IGraphics classes in order to translate the graphics context,...
Definition: IGraphics.h:1020
int GetIdxOfTaggedControl(int ctrlTag) const
Gets the index of a tagged control.
Definition: IGraphics.h:1388
virtual void PathStroke(const IPattern &pattern, float thickness, const IStrokeOptions &options=IStrokeOptions(), const IBlend *pBlend=0)=0
Stroke the current current path.
bool CheckLayer(const ILayerPtr &layer)
Test to see if a layer needs drawing, for instance if the control's bounds were changed.
Definition: IGraphics.cpp:2052
int WindowWidth() const
Gets the width of the graphics context including draw scaling.
Definition: IGraphics.h:1106
void Draw(IRECTList &rects)
Called by the platform class indicating a number of rectangles in the UI that need to redraw.
Definition: IGraphics.cpp:953
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.
Definition: IGraphics.cpp:1894
IControl * GetControlWithParamIdx(int paramIdx)
Get the first control with a parameter index that matches paramIdx.
Definition: IGraphics.cpp:478
virtual void OnViewDestroyed()
Called after a platform view is destroyed, so that drawing classes can e.g.
Definition: IGraphics.h:97
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 EnableLiveEdit(bool enable)
Live edit mode allows you to relocate controls at runtime in debug builds.
Definition: IGraphics.cpp:1551
void PathTransformRestore()
Restore the affine transform of the current path, to the previously saved state.
Definition: IGraphics.cpp:2728
void SetControlValueAfterPopupMenu(IPopupMenu *pMenu)
Called by PopupMenuControl in order to update a control with a new value after returning from the non...
Definition: IGraphics.cpp:257
void DrawLayer(const ILayerPtr &layer, const IBlend *pBlend=nullptr)
Draw a layer to the main IGraphics context.
Definition: IGraphics.cpp:2065
void PushLayer(ILayer *pLayer)
Push a layer on to the stack.
Definition: IGraphics.cpp:2025
void ReleaseMouseCapture()
Used to tell the graphics context to stop tracking mouse interaction with a control.
Definition: IGraphics.cpp:1296
IRECT GetPixelSnapped(IRECT &r) const
Gets the nearest backing pixel aligned rect to the input IRECT.
Definition: IGraphics.h:1135
int GetLastClickedParamForPTAutomation()
[AAX only]
Definition: IGraphics.cpp:1407
void ForControlWithParam(int paramIdx, IControlFunction func)
For all standard controls in the main control stack that are linked to a specific parameter,...
Definition: IGraphics.cpp:503
bool ShowAreaDrawnEnabled() const
Definition: IGraphics.h:1196
void AttachBubbleControl(const IText &text=DEFAULT_TEXT)
Attach the default control to show text as a control changes.
Definition: IGraphics.cpp:354
IBubbleControl * GetBubbleControl(int i=0)
Definition: IGraphics.h:1446
EUIResizerMode GetResizerMode() const
Definition: IGraphics.h:1157
virtual void FillRect(const IColor &color, const IRECT &bounds, const IBlend *pBlend=0)
Fill a rectangular region of the graphics context with a color.
Definition: IGraphics.cpp:2589
int GetRoundedScreenScale() const
Gets the screen/display scaling factor, rounded up.
Definition: IGraphics.h:1126
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.
Definition: IGraphics.h:404
virtual bool PromptForColor(IColor &color, const char *str="", IColorPickerHandlerFunc func=nullptr)=0
Create a platform color chooser dialog.
APIBitmap * SearchBitmapInCache(const char *fileName, int targetScale, int &sourceScale)
Search the static storage cache for a bitmap image resource matching the target scale.
Definition: IGraphics.cpp:1916
void * GetPlatformContext()
Get the platform level draw context - an HDC or CGContextRef.
Definition: IGraphics.h:935
virtual bool RevealPathInExplorerOrFinder(WDL_String &path, bool select=false)
Definition: IGraphics.h:919
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.
Definition: IGraphics.cpp:2436
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.
Definition: IGraphics.cpp:2545
void OnTouchCancelled(const std::vector< IMouseInfo > &points)
Called when the platform class sends touch cancel events.
Definition: IGraphics.cpp:1113
bool OnMouseOver(float x, float y, const IMouseMod &mod)
Definition: IGraphics.cpp:1138
virtual void UpdateTooltips()=0
Call this if you modify control tool tips at runtime to refresh the platform tooltip state.
void OnDragResize(float x, float y)
Called by ICornerResizerControl as the corner is dragged to resize.
Definition: IGraphics.cpp:1517
virtual PlatformFontPtr LoadPlatformFont(const char *fontID, const char *fileNameOrResID)=0
Load a font from disk or resource in a platform format.
void ForAllControlsFunc(IControlFunction func)
For all controls, including the "special controls" call a method.
Definition: IGraphics.cpp:555
int NBubbleControls() const
Definition: IGraphics.h:1449
void HideControl(int paramIdx, bool hide)
Hide controls linked to a specific parameter.
Definition: IGraphics.cpp:493
virtual bool LoadFont(const char *fontID, const char *fileNameOrResID)
Load a font to be used by the graphics context.
Definition: IGraphics.cpp:2196
void SetDisplayTickFunc(IDisplayTickFunc func)
Sets a function that is called at the frame rate, prior to checking for dirty controls.
Definition: IGraphics.h:1215
virtual bool BitmapExtSupported(const char *ext)=0
Checks a file extension and reports whether this drawing API supports loading that extension.
void RemoveAllControls()
Removes all regular IControls from the control list, as well as special controls (frees memory).
Definition: IGraphics.cpp:196
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.
Definition: IGraphics.cpp:2552
bool LiveEditEnabled() const
Definition: IGraphics.h:1206
void OnMouseDown(const std::vector< IMouseInfo > &points)
Called when the platform class sends mouse down events.
Definition: IGraphics.cpp:986
void GetMouseDownPoint(float &x, float &y) const
Get the x, y position of the last mouse down message.
Definition: IGraphics.h:1618
int Height() const
Gets the height of the graphics context.
Definition: IGraphics.h:1102
void PathClipRegion(const IRECT r=IRECT())
Clip the current path to a particular region.
Definition: IGraphics.cpp:2785
void PathCircle(float cx, float cy, float r)
Add a circle to the current path.
Definition: IGraphics.cpp:2708
void PathRadialLine(float cx, float cy, float angle, float rMin, float rMax)
Add a radial line to the current path.
Definition: IGraphics.cpp:833
void PathTransformRotate(float angle)
Apply a rotation transform to the current path.
Definition: IGraphics.cpp:2767
bool GetResizingInProcess() const
Definition: IGraphics.h:1160
bool OnKeyUp(float x, float y, const IKeyPress &key)
Definition: IGraphics.cpp:1266
bool IsDirty(IRECTList &rects)
Called repeatedly at frame rate by the platform class to check what the graphics context says is dirt...
Definition: IGraphics.cpp:840
virtual void FillRoundRect(const IColor &color, const IRECT &bounds, float cornerRadius=5.f, const IBlend *pBlend=0)
Fill a rounded rectangle with a color.
Definition: IGraphics.cpp:2596
virtual void GetLayerBitmapData(const ILayerPtr &layer, RawBitmapData &data)=0
Get the contents of a layer as Raw RGBA bitmap data NOTE: you should only call this within IControl::...
bool RespondsToGesture(float x, float y)
Called by platform class to see if the point at x, y is linked to a gesture recognizer.
Definition: IGraphics.cpp:2363
virtual void PromptForFile(WDL_String &fileName, WDL_String &path, EFileAction action=EFileAction::Open, const char *ext="", IFileDialogCompletionHandlerFunc completionHandler=nullptr)=0
Create a platform file prompt dialog to choose a path for opening/saving a single file.
void ForAllControls(T method, Args... args)
For all controls, including the "special controls" call a method.
Definition: IGraphics.cpp:586
void ClearGestureRegions()
Remove all gesture recognizers linked to regions.
Definition: IGraphics.cpp:2413
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...
Definition: IGraphics.cpp:237
bool ControlIsCaptured(IControl *pControl) const
Check to see if the control is already captured.
Definition: IGraphics.h:1423
virtual void GetMouseLocation(float &x, float &y) const =0
Get the x, y position of the mouse cursor.
virtual void * GetWinModuleHandle()
Definition: IGraphics.h:926
int NControls() const
Definition: IGraphics.h:1461
virtual void UpdateLayer()
Implemented by a graphics backend to prepare for drawing to the layer at the top of the stack.
Definition: IGraphics.h:578
virtual void DrawData(const IColor &color, const IRECT &bounds, float *normYPoints, int nPoints, float *normXPoints=nullptr, const IBlend *pBlend=0, float thickness=1.f, const IColor *pFillColor=nullptr)
Draw a line between a collection of normalized points.
Definition: IGraphics.cpp:2470
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.
Definition: IGraphics.cpp:2295
void AttachSVGBackground(const char *fileName)
Attach an ISVGControl as the lowest IControl in the control stack to be the background for the graphi...
Definition: IGraphics.cpp:297
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.
Definition: IGraphics.cpp:2582
virtual void ApplyLayerDropShadow(ILayerPtr &layer, const IShadow &shadow)
Applies a drop shadow directly onto a layer.
Definition: IGraphics.cpp:2095
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.
Definition: IGraphics.cpp:2444
void SetSharedResourcesSubPath(const char *sharedResourcesSubPath)
Sets the name of the shared resources subpath.
Definition: IGraphics.h:1664
int GetMouseOver() const
Definition: IGraphics.h:1613
void SetAllControlsDirty()
Calls SetDirty() on every control.
Definition: IGraphics.cpp:597
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.
Definition: IGraphics.cpp:1864
IControl * GetControlInTextEntry()
Definition: IGraphics.h:1148
IBitmap GetScaledBitmap(IBitmap &inBitmap)
Get a version of the input bitmap from the cache that corresponds to the current screen scale For exa...
Definition: IGraphics.cpp:1538
void AttachPanelBackground(const IPattern &color)
Attach an IPanelControl as the lowest IControl in the control stack to fill the background with a sol...
Definition: IGraphics.cpp:304
virtual void FillConvexPolygon(const IColor &color, float *x, float *y, int nPoints, const IBlend *pBlend=0)
Fill a convex polygon with a color.
Definition: IGraphics.cpp:2610
bool OnMouseWheel(float x, float y, const IMouseMod &mod, float delta)
Definition: IGraphics.cpp:1238
void SetAllControlsClean()
Calls SetClean() on every control.
Definition: IGraphics.cpp:602
virtual void OnViewInitialized(void *pContext)
Called after platform view initialization, so that drawing classes can e.g.
Definition: IGraphics.h:94
void StyleAllVectorControls(const IVStyle &style)
Helper method to style all of the controls which inherit IVectorBase.
Definition: IGraphics.cpp:1931
virtual IPopupMenu * CreatePlatformPopupMenu(IPopupMenu &menu, const IRECT bounds, bool &isAsync)=0
Calls the platform backend to create the platform popup menu.
void RemoveControlWithTag(int ctrlTag)
Remove controls from the control list with a particular tag.
Definition: IGraphics.cpp:134
virtual void RemovePlatformView(void *pView)
Remove a previously attached platform view from the IGraphics view.
Definition: IGraphics.h:803
void GetTouches(IControl *pControl, std::vector< ITouchID > &touchesOnThisControl) const
Populate a vector with the touchIDs active on pControl.
Definition: IGraphics.h:1429
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.
Definition: IGraphics.cpp:802
virtual void PathMoveTo(float x, float y)=0
Move the current point in the current path.
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 PopupHostContextMenuForParam(int controlIdx, int paramIdx, float x, float y)
[VST3 primarily] In VST3 plug-ins this enable support for the IContextMenu interface,...
Definition: IGraphics.cpp:1506
virtual bool FlippedBitmap() const =0
void PromptUserInput(IControl &control, const IRECT &bounds, int valIdx=0)
Prompt for user input either using a text entry or pop up menu.
Definition: IGraphics.cpp:637
virtual const char * GetPlatformAPIStr()
Definition: IGraphics.h:914
void SetControlSize(IControl *pControl, float w, float h)
Resize a control, redrawing the interface correctly.
Definition: IGraphics.cpp:223
float GetScreenScale() const
Gets the screen/display scaling factor, e.g.
Definition: IGraphics.h:1122
virtual bool LoadAPIFont(const char *fontID, const PlatformFontPtr &font)=0
Drawing API method to load a font from a PlatformFontPtr, called internally.
bool ShowControlBoundsEnabled() const
Definition: IGraphics.h:1199
void OnDropMultiple(const std::vector< const char * > &paths, float x, float y)
Definition: IGraphics.cpp:1290
void AssignParamNameToolTips()
Call this method in order to create tool tips for every IControl that show the associated parameter's...
Definition: IGraphics.cpp:607
bool EnableMultiTouch(bool enable)
Enable/disable multi touch, if platform supports it.
Definition: IGraphics.h:1164
virtual ISVG LoadSVG(const char *fileNameOrResID, const char *units="px", float dpi=72.f)
Load an SVG from disk or from windows resource.
Definition: IGraphics.cpp:1638
virtual APIBitmap * LoadAPIBitmap(const char *fileNameOrResID, int scale, EResourceLocation location, const char *ext)=0
Drawing API method to load a bitmap, called internally.
virtual EMsgBoxResult ShowMessageBox(const char *str, const char *title, EMsgBoxType type, IMsgBoxCompletionHandlerFunc completionHandler=nullptr)=0
Pop up a modal platform message box dialog.
virtual void HideMouseCursor(bool hide=true, bool lock=true)=0
Call to hide/show the mouse cursor.
void SetScaleConstraints(float lo, float hi)
Sets the minimum and maximum (draw) scaling values.
Definition: IGraphics.cpp:128
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 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.
Definition: IGraphics.cpp:809
void ForControlInGroup(const char *group, IControlFunction func)
For all standard controls in the main control stack that are linked to a group, execute a function.
Definition: IGraphics.cpp:534
virtual void DoDrawText(const IText &text, const char *str, const IRECT &bounds, const IBlend *pBlend=nullptr)=0
Internal method to draw text.
virtual EUIAppearance GetUIAppearance() const
Get the UI Appearance (Light/Dark mode)
Definition: IGraphics.h:1601
void PathTransformSave()
Save the current affine transform of the current path.
Definition: IGraphics.cpp:2723
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.
Definition: IGraphics.cpp:2617
IPopupMenu & GetPromptMenu()
Definition: IGraphics.h:1142
void SetKeyHandlerFunc(IKeyHandlerFunc func)
Set a function that is called when key presses are not intercepted by any controls.
Definition: IGraphics.h:1223
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.
Definition: IGraphics.cpp:2499
virtual bool WindowIsOpen()
Definition: IGraphics.h:851
void RemoveTextEntryControl()
Remove the IGraphics text entry, use platform text entry if available.
Definition: IGraphics.cpp:389
void ShowFPSDisplay(bool enable)
Shows a control to display the frame rate of drawing.
Definition: IGraphics.cpp:439
virtual void PathLineTo(float x, float y)=0
Add a line to the current path from the current point to the specified location.
void DrawLineAcross(const IColor &color, const IRECT &bounds, EDirection dir, float pos, const IBlend *pBlend=0, float thickness=1.f)
Draw a horzional or vertical line, within a rectangular region of the graphics context.
Definition: IGraphics.cpp:794
int GetControlIdx(IControl *pControl) const
Get the index of a particular IControl in the control stack.
Definition: IGraphics.h:1383
const char * GetSharedResourcesSubPath() const
Gets the name of the shared resources subpath.
Definition: IGraphics.h:1661
IPopupMenuControl * GetPopupMenuControl()
Definition: IGraphics.h:1440
void PathTransformSkew(float xAngle, float yAngle)
Apply a skew transform to the current path.
Definition: IGraphics.cpp:2773
float GetDrawScale() const
Gets the graphics context scaling factor.
Definition: IGraphics.h:1118
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'...
Definition: IGraphics.cpp:2073
virtual void DrawMultiLineText(const IText &text, const char *str, const IRECT &bounds, const IBlend *pBlend=0)
Draw some multi-line text to the graphics context in a specific rectangle (NanoVG only)
Definition: IGraphics.h:363
void RemoveControls(int fromIdx)
Remove controls from the control list above a particular index, (frees memory).
Definition: IGraphics.cpp:141
void AttachBackground(const char *fileName)
Attach an IBitmapControl as the lowest IControl in the control stack to be the background for the gra...
Definition: IGraphics.cpp:290
void SetStrictDrawing(bool strict)
Enables strict drawing mode.
Definition: IGraphics.cpp:980
bool ShowingFPSDisplay()
Definition: IGraphics.h:1366
bool MouseOverEnabled() const
Definition: IGraphics.h:1610
virtual void ForceEndUserEdit()=0
Call to force end text entry (will cancel any partial text input)
void OnGUIIdle()
This is an idle timer tick call on the GUI thread, only active if USE_IDLE_CALLS is defined.
Definition: IGraphics.cpp:1511
IGEditorDelegate * GetDelegate()
Gets a pointer to the delegate class that handles communication to and from this graphics context.
Definition: IGraphics.h:1139
void ShowAreaDrawn(bool enable)
Definition: IGraphics.h:1193
IControl * GetControl(int idx)
Get the control at a certain index in the control stack.
Definition: IGraphics.h:1378
void StartLayer(IControl *pOwner, const IRECT &r, bool cacheable=false)
Create an IGraphics layer.
Definition: IGraphics.cpp:1997
int GetControlTag(const IControl *pControl) const
Get the tag given to a control.
Definition: IGraphics.h:1402
void OnGestureRecognized(const IGestureInfo &info)
Called by platform class when a gesture is recognized.
Definition: IGraphics.cpp:2383
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)
Definition: IGraphics.cpp:1210
bool TooltipsEnabled() const
Definition: IGraphics.h:1154
virtual void DrawSVG(const ISVG &svg, const IRECT &bounds, const IBlend *pBlend=0, const IColor *pStrokeColor=nullptr, const IColor *pFillColor=nullptr)
Draw an SVG image to the graphics context.
Definition: IGraphics.cpp:2804
void ForStandardControlsFunc(IControlFunction func)
For all standard controls in the main control stack perform a function.
Definition: IGraphics.cpp:549
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.
Definition: IGraphics.cpp:2510
virtual void CloseWindow()=0
Close the platform view for this graphics context.
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.
int WindowHeight() const
Gets the height of the graphics context including draw scaling.
Definition: IGraphics.h:1110
void PathEllipse(const IRECT &bounds)
Add an ellipse to the current path, specifying the rectangular region.
Definition: IGraphics.cpp:2703
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.
Definition: IGraphics.cpp:1739
void SetPlatformContext(void *pContext)
Set the platform draw context Used in order to set the platform level draw context - CGContextRef con...
Definition: IGraphics.h:931
virtual void BeginFrame()
Called at the beginning of drawing.
Definition: IGraphics.cpp:882
virtual void FillCircle(const IColor &color, float cx, float cy, float r, const IBlend *pBlend=0)
Fill a circle with a color.
Definition: IGraphics.cpp:2626
void OnSetCursor()
Called when the mouse enters the graphics context, to update the cursor to mCursorType.
Definition: IGraphics.h:1577
void SetControlPosition(IControl *pControl, float x, float y)
Reposition a control, redrawing the interface correctly.
Definition: IGraphics.cpp:216
void SetScreenScale(float scale)
Called by the platform IGraphics class when moving to a new screen to set DPI.
Definition: IGraphics.cpp:75
void EnableMouseOver(bool enable)
Definition: IGraphics.h:1604
virtual APIBitmap * LoadAPIBitmap(const char *name, const void *pData, int dataSize, int scale)=0
Drawing API method to load a bitmap from binary data, called internally.
ILayerPtr EndLayer()
End an IGraphics layer.
Definition: IGraphics.cpp:2020
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.
Definition: IGraphics.cpp:1684
void OnDrop(const char *str, float x, float y)
Definition: IGraphics.cpp:1284
IRECT GetBounds() const
Returns an IRECT that represents the entire UI bounds This is useful for programatically arranging UI...
Definition: IGraphics.h:1211
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.
Definition: IGraphics.cpp:311
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.
virtual float MeasureText(const IText &text, const char *str, IRECT &bounds) const
Measure the rectangular region that some text will occupy.
Definition: IGraphics.cpp:693
A control to enable live modification of control layout in an IGraphics context in debug builds This ...
An abstraction that is used to store a temporary raster image/framebuffer.
IPlug's parameter class.
A base control for a pop-up menu/drop-down list that stays within the bounds of the IGraphics context...
A class for setting the contents of a pop up menu.
Used to manage a list of rectangular areas and optimize them for drawing to the screen.
A Text entry widget drawn by IGraphics.
std::unique_ptr< ILayer > ILayerPtr
ILayerPtr is a managed pointer for transferring the ownership of layers.
Used to describe a particular gesture.
Used to manage stroke behaviour for path based drawing back ends.
Used to manage composite/blend operations, independent of draw class/platform.
Used to manage color data, independent of draw class/platform.
Used to manage fill behaviour.
Used for key press info, such as ASCII representation, virtual key (mapped to win32 codes) and modifi...
Definition: IPlugStructs.h:615
Used to store transformation matrices.
Encapsulates a MIDI message and provides helper functions.
Definition: IPlugMidi.h:31
Used to manage mouse modifiers i.e.
Used to store pattern information for gradients.
Used to manage a rectangular area, independent of draw class/platform.
IRECT GetPixelSnapped() const
User-facing SVG abstraction that you use to manage SVG data ISVG doesn't actually own the image data.
Used to specify properties of a drop-shadow to a layer.
IText is used to manage font and text/text entry style for a piece of text on the UI,...
A struct encapsulating a set of properties used to configure IVControls.