textfields: on mobile edit->edit, allow going to empty geo (#3469)

(this is a PR redo of https://github.com/tldraw/tldraw/pull/3424 which
got messed up a bit)

It doesn't quite feel like this is the right fix but it does solve the
issue. I was trying to see if `getShapeAtPoint` needed more work but the
further I went in that rabbit hole it seemed like I shouldn't touch that
code without causing a bunch of disruption at the moment.

Specifically, the code that does `Check labels first` in Editor.ts is a
little obscure (lines 4384-4397). It only checks a couple specifics
shapes (with certain combinations, i.e. a geo with "none" fill) _and_ it
doesn't check `hitLabels` which also maybe feels wrong? I tried
unraveling it but there's a lot of code relying on it at the moment to
mess with it in the stickies work.
(I was looking at https://github.com/tldraw/tldraw/pull/1910 and
https://github.com/tldraw/tldraw/pull/1806 for historical context fwiw)

Before:


https://github.com/tldraw/tldraw/assets/469604/b263a192-2085-4ffb-9e47-6e9c32abe1f9



After:


https://github.com/tldraw/tldraw/assets/469604/5b0b422b-dd5c-4593-9ac5-dec595923ea6



### Change Type

<!--  Please select a 'Scope' label ️ -->

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

<!--  Please select a 'Type' label ️ -->

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know
pull/3511/head
Mime Čuvalo 2024-04-17 10:34:23 +01:00 zatwierdzone przez GitHub
rodzic 7732e99811
commit a253af95d9
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
3 zmienionych plików z 10 dodań i 10 usunięć

Wyświetl plik

@ -4269,6 +4269,8 @@ export class Editor extends EventEmitter<TLEventMap> {
renderingOnly?: boolean
margin?: number
hitInside?: boolean
// TODO: we probably need to rename this, we don't quite _always_
// respect this esp. in the part below that does "Check labels first"
hitLabels?: boolean
hitFrameInside?: boolean
filter?: (shape: TLShape) => boolean

Wyświetl plik

@ -55,7 +55,7 @@ export class EditingShape extends StateNode {
switch (info.target) {
case 'canvas': {
const hitShape = getHitShapeOnCanvasPointerDown(this.editor)
const hitShape = getHitShapeOnCanvasPointerDown(this.editor, true /* hitLabels */)
if (hitShape) {
this.onPointerDown({
...info,
@ -144,13 +144,8 @@ export class EditingShape extends StateNode {
this.editor.select(hitShape.id)
if (this.editor.getInstanceState().isCoarsePointer) {
this.editor.setEditingShape(null)
this.editor.setCurrentTool('select.idle')
} else {
this.editor.setEditingShape(hitShape.id)
updateHoveredId(this.editor)
}
this.editor.setEditingShape(hitShape.id)
updateHoveredId(this.editor)
}
override onComplete: TLEventHandlers['onComplete'] = (info) => {

Wyświetl plik

@ -1,6 +1,9 @@
import { Editor, HIT_TEST_MARGIN, TLShape } from '@tldraw/editor'
export function getHitShapeOnCanvasPointerDown(editor: Editor): TLShape | undefined {
export function getHitShapeOnCanvasPointerDown(
editor: Editor,
hitLabels = false
): TLShape | undefined {
const zoomLevel = editor.getZoomLevel()
const {
inputs: { currentPagePoint },
@ -10,7 +13,7 @@ export function getHitShapeOnCanvasPointerDown(editor: Editor): TLShape | undefi
// hovered shape at point
editor.getShapeAtPoint(currentPagePoint, {
hitInside: false,
hitLabels: false,
hitLabels,
margin: HIT_TEST_MARGIN / zoomLevel,
renderingOnly: true,
}) ??