fix S10 code-review findings: WM_CAPTURECHANGED, proportional drag, paintSetup root source, Add Zone dedup, strip-area helpers
This commit is contained in:
@@ -179,6 +179,31 @@ static void testResolveDragClampsAndNoOps() {
|
||||
CHECK(resolveDragNote(Z, 60, 500) == 60);
|
||||
}
|
||||
|
||||
static void testResolveDragProportionalNonDivisibleWidth() {
|
||||
// THE REVIEW FINDING: 544px / 128 = 4.25 (non-integer). Old uniform-keyW math used
|
||||
// keyW = 4 (floor), accumulating ~7 keys of drift at the far end. The proportional fix
|
||||
// must agree with keyAtPoint at every point — specifically the far-end invariant:
|
||||
// a drag from note 0 by (width-1) pixels must land at keyAtPoint(width-1), which is 127.
|
||||
const int width = 544;
|
||||
const StripLayout L = layoutStrip(width, 40);
|
||||
CHECK(keyAtPoint(L, width - 1, L.keys.top + 1) == 127);
|
||||
CHECK(resolveDragNote(L, 0, width - 1) == 127);
|
||||
|
||||
// Also verify mid-strip coherence: for each key N, a drag from 0 by N's left-edge
|
||||
// pixel offset should land at N (or N-1 at worst — left-edge pixel is a boundary, so
|
||||
// rounding may round down). The critical direction is that it must NOT over-shoot by
|
||||
// more than 0 (it must reach at least the right key).
|
||||
for (int n = 1; n < kStripKeyCount; ++n) {
|
||||
const int leftPx = keyRect(L, n).left;
|
||||
const int resolved = resolveDragNote(L, 0, leftPx);
|
||||
// The left edge of key N is the first pixel "in" that key, so we expect resolved == N.
|
||||
// Allow resolved == N-1 only when the pixel is at the exact boundary (keyEdgeToX may
|
||||
// produce the same x for adjacent keys when keys share a pixel). Disallow over-shoot.
|
||||
const int expected = keyAtPoint(L, leftPx, L.keys.top + 1);
|
||||
CHECK(resolved >= expected - 1 && resolved <= expected + 1);
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
testLayoutNormalArea();
|
||||
testLayoutZeroArea();
|
||||
@@ -195,6 +220,7 @@ int main() {
|
||||
testZoneBarAtPointNullList();
|
||||
testResolveDragRoundsToNearestKey();
|
||||
testResolveDragClampsAndNoOps();
|
||||
testResolveDragProportionalNonDivisibleWidth();
|
||||
|
||||
if (g_fail == 0) std::printf("keyboard_strip: all tests passed\n");
|
||||
return g_fail != 0;
|
||||
|
||||
Reference in New Issue
Block a user