7 Commits

Author SHA1 Message Date
c9f7531f17 Fixed broken strings handling under Qt5 2025-02-13 23:34:36 +01:00
dc1655a2d7 Last protobuf leftovers 2025-01-25 09:05:13 +01:00
cb4919d5bd Silence clang-tidy warnings 2025-01-12 10:37:21 +01:00
affb818f4e Added missing include 2025-01-12 10:32:58 +01:00
851ed76e26 Version++ 2025-01-12 10:32:42 +01:00
08d211204e Specify the text layout requirements more precisely 2025-01-08 00:36:27 +01:00
9401f66ad7 Cosmetics 2025-01-08 00:21:57 +01:00
7 changed files with 24 additions and 22 deletions

View File

@ -1,4 +1,4 @@
version: 4.0.{build} version: 4.1.{build}
configuration: configuration:
- Release - Release

4
.gitignore vendored
View File

@ -7,7 +7,3 @@ moc_*.cpp
moc_*.h moc_*.h
qrc_*.cpp qrc_*.cpp
Makefile* Makefile*
# lib
libpbf.so
libpbf.dylib

View File

@ -84,16 +84,19 @@ nmake
## Install ## Install
Copy the plugin to the system Qt image plugins path to make it work. You may Copy the plugin to the system Qt image plugins path to make it work. You may
also set the QT_PLUGIN_PATH system variable before starting the application. For also set the QT_PLUGIN_PATH system variable before starting the application.
Linux, there are RPM and DEB [packages](https://build.opensuse.org/project/show/home:tumic:QtPBFImagePlugin) For Linux, there are RPM and DEB [packages](https://build.opensuse.org/project/show/home:tumic:QtPBFImagePlugin)
for most common distros available on OBS. for most common distros available on OBS.
## Limitations ## Limitations
* Only data that is part of the PBF file is displayed. External layers defined in the * Only data that is part of the PBF file is displayed. External layers defined
style are ignored. in the style are ignored.
* Text PBF features must have a unique id (OpenMapTiles >= v3.7) for the text layout * Text PBF features must have a unique id (OpenMapTiles >= v3.7) for the text
algorithm to work properly. layout algorithm to work properly. Additionally, the tile buffer must be large
* Expressions are not supported in the styles, only property functions are implemented. enough to contain all neighboring text features overlapping to the tile bounds
(only data from the tile itself can be drawn to the resulting image).
* Expressions are not supported in the styles, only property functions are
implemented.
## Changelog ## Changelog
[Changelog](https://build.opensuse.org/projects/home:tumic:QtPBFImagePlugin/packages/QtPBFImagePlugin/files/qt6-qtpbfimageformat.changes) [Changelog](https://build.opensuse.org/projects/home:tumic:QtPBFImagePlugin/packages/QtPBFImagePlugin/files/qt6-qtpbfimageformat.changes)

View File

@ -2,7 +2,7 @@ TARGET = pbf
TEMPLATE = lib TEMPLATE = lib
CONFIG += plugin CONFIG += plugin
QT += gui QT += gui
VERSION = 4.0 VERSION = 4.1
HEADERS += src/pbfhandler.h \ HEADERS += src/pbfhandler.h \
src/data.h \ src/data.h \

View File

@ -11,7 +11,7 @@
struct CTX struct CTX
{ {
CTX(const QByteArray &ba) CTX(const QByteArray &ba)
: bp(ba.constData()), be(bp + ba.size()) {} : bp(ba.constData()), be(bp + ba.size()), tag(0) {}
const char *bp; const char *bp;
const char *be; const char *be;
@ -27,8 +27,8 @@ static inline qint64 zigzag64decode(quint64 value)
template<typename T> template<typename T>
static bool varint(CTX &ctx, T &val) static bool varint(CTX &ctx, T &val)
{ {
unsigned int shift = 0;
val = 0; val = 0;
uint shift = 0;
while (ctx.bp < ctx.be) { while (ctx.bp < ctx.be) {
val |= ((quint8)*ctx.bp & 0x7F) << shift; val |= ((quint8)*ctx.bp & 0x7F) << shift;
@ -60,7 +60,14 @@ static bool str(CTX &ctx, QByteArray &val)
if (ctx.bp + len > ctx.be) if (ctx.bp + len > ctx.be)
return false; return false;
/* In Qt5 the (later) conversion to QString is broken when the QByteArray is
not nul terminated so we have to use the "deep copy" constructor that
nul-terminates the byte array when it is created. */
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
val = QByteArray(ctx.bp, len);
#else
val = QByteArray::fromRawData(ctx.bp, len); val = QByteArray::fromRawData(ctx.bp, len);
#endif
ctx.bp += len; ctx.bp += len;
return true; return true;
@ -148,11 +155,11 @@ static bool skip(CTX &ctx)
static bool value(CTX &ctx, QVariant &val) static bool value(CTX &ctx, QVariant &val)
{ {
qint32 len;
QByteArray ba; QByteArray ba;
quint64 num; quint64 num;
double dnum; double dnum;
float fnum; float fnum;
qint32 len;
if (!length(ctx, len)) if (!length(ctx, len))
return false; return false;

View File

@ -6,6 +6,7 @@
#include <QColor> #include <QColor>
#include <QPair> #include <QPair>
#include <QString> #include <QString>
#include <QJsonValue>
class QJsonObject; class QJsonObject;

View File

@ -22,6 +22,7 @@ static QImage sdf2img(const QImage &sdf, const QColor &color)
} }
Sprites::Sprite::Sprite(const QJsonObject &json) Sprites::Sprite::Sprite(const QJsonObject &json)
: _pixelRatio(1.0), _sdf(false)
{ {
int x, y, width, height; int x, y, width, height;
@ -44,16 +45,10 @@ Sprites::Sprite::Sprite(const QJsonObject &json)
_rect = QRect(x, y, width, height); _rect = QRect(x, y, width, height);
if (json.contains("pixelRatio") && json["pixelRatio"].isDouble()) if (json.contains("pixelRatio") && json["pixelRatio"].isDouble())
_pixelRatio = json["pixelRatio"].toDouble(); _pixelRatio = json["pixelRatio"].toDouble();
else
_pixelRatio = 1.0;
if (json.contains("sdf") && json["sdf"].isBool()) if (json.contains("sdf") && json["sdf"].isBool())
_sdf = json["sdf"].toBool(); _sdf = json["sdf"].toBool();
else
_sdf = false;
} }
bool Sprites::load(const QString &jsonFile, const QString &imageFile) bool Sprites::load(const QString &jsonFile, const QString &imageFile)