iPlug2 - C++ Audio Plug-in Framework
Loading...
Searching...
No Matches
TestSVGControl.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
18#include "IControl.h"
19#include "nanosvg.h"
20
24{
25public:
26 TestSVGControl(const IRECT& bounds, const ISVG& svg)
27 : IControl(bounds)
28 , mSVG(svg)
29 {
30 SetTooltip("TestSVGControl - Click or Drag 'n drop here to load a new SVG.");
31 }
32
33 void Draw(IGraphics& g) override
34 {
35 g.DrawDottedRect(COLOR_BLACK, mRECT);
36 g.FillRect(mMouseIsOver ? COLOR_TRANSLUCENT : COLOR_TRANSPARENT, mRECT);
37
38#if 1
39 if (!g.CheckLayer(mLayer))
40 {
41 g.StartLayer(this, mRECT);
42 g.DrawSVG(mSVG, mRECT);
43 mLayer = g.EndLayer();
44 }
45
46 g.DrawLayer(mLayer);
47#else
48 g.DrawSVG(mSVG, mRECT);
49#endif
50 }
51
52 void OnMouseDown(float x, float y, const IMouseMod& mod) override
53 {
54 WDL_String fileName, path;
55
56 GetUI()->PromptForFile(fileName, path, EFileAction::Open, "svg",
57 [this](const WDL_String& fileName, const WDL_String& path) {
58 if (fileName.GetLength())
59 SetSVG(GetUI()->LoadSVG(fileName.Get()));
60 SetDirty(false);
61 });
62 }
63
64 void OnDrop(const char* str) override
65 {
66 SetSVG(GetUI()->LoadSVG(str));
67 SetDirty(false);
68 }
69
70 void SetSVG(const ISVG& svg)
71 {
72 mSVG = svg;
73 mLayer->Invalidate();
74 }
75
76private:
77 ILayerPtr mLayer;
78 ISVG mSVG;
79};
This file contains the base IControl implementation, along with some base classes for specific types ...
The lowest level base class of an IGraphics control.
Definition: IControl.h:49
IGraphics * GetUI()
Definition: IControl.h:467
bool mMouseIsOver
if mGraphics::mHandleMouseOver = true, this will be true when the mouse is over control.
Definition: IControl.h:560
IControl * SetTooltip(const char *str)
Set a tooltip for the control.
Definition: IControl.h:216
virtual void SetDirty(bool triggerAction=true, int valIdx=kNoValIdx)
Mark the control as dirty, i.e.
Definition: IControl.cpp:198
The lowest level base class of an IGraphics context.
Definition: IGraphics.h:86
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:2539
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:2032
void DrawLayer(const ILayerPtr &layer, const IBlend *pBlend=nullptr)
Draw a layer to the main IGraphics context.
Definition: IGraphics.cpp:2045
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:2569
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 StartLayer(IControl *pOwner, const IRECT &r, bool cacheable=false)
Create an IGraphics layer.
Definition: IGraphics.cpp:1977
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:2784
ILayerPtr EndLayer()
End an IGraphics layer.
Definition: IGraphics.cpp:2000
Control to test drawing SVGs.
void Draw(IGraphics &g) override
Draw the control to the graphics context.
void OnDrop(const char *str) override
Implement to do something when something was drag 'n dropped onto this control.
void OnMouseDown(float x, float y, const IMouseMod &mod) override
Implement this method to respond to a mouse down event on this control.
std::unique_ptr< ILayer > ILayerPtr
ILayerPtr is a managed pointer for transferring the ownership of layers.
Used to manage mouse modifiers i.e.
Used to manage a rectangular area, independent of draw class/platform.
User-facing SVG abstraction that you use to manage SVG data ISVG doesn't actually own the image data.