iPlug2 - C++ Audio Plug-in Framework
Loading...
Searching...
No Matches
IGraphicsEditorDelegate.cpp
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
12#include "IGraphics.h"
13#include "IControl.h"
14
15using namespace iplug;
16using namespace igraphics;
17
18IGEditorDelegate::IGEditorDelegate(int nParams)
19: IEditorDelegate(nParams)
20{
21}
22
23IGEditorDelegate::~IGEditorDelegate()
24{
25}
26
27void* IGEditorDelegate::OpenWindow(void* pParent)
28{
29 if(!mGraphics)
30 {
31 mGraphics = std::unique_ptr<IGraphics>(CreateGraphics());
32 if (mLastWidth && mLastHeight && mLastScale)
33 GetUI()->Resize(mLastWidth, mLastHeight, mLastScale);
34 }
35
36 if(mGraphics)
37 return mGraphics->OpenWindow(pParent);
38 else
39 return nullptr;
40}
41
43{
44 if (!mClosing)
45 {
46 mClosing = true;
48
49 if (mGraphics)
50 {
51 mLastWidth = mGraphics->Width();
52 mLastHeight = mGraphics->Height();
53 mLastScale = mGraphics->GetDrawScale();
54 mGraphics->CloseWindow();
55 mGraphics = nullptr;
56 }
57
58 mClosing = false;
59 }
60}
61
62void IGEditorDelegate::OnParentWindowResize(int width, int height)
63{
64 if (auto* pGraphics = GetUI())
65 {
66 const auto scale = pGraphics->GetPlatformWindowScale();
67 pGraphics->Resize(static_cast<int>(width / scale), static_cast<int>(height / scale), 1.0f, false);
68 }
69}
70
72{
73 if (GetUI())
74 mGraphics->SetScreenScale(scale);
75}
76
77void IGEditorDelegate::SendControlValueFromDelegate(int ctrlTag, double normalizedValue)
78{
79 if(!mGraphics)
80 return;
81
82 IControl* pControl = mGraphics->GetControlWithTag(ctrlTag);
83
84 assert(pControl);
85
86 if(pControl)
87 {
88 pControl->SetValueFromDelegate(normalizedValue);
89 }
90}
91
92void IGEditorDelegate::SendControlMsgFromDelegate(int ctrlTag, int msgTag, int dataSize, const void* pData)
93{
94 if(!mGraphics)
95 return;
96
97 IControl* pControl = mGraphics->GetControlWithTag(ctrlTag);
98
99 assert(pControl);
100
101 if(pControl)
102 {
103 pControl->OnMsgFromDelegate(msgTag, dataSize, pData);
104 }
105}
106
107void IGEditorDelegate::SendParameterValueFromDelegate(int paramIdx, double value, bool normalized)
108{
109 if(mGraphics)
110 {
111 if (!normalized)
112 value = GetParam(paramIdx)->ToNormalized(value);
113
114 for (int c = 0; c < mGraphics->NControls(); c++)
115 {
116 IControl* pControl = mGraphics->GetControl(c);
117
118 int nVals = pControl->NVals();
119
120 for(int v = 0; v < nVals; v++)
121 {
122 if (pControl->GetParamIdx(v) == paramIdx)
123 {
124 pControl->SetValueFromDelegate(value, v);
125 // Could be more than one, don't break until we check them all.
126 }
127 }
128
129 }
130 }
131
132 IEditorDelegate::SendParameterValueFromDelegate(paramIdx, value, normalized);
133}
134
136{
137 if(mGraphics)
138 {
139 for (auto c = 0; c < mGraphics->NControls(); c++) // TODO: could keep a map
140 {
141 IControl* pControl = mGraphics->GetControl(c);
142
143 if (pControl->GetWantsMidi())
144 {
145 pControl->OnMidi(msg);
146 }
147 }
148 }
149
151}
152
154{
155 bool savedOK = true;
156
157 int width = mGraphics ? mGraphics->Width() : mLastWidth;
158 int height = mGraphics ? mGraphics->Height() : mLastHeight;
159 float scale = mGraphics ? mGraphics->GetDrawScale() : mLastScale;
160
161 savedOK &= (data.Put(&width) > 0);
162 savedOK &= (data.Put(&height) > 0);
163 savedOK &= (data.Put(&scale) > 0);
164
165 return savedOK;
166}
167
169{
170 int width = 0;
171 int height = 0;
172 float scale = 0.f;
173
174 startPos = data.Get(&width, startPos);
175 startPos = data.Get(&height, startPos);
176 startPos = data.Get(&scale, startPos);
177
178 if (GetUI())
179 {
180 if (width && height && scale)
181 GetUI()->Resize(width, height, scale);
182 }
183 else
184 {
185 mLastWidth = width;
186 mLastHeight = height;
187 mLastScale = scale;
188 }
189
190 return startPos;
191}
192
194{
195 return SerializeEditorSize(chunk);
196}
197
199{
200 return UnserializeEditorSize(chunk, startPos);
201}
202
204{
205 IGraphics* pGraphics = GetUI();
206
207 if (pGraphics)
208 {
209 float x, y;
210 pGraphics->GetMouseLocation(x, y);
211 return pGraphics->OnKeyDown(x, y, key);
212 }
213 else
214 return false;
215}
216
218{
219 IGraphics* pGraphics = GetUI();
220
221 if (pGraphics)
222 {
223 float x, y;
224 pGraphics->GetMouseLocation(x, y);
225 return pGraphics->OnKeyUp(x, y, key);
226 }
227 else
228 return false;
229}
This file contains the base IControl implementation, along with some base classes for specific types ...
Manages a block of memory, for plug-in settings store/recall.
Definition: IPlugStructs.h:112
int Put(const T *pVal)
Copies arbitary typed data into the IByteChunk.
Definition: IPlugStructs.h:170
int Get(T *pDst, int startPos) const
Get arbitary typed data from the IByteChunk.
Definition: IPlugStructs.h:181
The lowest level base class of an IGraphics control.
Definition: IControl.h:49
bool GetWantsMidi() const
Definition: IControl.h:432
virtual void SetValueFromDelegate(double value, int valIdx=0)
Set the control's value from the delegate This method is called from the class implementing the IEdit...
Definition: IControl.cpp:159
int GetParamIdx(int valIdx=0) const
Get the index of a parameter that the control is linked to Normaly controls are either linked to a si...
Definition: IControl.cpp:109
virtual void OnMsgFromDelegate(int msgTag, int dataSize, const void *pData)
Implement to receive messages sent to the control, see IEditorDelegate:SendControlMsgFromDelegate()
Definition: IControl.h:162
virtual void OnMidi(const IMidiMsg &msg)
Implement to receive MIDI messages sent to the control if mWantsMidi == true, see IEditorDelegate:Sen...
Definition: IControl.h:165
int NVals() const
Definition: IControl.h:244
This pure virtual interface delegates communication in both directions between a UI editor and someth...
IParam * GetParam(int paramIdx)
Get a pointer to one of the delegate's IParam objects.
virtual void CloseWindow()
If you are not using IGraphics you can if you need to free resources etc when the window closes.
virtual void SendParameterValueFromDelegate(int paramIdx, double value, bool normalized)
SendParameterValueFromDelegate (Abbreviation: SPVFD) WARNING: should not be called on the realtime au...
virtual void SendMidiMsgFromDelegate(const IMidiMsg &msg)
SendMidiMsgFromDelegate (Abbreviation: SMMFD) WARNING: should not be called on the realtime audio thr...
bool SerializeEditorSize(IByteChunk &data) const
Serializes the size and scale of the IGraphics.
void * OpenWindow(void *pHandle) final
If you are not using IGraphics, you can implement this method to attach to the native parent view e....
int UnserializeEditorSize(const IByteChunk &chunk, int startPos)
Unserializes the size and scale of the IGraphics.
void SetScreenScale(float scale) final
Can be used by a host API to inform the editor of screen scale changes.
bool OnKeyDown(const IKeyPress &key) override
KeyDown handler, in order to get keystrokes from certain hosts/plugin formats that send key press mes...
bool SerializeEditorState(IByteChunk &chunk) const override
Serializes the editor state (such as scale) into a binary chunk.
void SendControlValueFromDelegate(int ctrlTag, double normalizedValue) override
SendControlValueFromDelegate (Abbreviation: SCVFD) WARNING: should not be called on the realtime audi...
void SendMidiMsgFromDelegate(const IMidiMsg &msg) override
SendMidiMsgFromDelegate (Abbreviation: SMMFD) WARNING: should not be called on the realtime audio thr...
void OnParentWindowResize(int width, int height) override
Called by app wrappers when the OS window scaling buttons/resizers are used.
int UnserializeEditorState(const IByteChunk &chunk, int startPos) override
Unserializes editor state (such as scale).
void SendControlMsgFromDelegate(int ctrlTag, int msgTag, int dataSize=0, const void *pData=nullptr) override
SendControlMsgFromDelegate (Abbreviation: SCMFD) WARNING: should not be called on the realtime audio ...
bool OnKeyUp(const IKeyPress &key) override
KeyDown handler, in order to get keystrokes from certain hosts/plugin formats that send key press mes...
IGraphics * GetUI()
Get a pointer to the IGraphics context.
virtual IGraphics * CreateGraphics()
Called to create the IGraphics instance for this editor.
void CloseWindow() final
If you are not using IGraphics you can if you need to free resources etc when the window closes.
void SendParameterValueFromDelegate(int paramIdx, double value, bool normalized) override
SendParameterValueFromDelegate (Abbreviation: SPVFD) WARNING: should not be called on the realtime au...
The lowest level base class of an IGraphics context.
Definition: IGraphics.h:86
void Resize(int w, int h, float scale, bool needsPlatformResize=true)
Definition: IGraphics.cpp:90
bool OnKeyDown(float x, float y, const IKeyPress &key)
Definition: IGraphics.cpp:1241
bool OnKeyUp(float x, float y, const IKeyPress &key)
Definition: IGraphics.cpp:1259
virtual void GetMouseLocation(float &x, float &y) const =0
Get the x, y position of the mouse cursor.
double ToNormalized(double nonNormalizedValue) const
Convert a real value to normalized value for this parameter.
Used for key press info, such as ASCII representation, virtual key (mapped to win32 codes) and modifi...
Definition: IPlugStructs.h:616
Encapsulates a MIDI message and provides helper functions.
Definition: IPlugMidi.h:31