Generate labels with pangocairo (#8)
All checks were successful
Build ptprnt / build (push) Successful in 3m41s
All checks were successful
Build ptprnt / build (push) Successful in 3m41s
Goal of this PR is to have some basic labels generated with pangocairo - size of the canvas should be matching the input text and grow/shrink accordingly - basic formatting options like fontsize and align should be working Reviewed-on: moritz/ptouch-prnt#8
This commit was merged in pull request #8.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
ptrnt - print labels on linux
|
||||
Copyright (C) 2023 Moritz Martinius
|
||||
Copyright (C) 2023-2025 Moritz Martinius
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -20,22 +20,81 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <span>
|
||||
#include <vector>
|
||||
|
||||
#include "graphics/Bitmap.hpp"
|
||||
|
||||
namespace ptprnt::graphics {
|
||||
class Monochrome {
|
||||
public:
|
||||
Monochrome(const std::vector<uint8_t>& grayscale);
|
||||
~Monochrome() = default;
|
||||
|
||||
void setThreshold(uint8_t);
|
||||
enum class Orientation {
|
||||
LANDSCAPE = 0, // 0 degrees
|
||||
PORTRAIT = 1, // 90 degrees clockwise
|
||||
LANDSCAPE_FLIPPED = 2, // 180 degrees
|
||||
PORTRAIT_FLIPPED = 3 // 270 degrees clockwise (90 counter-clockwise)
|
||||
};
|
||||
|
||||
class MonochromeData {
|
||||
public:
|
||||
// Constructors
|
||||
MonochromeData() : stride(0), orientation(Orientation::LANDSCAPE), width(0), height(0) {}
|
||||
|
||||
MonochromeData(std::vector<uint8_t> data, uint32_t stride_bytes, Orientation orient = Orientation::LANDSCAPE,
|
||||
uint32_t w = 0, uint32_t h = 0)
|
||||
: bytes(std::move(data)), stride(stride_bytes), orientation(orient), width(w), height(h) {}
|
||||
|
||||
// Constructor from grayscale data (replaces old Monochrome class)
|
||||
MonochromeData(const std::vector<uint8_t>& grayscale, uint32_t width, uint32_t height,
|
||||
Orientation orient = Orientation::LANDSCAPE);
|
||||
MonochromeData(const std::span<uint8_t> grayscale, uint32_t width, uint32_t height,
|
||||
Orientation orient = Orientation::LANDSCAPE);
|
||||
|
||||
~MonochromeData() = default;
|
||||
|
||||
// Copy constructor and assignment
|
||||
MonochromeData(const MonochromeData&) = default;
|
||||
MonochromeData& operator=(const MonochromeData&) = default;
|
||||
|
||||
// Move constructor and assignment
|
||||
MonochromeData(MonochromeData&&) = default;
|
||||
MonochromeData& operator=(MonochromeData&&) = default;
|
||||
|
||||
// Configuration methods
|
||||
void setThreshold(uint8_t threshold);
|
||||
void invert(bool shouldInvert);
|
||||
std::vector<uint8_t> get();
|
||||
|
||||
// Get processed monochrome data
|
||||
MonochromeData get();
|
||||
|
||||
// Transform the image data to the target orientation
|
||||
void transformTo(Orientation targetOrientation);
|
||||
|
||||
// Visualize the monochrome data on stdout
|
||||
void visualize() const;
|
||||
|
||||
// Helper methods for orientation transformations
|
||||
[[nodiscard]] bool getBit(uint32_t x, uint32_t y) const;
|
||||
void setBit(uint32_t x, uint32_t y, bool value);
|
||||
[[nodiscard]] std::vector<uint8_t> createRotatedData(Orientation targetOrientation) const;
|
||||
|
||||
// Public member access for backward compatibility
|
||||
std::vector<uint8_t> bytes;
|
||||
uint32_t stride;
|
||||
Orientation orientation;
|
||||
uint32_t width; // Width in pixels
|
||||
uint32_t height; // Height in pixels
|
||||
|
||||
private:
|
||||
const std::vector<uint8_t>& mPixels;
|
||||
uint8_t mThreshhold = 127;
|
||||
bool mShouldInvert = false;
|
||||
// Processing parameters (for old Monochrome class compatibility)
|
||||
std::vector<uint8_t> mPixels; // Original grayscale pixels
|
||||
uint8_t mThreshold = UINT8_MAX / 2;
|
||||
bool mShouldInvert = false;
|
||||
bool mIsProcessed = false; // Flag to indicate if conversion has been done
|
||||
|
||||
// Helper method to convert grayscale to monochrome
|
||||
void processGrayscaleToMonochrome();
|
||||
};
|
||||
|
||||
// For backward compatibility, create a type alias
|
||||
using Monochrome = MonochromeData;
|
||||
} // namespace ptprnt::graphics
|
||||
Reference in New Issue
Block a user