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
1251 void Draw(const IRECT& bounds, float scale);
1252
1257 void DrawControl(IControl* pControl, const IRECT& bounds, float scale);
1258
1265 void DoCreatePopupMenu(IControl& control, IPopupMenu& menu, const IRECT& bounds, int valIdx, bool isContext);
1266
1268 void StartDragResize() { mResizingInProcess = true; }
1269
1271 void EndDragResize();
1272
1273#pragma mark - Control management
1274public:
1277 void ForAllControlsFunc(IControlFunction func);
1278
1282 template<typename T, typename... Args>
1283 void ForAllControls(T method, Args... args);
1284
1287 void ForStandardControlsFunc(IControlFunction func);
1288
1293 template<typename T, typename... Args>
1294 void ForMatchingControls(T method, int paramIdx, Args... args);
1295
1299 void ForControlWithParam(int paramIdx, IControlFunction func);
1300
1304 void ForControlWithParam(const std::initializer_list<int>& params, IControlFunction func);
1305
1309 void ForControlInGroup(const char* group, IControlFunction func);
1310
1313 void AttachBackground(const char* fileName);
1314
1317 void AttachSVGBackground(const char* fileName);
1318
1321 void AttachPanelBackground(const IPattern& color);
1322
1325 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);
1326
1330 void AttachCornerResizer(ICornerResizerControl* pControl, EUIResizerMode sizeMode = EUIResizerMode::Scale, bool layoutOnResize = false);
1331
1335 void AttachPopupMenuControl(const IText& text = DEFAULT_TEXT, const IRECT& bounds = IRECT());
1336
1339
1342
1345
1347 void AttachBubbleControl(const IText& text = DEFAULT_TEXT);
1348
1350 void AttachBubbleControl(IBubbleControl* pControl);
1351
1352 /* Called by controls to display text in the bubble control */
1353 void ShowBubbleControl(IControl* pCaller, float x, float y, const char* str, EDirection dir = EDirection::Horizontal, IRECT minimumContentBounds = IRECT());
1354
1355 /* Sets the region of the IGraphics context that should be used for the FPS display */
1356 void SetFPSDisplayBounds(const IRECT& bounds) { mPerfDisplayBounds = bounds; }
1357
1360 void ShowFPSDisplay(bool enable);
1361
1363 bool ShowingFPSDisplay() { return mPerfDisplay != nullptr; }
1364
1370 IControl* AttachControl(IControl* pControl, int ctrlTag = kNoTag, const char* group = "");
1371
1375 IControl* GetControl(int idx) { return mControls.Get(idx); }
1376
1380 int GetControlIdx(IControl* pControl) const { return mControls.Find(pControl); }
1381
1385 int GetIdxOfTaggedControl(int ctrlTag) const
1386 {
1387 IControl* pControl = GetControlWithTag(ctrlTag);
1388 return pControl ? GetControlIdx(pControl) : -1;
1389 }
1390
1394 IControl* GetControlWithTag(int ctrlTag) const;
1395
1399 int GetControlTag(const IControl* pControl) const
1400 {
1401 for (auto itr = mCtrlTags.begin(); itr != mCtrlTags.end(); ++itr)
1402 {
1403 if (itr->second == pControl)
1404 return itr->first;
1405 }
1406
1407 return kNoTag;
1408 }
1409
1413 IControl* GetControlWithParamIdx(int paramIdx);
1414
1416 bool ControlIsCaptured() const { return mCapturedMap.size() > 0; }
1417
1420 bool ControlIsCaptured(IControl* pControl) const
1421 {
1422 return std::find_if(std::begin(mCapturedMap), std::end(mCapturedMap), [pControl](auto&& press) { return press.second == pControl; }) != mCapturedMap.end();
1423 }
1424
1426 void GetTouches(IControl* pControl, std::vector<ITouchID>& touchesOnThisControl) const
1427 {
1428 for (auto i = mCapturedMap.begin(), j = mCapturedMap.end(); i != j; ++i)
1429 if (i->second == pControl)
1430 touchesOnThisControl.push_back(i->first);
1431 }
1432
1433 /* Get the first control in the control list, the background */
1434 IControl* GetBackgroundControl() { return GetControl(0); }
1435
1437 IPopupMenuControl* GetPopupMenuControl() { return mPopupControl.get(); }
1438
1440 ITextEntryControl* GetTextEntryControl() { return mTextEntryControl.get(); }
1441
1443 IBubbleControl* GetBubbleControl(int i = 0) { return mBubbleControls.Get(i); }
1444
1446 int NBubbleControls() const { return mBubbleControls.GetSize(); }
1447
1450 void StyleAllVectorControls(const IVStyle& style);
1451
1455 void UpdatePeers(IControl* pCaller, int callerValIdx);
1456
1458 int NControls() const { return mControls.GetSize(); }
1459
1461 void RemoveControlWithTag(int ctrlTag);
1462
1464 void RemoveControls(int fromIdx);
1465
1467 void RemoveControl(int idx);
1468
1470 void RemoveControl(IControl* pControl);
1471
1473 void RemoveAllControls();
1474
1478 void HideControl(int paramIdx, bool hide);
1479
1483 void DisableControl(int paramIdx, bool diable);
1484
1486 void SetAllControlsDirty();
1487
1489 void SetAllControlsClean();
1490
1495 void SetControlPosition(IControl* pControl, float x, float y);
1496
1501 void SetControlSize(IControl* pControl, float w, float h);
1502
1506 void SetControlBounds(IControl* pControl, const IRECT& r);
1507
1508private:
1514 int GetMouseControlIdx(float x, float y, bool mouseOver = false);
1515
1523 IControl* GetMouseControl(float x, float y, bool capture, bool mouseOver = false, ITouchID touchID = 0);
1524
1525#pragma mark - Event handling
1526public:
1528 void OnMouseDown(const std::vector<IMouseInfo>& points);
1529
1531 void OnMouseUp(const std::vector<IMouseInfo>& points);
1532
1534 void OnMouseDrag(const std::vector<IMouseInfo>& points);
1535
1537 void OnTouchCancelled(const std::vector<IMouseInfo>& points);
1538
1543 bool OnMouseDblClick(float x, float y, const IMouseMod& mod);
1544
1550 bool OnMouseWheel(float x, float y, const IMouseMod& mod, float delta);
1551
1556 bool OnKeyDown(float x, float y, const IKeyPress& key);
1557
1562 bool OnKeyUp(float x, float y, const IKeyPress& key);
1563
1568 bool OnMouseOver(float x, float y, const IMouseMod& mod);
1569
1571 void OnMouseOut();
1572
1574 void OnSetCursor() { SetMouseCursor(mCursorType); }
1575
1579 void OnDrop(const char* str, float x, float y);
1580
1584 void OnDropMultiple(const std::vector<const char*>& paths, float x, float y);
1585
1587 void OnGUIIdle();
1588
1590 void OnDragResize(float x, float y);
1591
1594 void OnAppearanceChanged(EUIAppearance appearance);
1595
1598 virtual EUIAppearance GetUIAppearance() const { return EUIAppearance::Light; }
1599
1601 void EnableMouseOver(bool enable) { mEnableMouseOver = enable; }
1602
1604 void ReleaseMouseCapture();
1605
1607 bool MouseOverEnabled() const { return mEnableMouseOver; }
1608
1610 inline int GetMouseOver() const { return mMouseOverIdx; }
1611
1615 void GetMouseDownPoint(float& x, float&y) const { x = mMouseDownX; y = mMouseDownY; }
1616
1619 void SetTabletInput(bool tablet) { mTabletInput = tablet; }
1620#pragma mark - Plug-in API Specific
1621
1627 int GetParamIdxForPTAutomation(float x, float y);
1628
1632
1637 void SetPTParameterHighlight(int paramIdx, bool isHighlighted, int color);
1638
1645 void PopupHostContextMenuForParam(int controlIdx, int paramIdx, float x, float y);
1646
1653 void PopupHostContextMenuForParam(IControl* pControl, int paramIdx, float x, float y);
1654
1655#pragma mark - Resource/File Loading
1656
1658 const char* GetSharedResourcesSubPath() const { return mSharedResourcesSubPath.Get(); }
1659
1661 void SetSharedResourcesSubPath(const char* sharedResourcesSubPath) { mSharedResourcesSubPath.Set(sharedResourcesSubPath); }
1662
1669 virtual IBitmap LoadBitmap(const char* fileNameOrResID, int nStates = 1, bool framesAreHorizontal = false, int targetScale = 0);
1670
1679 virtual IBitmap LoadBitmap(const char *name, const void* pData, int dataSize, int nStates = 1, bool framesAreHorizontal = false, int targetScale = 0);
1680
1684 virtual ISVG LoadSVG(const char* fileNameOrResID, const char* units = "px", float dpi = 72.f);
1685
1693 virtual ISVG LoadSVG(const char* name, const void* pData, int dataSize, const char* units = "px", float dpi = 72.f);
1694
1699 virtual WDL_TypedBuf<uint8_t> LoadResource(const char* fileNameOrResID, const char* fileType);
1700
1703 virtual void AttachGestureRecognizer(EGestureType type);
1704
1709 void AttachGestureRecognizerToRegion(const IRECT& bounds, EGestureType type, IGestureFunc func);
1710
1712 void ClearGestureRegions();
1713
1714protected:
1721 virtual APIBitmap* LoadAPIBitmap(const char* fileNameOrResID, int scale, EResourceLocation location, const char* ext) = 0;
1722
1729 virtual APIBitmap* LoadAPIBitmap(const char* name, const void* pData, int dataSize, int scale) = 0;
1730
1738 virtual APIBitmap* CreateAPIBitmap(int width, int height, float scale, double drawScale, bool cacheable = false) = 0;
1739
1744 virtual bool LoadAPIFont(const char* fontID, const PlatformFontPtr& font) = 0;
1745
1747 virtual int AlphaChannel() const = 0;
1748
1750 virtual bool FlippedBitmap() const = 0;
1751
1759 EResourceLocation SearchImageResource(const char* fileName, const char* type, WDL_String& result, int targetScale, int& sourceScale);
1760
1766 APIBitmap* SearchBitmapInCache(const char* fileName, int targetScale, int& sourceScale);
1767
1773 virtual float DoMeasureText(const IText& text, const char* str, IRECT& bounds) const = 0;
1774
1780 virtual void DoDrawText(const IText& text, const char* str, const IRECT& bounds, const IBlend* pBlend = nullptr) = 0;
1781
1786 void DoMeasureTextRotation(const IText& text, const IRECT& bounds, IRECT& rect) const;
1787
1794 void CalculateTextRotation(const IText& text, const IRECT& bounds, IRECT& rect, double& tx, double& ty) const;
1795
1797 virtual float GetBackingPixelScale() const { return GetScreenScale() * GetDrawScale(); };
1798
1799 IMatrix GetTransformMatrix() const { return mTransform; }
1800#pragma mark -
1801
1802private:
1803 void ClearMouseOver()
1804 {
1805 mMouseOver = nullptr;
1806 mMouseOverIdx = -1;
1807 }
1808
1809 WDL_PtrList<IControl> mControls;
1810 std::unordered_map<int, IControl*> mCtrlTags;
1811
1812 // Order (front-to-back) ToolTip / PopUp / TextEntry / LiveEdit / Corner / PerfDisplay
1813 std::unique_ptr<ICornerResizerControl> mCornerResizer;
1814 WDL_PtrList<IBubbleControl> mBubbleControls;
1815 std::unique_ptr<IPopupMenuControl> mPopupControl;
1816 std::unique_ptr<IFPSDisplayControl> mPerfDisplay;
1817 std::unique_ptr<ITextEntryControl> mTextEntryControl;
1818 std::unique_ptr<IControl> mLiveEdit;
1819
1820 IPopupMenu mPromptPopupMenu;
1821
1822 IRECT mPerfDisplayBounds;
1823
1824 WDL_String mSharedResourcesSubPath;
1825
1826 ECursor mCursorType = ECursor::ARROW;
1827 int mWidth;
1828 int mHeight;
1829 int mFPS;
1830 float mScreenScale = 1.f; // the scaling of the display that the UI is currently on e.g. 2 for retina
1831 float mDrawScale = 1.f; // scale deviation from default width and height i.e stretching the UI by dragging bottom right hand corner
1832
1833 int mIdleTicks = 0;
1834
1835 std::vector<EGestureType> mRegisteredGestures; // All the types of gesture registered with the graphics context
1836 IRECTList mGestureRegions; // Rectangular regions linked to gestures (excluding IControls)
1837 std::unordered_map<int, IGestureFunc> mGestureRegionFuncs; // Map of gesture region index to gesture function
1838 std::unordered_map<ITouchID, IControl*> mCapturedMap; // associative array of touch ids to control pointers, the same control can be touched multiple times
1839 IControl* mMouseOver = nullptr;
1840 IControl* mInTextEntry = nullptr;
1841 IControl* mInPopupMenu = nullptr;
1842 void* mPlatformContext = nullptr;
1843 bool mIsContextMenu = false;
1844 int mTextEntryValIdx = kNoValIdx;
1845 int mPopupMenuValIdx = kNoValIdx;
1846 int mMouseOverIdx = -1;
1847 float mMouseDownX = -1.f;
1848 float mMouseDownY = -1.f;
1849 float mMinScale;
1850 float mMaxScale;
1851 int mLastClickedParam = kNoParameter;
1852 bool mEnableMouseOver = false;
1853 bool mStrict = false;
1854 bool mEnableTooltips = false;
1855 bool mShowControlBounds = false;
1856 bool mShowAreaDrawn = false;
1857 bool mResizingInProcess = false;
1858 bool mLayoutOnResize = false;
1859 bool mEnableMultiTouch = false;
1860 EUIResizerMode mGUISizeMode = EUIResizerMode::Scale;
1861 double mPrevTimestamp = 0.;
1862 IKeyHandlerFunc mKeyHandlerFunc = nullptr;
1863 IDisplayTickFunc mDisplayTickFunc = nullptr;
1864 IUIAppearanceChangedFunc mAppearanceChangedFunc = nullptr;
1865
1866protected:
1867 IGEditorDelegate* mDelegate;
1868 bool mCursorHidden = false;
1869 bool mCursorLock = false;
1870 bool mTabletInput = false;
1871 float mCursorX = -1.f;
1872 float mCursorY = -1.f;
1873 float mXTranslation = 0.f;
1874 float mYTranslation = 0.f;
1875
1876 friend class IGraphicsLiveEdit;
1877 friend class ICornerResizerControl;
1878 friend class ITextEntryControl;
1879
1880 std::stack<ILayer*> mLayers;
1881
1882 IRECT mClipRECT;
1883 IMatrix mTransform;
1884 std::stack<IMatrix> mTransformStates;
1885};
1886
1887END_IGRAPHICS_NAMESPACE
1888END_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:1416
void EnableTooltips(bool enable)
Definition: IGraphics.cpp:1543
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:2815
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:2515
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:2631
ILayer * PopLayer()
Pop a layer off the stack.
Definition: IGraphics.cpp:2032
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:2536
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:2566
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:2792
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:727
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:364
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:2429
void RemoveControl(int idx)
Remove a control at a particular index, (frees memory).
Definition: IGraphics.cpp:167
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:280
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:2713
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:1619
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:683
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:1398
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:1976
void CreateTextEntry(IControl &control, const IText &text, const IRECT &bounds, const char *str="", int valIdx=0)
Create a text entry box.
Definition: IGraphics.cpp:1939
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:2662
void SetPTParameterHighlight(int paramIdx, bool isHighlighted, int color)
[AAX only] See AAX_CEffectGUI::SetControlHighlightInfo()
Definition: IGraphics.cpp:1412
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:2748
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:824
void PathRect(const IRECT &bounds)
Add a rectangle to the current path.
Definition: IGraphics.cpp:2653
virtual void RetainBitmap(const IBitmap &bitmap, const char *cacheName)
Adds an IBitmap to the cache/static storage.
Definition: IGraphics.cpp:1856
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:590
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:2005
ITextEntryControl * GetTextEntryControl()
Definition: IGraphics.h:1440
void PathTransformMatrix(const IMatrix &matrix)
Apply an arbitary affine transform matrix to the current path.
Definition: IGraphics.cpp:2777
void DrawRotatedLayer(const ILayerPtr &layer, double angle)
Draw a layer to the main IGraphics context, with rotation.
Definition: IGraphics.cpp:2083
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:2754
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:2557
IControl * GetControlWithTag(int ctrlTag) const
Get the control with a particular tag.
Definition: IGraphics.cpp:461
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:1168
virtual void ReleaseBitmap(const IBitmap &bitmap)
Releases an IBitmap from the cache/static storage.
Definition: IGraphics.cpp:1850
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:2522
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:1158
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:616
void RemovePopupMenuControl()
Remove the IGraphics popup menu, use platform popup menu if available.
Definition: IGraphics.cpp:373
virtual float GetBackingPixelScale() const
Definition: IGraphics.h:1797
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:2417
bool OnKeyDown(float x, float y, const IKeyPress &key)
Definition: IGraphics.cpp:1246
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:2404
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:496
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:228
void PathTriangle(float x1, float y1, float x2, float y2, float x3, float y3)
Add a triangle to the current path.
Definition: IGraphics.cpp:2645
void DoMeasureTextRotation(const IText &text, const IRECT &bounds, IRECT &rect) const
Measures text bounds accounting for rotation.
Definition: IGraphics.cpp:2245
void AttachTextEntryControl()
Attach a control for text entry, to override platform text entry.
Definition: IGraphics.cpp:378
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:328
virtual void AttachGestureRecognizer(EGestureType type)
Registers a gesture recognizer with the graphics context.
Definition: IGraphics.cpp:2396
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:1070
void PathTransformReset(bool clearStates=false)
Reset the affine transform of the current path, to the default state.
Definition: IGraphics.cpp:2736
void OnAppearanceChanged(EUIAppearance appearance)
Called by the platform class if the view changes to dark/light mode.
Definition: IGraphics.cpp:1530
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:2253
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:1385
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:2050
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:951
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:1892
IControl * GetControlWithParamIdx(int paramIdx)
Get the first control with a parameter index that matches paramIdx.
Definition: IGraphics.cpp:476
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:1549
void PathTransformRestore()
Restore the affine transform of the current path, to the previously saved state.
Definition: IGraphics.cpp:2726
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:255
void DrawLayer(const ILayerPtr &layer, const IBlend *pBlend=nullptr)
Draw a layer to the main IGraphics context.
Definition: IGraphics.cpp:2063
void PushLayer(ILayer *pLayer)
Push a layer on to the stack.
Definition: IGraphics.cpp:2023
void ReleaseMouseCapture()
Used to tell the graphics context to stop tracking mouse interaction with a control.
Definition: IGraphics.cpp:1294
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:1405
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:501
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:352
IBubbleControl * GetBubbleControl(int i=0)
Definition: IGraphics.h:1443
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:2587
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:1914
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:2434
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:2543
void OnTouchCancelled(const std::vector< IMouseInfo > &points)
Called when the platform class sends touch cancel events.
Definition: IGraphics.cpp:1111
bool OnMouseOver(float x, float y, const IMouseMod &mod)
Definition: IGraphics.cpp:1136
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:1515
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:553
int NBubbleControls() const
Definition: IGraphics.h:1446
void HideControl(int paramIdx, bool hide)
Hide controls linked to a specific parameter.
Definition: IGraphics.cpp:491
virtual bool LoadFont(const char *fontID, const char *fileNameOrResID)
Load a font to be used by the graphics context.
Definition: IGraphics.cpp:2194
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:194
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:2550
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:984
void GetMouseDownPoint(float &x, float &y) const
Get the x, y position of the last mouse down message.
Definition: IGraphics.h:1615
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:2783
void PathCircle(float cx, float cy, float r)
Add a circle to the current path.
Definition: IGraphics.cpp:2706
void PathRadialLine(float cx, float cy, float angle, float rMin, float rMax)
Add a radial line to the current path.
Definition: IGraphics.cpp:831
void PathTransformRotate(float angle)
Apply a rotation transform to the current path.
Definition: IGraphics.cpp:2765
bool GetResizingInProcess() const
Definition: IGraphics.h:1160
bool OnKeyUp(float x, float y, const IKeyPress &key)
Definition: IGraphics.cpp:1264
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:838
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:2594
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:2361
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:584
void ClearGestureRegions()
Remove all gesture recognizers linked to regions.
Definition: IGraphics.cpp:2411
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:235
bool ControlIsCaptured(IControl *pControl) const
Check to see if the control is already captured.
Definition: IGraphics.h:1420
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:1458
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:2468
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:2293
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:295
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:2580
virtual void ApplyLayerDropShadow(ILayerPtr &layer, const IShadow &shadow)
Applies a drop shadow directly onto a layer.
Definition: IGraphics.cpp:2093
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:2442
void SetSharedResourcesSubPath(const char *sharedResourcesSubPath)
Sets the name of the shared resources subpath.
Definition: IGraphics.h:1661
int GetMouseOver() const
Definition: IGraphics.h:1610
void SetAllControlsDirty()
Calls SetDirty() on every control.
Definition: IGraphics.cpp:595
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:1862
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:1536
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:302
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:2608
bool OnMouseWheel(float x, float y, const IMouseMod &mod, float delta)
Definition: IGraphics.cpp:1236
void SetAllControlsClean()
Calls SetClean() on every control.
Definition: IGraphics.cpp:600
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:1929
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:132
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:1426
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:800
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:1504
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:635
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:221
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:1288
void AssignParamNameToolTips()
Call this method in order to create tool tips for every IControl that show the associated parameter's...
Definition: IGraphics.cpp:605
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:1636
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:126
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:807
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:532
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:1598
void PathTransformSave()
Save the current affine transform of the current path.
Definition: IGraphics.cpp:2721
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:2615
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:2497
virtual bool WindowIsOpen()
Definition: IGraphics.h:851
void RemoveTextEntryControl()
Remove the IGraphics text entry, use platform text entry if available.
Definition: IGraphics.cpp:387
void ShowFPSDisplay(bool enable)
Shows a control to display the frame rate of drawing.
Definition: IGraphics.cpp:437
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:792
int GetControlIdx(IControl *pControl) const
Get the index of a particular IControl in the control stack.
Definition: IGraphics.h:1380
const char * GetSharedResourcesSubPath() const
Gets the name of the shared resources subpath.
Definition: IGraphics.h:1658
IPopupMenuControl * GetPopupMenuControl()
Definition: IGraphics.h:1437
void PathTransformSkew(float xAngle, float yAngle)
Apply a skew transform to the current path.
Definition: IGraphics.cpp:2771
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:2071
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:139
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:288
void SetStrictDrawing(bool strict)
Enables strict drawing mode.
Definition: IGraphics.cpp:978
bool ShowingFPSDisplay()
Definition: IGraphics.h:1363
bool MouseOverEnabled() const
Definition: IGraphics.h:1607
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:1509
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:1375
void StartLayer(IControl *pOwner, const IRECT &r, bool cacheable=false)
Create an IGraphics layer.
Definition: IGraphics.cpp:1995
int GetControlTag(const IControl *pControl) const
Get the tag given to a control.
Definition: IGraphics.h:1399
void OnGestureRecognized(const IGestureInfo &info)
Called by platform class when a gesture is recognized.
Definition: IGraphics.cpp:2381
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:1208
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:2802
void ForStandardControlsFunc(IControlFunction func)
For all standard controls in the main control stack perform a function.
Definition: IGraphics.cpp:547
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:2508
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:2701
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:1737
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:880
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:2624
void OnSetCursor()
Called when the mouse enters the graphics context, to update the cursor to mCursorType.
Definition: IGraphics.h:1574
void SetControlPosition(IControl *pControl, float x, float y)
Reposition a control, redrawing the interface correctly.
Definition: IGraphics.cpp:214
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:1601
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:2018
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:1682
void OnDrop(const char *str, float x, float y)
Definition: IGraphics.cpp:1282
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:309
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:691
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.