current bounding box of the paint is the default view size...
Do we have any better information of that?
cout << "TVG is not supported. Did you enable TVG Loader?" << endl;
return;
}
+
+ float w, h;
+ picture->size(&w, &h);
+ cout << "default tvg view size = " << w << " x " << h << endl;
+
canvas->push(move(picture));
}
return block;
}
-static bool _readTvgHeader(const char **ptr)
+static bool _readTvgHeader(const char **ptr, float* w, float* h)
{
if (!*ptr) return false;
if (memcmp(*ptr, TVG_HEADER_VERSION, TVG_HEADER_VERSION_LENGTH)) return false;
*ptr += TVG_HEADER_VERSION_LENGTH;
+ //View width
+ if (w) _read_tvg_float(w, *ptr);
+ *ptr += sizeof(float);
+
+ //View height
+ if (h) _read_tvg_float(h, *ptr);
+ *ptr += sizeof(float);
+
return true;
}
/* External Class Implementation */
/************************************************************************/
-bool tvgValidateData(const char *ptr, uint32_t size)
+bool tvgValidateData(const char *ptr, uint32_t size, float* w, float* h)
{
auto end = ptr + size;
- if (!_readTvgHeader(&ptr) || ptr >= end) return false;
+ if (!_readTvgHeader(&ptr, w, h) || ptr >= end) return false;
return true;
}
{
auto end = ptr + size;
- if (!_readTvgHeader(&ptr) || ptr >= end) {
+ if (!_readTvgHeader(&ptr, nullptr, nullptr) || ptr >= end) {
TVGLOG("TVG", "Invalid TVG Data!");
return nullptr;
}
#include "tvgCommon.h"
#include "tvgBinaryDesc.h"
-bool tvgValidateData(const char *ptr, uint32_t size);
+bool tvgValidateData(const char *ptr, uint32_t size, float* w, float* h);
unique_ptr<Scene> tvgLoadData(const char *ptr, uint32_t size);
#endif //_TVG_TVG_LOAD_PARSER_H_
pointer = data;
- return tvgValidateData(pointer, size);
+ return tvgValidateData(pointer, size, &w, &h);
}
this->size = size;
this->copy = copy;
- return tvgValidateData(pointer, size);
+ return tvgValidateData(pointer, size, &w, &h);
}
}
+bool TvgSaver::writeViewSize()
+{
+ float var[2];
+ paint->bounds(nullptr, nullptr, &var[0], &var[1]);
+ writeData(var, sizeof(var));
+
+ return true;
+}
+
+
void TvgSaver::writeTag(TvgBinTag tag)
{
buffer.grow(SIZE(TvgBinTag));
void TvgSaver::run(unsigned tid)
{
if (!writeHeader()) return;
+ if (!writeViewSize()) return;
if (serialize(paint) == 0) return;
if (!flushTo(path)) return;
}
void reserveCount();
bool writeHeader();
+ bool writeViewSize();
void writeTag(TvgBinTag tag);
void writeCount(TvgBinCounter cnt);
void writeReservedCount(TvgBinCounter cnt);