radames commited on
Commit
f7d189a
1 Parent(s): 4df0c49

better drag target

Browse files
frontend/src/app.d.ts CHANGED
@@ -17,5 +17,6 @@ declare global {
17
  transform: ZoomTransform;
18
  x: number;
19
  y: number;
 
20
  }
21
  }
 
17
  transform: ZoomTransform;
18
  x: number;
19
  y: number;
20
+ sourceEvent: PointerEvent | MouseEvent | TouchEvent
21
  }
22
  }
frontend/src/lib/Cursor.svelte CHANGED
@@ -1,6 +1,6 @@
1
  <script lang="ts">
2
  import type { ZoomTransform } from 'd3-zoom';
3
-
4
  export let transform: ZoomTransform;
5
  export let color = '';
6
  export let emoji: string;
@@ -16,18 +16,8 @@
16
  class="cursor"
17
  style={`transform: translateX(${coord.x}px) translateY(${coord.y}px) scale(${transform.k});`}
18
  >
19
- <svg
20
- class="block z-0 col-span-2 row-span-2"
21
- width="40"
22
- viewBox="0 0 15 15"
23
- fill="currentColor"
24
- xmlns="http://www.w3.org/2000/svg"
25
- >
26
- <path
27
- d="M0.91603 0.916054L7.09131 14.9234L8.89871 8.89873L14.9234 7.09133L0.91603 0.916054Z"
28
- fill="#FFB800"
29
- />
30
- </svg>
31
  {#if emoji}
32
  <div
33
  class="absolute right-0 text-4xl col-start-2 row-start-2"
 
1
  <script lang="ts">
2
  import type { ZoomTransform } from 'd3-zoom';
3
+ import Cursor from '$lib/Icons/Cursor.svelte';
4
  export let transform: ZoomTransform;
5
  export let color = '';
6
  export let emoji: string;
 
16
  class="cursor"
17
  style={`transform: translateX(${coord.x}px) translateY(${coord.y}px) scale(${transform.k});`}
18
  >
19
+ <Cursor classList={'block z-0 col-span-2 row-span-2'} />
20
+
 
 
 
 
 
 
 
 
 
 
21
  {#if emoji}
22
  <div
23
  class="absolute right-0 text-4xl col-start-2 row-start-2"
frontend/src/lib/Icons/Cursor.svelte ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ export let classList = '';
3
+ </script>
4
+
5
+ <svg
6
+ class={classList}
7
+ width="40"
8
+ viewBox="0 0 15 15"
9
+ fill="currentColor"
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ >
12
+ <path
13
+ d="M0.91603 0.916054L7.09131 14.9234L8.89871 8.89873L14.9234 7.09133L0.91603 0.916054Z"
14
+ fill="#FFB800"
15
+ />
16
+ </svg>
frontend/src/lib/Icons/Move.svelte ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ export let classList = '';
3
+ </script>
4
+
5
+ <svg
6
+ class={classList}
7
+ width="11"
8
+ height="11"
9
+ viewBox="0 0 11 11"
10
+ fill="none"
11
+ xmlns="http://www.w3.org/2000/svg"
12
+ >
13
+ <path
14
+ d="M2.4 4.26667L1 5.66667L2.4 7.06667M4.26667 2.4L5.66667 1L7.06667 2.4M7.06667 8.93333L5.66667 10.3333L4.26667 8.93333M8.93333 4.26667L10.3333 5.66667L8.93333 7.06667M1 5.66667H10.3333M5.66667 1V10.3333"
15
+ stroke="#397DFF"
16
+ stroke-width="0.933333"
17
+ stroke-linecap="round"
18
+ stroke-linejoin="round"
19
+ />
20
+ </svg>
frontend/src/lib/PaintFrame.svelte CHANGED
@@ -1,5 +1,6 @@
1
  <script lang="ts">
2
  import Frame from '$lib/Frame.svelte';
 
3
  import { drag } from 'd3-drag';
4
  import { select } from 'd3-selection';
5
  import { round } from '$lib/utils';
@@ -25,14 +26,24 @@
25
  $: prompt = $myPresence?.currentPrompt;
26
  $: isLoading = $myPresence?.isLoading || false;
27
 
 
 
28
  onMount(() => {
29
- function dragstarted() {
 
 
 
 
 
 
 
 
30
  isDragging = true;
31
  }
32
 
33
  function dragged(event: Event) {
34
- const x = round(transform.invertX(event.x)) - 256;
35
- const y = round(transform.invertY(event.y)) - 256;
36
  position = {
37
  x,
38
  y
@@ -48,8 +59,8 @@
48
  function dragended(event: Event) {
49
  isDragging = false;
50
 
51
- const x = round(transform.invertX(event.x)) - 256;
52
- const y = round(transform.invertY(event.y)) - 256;
53
 
54
  myPresence.update({
55
  frame: {
 
1
  <script lang="ts">
2
  import Frame from '$lib/Frame.svelte';
3
+ import Move from '$lib/Icons/Move.svelte';
4
  import { drag } from 'd3-drag';
5
  import { select } from 'd3-selection';
6
  import { round } from '$lib/utils';
 
26
  $: prompt = $myPresence?.currentPrompt;
27
  $: isLoading = $myPresence?.isLoading || false;
28
 
29
+ let offsetX = 0;
30
+ let offsetY = 0;
31
  onMount(() => {
32
+ function dragstarted(event: Event) {
33
+ const rect = (event.sourceEvent.target as HTMLElement).getBoundingClientRect();
34
+ if (event.sourceEvent instanceof TouchEvent) {
35
+ offsetX = event.sourceEvent.targetTouches[0].pageX - rect.left;
36
+ offsetY = event.sourceEvent.targetTouches[0].pageY - rect.top;
37
+ } else {
38
+ offsetX = event.sourceEvent.pageX - rect.left;
39
+ offsetY = event.sourceEvent.pageY - rect.top;
40
+ }
41
  isDragging = true;
42
  }
43
 
44
  function dragged(event: Event) {
45
+ const x = round(transform.invertX(event.x - offsetX));
46
+ const y = round(transform.invertY(event.y - offsetY));
47
  position = {
48
  x,
49
  y
 
59
  function dragended(event: Event) {
60
  isDragging = false;
61
 
62
+ const x = round(transform.invertX(event.x - offsetX));
63
+ const y = round(transform.invertY(event.y - offsetY));
64
 
65
  myPresence.update({
66
  frame: {