mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 13:53:55 -07:00
Merge pull request #2071 from d18c7db/master
Bugfix to graph scrolling with keyboard
This commit is contained in:
commit
81a0739153
22 changed files with 117 additions and 120 deletions
|
@ -25,7 +25,6 @@
|
||||||
"description": "iPhones before IOS17 emit this frame so that other Apple devices don't react to the field during background reading. Also emitted during NFCReaderSession subtypes"
|
"description": "iPhones before IOS17 emit this frame so that other Apple devices don't react to the field during background reading. Also emitted during NFCReaderSession subtypes"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"value": "6a02c801000300000000000000",
|
"value": "6a02c801000300000000000000",
|
||||||
"name": "Transit: Ventra",
|
"name": "Transit: Ventra",
|
||||||
|
|
|
@ -794,7 +794,7 @@ void Plot::paintEvent(QPaintEvent *event) {
|
||||||
snprintf(scalestr, sizeof(scalestr), "[%2.2f %s] ", ((int32_t)(CursorBPos - CursorAPos)) / g_CursorScaleFactor, g_CursorScaleFactorUnit);
|
snprintf(scalestr, sizeof(scalestr), "[%2.2f %s] ", ((int32_t)(CursorBPos - CursorAPos)) / g_CursorScaleFactor, g_CursorScaleFactorUnit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
snprintf(str, sizeof(str), "@%u..%u dt=%i %szoom=%2.2f CursorAPos=%u CursorBPos=%u GridX=%lf GridY=%lf (%s) GridXoffset=%lf",
|
snprintf(str, sizeof(str), "@%u..%u dt=%i %szoom=%2.3f CursorAPos=%u CursorBPos=%u GridX=%lf GridY=%lf (%s) GridXoffset=%lf",
|
||||||
g_GraphStart,
|
g_GraphStart,
|
||||||
g_GraphStop,
|
g_GraphStop,
|
||||||
CursorBPos - CursorAPos,
|
CursorBPos - CursorAPos,
|
||||||
|
@ -838,17 +838,25 @@ void Plot::closeEvent(QCloseEvent *event) {
|
||||||
gs_useOverlays = false;
|
gs_useOverlays = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// every 4 steps the zoom doubles (or halves)
|
||||||
|
#define ZOOM_STEP (1.189207)
|
||||||
|
// limit zoom to 32 times in either direction
|
||||||
|
#define ZOOM_LIMIT (32)
|
||||||
|
|
||||||
void Plot::Zoom(double factor, uint32_t refX) {
|
void Plot::Zoom(double factor, uint32_t refX) {
|
||||||
|
double g_GraphPixelsPerPointNew = g_GraphPixelsPerPoint * factor;
|
||||||
|
|
||||||
if (factor >= 1) { // Zoom in
|
if (factor >= 1) { // Zoom in
|
||||||
if (g_GraphPixelsPerPoint <= 25 * factor) {
|
if (g_GraphPixelsPerPointNew <= ZOOM_LIMIT) {
|
||||||
g_GraphPixelsPerPoint *= factor;
|
g_GraphPixelsPerPoint = g_GraphPixelsPerPointNew;
|
||||||
if (refX > g_GraphStart) {
|
if (refX > g_GraphStart) {
|
||||||
g_GraphStart += (refX - g_GraphStart) - ((refX - g_GraphStart) / factor);
|
g_GraphStart += (refX - g_GraphStart) - ((refX - g_GraphStart) / factor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // Zoom out
|
} else { // Zoom out
|
||||||
if (g_GraphPixelsPerPoint >= 0.01 / factor) {
|
if (g_GraphPixelsPerPointNew >= (1.0 / ZOOM_LIMIT) ) {
|
||||||
g_GraphPixelsPerPoint *= factor;
|
g_GraphPixelsPerPoint = g_GraphPixelsPerPointNew;
|
||||||
|
// shift graph towards refX when zooming out
|
||||||
if (refX > g_GraphStart) {
|
if (refX > g_GraphStart) {
|
||||||
if (g_GraphStart >= ((refX - g_GraphStart) / factor) - (refX - g_GraphStart)) {
|
if (g_GraphStart >= ((refX - g_GraphStart) / factor) - (refX - g_GraphStart)) {
|
||||||
g_GraphStart -= ((refX - g_GraphStart) / factor) - (refX - g_GraphStart);
|
g_GraphStart -= ((refX - g_GraphStart) / factor) - (refX - g_GraphStart);
|
||||||
|
@ -885,7 +893,6 @@ void Plot::Move(int offset) {
|
||||||
|
|
||||||
void Plot::Trim(void) {
|
void Plot::Trim(void) {
|
||||||
uint32_t lref, rref;
|
uint32_t lref, rref;
|
||||||
const double zoom_offset = 1.148698354997035; // 2**(1/5)
|
|
||||||
if ((CursorAPos == 0) || (CursorBPos == 0)) { // if we don't have both cursors set
|
if ((CursorAPos == 0) || (CursorBPos == 0)) { // if we don't have both cursors set
|
||||||
lref = g_GraphStart;
|
lref = g_GraphStart;
|
||||||
rref = g_GraphStop;
|
rref = g_GraphStop;
|
||||||
|
@ -902,12 +909,12 @@ void Plot::Trim(void) {
|
||||||
} else {
|
} else {
|
||||||
lref = CursorAPos < CursorBPos ? CursorAPos : CursorBPos;
|
lref = CursorAPos < CursorBPos ? CursorAPos : CursorBPos;
|
||||||
rref = CursorAPos < CursorBPos ? CursorBPos : CursorAPos;
|
rref = CursorAPos < CursorBPos ? CursorBPos : CursorAPos;
|
||||||
// g_GraphPixelsPerPoint mush remain a power of zoom_offset
|
// g_GraphPixelsPerPoint must remain a power of ZOOM_STEP
|
||||||
double GPPPtarget = g_GraphPixelsPerPoint * (g_GraphStop - g_GraphStart) / (rref - lref);
|
double GPPPtarget = g_GraphPixelsPerPoint * (g_GraphStop - g_GraphStart) / (rref - lref);
|
||||||
while (g_GraphPixelsPerPoint < GPPPtarget) {
|
while (g_GraphPixelsPerPoint < GPPPtarget) {
|
||||||
g_GraphPixelsPerPoint *= zoom_offset;
|
g_GraphPixelsPerPoint *= ZOOM_STEP;
|
||||||
}
|
}
|
||||||
g_GraphPixelsPerPoint /= zoom_offset;
|
g_GraphPixelsPerPoint /= ZOOM_STEP;
|
||||||
CursorAPos -= lref;
|
CursorAPos -= lref;
|
||||||
CursorBPos -= lref;
|
CursorBPos -= lref;
|
||||||
}
|
}
|
||||||
|
@ -925,34 +932,26 @@ void Plot::wheelEvent(QWheelEvent *event) {
|
||||||
const float move_offset = 0.05;
|
const float move_offset = 0.05;
|
||||||
// -120+shift => zoom in (5 times = *2)
|
// -120+shift => zoom in (5 times = *2)
|
||||||
// 120+shift => zoom out (5 times = /2)
|
// 120+shift => zoom out (5 times = /2)
|
||||||
const double zoom_offset = 1.148698354997035; // 2**(1/5)
|
|
||||||
if (event->modifiers() & Qt::ShiftModifier) {
|
|
||||||
// event->position doesn't exist in QT5.12.8, both exist in 5.14.2 and event->x doesn't exist in 5.15.0
|
|
||||||
#if QT_VERSION >= 0x050d00
|
#if QT_VERSION >= 0x050d00
|
||||||
|
// event->position doesn't exist in QT5.12.8, both exist in 5.14.2 and event->x doesn't exist in 5.15.0
|
||||||
uint32_t x = event->position().x();
|
uint32_t x = event->position().x();
|
||||||
|
// event->angleDelta doesn't exist in QT4, both exist in 5.12.8 and 5.14.2 and event->delta doesn't exist in 5.15.0
|
||||||
|
float delta = -event->angleDelta().y();
|
||||||
#else
|
#else
|
||||||
uint32_t x = event->x();
|
uint32_t x = event->x();
|
||||||
|
float delta = -event->delta();
|
||||||
#endif
|
#endif
|
||||||
|
if (event->modifiers() & (Qt::ShiftModifier | Qt::ControlModifier)) {
|
||||||
x -= WIDTH_AXES;
|
x -= WIDTH_AXES;
|
||||||
x = (int)(x / g_GraphPixelsPerPoint);
|
x = (int)(x / g_GraphPixelsPerPoint);
|
||||||
x += g_GraphStart;
|
x += g_GraphStart;
|
||||||
// event->angleDelta doesn't exist in QT4, both exist in 5.12.8 and 5.14.2 and event->delta doesn't exist in 5.15.0
|
|
||||||
#if QT_VERSION >= 0x050d00
|
|
||||||
float delta = event->angleDelta().y();
|
|
||||||
#else
|
|
||||||
float delta = event->delta();
|
|
||||||
#endif
|
|
||||||
if (delta < 0) {
|
if (delta < 0) {
|
||||||
Zoom(zoom_offset, x);
|
Zoom(ZOOM_STEP, x);
|
||||||
} else {
|
} else {
|
||||||
Zoom(1.0 / zoom_offset, x);
|
Zoom(1.0 / ZOOM_STEP, x);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
#if QT_VERSION >= 0x050d00
|
Move(PageWidth * delta * move_offset / 120 );
|
||||||
Move(PageWidth * (-(float)event->angleDelta().y() / (120 / move_offset)));
|
|
||||||
#else
|
|
||||||
Move(PageWidth * (-(float)event->delta() / (120 / move_offset)));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
this->update();
|
this->update();
|
||||||
}
|
}
|
||||||
|
@ -972,7 +971,6 @@ void Plot::mouseMoveEvent(QMouseEvent *event) {
|
||||||
|
|
||||||
void Plot::keyPressEvent(QKeyEvent *event) {
|
void Plot::keyPressEvent(QKeyEvent *event) {
|
||||||
uint32_t offset; // Left/right movement offset (in sample size)
|
uint32_t offset; // Left/right movement offset (in sample size)
|
||||||
const double zoom_offset = 1.148698354997035; // 2**(1/5)
|
|
||||||
|
|
||||||
if (event->modifiers() & Qt::ShiftModifier) {
|
if (event->modifiers() & Qt::ShiftModifier) {
|
||||||
if (g_PlotGridX)
|
if (g_PlotGridX)
|
||||||
|
@ -983,22 +981,22 @@ void Plot::keyPressEvent(QKeyEvent *event) {
|
||||||
if (event->modifiers() & Qt::ControlModifier)
|
if (event->modifiers() & Qt::ControlModifier)
|
||||||
offset = 1;
|
offset = 1;
|
||||||
else
|
else
|
||||||
offset = (int)(20 / g_GraphPixelsPerPoint);
|
offset = int(ZOOM_LIMIT/g_GraphPixelsPerPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (event->key()) {
|
switch (event->key()) {
|
||||||
case Qt::Key_Down:
|
case Qt::Key_Down:
|
||||||
if (event->modifiers() & Qt::ShiftModifier) {
|
if (event->modifiers() & Qt::ShiftModifier) {
|
||||||
if (event->modifiers() & Qt::ControlModifier) {
|
if (event->modifiers() & Qt::ControlModifier) {
|
||||||
Zoom(zoom_offset, CursorBPos);
|
Zoom(ZOOM_STEP, CursorBPos);
|
||||||
} else {
|
} else {
|
||||||
Zoom(2, CursorBPos);
|
Zoom(ZOOM_STEP*2, CursorBPos);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (event->modifiers() & Qt::ControlModifier) {
|
if (event->modifiers() & Qt::ControlModifier) {
|
||||||
Zoom(zoom_offset, CursorAPos);
|
Zoom(ZOOM_STEP, CursorAPos);
|
||||||
} else {
|
} else {
|
||||||
Zoom(2, CursorAPos);
|
Zoom(ZOOM_STEP*2, CursorAPos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1006,15 +1004,15 @@ void Plot::keyPressEvent(QKeyEvent *event) {
|
||||||
case Qt::Key_Up:
|
case Qt::Key_Up:
|
||||||
if (event->modifiers() & Qt::ShiftModifier) {
|
if (event->modifiers() & Qt::ShiftModifier) {
|
||||||
if (event->modifiers() & Qt::ControlModifier) {
|
if (event->modifiers() & Qt::ControlModifier) {
|
||||||
Zoom(1.0 / zoom_offset, CursorBPos);
|
Zoom(1.0 / ZOOM_STEP, CursorBPos);
|
||||||
} else {
|
} else {
|
||||||
Zoom(0.5, CursorBPos);
|
Zoom(1.0 / (ZOOM_STEP*2), CursorBPos);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (event->modifiers() & Qt::ControlModifier) {
|
if (event->modifiers() & Qt::ControlModifier) {
|
||||||
Zoom(1.0 / zoom_offset, CursorAPos);
|
Zoom(1.0 / ZOOM_STEP, CursorAPos);
|
||||||
} else {
|
} else {
|
||||||
Zoom(0.5, CursorAPos);
|
Zoom(1.0 / (ZOOM_STEP*2), CursorAPos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue