aboutsummaryrefslogtreecommitdiff
path: root/stfreader.cc
diff options
context:
space:
mode:
Diffstat (limited to 'stfreader.cc')
-rw-r--r--stfreader.cc19
1 files changed, 11 insertions, 8 deletions
diff --git a/stfreader.cc b/stfreader.cc
index 09967cc..efe7412 100644
--- a/stfreader.cc
+++ b/stfreader.cc
@@ -45,12 +45,12 @@ StfReader::StrokeHandler::~StrokeHandler()
bool StfReader::parseV1(BitReader& br)
{
- qint64 cur_time = 0;
+ quint64 stroke_time = 0;
while (!br.atEnd()) {
syncV1(br);
quint8 header = br.readBits(8);
- qint64 time;
+ quint64 time;
QPoint p0, pa;
int f0;
@@ -76,16 +76,18 @@ bool StfReader::parseV1(BitReader& br)
}
/* Start of a stroke. */
- cur_time += time;
+ stroke_time += time;
p0.setX(br.readBits(16));
p0.setY(br.readBits(16));
f0 = readForce(br);
if (handler) {
- bool res = handler->startStroke(p0, f0, cur_time);
+ bool res = handler->startStroke(p0, f0, stroke_time);
if (!res) return false;
}
+ quint64 point_time = 0;
+
while (!br.atEnd()) {
header = readHeader(br);
if (header == 0 || header == 1) {
@@ -110,7 +112,7 @@ bool StfReader::parseV1(BitReader& br)
if (time == 0) {
if (handler) {
- bool res = handler->endStroke();
+ bool res = handler->endStroke(stroke_time + ((point_time * 1000ULL) / speed));
if (!res) return false;
}
break;
@@ -142,19 +144,20 @@ bool StfReader::parseV1(BitReader& br)
deltaf = readDeltaF(br);
if (do_delta) {
- pa = delta + (pa * static_cast<int>(time)) / 255;
+ pa = delta + (pa * static_cast<int>(time)) / 256;
}
p0 += pa;
pa *= 256 / static_cast<int>(time);
f0 += deltaf;
+ point_time += time;
+
if (handler) {
- bool res = handler->strokePoint(p0, f0, cur_time);
+ bool res = handler->strokePoint(p0, f0, stroke_time + ((point_time * 1000ULL) / speed));
if (!res) return false;
}
}
-
}
return false;