Compare commits

..

No commits in common. '4d7a7bfd6985ea5f901ea42b1852a0646016cfab' and '98b1cddd79646a6fdc243a7f1180de25fdcc0ad7' have entirely different histories.

  1. 24
      src/QR.cpp
  2. 11
      src/QR.hpp
  3. 2
      src/renderers/BMPRenderer.hpp
  4. 2
      src/renderers/JPGRenderer.hpp
  5. 2
      src/renderers/PNGRenderer.hpp

@ -12,8 +12,16 @@
namespace massivedynamic {
QR::QR(const std::string& data, std::string outputFile, size_t size, qrcodegen::QrCode::Ecc type) : outputFile(std::move(outputFile)),
qr(qrcodegen::QrCode::encodeText(data.c_str(), type)), size(size) {
QR::QR(const std::string& data, std::string outputFile, size_t size, qrcodegen::QrCode::Ecc type) : outputFile(std::move(outputFile)) {
qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(data.c_str(), type);
static_assert(FormatLength == 5, "exhaustive formats: did you miss to add something here?");
this->renderers.insert({Format::CONSOLE, std::make_unique<ConsoleRenderer>(this->pixels, qr.getSize(), size)});
this->renderers.insert({Format::PNG, std::make_unique<PNGRenderer>(this->pixels, qr.getSize(), size)});
this->renderers.insert({Format::SVG, std::make_unique<SVGRenderer>(this->pixels, qr.getSize(), size)});
this->renderers.insert({Format::JPG, std::make_unique<JPGRenderer>(this->pixels, qr.getSize(), size)});
this->renderers.insert({Format::BMP, std::make_unique<BMPRenderer>(this->pixels, qr.getSize(), size)});
// this is inherently stupid, but "qrcodegen::QrCode" does not give access to the
// `segments` vector member and the class itself is marked final.
for (int y = 0; y < qr.getSize(); y++) {
@ -24,15 +32,9 @@ QR::QR(const std::string& data, std::string outputFile, size_t size, qrcodegen::
}
void QR::render(Format format) {
static_assert(FormatLength == 5, "exhaustive formats: did you miss to add something here?");
switch(format) {
case Format::CONSOLE : this->renderTyped<ConsoleRenderer>(); break;
case Format::PNG : this->renderTyped<PNGRenderer>(); break;
case Format::SVG : this->renderTyped<SVGRenderer>(); break;
case Format::JPG : this->renderTyped<JPGRenderer>(); break;
case Format::BMP : this->renderTyped<BMPRenderer>(); break;
case Format::END : break;
}
assert(this->renderers.find(format) != this->renderers.end() && "ERROR: a non-valid renderer has been selected");
this->renderers.at(format)->render(this->outputFile);
}
}

@ -2,6 +2,8 @@
#include <vector>
#include <string>
#include <memory>
#include <unordered_map>
#include "qrcodegen.hpp"
#include "Renderer.hpp"
@ -23,8 +25,7 @@ namespace massivedynamic {
private:
std::string outputFile;
std::vector<bool> pixels;
qrcodegen::QrCode qr;
size_t size;
std::unordered_map<Format, std::unique_ptr<Renderer>> renderers;
public:
QR(const std::string& data, std::string outputFile, size_t size, qrcodegen::QrCode::Ecc type);
QR(const QR&&) = delete;
@ -32,12 +33,6 @@ namespace massivedynamic {
~QR() = default;
void render(Format format);
template<typename T>
void renderTyped() {
T renderer = T(this->pixels, this->qr.getSize(), this->size);
renderer.render(this->outputFile);
}
};
}

@ -6,7 +6,7 @@
namespace massivedynamic {
class BMPRenderer final : public PixelRenderer {
class BMPRenderer : public PixelRenderer {
public:
BMPRenderer(const std::vector<bool>& pixels, size_t sourceSize, size_t targetSize) : PixelRenderer(pixels, sourceSize, targetSize) {}

@ -6,7 +6,7 @@
namespace massivedynamic {
class JPGRenderer final: public PixelRenderer {
class JPGRenderer : public PixelRenderer {
public:
JPGRenderer(const std::vector<bool>& pixels, size_t sourceSize, size_t targetSize) : PixelRenderer(pixels, sourceSize, targetSize) {}

@ -6,7 +6,7 @@
namespace massivedynamic {
class PNGRenderer final: public PixelRenderer {
class PNGRenderer : public PixelRenderer {
public:
PNGRenderer(const std::vector<bool>& pixels, size_t sourceSize, size_t targetSize) : PixelRenderer(pixels, sourceSize, targetSize) {}

Loading…
Cancel
Save