Browse Source

Move Svg from window.hpp to svg.hpp. Deprecate Window::loadSvg(). Un-deprecate Svg::load().

tags/v2.0.0
Andrew Belt 3 years ago
parent
commit
55fa1f0dca
5 changed files with 55 additions and 46 deletions
  1. +1
    -1
      include/helpers.hpp
  2. +15
    -0
      include/svg.hpp
  3. +6
    -13
      include/window.hpp
  4. +33
    -0
      src/svg.cpp
  5. +0
    -32
      src/window.cpp

+ 1
- 1
include/helpers.hpp View File

@@ -58,7 +58,7 @@ TWidget* createWidgetCentered(math::Vec pos) {


inline app::SvgPanel* createPanel(std::string svgPath) { inline app::SvgPanel* createPanel(std::string svgPath) {
app::SvgPanel* panel = new app::SvgPanel; app::SvgPanel* panel = new app::SvgPanel;
std::shared_ptr<Svg> svg = APP->window->loadSvg(svgPath);
std::shared_ptr<Svg> svg = Svg::load(svgPath);
panel->setBackground(svg); panel->setBackground(svg);
return panel; return panel;
} }


+ 15
- 0
include/svg.hpp View File

@@ -1,4 +1,6 @@
#pragma once #pragma once
#include <memory>

#include <nanovg.h> #include <nanovg.h>
#include <nanosvg.h> #include <nanosvg.h>


@@ -8,6 +10,19 @@
namespace rack { namespace rack {




struct Svg {
NSVGimage* handle = NULL;
/** Don't call this directly. Use `Svg::load()` for caching. */
void loadFile(const std::string& filename);
~Svg();

/** Loads Svg from a cache. */
static std::shared_ptr<Svg> load(const std::string& filename);
};

DEPRECATED typedef Svg SVG;


void svgDraw(NVGcontext* vg, NSVGimage* svg); void svgDraw(NVGcontext* vg, NSVGimage* svg);






+ 6
- 13
include/window.hpp View File

@@ -12,6 +12,7 @@
#include <nanovg_gl.h> #include <nanovg_gl.h>
#include <nanovg_gl_utils.h> #include <nanovg_gl_utils.h>
#include <nanosvg.h> #include <nanosvg.h>
#include <svg.hpp>


#include <common.hpp> #include <common.hpp>
#include <math.hpp> #include <math.hpp>
@@ -42,17 +43,6 @@ struct Image {
DEPRECATED static std::shared_ptr<Image> load(const std::string& filename); DEPRECATED static std::shared_ptr<Image> load(const std::string& filename);
}; };


struct Svg {
NSVGimage* handle = NULL;
/** Don't call this directly but instead use `APP->window->loadSvg()` */
void loadFile(const std::string& filename);
~Svg();
/** Use `APP->window->loadSvg()` instead. */
DEPRECATED static std::shared_ptr<Svg> load(const std::string& filename);
};

DEPRECATED typedef Svg SVG;



struct Window { struct Window {
struct Internal; struct Internal;
@@ -71,7 +61,6 @@ struct Window {
/** Use load*() instead of modifying these directly. */ /** Use load*() instead of modifying these directly. */
std::map<std::string, std::weak_ptr<Font>> fontCache; std::map<std::string, std::weak_ptr<Font>> fontCache;
std::map<std::string, std::weak_ptr<Image>> imageCache; std::map<std::string, std::weak_ptr<Image>> imageCache;
std::map<std::string, std::weak_ptr<Svg>> svgCache;


Window(); Window();
~Window(); ~Window();
@@ -100,7 +89,11 @@ struct Window {


std::shared_ptr<Font> loadFont(const std::string& filename); std::shared_ptr<Font> loadFont(const std::string& filename);
std::shared_ptr<Image> loadImage(const std::string& filename); std::shared_ptr<Image> loadImage(const std::string& filename);
std::shared_ptr<Svg> loadSvg(const std::string& filename);

/** Use `Svg::load(filename)` in new code. */
DEPRECATED std::shared_ptr<Svg> loadSvg(const std::string& filename) {
return Svg::load(filename);
}
}; };






+ 33
- 0
src/svg.cpp View File

@@ -1,5 +1,7 @@
#include <svg.hpp> #include <svg.hpp>
#include <map>
#include <math.hpp> #include <math.hpp>
#include <app/common.hpp>




// #define DEBUG_ONLY(x) x // #define DEBUG_ONLY(x) x
@@ -8,6 +10,37 @@
namespace rack { namespace rack {




void Svg::loadFile(const std::string& filename) {
handle = nsvgParseFromFile(filename.c_str(), "px", app::SVG_DPI);
if (handle) {
INFO("Loaded SVG %s", filename.c_str());
}
else {
WARN("Failed to load SVG %s", filename.c_str());
}
}


Svg::~Svg() {
if (handle)
nsvgDelete(handle);
}



static std::map<std::string, std::weak_ptr<Svg>> svgCache;


std::shared_ptr<Svg> Svg::load(const std::string& filename) {
auto sp = svgCache[filename].lock();
if (!sp) {
svgCache[filename] = sp = std::make_shared<Svg>();
sp->load(filename);
}
return sp;
}


static NVGcolor getNVGColor(uint32_t color) { static NVGcolor getNVGColor(uint32_t color) {
return nvgRGBA( return nvgRGBA(
(color >> 0) & 0xff, (color >> 0) & 0xff,


+ 0
- 32
src/window.cpp View File

@@ -72,28 +72,6 @@ std::shared_ptr<Image> Image::load(const std::string& filename) {
} }




void Svg::loadFile(const std::string& filename) {
handle = nsvgParseFromFile(filename.c_str(), "px", app::SVG_DPI);
if (handle) {
INFO("Loaded SVG %s", filename.c_str());
}
else {
WARN("Failed to load SVG %s", filename.c_str());
}
}


Svg::~Svg() {
if (handle)
nsvgDelete(handle);
}


std::shared_ptr<Svg> Svg::load(const std::string& filename) {
return APP->window->loadSvg(filename);
}


struct Window::Internal { struct Window::Internal {
std::string lastWindowTitle; std::string lastWindowTitle;


@@ -652,16 +630,6 @@ std::shared_ptr<Image> Window::loadImage(const std::string& filename) {
} }




std::shared_ptr<Svg> Window::loadSvg(const std::string& filename) {
auto sp = svgCache[filename].lock();
if (!sp) {
svgCache[filename] = sp = std::make_shared<Svg>();
sp->loadFile(filename);
}
return sp;
}


void windowInit() { void windowInit() {
int err; int err;




Loading…
Cancel
Save