1
0
mirror of https://git.code.sf.net/p/zint/code synced 2026-01-10 13:36:02 +00:00

backend_qt: new method save_as_memfile() to save as

`BARCODE_MEMORY_FILE` and use in GUI for pasting to clipboard
  instead of creating temporary file
CLI: allow fully case-insensitive "tiff" as filetype (saved as
  ".tif"), processing up to 4-letter extensions and hopefully
  making filetype handling more expected;
  simplify `validate_float()` (unneeded 2nd fractional max test);
  add some more internal "--test" tests
BWIPP: update to latest (change from ctx to global VM) - zint tests
  work as-is, no change
This commit is contained in:
gitlost
2025-12-29 17:46:24 +00:00
parent a3f6c75bc0
commit b434202817
7 changed files with 303 additions and 41 deletions

View File

@@ -967,6 +967,33 @@ namespace Zint {
return true;
}
bool QZint::save_to_memfile(const QString& filename, QByteArray& data) {
if (resetSymbol()) {
m_zintSymbol->output_options |= BARCODE_MEMORY_FILE;
cpy_bytearray_left(m_zintSymbol->outfile, filename.toUtf8(), ARRAY_SIZE(m_zintSymbol->outfile) - 1);
if (m_segs.empty()) {
QByteArray bstr = m_text.toUtf8();
m_error = ZBarcode_Encode_and_Print(m_zintSymbol, (unsigned char *) bstr.data(), bstr.length(),
m_rotate_angle);
} else {
struct zint_seg segs[maxSegs];
std::vector<QByteArray> bstrs;
int seg_count = convertSegs(segs, bstrs);
m_error = ZBarcode_Encode_Segs_and_Print(m_zintSymbol, segs, seg_count, m_rotate_angle);
}
}
if (m_error >= ZINT_ERROR) {
m_lastError = m_zintSymbol->errtxt;
m_encodedWidth = m_encodedRows = 0;
m_encodedHeight = m_vectorWidth = m_vectorHeight = 0.0f;
emit errored();
return false;
}
data = QByteArray((const char *) m_zintSymbol->memfile, m_zintSymbol->memfile_size);
return true;
}
/* Convert `zint_vector_rect->colour` to Qt color */
Qt::GlobalColor QZint::colourToQtColor(int colour) {
switch (colour) {

View File

@@ -278,10 +278,10 @@ public:
bool takesGS1AIData(int symbology = 0) const;
/* Error or warning returned by Zint on `render()` or `save_to_file()` */
/* Error or warning returned by Zint on `render()`, `save_to_file()` or `save_to_memfile()` */
int getError() const;
/* Error message returned by Zint on `render()` or `save_to_file()` */
/* Error message returned by Zint on `render()`, `save_to_file()` or `save_to_memfile()` */
const QString& lastError() const; // `symbol->errtxt`
/* Whether `lastError()` set */
@@ -291,6 +291,10 @@ public:
/* Encode and print barcode to file `filename`. Only sets `getError()` on error, not on warning */
bool save_to_file(const QString& filename); // `ZBarcode_Print()`
/* Encode and print barcode to memory file `filename` (only the extension is used, to determine output format).
Only sets `getError()` on error, not on warning */
bool save_to_memfile(const QString& filename, QByteArray& data); // `ZBarcode_Print()` + BARCODE_MEMORY_FILE
/* Encode and display barcode in `paintRect` using `painter`.
Note: legacy argument `mode` is not used */
void render(QPainter& painter, const QRectF& paintRect, AspectRatioMode mode = IgnoreAspectRatio);