enso/app/gui2/stories/SelectionBrushWrapper.vue
somebody1234 f2651d58e4
[gui2] Component demos (#7945)
- Closes #7916

# Important Notes
None
2023-10-29 19:02:07 +00:00

40 lines
1.1 KiB
Vue

<script setup lang="ts">
import { computed, ref, shallowRef } from 'vue'
import { usePointer } from '@/util/events'
import { useNavigator } from '@/util/navigator'
import type { Vec2 } from '@/util/vec2'
const viewportNode = ref<HTMLElement>()
const navigator = useNavigator(viewportNode)
const selectionAnchor = shallowRef<Vec2>()
const selection = usePointer((_, __, eventType) => {
if (selection.dragging && selectionAnchor.value == null) {
selectionAnchor.value = navigator.sceneMousePos?.copy()
} else if (eventType === 'stop') {
selectionAnchor.value = undefined
}
})
const scaledMousePos = computed(() => navigator.sceneMousePos?.scale(navigator.scale))
const scaledSelectionAnchor = computed(() => selectionAnchor.value?.scale(navigator.scale))
</script>
<template>
<div
ref="viewportNode"
style="cursor: none; height: 100%"
v-on.="navigator.events"
v-on..="selection.events"
>
<slot
:scaledMousePos="scaledMousePos"
:scaledSelectionAnchor="scaledSelectionAnchor"
:navigator="navigator"
></slot>
</div>
</template>