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) {
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);
return panel;
}


+ 15
- 0
include/svg.hpp View File

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

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

@@ -8,6 +10,19 @@
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);




+ 6
- 13
include/window.hpp View File

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

#include <common.hpp>
#include <math.hpp>
@@ -42,17 +43,6 @@ struct Image {
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 Internal;
@@ -71,7 +61,6 @@ struct Window {
/** Use load*() instead of modifying these directly. */
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<Svg>> svgCache;

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

std::shared_ptr<Font> loadFont(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 <map>
#include <math.hpp>
#include <app/common.hpp>


// #define DEBUG_ONLY(x) x
@@ -8,6 +10,37 @@
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) {
return nvgRGBA(
(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 {
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() {
int err;



Loading…
Cancel
Save