snapshot of https://github.com/tldraw/tldraw.git (main, 2026-09-23; blobs > 131072B omitted)
Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
This commit is contained in:
70
apps/examples/e2e-device/helpers/stroke.ts
Normal file
70
apps/examples/e2e-device/helpers/stroke.ts
Normal file
@@ -0,0 +1,70 @@
|
||||
import { currentWebContext } from './app'
|
||||
|
||||
const NATIVE_CONTEXT = 'NATIVE_APP'
|
||||
|
||||
/**
|
||||
* Draw a single-finger freehand stroke across the canvas through the real OS
|
||||
* touch pipeline (same native-context + coordinate-translation approach as
|
||||
* pinch.ts). `from`/`to` are CSS-pixel offsets relative to the canvas centre.
|
||||
*/
|
||||
export async function drawTouchStroke({
|
||||
from,
|
||||
to,
|
||||
steps = 12,
|
||||
}: {
|
||||
from: { x: number; y: number }
|
||||
to: { x: number; y: number }
|
||||
steps?: number
|
||||
}) {
|
||||
const web = await currentWebContext()
|
||||
|
||||
// Measure in the web context (CSS pixels relative to the layout viewport).
|
||||
await browser.switchContext(web)
|
||||
const rect = await browser.execute(() => {
|
||||
const el = document.querySelector('.tl-canvas')!
|
||||
const r = el.getBoundingClientRect()
|
||||
return {
|
||||
cx: r.left + r.width / 2,
|
||||
cy: r.top + r.height / 2,
|
||||
dpr: window.devicePixelRatio,
|
||||
offsetTop: window.visualViewport?.offsetTop ?? 0,
|
||||
}
|
||||
})
|
||||
|
||||
// CSS px -> native device coordinates (iOS reports points, Android pixels).
|
||||
const isAndroid = browser.isAndroid
|
||||
const pxScale = isAndroid ? rect.dpr : 1
|
||||
const TOP_INSET = Number(process.env.DEVICE_TOP_INSET ?? 0)
|
||||
const cx = rect.cx * pxScale
|
||||
const cy = (rect.cy + rect.offsetTop) * pxScale + TOP_INSET
|
||||
|
||||
const point = (p: { x: number; y: number }) => ({
|
||||
x: Math.round(cx + p.x * pxScale),
|
||||
y: Math.round(cy + p.y * pxScale),
|
||||
})
|
||||
|
||||
const start = point(from)
|
||||
const actions: Array<Record<string, unknown>> = [
|
||||
{ type: 'pointerMove', duration: 0, ...start },
|
||||
{ type: 'pointerDown', button: 0 },
|
||||
{ type: 'pause', duration: 50 },
|
||||
]
|
||||
for (let i = 1; i <= steps; i++) {
|
||||
actions.push({
|
||||
type: 'pointerMove',
|
||||
duration: 25,
|
||||
...point({
|
||||
x: from.x + ((to.x - from.x) * i) / steps,
|
||||
y: from.y + ((to.y - from.y) * i) / steps,
|
||||
}),
|
||||
})
|
||||
}
|
||||
actions.push({ type: 'pointerUp', button: 0 })
|
||||
|
||||
await browser.switchContext(NATIVE_CONTEXT)
|
||||
await browser.performActions([
|
||||
{ type: 'pointer', id: 'finger1', parameters: { pointerType: 'touch' }, actions },
|
||||
])
|
||||
await browser.releaseActions()
|
||||
await browser.switchContext(web)
|
||||
}
|
||||
Reference in New Issue
Block a user