Mercurial
annotate infinite_canvas/canvas.c @ 279:b3b547563ec7
Add Google connector service and agent wiki
Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code.
Co-authored-by: Copilot <[email protected]>
Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Mon, 17 Aug 2026 22:22:36 -0700 |
| parents | 8d560f50ed4c |
| children | 49e9e591c9bb |
| rev | line source |
|---|---|
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1 #include "infinite_canvas/canvas.h" |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2 #include "infinite_canvas/generated/lucide_data.h" |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4 #include <math.h> |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
5 #include <stdarg.h> |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
6 #include <stdio.h> |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
7 #include <string.h> |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
8 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
9 static const char *CANVAS_DROPDOWN_OPTIONS[] = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
10 "Design", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
11 "Engineering", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
12 "Research", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
13 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
14 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
15 static const char *CANVAS_TABLE_NAMES[] = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
16 "Canvas", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
17 "Browser", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
18 "Notes", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
19 "Assets", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
20 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
21 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
22 static const char *CANVAS_TABLE_STATUSES[] = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
23 "Ready", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
24 "Live", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
25 "Draft", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
26 "Synced", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
27 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
28 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
29 #define CANVAS_LUCIDE_COLUMNS 10 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
30 #define CANVAS_LUCIDE_CARD_WIDTH 128.0f |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
31 #define CANVAS_LUCIDE_CARD_HEIGHT 96.0f |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
32 #define CANVAS_LUCIDE_GAP 12.0f |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
33 #define CANVAS_LUCIDE_HEADER_HEIGHT 88.0f |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
34 #define CANVAS_LUCIDE_PADDING 24.0f |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
35 #define CANVAS_LUCIDE_SEARCH_WIDTH 360.0f |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
36 #define CANVAS_LUCIDE_SEARCH_HEIGHT 42.0f |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
37 #define CANVAS_TEXT_AREA_PADDING 16.0f |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
38 #define CANVAS_TEXT_AREA_FONT_SIZE 16.0f |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
39 #define CANVAS_TEXT_AREA_SPACING 0.1f |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
40 #define CANVAS_TEXT_AREA_LINE_HEIGHT 22.0f |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
41 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
42 typedef struct { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
43 int32 start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
44 int32 end; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
45 int32 next; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
46 float width; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
47 } Canvas_Text_Line; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
48 |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
49 static float Canvas_Clamp(float value, float min_value, float max_value) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
50 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
51 if (value < min_value) return min_value; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
52 if (value > max_value) return max_value; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
53 return value; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
54 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
55 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
56 static Color Canvas_Entity_Color(uint32 index) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
57 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
58 static const Color colors[] = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
59 {96, 165, 250, 255}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
60 {251, 191, 36, 255}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
61 {167, 139, 250, 255}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
62 {45, 212, 191, 255}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
63 {251, 113, 133, 255}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
64 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
65 return colors[index % (sizeof(colors) / sizeof(colors[0]))]; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
66 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
67 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
68 static Color Canvas_Color_Lerp(Color from, Color to, float amount) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
69 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
70 amount = Canvas_Clamp(amount, 0.0f, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
71 return (Color){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
72 (uint8)((float)from.r + ((float)to.r - (float)from.r) * amount), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
73 (uint8)((float)from.g + ((float)to.g - (float)from.g) * amount), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
74 (uint8)((float)from.b + ((float)to.b - (float)from.b) * amount), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
75 (uint8)((float)from.a + ((float)to.a - (float)from.a) * amount), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
76 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
77 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
78 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
79 static Color Canvas_Color_With_Opacity(Color color, float opacity) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
80 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
81 color.a = (uint8)((float)color.a * Canvas_Clamp(opacity, 0.0f, 1.0f)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
82 return color; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
83 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
84 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
85 static Color Canvas_Color_Fade(Color color, float amount) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
86 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
87 return Canvas_Color_With_Opacity(color, amount); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
88 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
89 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
90 static float Canvas_Entity_Visibility(const Canvas_Entity *p_entity) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
91 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
92 float amount = Canvas_Clamp(p_entity->visibility_amount, 0.0f, 1.0f); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
93 return amount * amount * (3.0f - 2.0f * amount); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
94 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
95 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
96 static Canvas_Theme Canvas_Theme_With_Opacity( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
97 const Canvas_Theme *p_theme, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
98 float opacity) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
99 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
100 Canvas_Theme faded = *p_theme; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
101 faded.background = Canvas_Color_With_Opacity(faded.background, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
102 faded.surface = Canvas_Color_With_Opacity(faded.surface, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
103 faded.surface_muted = Canvas_Color_With_Opacity(faded.surface_muted, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
104 faded.border = Canvas_Color_With_Opacity(faded.border, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
105 faded.text = Canvas_Color_With_Opacity(faded.text, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
106 faded.text_muted = Canvas_Color_With_Opacity(faded.text_muted, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
107 faded.accent = Canvas_Color_With_Opacity(faded.accent, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
108 faded.accent_soft = Canvas_Color_With_Opacity(faded.accent_soft, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
109 faded.on_accent = Canvas_Color_With_Opacity(faded.on_accent, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
110 faded.selection = Canvas_Color_With_Opacity(faded.selection, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
111 faded.entity_outline = Canvas_Color_With_Opacity(faded.entity_outline, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
112 faded.button = Canvas_Color_With_Opacity(faded.button, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
113 faded.button_hover = Canvas_Color_With_Opacity(faded.button_hover, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
114 faded.button_active = Canvas_Color_With_Opacity(faded.button_active, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
115 faded.button_active_hover = Canvas_Color_With_Opacity( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
116 faded.button_active_hover, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
117 opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
118 faded.switch_track_off = Canvas_Color_With_Opacity( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
119 faded.switch_track_off, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
120 opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
121 faded.switch_track_off_hover = Canvas_Color_With_Opacity( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
122 faded.switch_track_off_hover, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
123 opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
124 faded.switch_track_on = Canvas_Color_With_Opacity( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
125 faded.switch_track_on, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
126 opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
127 faded.switch_track_on_hover = Canvas_Color_With_Opacity( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
128 faded.switch_track_on_hover, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
129 opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
130 faded.switch_thumb = Canvas_Color_With_Opacity(faded.switch_thumb, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
131 faded.pin = Canvas_Color_With_Opacity(faded.pin, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
132 faded.danger = Canvas_Color_With_Opacity(faded.danger, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
133 faded.shadow = Canvas_Color_With_Opacity(faded.shadow, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
134 faded.toast_surface = Canvas_Color_With_Opacity(faded.toast_surface, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
135 faded.toast_border = Canvas_Color_With_Opacity(faded.toast_border, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
136 return faded; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
137 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
138 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
139 static boolean Canvas_Control_Is_Down(void) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
140 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
141 return IsKeyDown(KEY_LEFT_CONTROL) || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
142 IsKeyDown(KEY_RIGHT_CONTROL) || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
143 IsKeyDown(KEY_LEFT_SUPER) || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
144 IsKeyDown(KEY_RIGHT_SUPER); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
145 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
146 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
147 static boolean Canvas_Shift_Is_Down(void); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
148 static boolean Canvas_Key_Activated(int32 key); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
149 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
150 static char Canvas_Ascii_Lower(char value) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
151 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
152 if (value >= 'A' && value <= 'Z') return (char)(value + ('a' - 'A')); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
153 return value; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
154 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
155 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
156 static boolean Canvas_Lucide_Name_Matches( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
157 const char *p_name, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
158 const char *p_query) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
159 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
160 if (!p_query || !p_query[0]) return TRUE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
161 for (const char *p_start = p_name; *p_start; p_start++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
162 const char *p_name_cursor = p_start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
163 const char *p_query_cursor = p_query; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
164 while (*p_name_cursor && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
165 *p_query_cursor && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
166 Canvas_Ascii_Lower(*p_name_cursor) == |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
167 Canvas_Ascii_Lower(*p_query_cursor)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
168 p_name_cursor++; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
169 p_query_cursor++; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
170 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
171 if (!*p_query_cursor) return TRUE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
172 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
173 return FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
174 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
175 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
176 int32 Canvas_Lucide_Count_Matches(const char *p_query) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
177 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
178 int32 count = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
179 for (int32 index = 0; index < CANVAS_LUCIDE_ICON_COUNT; index++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
180 if (Canvas_Lucide_Name_Matches( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
181 CANVAS_LUCIDE_ICONS[index].p_name, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
182 p_query)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
183 count++; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
184 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
185 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
186 return count; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
187 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
188 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
189 static Rectangle Canvas_Lucide_Search_Bounds(const Canvas_Entity *p_entity) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
190 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
191 return (Rectangle){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
192 p_entity->position.x + p_entity->size.x - |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
193 CANVAS_LUCIDE_PADDING - CANVAS_LUCIDE_SEARCH_WIDTH, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
194 p_entity->position.y + |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
195 (CANVAS_LUCIDE_HEADER_HEIGHT - CANVAS_LUCIDE_SEARCH_HEIGHT) * 0.5f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
196 CANVAS_LUCIDE_SEARCH_WIDTH, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
197 CANVAS_LUCIDE_SEARCH_HEIGHT, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
198 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
199 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
200 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
201 static float Canvas_Lucide_Content_Height(const char *p_query) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
202 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
203 int32 icon_count = Canvas_Lucide_Count_Matches(p_query); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
204 int32 rows = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
205 (icon_count + CANVAS_LUCIDE_COLUMNS - 1) / |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
206 CANVAS_LUCIDE_COLUMNS; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
207 if (rows == 0) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
208 return CANVAS_LUCIDE_HEADER_HEIGHT + CANVAS_LUCIDE_PADDING * 2.0f; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
209 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
210 return CANVAS_LUCIDE_HEADER_HEIGHT + |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
211 CANVAS_LUCIDE_PADDING + |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
212 (float)rows * CANVAS_LUCIDE_CARD_HEIGHT + |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
213 (float)(rows - 1) * CANVAS_LUCIDE_GAP + |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
214 CANVAS_LUCIDE_PADDING; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
215 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
216 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
217 static float Canvas_Lucide_Max_Scroll(const Canvas_Entity *p_entity) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
218 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
219 return fmaxf( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
220 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
221 Canvas_Lucide_Content_Height(p_entity->text) - p_entity->size.y); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
222 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
223 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
224 static const Canvas_Lucide_Icon *Canvas_Lucide_Find_Icon( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
225 const char *p_name) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
226 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
227 for (int32 index = 0; index < CANVAS_LUCIDE_ICON_COUNT; index++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
228 if (strcmp(CANVAS_LUCIDE_ICONS[index].p_name, p_name) == 0) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
229 return &CANVAS_LUCIDE_ICONS[index]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
230 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
231 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
232 return NULL; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
233 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
234 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
235 static void Canvas_Lucide_Draw_Icon( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
236 const Canvas_Lucide_Icon *p_icon, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
237 Vector2 origin, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
238 float scale, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
239 float line_thickness, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
240 Color color) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
241 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
242 if (!p_icon) return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
243 for (uint32 segment_index = p_icon->first_segment; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
244 segment_index < p_icon->first_segment + p_icon->segment_count; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
245 segment_index++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
246 const Canvas_Lucide_Segment *p_segment = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
247 &CANVAS_LUCIDE_SEGMENTS[segment_index]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
248 DrawLineEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
249 (Vector2){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
250 origin.x + p_segment->x1 * scale, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
251 origin.y + p_segment->y1 * scale, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
252 }, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
253 (Vector2){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
254 origin.x + p_segment->x2 * scale, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
255 origin.y + p_segment->y2 * scale, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
256 }, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
257 line_thickness, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
258 color); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
259 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
260 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
261 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
262 static Rectangle Canvas_Web_Toolbar_Bounds( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
263 const Canvas_Camera *p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
264 const Canvas_Entity *p_entity) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
265 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
266 float zoom = p_camera->zoom; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
267 return (Rectangle){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
268 p_entity->position.x + CANVAS_WEB_FRAME_INSET / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
269 p_entity->position.y + CANVAS_WEB_FRAME_INSET / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
270 p_entity->size.x - |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
271 (CANVAS_WEB_FRAME_INSET + CANVAS_WEB_RESIZE_HANDLE) / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
272 CANVAS_WEB_TOOLBAR_HEIGHT * |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
273 (p_entity->web_chrome_amount * |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
274 p_entity->web_chrome_amount * |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
275 (3.0f - 2.0f * p_entity->web_chrome_amount)) / |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
276 zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
277 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
278 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
279 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
280 static Rectangle Canvas_Web_Toolbar_Button_Bounds( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
281 Rectangle toolbar, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
282 float zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
283 int32 button_index) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
284 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
285 return (Rectangle){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
286 toolbar.x + (6.0f + (float)button_index * 34.0f) / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
287 toolbar.y + 7.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
288 28.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
289 28.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
290 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
291 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
292 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
293 static Rectangle Canvas_Web_Address_Bounds(Rectangle toolbar, float zoom) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
294 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
295 return (Rectangle){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
296 toolbar.x + 76.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
297 toolbar.y + 7.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
298 toolbar.width - 82.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
299 28.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
300 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
301 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
302 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
303 static void Canvas_Web_URL_Selection_Bounds( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
304 const Canvas_Scene *p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
305 int32 *p_start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
306 int32 *p_end) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
307 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
308 *p_start = p_scene->web_url_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
309 *p_end = p_scene->web_url_selection_anchor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
310 if (*p_start > *p_end) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
311 int32 swap = *p_start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
312 *p_start = *p_end; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
313 *p_end = swap; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
314 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
315 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
316 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
317 static void Canvas_Web_URL_Delete_Selection(Canvas_Scene *p_scene) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
318 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
319 int32 start = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
320 int32 end = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
321 Canvas_Web_URL_Selection_Bounds(p_scene, &start, &end); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
322 if (start == end) return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
323 size_t length = strlen(p_scene->web_url_draft); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
324 memmove( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
325 p_scene->web_url_draft + start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
326 p_scene->web_url_draft + end, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
327 length - (size_t)end + 1); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
328 p_scene->web_url_cursor = start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
329 p_scene->web_url_selection_anchor = start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
330 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
331 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
332 static void Canvas_Web_URL_Insert(Canvas_Scene *p_scene, const char *p_text) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
333 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
334 Canvas_Web_URL_Delete_Selection(p_scene); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
335 size_t length = strlen(p_scene->web_url_draft); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
336 size_t available = sizeof(p_scene->web_url_draft) - length - 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
337 if (available == 0) return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
338 char filtered[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
339 size_t filtered_length = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
340 for (const char *p_cursor = p_text; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
341 *p_cursor && filtered_length < available; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
342 p_cursor++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
343 if (*p_cursor >= 32 && *p_cursor <= 126) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
344 filtered[filtered_length++] = *p_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
345 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
346 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
347 if (filtered_length == 0) return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
348 int32 cursor = p_scene->web_url_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
349 memmove( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
350 p_scene->web_url_draft + cursor + filtered_length, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
351 p_scene->web_url_draft + cursor, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
352 length - (size_t)cursor + 1); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
353 memcpy(p_scene->web_url_draft + cursor, filtered, filtered_length); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
354 p_scene->web_url_cursor += (int32)filtered_length; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
355 p_scene->web_url_selection_anchor = p_scene->web_url_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
356 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
357 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
358 static int32 Canvas_Web_URL_Cursor_At_Point( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
359 Font font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
360 const Canvas_Scene *p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
361 Rectangle address, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
362 float zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
363 Vector2 point) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
364 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
365 float font_size = 13.0f / zoom; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
366 float local_x = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
367 point.x - address.x - 9.0f / zoom + p_scene->web_url_scroll_x; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
368 int32 length = (int32)strlen(p_scene->web_url_draft); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
369 for (int32 cursor = 0; cursor < length; cursor++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
370 char prefix[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
371 memcpy(prefix, p_scene->web_url_draft, (size_t)cursor + 1); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
372 prefix[cursor + 1] = '\0'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
373 float right = MeasureTextEx(font, prefix, font_size, 0.0f).x; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
374 prefix[cursor] = '\0'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
375 float left = MeasureTextEx(font, prefix, font_size, 0.0f).x; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
376 if (local_x < (left + right) * 0.5f) return cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
377 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
378 return length; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
379 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
380 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
381 static void Canvas_Web_URL_Ensure_Cursor_Visible( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
382 Canvas_Scene *p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
383 Font font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
384 Rectangle address, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
385 float zoom) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
386 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
387 char prefix[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
388 memcpy( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
389 prefix, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
390 p_scene->web_url_draft, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
391 (size_t)p_scene->web_url_cursor); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
392 prefix[p_scene->web_url_cursor] = '\0'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
393 float cursor_x = MeasureTextEx(font, prefix, 13.0f / zoom, 0.0f).x; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
394 float visible_width = address.width - 18.0f / zoom; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
395 if (cursor_x < p_scene->web_url_scroll_x) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
396 p_scene->web_url_scroll_x = cursor_x; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
397 } else if (cursor_x > p_scene->web_url_scroll_x + visible_width) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
398 p_scene->web_url_scroll_x = cursor_x - visible_width; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
399 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
400 if (p_scene->web_url_scroll_x < 0.0f) p_scene->web_url_scroll_x = 0.0f; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
401 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
402 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
403 static void Canvas_Web_URL_Copy_Selection(Canvas_Scene *p_scene) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
404 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
405 int32 start = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
406 int32 end = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
407 Canvas_Web_URL_Selection_Bounds(p_scene, &start, &end); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
408 if (start == end) return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
409 char selected[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
410 memcpy( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
411 selected, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
412 p_scene->web_url_draft + start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
413 (size_t)(end - start)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
414 selected[end - start] = '\0'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
415 SetClipboardText(selected); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
416 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
417 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
418 static void Canvas_Web_URL_Normalize(char *p_url, size_t capacity) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
419 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
420 if (!p_url[0] || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
421 strstr(p_url, "://") || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
422 strncmp(p_url, "about:", 6) == 0 || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
423 strncmp(p_url, "data:", 5) == 0 || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
424 strncmp(p_url, "file:", 5) == 0) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
425 return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
426 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
427 char normalized[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
428 snprintf(normalized, sizeof(normalized), "https://%s", p_url); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
429 snprintf(p_url, capacity, "%s", normalized); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
430 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
431 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
432 Canvas_Web_Chrome_Action Canvas_Web_Chrome_Update_Input( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
433 const Canvas_Camera *p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
434 Canvas_Scene *p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
435 Font font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
436 const char *p_current_url) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
437 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
438 if (p_scene->selected_index < 0 || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
439 p_scene->selected_index >= |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
440 (int32)Dowa_Array_Length(p_scene->p_entities)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
441 p_scene->editing_web_url = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
442 return CANVAS_WEB_CHROME_NONE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
443 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
444 Canvas_Entity *p_entity = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
445 &p_scene->p_entities[p_scene->selected_index]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
446 if (p_entity->type != CANVAS_ENTITY_WEB_CONTENT || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
447 p_entity->removing) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
448 p_scene->editing_web_url = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
449 return CANVAS_WEB_CHROME_NONE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
450 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
451 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
452 Rectangle toolbar = Canvas_Web_Toolbar_Bounds(p_camera, p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
453 Rectangle address = Canvas_Web_Address_Bounds(toolbar, p_camera->zoom); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
454 Vector2 pointer = Canvas_Camera_Screen_To_World( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
455 p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
456 GetMousePosition()); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
457 if (p_scene->editing_web_url && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
458 p_scene->web_url_entity_id == p_entity->id) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
459 boolean shortcut = Canvas_Control_Is_Down(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
460 boolean extend = Canvas_Shift_Is_Down(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
461 int32 length = (int32)strlen(p_scene->web_url_draft); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
462 if (shortcut && IsKeyPressed(KEY_A)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
463 p_scene->web_url_selection_anchor = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
464 p_scene->web_url_cursor = length; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
465 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
466 if (shortcut && IsKeyPressed(KEY_C)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
467 Canvas_Web_URL_Copy_Selection(p_scene); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
468 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
469 if (shortcut && IsKeyPressed(KEY_X)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
470 Canvas_Web_URL_Copy_Selection(p_scene); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
471 Canvas_Web_URL_Delete_Selection(p_scene); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
472 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
473 if (shortcut && IsKeyPressed(KEY_V)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
474 const char *p_clipboard = GetClipboardText(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
475 if (p_clipboard) Canvas_Web_URL_Insert(p_scene, p_clipboard); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
476 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
477 if (Canvas_Key_Activated(KEY_LEFT)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
478 int32 cursor = p_scene->web_url_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
479 if (!extend && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
480 cursor != p_scene->web_url_selection_anchor) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
481 int32 end = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
482 Canvas_Web_URL_Selection_Bounds(p_scene, &cursor, &end); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
483 } else { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
484 cursor--; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
485 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
486 if (cursor < 0) cursor = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
487 p_scene->web_url_cursor = cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
488 if (!extend) p_scene->web_url_selection_anchor = cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
489 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
490 if (Canvas_Key_Activated(KEY_RIGHT)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
491 int32 cursor = p_scene->web_url_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
492 if (!extend && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
493 cursor != p_scene->web_url_selection_anchor) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
494 int32 start = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
495 Canvas_Web_URL_Selection_Bounds(p_scene, &start, &cursor); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
496 } else { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
497 cursor++; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
498 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
499 if (cursor > length) cursor = length; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
500 p_scene->web_url_cursor = cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
501 if (!extend) p_scene->web_url_selection_anchor = cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
502 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
503 if (Canvas_Key_Activated(KEY_HOME)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
504 p_scene->web_url_cursor = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
505 if (!extend) p_scene->web_url_selection_anchor = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
506 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
507 if (Canvas_Key_Activated(KEY_END)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
508 p_scene->web_url_cursor = length; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
509 if (!extend) p_scene->web_url_selection_anchor = length; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
510 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
511 if (Canvas_Key_Activated(KEY_BACKSPACE)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
512 if (p_scene->web_url_cursor != |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
513 p_scene->web_url_selection_anchor) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
514 Canvas_Web_URL_Delete_Selection(p_scene); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
515 } else if (p_scene->web_url_cursor > 0) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
516 p_scene->web_url_selection_anchor = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
517 p_scene->web_url_cursor - 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
518 Canvas_Web_URL_Delete_Selection(p_scene); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
519 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
520 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
521 if (Canvas_Key_Activated(KEY_DELETE)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
522 if (p_scene->web_url_cursor != |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
523 p_scene->web_url_selection_anchor) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
524 Canvas_Web_URL_Delete_Selection(p_scene); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
525 } else if (p_scene->web_url_cursor < length) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
526 p_scene->web_url_selection_anchor = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
527 p_scene->web_url_cursor + 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
528 Canvas_Web_URL_Delete_Selection(p_scene); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
529 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
530 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
531 int32 codepoint = GetCharPressed(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
532 while (codepoint > 0) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
533 if (!shortcut && codepoint >= 32 && codepoint <= 126) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
534 char inserted[2] = {(char)codepoint, '\0'}; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
535 Canvas_Web_URL_Insert(p_scene, inserted); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
536 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
537 codepoint = GetCharPressed(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
538 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
539 Canvas_Web_URL_Ensure_Cursor_Visible( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
540 p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
541 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
542 address, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
543 p_camera->zoom); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
544 if (IsKeyPressed(KEY_ESCAPE)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
545 p_scene->editing_web_url = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
546 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
547 if (IsKeyPressed(KEY_ENTER)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
548 Canvas_Web_URL_Normalize( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
549 p_scene->web_url_draft, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
550 sizeof(p_scene->web_url_draft)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
551 snprintf( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
552 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
553 sizeof(p_entity->text), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
554 "%s", |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
555 p_scene->web_url_draft); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
556 p_scene->editing_web_url = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
557 return CANVAS_WEB_CHROME_NAVIGATE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
558 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
559 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
560 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
561 if (!CheckCollisionPointRec(pointer, toolbar)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
562 if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
563 p_scene->editing_web_url = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
564 return CANVAS_WEB_CHROME_NONE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
565 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
566 return p_scene->editing_web_url ? |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
567 CANVAS_WEB_CHROME_CAPTURE : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
568 CANVAS_WEB_CHROME_NONE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
569 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
570 if (!IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
571 return CANVAS_WEB_CHROME_CAPTURE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
572 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
573 if (CheckCollisionPointRec( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
574 pointer, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
575 Canvas_Web_Toolbar_Button_Bounds(toolbar, p_camera->zoom, 0))) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
576 return CANVAS_WEB_CHROME_BACK; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
577 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
578 if (CheckCollisionPointRec( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
579 pointer, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
580 Canvas_Web_Toolbar_Button_Bounds(toolbar, p_camera->zoom, 1))) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
581 return CANVAS_WEB_CHROME_FORWARD; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
582 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
583 if (CheckCollisionPointRec(pointer, address)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
584 if (!p_scene->editing_web_url || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
585 p_scene->web_url_entity_id != p_entity->id) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
586 snprintf( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
587 p_scene->web_url_draft, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
588 sizeof(p_scene->web_url_draft), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
589 "%s", |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
590 p_current_url && p_current_url[0] ? |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
591 p_current_url : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
592 p_entity->text); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
593 p_scene->web_url_entity_id = p_entity->id; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
594 p_scene->web_url_cursor = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
595 (int32)strlen(p_scene->web_url_draft); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
596 p_scene->web_url_selection_anchor = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
597 p_scene->web_url_scroll_x = 0.0f; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
598 p_scene->editing_web_url = TRUE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
599 } else { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
600 int32 cursor = Canvas_Web_URL_Cursor_At_Point( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
601 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
602 p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
603 address, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
604 p_camera->zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
605 pointer); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
606 p_scene->web_url_cursor = cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
607 if (!Canvas_Shift_Is_Down()) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
608 p_scene->web_url_selection_anchor = cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
609 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
610 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
611 Canvas_Web_URL_Ensure_Cursor_Visible( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
612 p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
613 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
614 address, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
615 p_camera->zoom); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
616 return CANVAS_WEB_CHROME_CAPTURE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
617 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
618 p_scene->editing_web_url = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
619 return CANVAS_WEB_CHROME_CAPTURE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
620 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
621 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
622 boolean Canvas_Web_Chrome_Is_Editing(const Canvas_Scene *p_scene) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
623 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
624 return p_scene->editing_web_url; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
625 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
626 |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
627 void Canvas_Camera_Init(Canvas_Camera *p_camera, int32 width, int32 height) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
628 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
629 *p_camera = (Canvas_Camera){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
630 .target = {0.0f, 0.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
631 .zoom = 1.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
632 .viewport_width = width, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
633 .viewport_height = height, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
634 .min_zoom = 0.01f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
635 .max_zoom = 64.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
636 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
637 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
638 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
639 void Canvas_Camera_Set_Viewport(Canvas_Camera *p_camera, int32 width, int32 height) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
640 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
641 p_camera->viewport_width = width; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
642 p_camera->viewport_height = height; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
643 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
644 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
645 Vector2 Canvas_Camera_Screen_To_World(const Canvas_Camera *p_camera, Vector2 screen) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
646 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
647 Vector2 center = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
648 (float)p_camera->viewport_width * 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
649 (float)p_camera->viewport_height * 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
650 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
651 return (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
652 p_camera->target.x + (screen.x - center.x) / p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
653 p_camera->target.y + (screen.y - center.y) / p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
654 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
655 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
656 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
657 Vector2 Canvas_Camera_World_To_Screen(const Canvas_Camera *p_camera, Vector2 world) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
658 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
659 Vector2 center = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
660 (float)p_camera->viewport_width * 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
661 (float)p_camera->viewport_height * 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
662 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
663 return (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
664 center.x + (world.x - p_camera->target.x) * p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
665 center.y + (world.y - p_camera->target.y) * p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
666 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
667 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
668 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
669 void Canvas_Camera_Pan(Canvas_Camera *p_camera, Vector2 screen_delta) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
670 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
671 p_camera->target.x -= screen_delta.x / p_camera->zoom; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
672 p_camera->target.y -= screen_delta.y / p_camera->zoom; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
673 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
674 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
675 void Canvas_Camera_Zoom_At( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
676 Canvas_Camera *p_camera, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
677 Vector2 screen_anchor, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
678 float zoom_multiplier) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
679 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
680 Vector2 world_anchor = Canvas_Camera_Screen_To_World(p_camera, screen_anchor); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
681 p_camera->zoom = Canvas_Clamp( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
682 p_camera->zoom * zoom_multiplier, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
683 p_camera->min_zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
684 p_camera->max_zoom); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
685 Vector2 moved_anchor = Canvas_Camera_Screen_To_World(p_camera, screen_anchor); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
686 p_camera->target.x += world_anchor.x - moved_anchor.x; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
687 p_camera->target.y += world_anchor.y - moved_anchor.y; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
688 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
689 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
690 Rectangle Canvas_Camera_Viewport_Bounds(const Canvas_Camera *p_camera) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
691 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
692 Vector2 min = Canvas_Camera_Screen_To_World(p_camera, (Vector2){0.0f, 0.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
693 Vector2 max = Canvas_Camera_Screen_To_World( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
694 p_camera, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
695 (Vector2){(float)p_camera->viewport_width, (float)p_camera->viewport_height}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
696 return (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
697 .x = min.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
698 .y = min.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
699 .width = max.x - min.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
700 .height = max.y - min.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
701 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
702 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
703 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
704 void Canvas_Camera_Fit_Bounds( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
705 Canvas_Camera *p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
706 Rectangle bounds, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
707 float padding_left, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
708 float padding_top, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
709 float padding_right, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
710 float padding_bottom) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
711 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
712 float available_width = fmaxf( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
713 1.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
714 (float)p_camera->viewport_width - padding_left - padding_right); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
715 float available_height = fmaxf( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
716 1.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
717 (float)p_camera->viewport_height - padding_top - padding_bottom); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
718 float zoom = fminf( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
719 available_width / fmaxf(bounds.width, 1.0f), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
720 available_height / fmaxf(bounds.height, 1.0f)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
721 p_camera->zoom = Canvas_Clamp( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
722 zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
723 p_camera->min_zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
724 p_camera->max_zoom); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
725 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
726 Vector2 world_center = { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
727 bounds.x + bounds.width * 0.5f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
728 bounds.y + bounds.height * 0.5f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
729 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
730 Vector2 desired_screen_center = { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
731 padding_left + available_width * 0.5f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
732 padding_top + available_height * 0.5f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
733 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
734 Vector2 viewport_center = { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
735 (float)p_camera->viewport_width * 0.5f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
736 (float)p_camera->viewport_height * 0.5f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
737 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
738 p_camera->target = (Vector2){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
739 world_center.x - |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
740 (desired_screen_center.x - viewport_center.x) / p_camera->zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
741 world_center.y - |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
742 (desired_screen_center.y - viewport_center.y) / p_camera->zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
743 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
744 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
745 |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
746 static Rectangle Canvas_Entity_Bounds(const Canvas_Entity *p_entity) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
747 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
748 if (p_entity->type == CANVAS_ENTITY_CIRCLE) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
749 return (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
750 p_entity->position.x - p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
751 p_entity->position.y - p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
752 p_entity->size.x * 2.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
753 p_entity->size.x * 2.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
754 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
755 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
756 if (p_entity->type == CANVAS_ENTITY_LINE) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
757 float end_x = p_entity->position.x + p_entity->size.x; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
758 float end_y = p_entity->position.y + p_entity->size.y; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
759 return (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
760 fminf(p_entity->position.x, end_x), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
761 fminf(p_entity->position.y, end_y), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
762 fmaxf(fabsf(p_entity->size.x), 0.001f), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
763 fmaxf(fabsf(p_entity->size.y), 0.001f), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
764 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
765 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
766 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
767 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
768 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
769 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
770 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
771 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
772 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
773 if (p_entity->type == CANVAS_ENTITY_DROPDOWN && p_entity->active) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
774 bounds.height += 128.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
775 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
776 return bounds; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
777 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
778 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
779 typedef struct { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
780 char *p_buffer; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
781 size_t capacity; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
782 size_t length; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
783 boolean truncated; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
784 } Canvas_Context_Writer; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
785 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
786 static void Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
787 Canvas_Context_Writer *p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
788 const char *p_format, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
789 ...) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
790 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
791 if (p_writer->truncated || p_writer->capacity == 0) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
792 p_writer->truncated = TRUE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
793 return; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
794 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
795 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
796 va_list arguments; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
797 va_start(arguments, p_format); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
798 int32 written = vsnprintf( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
799 p_writer->p_buffer + p_writer->length, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
800 p_writer->capacity - p_writer->length, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
801 p_format, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
802 arguments); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
803 va_end(arguments); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
804 if (written < 0) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
805 p_writer->truncated = TRUE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
806 return; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
807 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
808 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
809 size_t available = p_writer->capacity - p_writer->length; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
810 if ((size_t)written >= available) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
811 p_writer->length = p_writer->capacity - 1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
812 p_writer->truncated = TRUE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
813 return; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
814 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
815 p_writer->length += (size_t)written; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
816 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
817 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
818 static void Canvas_Context_Append_Quoted( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
819 Canvas_Context_Writer *p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
820 const char *p_text) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
821 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
822 Canvas_Context_Append(p_writer, "\""); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
823 for (const char *p_cursor = p_text; *p_cursor && !p_writer->truncated; p_cursor++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
824 if (*p_cursor == '"' || *p_cursor == '\\') { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
825 Canvas_Context_Append(p_writer, "\\%c", *p_cursor); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
826 } else if (*p_cursor == '\n') { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
827 Canvas_Context_Append(p_writer, "\\n"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
828 } else if (*p_cursor == '\r') { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
829 continue; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
830 } else { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
831 Canvas_Context_Append(p_writer, "%c", *p_cursor); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
832 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
833 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
834 Canvas_Context_Append(p_writer, "\""); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
835 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
836 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
837 static void Canvas_Context_Append_Entity_State( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
838 Canvas_Context_Writer *p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
839 const Canvas_Entity *p_entity) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
840 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
841 switch (p_entity->type) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
842 case CANVAS_ENTITY_RECTANGLE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
843 case CANVAS_ENTITY_CIRCLE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
844 case CANVAS_ENTITY_LINE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
845 Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
846 p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
847 "color=rgba(%u,%u,%u,%u)", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
848 p_entity->color.r, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
849 p_entity->color.g, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
850 p_entity->color.b, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
851 p_entity->color.a); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
852 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
853 case CANVAS_ENTITY_TEXT: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
854 Canvas_Context_Append(p_writer, "content="); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
855 Canvas_Context_Append_Quoted(p_writer, p_entity->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
856 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
857 case CANVAS_ENTITY_BUTTON: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
858 Canvas_Context_Append(p_writer, "label="); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
859 Canvas_Context_Append_Quoted(p_writer, p_entity->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
860 Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
861 p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
862 " activated=%s", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
863 p_entity->active ? "true" : "false"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
864 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
865 case CANVAS_ENTITY_TEXT_AREA: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
866 Canvas_Context_Append(p_writer, "content="); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
867 Canvas_Context_Append_Quoted(p_writer, p_entity->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
868 Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
869 p_writer, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
870 " editing=%s cursor=%d selection_anchor=%d", |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
871 p_entity->active ? "true" : "false", |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
872 p_entity->text_cursor, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
873 p_entity->text_selection_anchor); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
874 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
875 case CANVAS_ENTITY_DROPDOWN: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
876 Canvas_Context_Append(p_writer, "selected="); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
877 Canvas_Context_Append_Quoted( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
878 p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
879 CANVAS_DROPDOWN_OPTIONS[p_entity->value]); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
880 Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
881 p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
882 " open=%s", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
883 p_entity->active ? "true" : "false"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
884 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
885 case CANVAS_ENTITY_ACCORDION: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
886 Canvas_Context_Append(p_writer, "title="); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
887 Canvas_Context_Append_Quoted(p_writer, p_entity->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
888 Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
889 p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
890 " expanded=%s", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
891 p_entity->active ? "true" : "false"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
892 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
893 case CANVAS_ENTITY_CARD: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
894 Canvas_Context_Append(p_writer, "title="); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
895 Canvas_Context_Append_Quoted(p_writer, p_entity->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
896 Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
897 p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
898 " emphasized=%s", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
899 p_entity->active ? "true" : "false"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
900 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
901 case CANVAS_ENTITY_CALENDAR: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
902 Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
903 p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
904 "selected_date=\"2026-08-%02d\"", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
905 p_entity->value); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
906 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
907 case CANVAS_ENTITY_SWITCH: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
908 Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
909 p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
910 "checked=%s", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
911 p_entity->active ? "true" : "false"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
912 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
913 case CANVAS_ENTITY_TABLE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
914 Canvas_Context_Append(p_writer, "selected_row={name="); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
915 Canvas_Context_Append_Quoted( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
916 p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
917 CANVAS_TABLE_NAMES[p_entity->value]); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
918 Canvas_Context_Append(p_writer, ", status="); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
919 Canvas_Context_Append_Quoted( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
920 p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
921 CANVAS_TABLE_STATUSES[p_entity->value]); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
922 Canvas_Context_Append(p_writer, "}"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
923 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
924 case CANVAS_ENTITY_NOTIFICATION: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
925 Canvas_Context_Append(p_writer, "title="); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
926 Canvas_Context_Append_Quoted(p_writer, p_entity->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
927 Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
928 p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
929 " active=%s", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
930 p_entity->active ? "true" : "false"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
931 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
932 case CANVAS_ENTITY_SCROLL_AREA: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
933 int32 first_item = p_entity->value / 42 + 1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
934 int32 last_item = first_item + 3; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
935 if (last_item > 10) last_item = 10; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
936 Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
937 p_writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
938 "scroll_offset=%d visible_items=%d-%d", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
939 p_entity->value, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
940 first_item, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
941 last_item); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
942 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
943 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
944 case CANVAS_ENTITY_IMAGE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
945 Canvas_Context_Append(p_writer, "source="); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
946 Canvas_Context_Append_Quoted(p_writer, p_entity->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
947 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
948 case CANVAS_ENTITY_WEB_CONTENT: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
949 Canvas_Context_Append(p_writer, "url="); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
950 Canvas_Context_Append_Quoted(p_writer, p_entity->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
951 break; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
952 case CANVAS_ENTITY_LUCIDE_GALLERY: |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
953 Canvas_Context_Append( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
954 p_writer, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
955 "icons=%d query=", |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
956 Canvas_Lucide_Count_Matches(p_entity->text)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
957 Canvas_Context_Append_Quoted(p_writer, p_entity->text); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
958 Canvas_Context_Append( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
959 p_writer, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
960 " search_focused=%s scroll_offset=%d renderer=\"raylib\"", |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
961 p_entity->active ? "true" : "false", |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
962 p_entity->value); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
963 break; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
964 default: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
965 Canvas_Context_Append(p_writer, "value=%d", p_entity->value); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
966 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
967 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
968 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
969 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
970 Canvas_Context_Snapshot Canvas_Scene_Build_Visible_Context( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
971 const Canvas_Scene *p_scene, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
972 const Canvas_Camera *p_camera, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
973 char *p_buffer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
974 size_t buffer_size) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
975 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
976 Canvas_Context_Writer writer = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
977 .p_buffer = p_buffer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
978 .capacity = buffer_size, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
979 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
980 if (buffer_size > 0) p_buffer[0] = '\0'; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
981 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
982 Rectangle viewport = Canvas_Camera_Viewport_Bounds(p_camera); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
983 Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
984 &writer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
985 "camera_context zoom=%.2f viewport=[%.1f, %.1f, %.1f, %.1f]\n" |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
986 "entities:\n", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
987 p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
988 viewport.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
989 viewport.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
990 viewport.width, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
991 viewport.height); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
992 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
993 Canvas_Context_Snapshot snapshot = {0}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
994 for (size_t index = 0; index < Dowa_Array_Length(p_scene->p_entities); index++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
995 const Canvas_Entity *p_entity = &p_scene->p_entities[index]; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
996 if (p_entity->type == CANVAS_ENTITY_NOTIFICATION && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
997 p_entity->animation_amount <= 0.01f) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
998 continue; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
999 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1000 if (!CheckCollisionRecs(viewport, Canvas_Entity_Bounds(p_entity))) continue; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1001 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1002 snapshot.visible_count++; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1003 Canvas_Context_Append( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1004 &writer, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1005 "- id=%u type=\"%s\" position=[%.1f, %.1f] size=[%.1f, %.1f] pinned=%s", |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1006 p_entity->id, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1007 Canvas_Entity_Type_Name(p_entity->type), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1008 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1009 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1010 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1011 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1012 p_entity->pinned ? "true" : "false"); |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1013 Canvas_Context_Append( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1014 &writer, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1015 " visibility=%.2f removing=%s\n" |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1016 " state: ", |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1017 p_entity->visibility_amount, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1018 p_entity->removing ? "true" : "false"); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1019 Canvas_Context_Append_Entity_State(&writer, p_entity); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1020 Canvas_Context_Append(&writer, "\n"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1021 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1022 if (snapshot.visible_count == 0) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1023 Canvas_Context_Append(&writer, " (none)\n"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1024 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1025 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1026 snapshot.bytes_written = writer.length; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1027 snapshot.truncated = writer.truncated; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1028 return snapshot; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1029 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1030 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1031 float Canvas_Grid_Spacing(float zoom) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1032 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1033 float spacing = 64.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1034 while ((spacing * zoom < 48.0f) && (spacing < 1048576.0f)) spacing *= 2.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1035 while ((spacing * zoom > 96.0f) && (spacing > 0.0009765625f)) spacing *= 0.5f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1036 return spacing; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1037 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1038 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1039 void Canvas_Scene_Init(Canvas_Scene *p_scene, Dowa_Arena *p_arena) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1040 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1041 memset(p_scene, 0, sizeof(*p_scene)); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1042 p_scene->p_arena = p_arena; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1043 p_scene->selected_index = -1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1044 p_scene->pressed_index = -1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1045 p_scene->hover_index = -1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1046 p_scene->show_grid = FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1047 Dowa_Array_Reserve_Arena(p_scene->p_entities, CANVAS_MAX_ENTITIES, p_arena); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1048 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1049 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1050 boolean Canvas_Scene_Add(Canvas_Scene *p_scene, Canvas_Entity_Type type, Vector2 position) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1051 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1052 if (Dowa_Array_Length(p_scene->p_entities) >= CANVAS_MAX_ENTITIES) return FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1053 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1054 uint32 index = p_scene->next_entity++; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1055 Canvas_Entity entity = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1056 .id = ++p_scene->next_entity_id, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1057 .type = type, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1058 .position = position, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1059 .size = {160.0f, 100.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1060 .color = Canvas_Entity_Color(index), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1061 .text = {0}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1062 .value = 0, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1063 .visibility_amount = 0.0f, |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1064 .active = FALSE, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1065 .pinned = FALSE, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1066 .removing = FALSE, |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1067 .hover_amount = 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1068 .animation_amount = 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1069 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1070 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1071 if (type == CANVAS_ENTITY_CIRCLE) entity.size = (Vector2){56.0f, 56.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1072 if (type == CANVAS_ENTITY_LINE) entity.size = (Vector2){180.0f, 80.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1073 if (type == CANVAS_ENTITY_TEXT) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1074 entity.size = (Vector2){180.0f, 32.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1075 snprintf(entity.text, sizeof(entity.text), "Entity %u", index + 1); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1076 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1077 if (type == CANVAS_ENTITY_BUTTON) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1078 entity.size = (Vector2){156.0f, 48.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1079 snprintf(entity.text, sizeof(entity.text), "Continue"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1080 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1081 if (type == CANVAS_ENTITY_TEXT_AREA) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1082 entity.size = (Vector2){280.0f, 148.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1083 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1084 if (type == CANVAS_ENTITY_DROPDOWN) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1085 entity.size = (Vector2){224.0f, 48.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1086 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1087 if (type == CANVAS_ENTITY_ACCORDION) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1088 entity.size = (Vector2){300.0f, 56.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1089 snprintf(entity.text, sizeof(entity.text), "How does the canvas work?"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1090 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1091 if (type == CANVAS_ENTITY_CARD) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1092 entity.size = (Vector2){280.0f, 220.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1093 snprintf(entity.text, sizeof(entity.text), "Infinite workspace"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1094 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1095 if (type == CANVAS_ENTITY_CALENDAR) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1096 entity.size = (Vector2){280.0f, 300.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1097 entity.value = 17; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1098 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1099 if (type == CANVAS_ENTITY_SWITCH) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1100 entity.size = (Vector2){64.0f, 36.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1101 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1102 if (type == CANVAS_ENTITY_TABLE) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1103 entity.size = (Vector2){420.0f, 230.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1104 entity.value = 1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1105 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1106 if (type == CANVAS_ENTITY_NOTIFICATION) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1107 entity.size = (Vector2){384.0f, 82.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1108 entity.active = TRUE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1109 entity.animation_amount = 1.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1110 snprintf(entity.text, sizeof(entity.text), "Event created"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1111 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1112 if (type == CANVAS_ENTITY_SCROLL_AREA) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1113 entity.size = (Vector2){320.0f, 220.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1114 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1115 if (type == CANVAS_ENTITY_IMAGE) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1116 entity.size = (Vector2){360.0f, 240.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1117 snprintf( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1118 entity.text, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1119 sizeof(entity.text), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1120 "infinite_canvas/assets/image-placeholder.svg"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1121 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1122 if (type == CANVAS_ENTITY_WEB_CONTENT) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1123 entity.size = (Vector2){720.0f, 460.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1124 entity.active = TRUE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1125 snprintf(entity.text, sizeof(entity.text), "https://mrjunejune.com"); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1126 } |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1127 if (type == CANVAS_ENTITY_LUCIDE_GALLERY) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1128 entity.size = (Vector2){1440.0f, 1040.0f}; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1129 } |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1130 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1131 Dowa_Array_Push_Arena(p_scene->p_entities, entity, p_scene->p_arena); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1132 return TRUE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1133 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1134 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1135 void Canvas_Scene_Clear(Canvas_Scene *p_scene) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1136 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1137 Dowa_Array_Clear(p_scene->p_entities); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1138 p_scene->next_entity = 0; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1139 p_scene->selected_index = -1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1140 p_scene->pressed_index = -1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1141 p_scene->hover_index = -1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1142 p_scene->dragging = FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1143 p_scene->resizing = FALSE; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1144 p_scene->selecting_text = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1145 p_scene->editing_web_url = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1146 p_scene->web_url_entity_id = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1147 p_scene->web_url_draft[0] = '\0'; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1148 p_scene->notification_stack_amount = 0.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1149 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1150 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1151 void Canvas_Scene_Fade_Out_All(Canvas_Scene *p_scene) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1152 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1153 for (size_t index = 0; index < Dowa_Array_Length(p_scene->p_entities); index++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1154 p_scene->p_entities[index].removing = TRUE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1155 p_scene->p_entities[index].active = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1156 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1157 p_scene->selected_index = -1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1158 p_scene->pressed_index = -1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1159 p_scene->hover_index = -1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1160 p_scene->dragging = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1161 p_scene->resizing = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1162 p_scene->selecting_text = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1163 p_scene->editing_web_url = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1164 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1165 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1166 void Canvas_Scene_Fade_Out_Selected(Canvas_Scene *p_scene) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1167 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1168 if (p_scene->selected_index < 0 || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1169 p_scene->selected_index >= (int32)Dowa_Array_Length(p_scene->p_entities)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1170 return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1171 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1172 Canvas_Entity *p_entity = &p_scene->p_entities[p_scene->selected_index]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1173 p_entity->removing = TRUE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1174 p_entity->active = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1175 p_scene->selected_index = -1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1176 p_scene->pressed_index = -1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1177 p_scene->hover_index = -1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1178 p_scene->dragging = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1179 p_scene->resizing = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1180 p_scene->selecting_text = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1181 p_scene->editing_web_url = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1182 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1183 |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1184 void Canvas_Scene_Add_Demo(Canvas_Scene *p_scene) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1185 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1186 Canvas_Scene_Clear(p_scene); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1187 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_RECTANGLE, (Vector2){-550.0f, -520.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1188 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_CIRCLE, (Vector2){-300.0f, -470.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1189 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_LINE, (Vector2){-180.0f, -500.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1190 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_TEXT, (Vector2){50.0f, -500.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1191 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_BUTTON, (Vector2){280.0f, -510.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1192 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_SWITCH, (Vector2){500.0f, -504.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1193 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1194 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_TEXT_AREA, (Vector2){-550.0f, -350.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1195 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_DROPDOWN, (Vector2){-230.0f, -350.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1196 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_ACCORDION, (Vector2){30.0f, -350.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1197 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_CARD, (Vector2){360.0f, -350.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1198 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1199 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_CALENDAR, (Vector2){-550.0f, -130.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1200 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_TABLE, (Vector2){-230.0f, -130.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1201 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_NOTIFICATION, (Vector2){220.0f, -130.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1202 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_NOTIFICATION, (Vector2){220.0f, -20.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1203 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_NOTIFICATION, (Vector2){220.0f, 90.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1204 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_SCROLL_AREA, (Vector2){610.0f, -130.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1205 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1206 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_IMAGE, (Vector2){-550.0f, 220.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1207 Canvas_Scene_Add(p_scene, CANVAS_ENTITY_WEB_CONTENT, (Vector2){-150.0f, 120.0f}); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1208 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1209 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1210 void Canvas_Scene_Add_Browser_Grid(Canvas_Scene *p_scene) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1211 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1212 Canvas_Scene_Clear(p_scene); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1213 for (int32 row = 0; row < 2; row++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1214 for (int32 column = 0; column < 5; column++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1215 Vector2 position = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1216 -614.0f + (float)column * 248.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1217 -182.0f + (float)row * 188.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1218 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1219 if (!Canvas_Scene_Add(p_scene, CANVAS_ENTITY_WEB_CONTENT, position)) return; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1220 Canvas_Entity *p_entity = |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1221 &p_scene->p_entities[Dowa_Array_Length(p_scene->p_entities) - 1]; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1222 p_entity->size = (Vector2){236.0f, 176.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1223 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1224 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1225 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1226 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1227 boolean Canvas_Scene_Show_Lucide_Gallery( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1228 Canvas_Scene *p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1229 Canvas_Camera *p_camera) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1230 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1231 int32 gallery_index = -1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1232 for (size_t index = 0; index < Dowa_Array_Length(p_scene->p_entities); index++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1233 const Canvas_Entity *p_entity = &p_scene->p_entities[index]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1234 if (p_entity->type == CANVAS_ENTITY_LUCIDE_GALLERY) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1235 gallery_index = (int32)index; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1236 break; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1237 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1238 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1239 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1240 if (gallery_index < 0) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1241 if (!Canvas_Scene_Add( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1242 p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1243 CANVAS_ENTITY_LUCIDE_GALLERY, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1244 (Vector2){1200.0f, -520.0f})) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1245 return FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1246 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1247 gallery_index = (int32)Dowa_Array_Length(p_scene->p_entities) - 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1248 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1249 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1250 Canvas_Entity *p_gallery = &p_scene->p_entities[gallery_index]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1251 p_gallery->removing = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1252 p_scene->selected_index = gallery_index; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1253 Canvas_Camera_Fit_Bounds( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1254 p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1255 (Rectangle){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1256 p_gallery->position.x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1257 p_gallery->position.y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1258 p_gallery->size.x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1259 p_gallery->size.y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1260 }, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1261 320.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1262 56.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1263 56.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1264 56.0f); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1265 return TRUE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1266 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1267 |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1268 static float Canvas_Distance_To_Segment(Vector2 point, Vector2 start, Vector2 end) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1269 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1270 Vector2 segment = {end.x - start.x, end.y - start.y}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1271 Vector2 relative = {point.x - start.x, point.y - start.y}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1272 float length_squared = segment.x * segment.x + segment.y * segment.y; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1273 if (length_squared <= 0.0001f) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1274 return sqrtf(relative.x * relative.x + relative.y * relative.y); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1275 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1276 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1277 float projection = (relative.x * segment.x + relative.y * segment.y) / length_squared; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1278 projection = Canvas_Clamp(projection, 0.0f, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1279 Vector2 closest = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1280 start.x + segment.x * projection, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1281 start.y + segment.y * projection, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1282 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1283 float dx = point.x - closest.x; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1284 float dy = point.y - closest.y; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1285 return sqrtf(dx * dx + dy * dy); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1286 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1287 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1288 static boolean Canvas_Entity_Contains( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1289 const Canvas_Entity *p_entity, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1290 Vector2 point, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1291 float zoom) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1292 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1293 switch (p_entity->type) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1294 case CANVAS_ENTITY_RECTANGLE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1295 return CheckCollisionPointRec( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1296 point, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1297 (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1298 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1299 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1300 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1301 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1302 }) ? TRUE : FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1303 case CANVAS_ENTITY_CIRCLE: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1304 float dx = point.x - p_entity->position.x; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1305 float dy = point.y - p_entity->position.y; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1306 return (dx * dx + dy * dy <= p_entity->size.x * p_entity->size.x) ? TRUE : FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1307 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1308 case CANVAS_ENTITY_LINE: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1309 Vector2 end = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1310 p_entity->position.x + p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1311 p_entity->position.y + p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1312 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1313 return Canvas_Distance_To_Segment(point, p_entity->position, end) <= 10.0f / zoom; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1314 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1315 case CANVAS_ENTITY_TEXT: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1316 case CANVAS_ENTITY_BUTTON: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1317 case CANVAS_ENTITY_TEXT_AREA: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1318 case CANVAS_ENTITY_DROPDOWN: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1319 case CANVAS_ENTITY_ACCORDION: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1320 case CANVAS_ENTITY_CARD: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1321 case CANVAS_ENTITY_CALENDAR: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1322 case CANVAS_ENTITY_SWITCH: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1323 case CANVAS_ENTITY_TABLE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1324 case CANVAS_ENTITY_SCROLL_AREA: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1325 case CANVAS_ENTITY_IMAGE: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1326 float height = p_entity->size.y; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1327 if (p_entity->type == CANVAS_ENTITY_DROPDOWN && p_entity->active) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1328 height += 8.0f + 3.0f * 40.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1329 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1330 return CheckCollisionPointRec( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1331 point, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1332 (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1333 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1334 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1335 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1336 height, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1337 }) ? TRUE : FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1338 } |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1339 case CANVAS_ENTITY_LUCIDE_GALLERY: |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1340 return CheckCollisionPointRec( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1341 point, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1342 (Rectangle){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1343 p_entity->position.x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1344 p_entity->position.y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1345 p_entity->size.x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1346 p_entity->size.y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1347 }) ? TRUE : FALSE; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1348 case CANVAS_ENTITY_NOTIFICATION: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1349 if (p_entity->animation_amount <= 0.01f) return FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1350 return CheckCollisionPointRec( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1351 point, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1352 (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1353 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1354 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1355 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1356 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1357 }) ? TRUE : FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1358 case CANVAS_ENTITY_WEB_CONTENT: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1359 float frame_inset = CANVAS_WEB_FRAME_INSET / zoom; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1360 float resize_handle = CANVAS_WEB_RESIZE_HANDLE / zoom; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1361 Rectangle outer = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1362 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1363 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1364 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1365 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1366 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1367 Rectangle content = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1368 outer.x + frame_inset, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1369 outer.y + frame_inset, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1370 outer.width - frame_inset - resize_handle, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1371 outer.height - frame_inset - resize_handle, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1372 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1373 return CheckCollisionPointRec(point, outer) && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1374 !CheckCollisionPointRec(point, content); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1375 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1376 default: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1377 return FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1378 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1379 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1380 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1381 static boolean Canvas_Web_Resize_Handle_Contains( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1382 const Canvas_Entity *p_entity, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1383 Vector2 point, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1384 float zoom) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1385 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1386 if (p_entity->type != CANVAS_ENTITY_WEB_CONTENT && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1387 p_entity->type != CANVAS_ENTITY_IMAGE) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1388 return FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1389 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1390 float handle_size = CANVAS_WEB_RESIZE_HANDLE / zoom; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1391 return CheckCollisionPointRec( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1392 point, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1393 (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1394 p_entity->position.x + p_entity->size.x - handle_size, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1395 p_entity->position.y + p_entity->size.y - handle_size, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1396 handle_size, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1397 handle_size, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1398 }) ? TRUE : FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1399 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1400 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1401 int32 Canvas_Scene_Pick( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1402 const Canvas_Scene *p_scene, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1403 Vector2 world_pointer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1404 float zoom) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1405 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1406 for (int32 index = (int32)Dowa_Array_Length(p_scene->p_entities) - 1; index >= 0; index--) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1407 const Canvas_Entity *p_entity = &p_scene->p_entities[index]; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1408 if (p_entity->removing) continue; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1409 if (p_entity->type == CANVAS_ENTITY_DROPDOWN && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1410 p_entity->active && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1411 Canvas_Entity_Contains(p_entity, world_pointer, zoom)) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1412 return index; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1413 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1414 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1415 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1416 for (int32 index = (int32)Dowa_Array_Length(p_scene->p_entities) - 1; index >= 0; index--) { |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1417 if (p_scene->p_entities[index].removing) continue; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1418 if (Canvas_Entity_Contains(&p_scene->p_entities[index], world_pointer, zoom)) return index; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1419 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1420 return -1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1421 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1422 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1423 int32 Canvas_Scene_Topmost_Visual( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1424 const Canvas_Scene *p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1425 Vector2 world_pointer, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1426 float zoom) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1427 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1428 for (int32 index = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1429 (int32)Dowa_Array_Length(p_scene->p_entities) - 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1430 index >= 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1431 index--) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1432 const Canvas_Entity *p_entity = &p_scene->p_entities[index]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1433 if (p_entity->removing) continue; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1434 if (p_entity->type == CANVAS_ENTITY_WEB_CONTENT) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1435 if (CheckCollisionPointRec( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1436 world_pointer, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1437 (Rectangle){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1438 p_entity->position.x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1439 p_entity->position.y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1440 p_entity->size.x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1441 p_entity->size.y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1442 })) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1443 return index; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1444 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1445 continue; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1446 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1447 if (Canvas_Entity_Contains(p_entity, world_pointer, zoom)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1448 return index; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1449 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1450 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1451 return -1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1452 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1453 |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1454 static void Canvas_Scene_Activate(Canvas_Scene *p_scene, int32 index, Vector2 world_pointer) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1455 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1456 if (index < 0 || index >= (int32)Dowa_Array_Length(p_scene->p_entities)) return; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1457 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1458 Canvas_Entity *p_entity = &p_scene->p_entities[index]; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1459 switch (p_entity->type) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1460 case CANVAS_ENTITY_BUTTON: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1461 p_entity->active = !p_entity->active; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1462 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1463 case CANVAS_ENTITY_TEXT_AREA: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1464 p_entity->active = TRUE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1465 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1466 case CANVAS_ENTITY_DROPDOWN: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1467 if (world_pointer.y <= p_entity->position.y + p_entity->size.y) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1468 p_entity->active = !p_entity->active; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1469 } else if (p_entity->active) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1470 float options_y = p_entity->position.y + p_entity->size.y + 8.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1471 int32 option = (int32)((world_pointer.y - options_y) / 40.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1472 if (option >= 0 && option < 3) p_entity->value = option; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1473 p_entity->active = FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1474 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1475 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1476 case CANVAS_ENTITY_ACCORDION: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1477 p_entity->active = !p_entity->active; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1478 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1479 case CANVAS_ENTITY_CARD: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1480 case CANVAS_ENTITY_SWITCH: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1481 p_entity->active = !p_entity->active; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1482 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1483 case CANVAS_ENTITY_NOTIFICATION: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1484 float local_x = |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1485 (world_pointer.x - p_entity->position.x) / p_entity->size.x; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1486 if (local_x >= 0.68f) p_entity->active = FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1487 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1488 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1489 case CANVAS_ENTITY_CALENDAR: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1490 float grid_x = p_entity->position.x + 14.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1491 float grid_y = p_entity->position.y + 82.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1492 if (world_pointer.x < grid_x || |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1493 world_pointer.y < grid_y || |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1494 world_pointer.x >= grid_x + 252.0f || |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1495 world_pointer.y >= grid_y + 192.0f) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1496 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1497 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1498 int32 column = (int32)((world_pointer.x - grid_x) / 36.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1499 int32 row = (int32)((world_pointer.y - grid_y) / 32.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1500 int32 day = row * 7 + column - 6 + 1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1501 if (column >= 0 && column < 7 && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1502 row >= 0 && row < 6 && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1503 day >= 1 && day <= 31) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1504 p_entity->value = day; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1505 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1506 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1507 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1508 case CANVAS_ENTITY_TABLE: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1509 float rows_y = p_entity->position.y + 62.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1510 int32 row = (int32)((world_pointer.y - rows_y) / 38.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1511 if (world_pointer.y >= rows_y && row >= 0 && row < 4) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1512 p_entity->value = row; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1513 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1514 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1515 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1516 default: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1517 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1518 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1519 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1520 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1521 static boolean Canvas_Shift_Is_Down(void) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1522 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1523 return IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1524 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1525 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1526 static boolean Canvas_Alt_Is_Down(void) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1527 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1528 return IsKeyDown(KEY_LEFT_ALT) || IsKeyDown(KEY_RIGHT_ALT); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1529 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1530 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1531 static boolean Canvas_Super_Is_Down(void) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1532 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1533 return IsKeyDown(KEY_LEFT_SUPER) || IsKeyDown(KEY_RIGHT_SUPER); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1534 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1535 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1536 static boolean Canvas_Key_Activated(int32 key) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1537 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1538 return IsKeyPressed(key) || IsKeyPressedRepeat(key); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1539 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1540 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1541 static float Canvas_Text_Measure_Range( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1542 Font font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1543 const char *p_text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1544 int32 start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1545 int32 end) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1546 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1547 if (end <= start) return 0.0f; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1548 char buffer[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1549 int32 length = end - start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1550 if (length >= (int32)sizeof(buffer)) length = (int32)sizeof(buffer) - 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1551 memcpy(buffer, p_text + start, (size_t)length); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1552 buffer[length] = '\0'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1553 return MeasureTextEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1554 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1555 buffer, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1556 CANVAS_TEXT_AREA_FONT_SIZE, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1557 CANVAS_TEXT_AREA_SPACING).x; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1558 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1559 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1560 static int32 Canvas_Text_Build_Lines( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1561 Font font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1562 const char *p_text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1563 float max_width, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1564 Canvas_Text_Line *p_lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1565 int32 line_capacity) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1566 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1567 int32 length = (int32)strlen(p_text); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1568 int32 line_count = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1569 int32 start = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1570 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1571 while (start <= length && line_count < line_capacity) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1572 int32 index = start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1573 int32 last_space = -1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1574 float width = 0.0f; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1575 boolean ended_with_newline = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1576 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1577 while (index < length) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1578 if (p_text[index] == '\n') { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1579 ended_with_newline = TRUE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1580 break; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1581 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1582 float character_width = Canvas_Text_Measure_Range( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1583 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1584 p_text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1585 index, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1586 index + 1); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1587 if (width + character_width > max_width && index > start) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1588 if (last_space >= start) index = last_space + 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1589 break; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1590 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1591 width += character_width; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1592 if (p_text[index] == ' ' || p_text[index] == '\t') { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1593 last_space = index; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1594 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1595 index++; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1596 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1597 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1598 int32 end = index; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1599 int32 next = ended_with_newline ? index + 1 : index; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1600 p_lines[line_count++] = (Canvas_Text_Line){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1601 .start = start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1602 .end = end, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1603 .next = next, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1604 .width = Canvas_Text_Measure_Range(font, p_text, start, end), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1605 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1606 if (index >= length) break; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1607 start = next; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1608 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1609 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1610 return line_count; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1611 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1612 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1613 static Rectangle Canvas_Text_Area_Content_Bounds( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1614 const Canvas_Entity *p_entity) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1615 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1616 return (Rectangle){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1617 p_entity->position.x + CANVAS_TEXT_AREA_PADDING, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1618 p_entity->position.y + CANVAS_TEXT_AREA_PADDING, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1619 p_entity->size.x - CANVAS_TEXT_AREA_PADDING * 2.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1620 p_entity->size.y - CANVAS_TEXT_AREA_PADDING * 2.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1621 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1622 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1623 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1624 static int32 Canvas_Text_Line_For_Cursor( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1625 const Canvas_Text_Line *p_lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1626 int32 line_count, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1627 int32 cursor) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1628 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1629 for (int32 line = 0; line < line_count; line++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1630 if (cursor <= p_lines[line].end) return line; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1631 if (line + 1 < line_count && cursor < p_lines[line + 1].start) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1632 return line; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1633 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1634 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1635 return line_count > 0 ? line_count - 1 : 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1636 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1637 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1638 static int32 Canvas_Text_Cursor_At_Point( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1639 Font font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1640 const Canvas_Entity *p_entity, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1641 Vector2 point) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1642 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1643 Canvas_Text_Line lines[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1644 Rectangle content = Canvas_Text_Area_Content_Bounds(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1645 int32 line_count = Canvas_Text_Build_Lines( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1646 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1647 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1648 content.width, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1649 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1650 CANVAS_ENTITY_TEXT_CAPACITY); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1651 int32 line = (int32)floorf( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1652 (point.y - content.y + p_entity->text_scroll_y) / |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1653 CANVAS_TEXT_AREA_LINE_HEIGHT); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1654 if (line < 0) line = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1655 if (line >= line_count) line = line_count - 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1656 float local_x = point.x - content.x; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1657 if (local_x <= 0.0f) return lines[line].start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1658 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1659 for (int32 cursor = lines[line].start; cursor < lines[line].end; cursor++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1660 float left = Canvas_Text_Measure_Range( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1661 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1662 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1663 lines[line].start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1664 cursor); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1665 float right = Canvas_Text_Measure_Range( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1666 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1667 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1668 lines[line].start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1669 cursor + 1); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1670 if (local_x < (left + right) * 0.5f) return cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1671 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1672 return lines[line].end; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1673 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1674 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1675 static void Canvas_Text_Selection_Bounds( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1676 const Canvas_Entity *p_entity, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1677 int32 *p_start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1678 int32 *p_end) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1679 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1680 *p_start = p_entity->text_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1681 *p_end = p_entity->text_selection_anchor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1682 if (*p_start > *p_end) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1683 int32 swap = *p_start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1684 *p_start = *p_end; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1685 *p_end = swap; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1686 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1687 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1688 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1689 static boolean Canvas_Text_Has_Selection(const Canvas_Entity *p_entity) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1690 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1691 return p_entity->text_cursor != p_entity->text_selection_anchor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1692 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1693 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1694 static void Canvas_Text_Delete_Selection(Canvas_Entity *p_entity) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1695 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1696 int32 start = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1697 int32 end = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1698 Canvas_Text_Selection_Bounds(p_entity, &start, &end); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1699 if (start == end) return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1700 size_t length = strlen(p_entity->text); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1701 memmove( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1702 p_entity->text + start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1703 p_entity->text + end, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1704 length - (size_t)end + 1); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1705 p_entity->text_cursor = start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1706 p_entity->text_selection_anchor = start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1707 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1708 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1709 static void Canvas_Text_Insert( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1710 Canvas_Entity *p_entity, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1711 const char *p_text) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1712 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1713 Canvas_Text_Delete_Selection(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1714 size_t length = strlen(p_entity->text); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1715 size_t available = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1716 sizeof(p_entity->text) - length - 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1717 if (available == 0) return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1718 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1719 char filtered[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1720 size_t filtered_length = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1721 for (const char *p_cursor = p_text; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1722 *p_cursor && filtered_length < available; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1723 p_cursor++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1724 if (*p_cursor == '\r') continue; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1725 if (*p_cursor == '\n' || *p_cursor == '\t' || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1726 (*p_cursor >= 32 && *p_cursor <= 126)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1727 filtered[filtered_length++] = *p_cursor == '\t' ? ' ' : *p_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1728 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1729 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1730 if (filtered_length == 0) return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1731 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1732 int32 cursor = p_entity->text_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1733 memmove( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1734 p_entity->text + cursor + filtered_length, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1735 p_entity->text + cursor, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1736 length - (size_t)cursor + 1); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1737 memcpy(p_entity->text + cursor, filtered, filtered_length); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1738 p_entity->text_cursor += (int32)filtered_length; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1739 p_entity->text_selection_anchor = p_entity->text_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1740 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1741 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1742 static int32 Canvas_Text_Previous_Word(const char *p_text, int32 cursor) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1743 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1744 while (cursor > 0 && p_text[cursor - 1] == ' ') cursor--; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1745 while (cursor > 0 && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1746 p_text[cursor - 1] != ' ' && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1747 p_text[cursor - 1] != '\n') { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1748 cursor--; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1749 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1750 return cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1751 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1752 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1753 static int32 Canvas_Text_Next_Word(const char *p_text, int32 cursor) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1754 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1755 int32 length = (int32)strlen(p_text); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1756 while (cursor < length && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1757 p_text[cursor] != ' ' && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1758 p_text[cursor] != '\n') { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1759 cursor++; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1760 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1761 while (cursor < length && p_text[cursor] == ' ') cursor++; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1762 return cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1763 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1764 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1765 static void Canvas_Text_Move_Cursor( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1766 Canvas_Entity *p_entity, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1767 int32 cursor, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1768 boolean extend_selection) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1769 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1770 int32 length = (int32)strlen(p_entity->text); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1771 if (cursor < 0) cursor = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1772 if (cursor > length) cursor = length; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1773 p_entity->text_cursor = cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1774 if (!extend_selection) p_entity->text_selection_anchor = cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1775 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1776 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1777 static void Canvas_Text_Ensure_Cursor_Visible( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1778 Canvas_Entity *p_entity, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1779 Font font) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1780 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1781 Canvas_Text_Line lines[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1782 Rectangle content = Canvas_Text_Area_Content_Bounds(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1783 int32 line_count = Canvas_Text_Build_Lines( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1784 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1785 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1786 content.width, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1787 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1788 CANVAS_ENTITY_TEXT_CAPACITY); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1789 int32 line = Canvas_Text_Line_For_Cursor( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1790 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1791 line_count, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1792 p_entity->text_cursor); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1793 float cursor_top = (float)line * CANVAS_TEXT_AREA_LINE_HEIGHT; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1794 float cursor_bottom = cursor_top + CANVAS_TEXT_AREA_LINE_HEIGHT; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1795 if (cursor_top < p_entity->text_scroll_y) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1796 p_entity->text_scroll_y = cursor_top; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1797 } else if (cursor_bottom > |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1798 p_entity->text_scroll_y + content.height) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1799 p_entity->text_scroll_y = cursor_bottom - content.height; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1800 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1801 float max_scroll = fmaxf( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1802 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1803 (float)line_count * CANVAS_TEXT_AREA_LINE_HEIGHT - content.height); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1804 p_entity->text_scroll_y = Canvas_Clamp( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1805 p_entity->text_scroll_y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1806 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1807 max_scroll); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1808 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1809 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1810 static void Canvas_Text_Update_Keyboard(Canvas_Entity *p_entity, Font font) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1811 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1812 boolean shortcut = Canvas_Control_Is_Down(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1813 boolean control = IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_RIGHT_CONTROL); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1814 boolean super = Canvas_Super_Is_Down(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1815 boolean word_modifier = control || Canvas_Alt_Is_Down(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1816 boolean extend = Canvas_Shift_Is_Down(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1817 int32 length = (int32)strlen(p_entity->text); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1818 int32 original_cursor = p_entity->text_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1819 int32 original_length = length; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1820 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1821 if (shortcut && IsKeyPressed(KEY_A)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1822 p_entity->text_selection_anchor = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1823 p_entity->text_cursor = length; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1824 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1825 if (shortcut && IsKeyPressed(KEY_C) && Canvas_Text_Has_Selection(p_entity)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1826 int32 start = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1827 int32 end = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1828 char selected[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1829 Canvas_Text_Selection_Bounds(p_entity, &start, &end); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1830 memcpy(selected, p_entity->text + start, (size_t)(end - start)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1831 selected[end - start] = '\0'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1832 SetClipboardText(selected); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1833 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1834 if (shortcut && IsKeyPressed(KEY_X) && Canvas_Text_Has_Selection(p_entity)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1835 int32 start = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1836 int32 end = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1837 char selected[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1838 Canvas_Text_Selection_Bounds(p_entity, &start, &end); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1839 memcpy(selected, p_entity->text + start, (size_t)(end - start)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1840 selected[end - start] = '\0'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1841 SetClipboardText(selected); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1842 Canvas_Text_Delete_Selection(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1843 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1844 if (shortcut && IsKeyPressed(KEY_V)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1845 const char *p_clipboard = GetClipboardText(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1846 if (p_clipboard) Canvas_Text_Insert(p_entity, p_clipboard); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1847 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1848 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1849 if (Canvas_Key_Activated(KEY_LEFT)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1850 int32 cursor = p_entity->text_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1851 if (!extend && Canvas_Text_Has_Selection(p_entity)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1852 int32 end = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1853 Canvas_Text_Selection_Bounds(p_entity, &cursor, &end); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1854 } else if (super) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1855 Canvas_Text_Line lines[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1856 Rectangle content = Canvas_Text_Area_Content_Bounds(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1857 int32 count = Canvas_Text_Build_Lines( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1858 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1859 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1860 content.width, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1861 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1862 CANVAS_ENTITY_TEXT_CAPACITY); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1863 cursor = lines[Canvas_Text_Line_For_Cursor( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1864 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1865 count, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1866 cursor)].start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1867 } else { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1868 cursor = word_modifier ? |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1869 Canvas_Text_Previous_Word(p_entity->text, cursor) : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1870 cursor - 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1871 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1872 Canvas_Text_Move_Cursor(p_entity, cursor, extend); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1873 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1874 if (Canvas_Key_Activated(KEY_RIGHT)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1875 int32 cursor = p_entity->text_cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1876 if (!extend && Canvas_Text_Has_Selection(p_entity)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1877 int32 start = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1878 Canvas_Text_Selection_Bounds(p_entity, &start, &cursor); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1879 } else if (super) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1880 Canvas_Text_Line lines[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1881 Rectangle content = Canvas_Text_Area_Content_Bounds(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1882 int32 count = Canvas_Text_Build_Lines( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1883 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1884 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1885 content.width, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1886 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1887 CANVAS_ENTITY_TEXT_CAPACITY); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1888 cursor = lines[Canvas_Text_Line_For_Cursor( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1889 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1890 count, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1891 cursor)].end; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1892 } else { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1893 cursor = word_modifier ? |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1894 Canvas_Text_Next_Word(p_entity->text, cursor) : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1895 cursor + 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1896 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1897 Canvas_Text_Move_Cursor(p_entity, cursor, extend); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1898 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1899 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1900 Canvas_Text_Line lines[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1901 Rectangle content = Canvas_Text_Area_Content_Bounds(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1902 int32 line_count = Canvas_Text_Build_Lines( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1903 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1904 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1905 content.width, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1906 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1907 CANVAS_ENTITY_TEXT_CAPACITY); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1908 int32 current_line = Canvas_Text_Line_For_Cursor( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1909 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1910 line_count, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1911 p_entity->text_cursor); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1912 float cursor_x = Canvas_Text_Measure_Range( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1913 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1914 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1915 lines[current_line].start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1916 p_entity->text_cursor); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1917 if (Canvas_Key_Activated(KEY_UP) || Canvas_Key_Activated(KEY_DOWN)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1918 int32 target_line = current_line + |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1919 (IsKeyDown(KEY_UP) ? -1 : 1); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1920 if (target_line < 0) target_line = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1921 if (target_line >= line_count) target_line = line_count - 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1922 Vector2 target = { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1923 content.x + cursor_x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1924 content.y + |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1925 (float)target_line * CANVAS_TEXT_AREA_LINE_HEIGHT - |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1926 p_entity->text_scroll_y + |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1927 CANVAS_TEXT_AREA_LINE_HEIGHT * 0.5f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1928 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1929 Canvas_Text_Move_Cursor( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1930 p_entity, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1931 Canvas_Text_Cursor_At_Point(font, p_entity, target), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1932 extend); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1933 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1934 if (Canvas_Key_Activated(KEY_HOME)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1935 Canvas_Text_Move_Cursor( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1936 p_entity, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1937 lines[current_line].start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1938 extend); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1939 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1940 if (Canvas_Key_Activated(KEY_END)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1941 Canvas_Text_Move_Cursor( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1942 p_entity, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1943 lines[current_line].end, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1944 extend); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1945 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1946 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1947 if (Canvas_Key_Activated(KEY_BACKSPACE)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1948 if (Canvas_Text_Has_Selection(p_entity)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1949 Canvas_Text_Delete_Selection(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1950 } else if (p_entity->text_cursor > 0) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1951 int32 start = p_entity->text_cursor - 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1952 if (super) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1953 start = lines[Canvas_Text_Line_For_Cursor( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1954 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1955 line_count, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1956 p_entity->text_cursor)].start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1957 } else if (word_modifier) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1958 start = Canvas_Text_Previous_Word( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1959 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1960 p_entity->text_cursor); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1961 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1962 p_entity->text_selection_anchor = start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1963 Canvas_Text_Delete_Selection(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1964 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1965 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1966 if (Canvas_Key_Activated(KEY_DELETE)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1967 if (Canvas_Text_Has_Selection(p_entity)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1968 Canvas_Text_Delete_Selection(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1969 } else if (p_entity->text_cursor < length) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1970 int32 end = p_entity->text_cursor + 1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1971 if (super) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1972 end = lines[Canvas_Text_Line_For_Cursor( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1973 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1974 line_count, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1975 p_entity->text_cursor)].end; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1976 } else if (word_modifier) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1977 end = Canvas_Text_Next_Word( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1978 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1979 p_entity->text_cursor); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1980 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1981 p_entity->text_selection_anchor = end; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1982 Canvas_Text_Delete_Selection(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1983 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1984 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1985 if (IsKeyPressed(KEY_ENTER)) Canvas_Text_Insert(p_entity, "\n"); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1986 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1987 int32 codepoint = GetCharPressed(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1988 while (codepoint > 0) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1989 if (!shortcut && codepoint >= 32 && codepoint <= 126) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1990 char inserted[2] = {(char)codepoint, '\0'}; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1991 Canvas_Text_Insert(p_entity, inserted); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1992 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1993 codepoint = GetCharPressed(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1994 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1995 if (p_entity->text_cursor != original_cursor || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1996 (int32)strlen(p_entity->text) != original_length) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1997 Canvas_Text_Ensure_Cursor_Visible(p_entity, font); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1998 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
1999 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2000 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2001 static void Canvas_Scene_Update_Text_Input( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2002 Canvas_Scene *p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2003 Font font) |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2004 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2005 if (p_scene->selected_index < 0 || |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2006 p_scene->selected_index >= (int32)Dowa_Array_Length(p_scene->p_entities)) return; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2007 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2008 Canvas_Entity *p_entity = &p_scene->p_entities[p_scene->selected_index]; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2009 if ((p_entity->type != CANVAS_ENTITY_TEXT_AREA && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2010 p_entity->type != CANVAS_ENTITY_LUCIDE_GALLERY) || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2011 !p_entity->active) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2012 return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2013 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2014 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2015 if (p_entity->type == CANVAS_ENTITY_TEXT_AREA) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2016 Canvas_Text_Update_Keyboard(p_entity, font); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2017 return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2018 } |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2019 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2020 size_t length = strlen(p_entity->text); |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2021 boolean changed = FALSE; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2022 int32 codepoint = GetCharPressed(); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2023 while (codepoint > 0) { |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2024 size_t input_capacity = p_entity->type == CANVAS_ENTITY_LUCIDE_GALLERY ? |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2025 64 : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2026 sizeof(p_entity->text); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2027 if (codepoint >= 32 && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2028 codepoint <= 126 && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2029 length + 1 < input_capacity) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2030 p_entity->text[length++] = p_entity->type == CANVAS_ENTITY_LUCIDE_GALLERY ? |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2031 Canvas_Ascii_Lower((char)codepoint) : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2032 (char)codepoint; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2033 p_entity->text[length] = '\0'; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2034 changed = TRUE; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2035 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2036 codepoint = GetCharPressed(); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2037 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2038 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2039 if (p_entity->type == CANVAS_ENTITY_TEXT_AREA && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2040 IsKeyPressed(KEY_ENTER) && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2041 length + 1 < sizeof(p_entity->text)) { |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2042 p_entity->text[length++] = '\n'; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2043 p_entity->text[length] = '\0'; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2044 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2045 if (IsKeyPressed(KEY_BACKSPACE) && length > 0) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2046 p_entity->text[length - 1] = '\0'; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2047 changed = TRUE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2048 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2049 if (changed && p_entity->type == CANVAS_ENTITY_LUCIDE_GALLERY) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2050 p_entity->value = 0; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2051 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2052 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2053 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2054 static void Canvas_Entity_Capture_Pin( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2055 Canvas_Entity *p_entity, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2056 const Canvas_Camera *p_camera) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2057 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2058 p_entity->pinned_screen_position = |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2059 Canvas_Camera_World_To_Screen(p_camera, p_entity->position); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2060 p_entity->pinned_screen_size = (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2061 p_entity->size.x * p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2062 p_entity->size.y * p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2063 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2064 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2065 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2066 static void Canvas_Scene_Adjust_Index_After_Removal( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2067 int32 *p_index, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2068 int32 removed_index) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2069 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2070 if (*p_index == removed_index) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2071 *p_index = -1; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2072 } else if (*p_index > removed_index) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2073 (*p_index)--; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2074 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2075 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2076 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2077 static void Canvas_Scene_Update_Lifecycle(Canvas_Scene *p_scene) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2078 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2079 float follow = 1.0f - expf(-GetFrameTime() * 9.0f); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2080 size_t index = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2081 while (index < Dowa_Array_Length(p_scene->p_entities)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2082 Canvas_Entity *p_entity = &p_scene->p_entities[index]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2083 float target = p_entity->removing ? 0.0f : 1.0f; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2084 p_entity->visibility_amount += |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2085 (target - p_entity->visibility_amount) * follow; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2086 p_entity->visibility_amount = Canvas_Clamp( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2087 p_entity->visibility_amount, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2088 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2089 1.0f); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2090 float chrome_target = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2091 p_entity->type == CANVAS_ENTITY_WEB_CONTENT && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2092 (int32)index == p_scene->selected_index && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2093 !p_entity->removing ? |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2094 1.0f : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2095 0.0f; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2096 float chrome_follow = 1.0f - expf(-GetFrameTime() * 12.0f); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2097 p_entity->web_chrome_amount += |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2098 (chrome_target - p_entity->web_chrome_amount) * chrome_follow; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2099 p_entity->web_chrome_amount = Canvas_Clamp( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2100 p_entity->web_chrome_amount, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2101 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2102 1.0f); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2103 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2104 if (p_entity->removing && p_entity->visibility_amount <= 0.01f) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2105 int32 removed_index = (int32)index; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2106 size_t length = Dowa_Array_Length(p_scene->p_entities); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2107 for (size_t move = index + 1; move < length; move++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2108 p_scene->p_entities[move - 1] = p_scene->p_entities[move]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2109 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2110 (void)Dowa_Array_Pop(p_scene->p_entities); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2111 Canvas_Scene_Adjust_Index_After_Removal( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2112 &p_scene->selected_index, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2113 removed_index); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2114 Canvas_Scene_Adjust_Index_After_Removal( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2115 &p_scene->pressed_index, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2116 removed_index); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2117 Canvas_Scene_Adjust_Index_After_Removal( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2118 &p_scene->hover_index, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2119 removed_index); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2120 continue; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2121 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2122 index++; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2123 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2124 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2125 |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2126 static void Canvas_Scene_Update_Animations( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2127 Canvas_Scene *p_scene, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2128 const Canvas_Camera *p_camera) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2129 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2130 for (size_t index = 0; index < Dowa_Array_Length(p_scene->p_entities); index++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2131 Canvas_Entity *p_entity = &p_scene->p_entities[index]; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2132 if (p_entity->type != CANVAS_ENTITY_ACCORDION && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2133 p_entity->type != CANVAS_ENTITY_SWITCH) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2134 continue; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2135 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2136 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2137 float target = p_entity->active ? 1.0f : 0.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2138 float speed = p_entity->type == CANVAS_ENTITY_SWITCH ? 7.0f : 4.5f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2139 float step = GetFrameTime() * speed; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2140 if (p_entity->animation_amount < target) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2141 p_entity->animation_amount = fminf( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2142 target, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2143 p_entity->animation_amount + step); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2144 } else if (p_entity->animation_amount > target) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2145 p_entity->animation_amount = fmaxf( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2146 target, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2147 p_entity->animation_amount - step); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2148 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2149 float amount = p_entity->animation_amount; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2150 float eased = amount * amount * (3.0f - 2.0f * amount); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2151 if (p_entity->type == CANVAS_ENTITY_SWITCH) continue; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2152 if (p_entity->pinned) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2153 float pinned_scale = p_entity->pinned_screen_size.x / 300.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2154 p_entity->pinned_screen_size.y = |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2155 (56.0f + 108.0f * eased) * pinned_scale; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2156 p_entity->size.y = |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2157 p_entity->pinned_screen_size.y / p_camera->zoom; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2158 } else { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2159 p_entity->size.y = 56.0f + 108.0f * eased; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2160 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2161 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2162 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2163 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2164 boolean Canvas_Scene_Update_Interaction( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2165 Canvas_Scene *p_scene, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2166 const Canvas_Camera *p_camera, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2167 Font font, |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2168 boolean block_pointer_input) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2169 { |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2170 Canvas_Scene_Update_Lifecycle(p_scene); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2171 Canvas_Scene_Update_Text_Input(p_scene, font); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2172 Canvas_Scene_Update_Animations(p_scene, p_camera); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2173 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2174 if (block_pointer_input && p_scene->pressed_index < 0) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2175 return FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2176 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2177 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2178 Vector2 world_pointer = Canvas_Camera_Screen_To_World(p_camera, GetMousePosition()); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2179 p_scene->hover_index = block_pointer_input ? |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2180 -1 : |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2181 Canvas_Scene_Pick(p_scene, world_pointer, p_camera->zoom); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2182 boolean consumed_scroll = FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2183 if (p_scene->hover_index >= 0) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2184 Canvas_Entity *p_hovered = &p_scene->p_entities[p_scene->hover_index]; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2185 boolean control_down = Canvas_Control_Is_Down(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2186 if (p_hovered->type == CANVAS_ENTITY_TEXT_AREA && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2187 p_hovered->active && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2188 !control_down) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2189 float wheel = GetMouseWheelMove(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2190 if (wheel != 0.0f) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2191 Canvas_Text_Line lines[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2192 Rectangle content = Canvas_Text_Area_Content_Bounds(p_hovered); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2193 int32 line_count = Canvas_Text_Build_Lines( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2194 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2195 p_hovered->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2196 content.width, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2197 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2198 CANVAS_ENTITY_TEXT_CAPACITY); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2199 float max_scroll = fmaxf( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2200 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2201 (float)line_count * CANVAS_TEXT_AREA_LINE_HEIGHT - |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2202 content.height); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2203 p_hovered->text_scroll_y = Canvas_Clamp( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2204 p_hovered->text_scroll_y - |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2205 wheel * CANVAS_TEXT_AREA_LINE_HEIGHT * 2.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2206 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2207 max_scroll); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2208 consumed_scroll = TRUE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2209 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2210 } else if (p_hovered->type == CANVAS_ENTITY_SCROLL_AREA && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2211 !control_down) { |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2212 float wheel = GetMouseWheelMove(); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2213 if (wheel != 0.0f) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2214 p_hovered->value = (int32)Canvas_Clamp( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2215 (float)p_hovered->value - wheel * 28.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2216 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2217 240.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2218 consumed_scroll = TRUE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2219 } |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2220 } else if (p_hovered->type == CANVAS_ENTITY_LUCIDE_GALLERY && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2221 !control_down) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2222 float wheel = GetMouseWheelMove(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2223 if (wheel != 0.0f) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2224 p_hovered->value = (int32)Canvas_Clamp( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2225 (float)p_hovered->value - wheel * 72.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2226 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2227 Canvas_Lucide_Max_Scroll(p_hovered)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2228 consumed_scroll = TRUE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2229 } |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2230 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2231 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2232 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2233 float animation_step = Canvas_Clamp(GetFrameTime() * 12.0f, 0.0f, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2234 for (size_t index = 0; index < Dowa_Array_Length(p_scene->p_entities); index++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2235 float target = ((int32)index == p_scene->hover_index) ? 1.0f : 0.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2236 Canvas_Entity *p_entity = &p_scene->p_entities[index]; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2237 p_entity->hover_amount += (target - p_entity->hover_amount) * animation_step; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2238 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2239 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2240 if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && !IsKeyDown(KEY_SPACE)) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2241 p_scene->selected_index = Canvas_Scene_Pick(p_scene, world_pointer, p_camera->zoom); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2242 for (size_t index = 0; index < Dowa_Array_Length(p_scene->p_entities); index++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2243 if ((int32)index != p_scene->selected_index && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2244 p_scene->p_entities[index].type == CANVAS_ENTITY_TEXT_AREA) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2245 p_scene->p_entities[index].active = FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2246 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2247 if ((int32)index != p_scene->selected_index && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2248 p_scene->p_entities[index].type == CANVAS_ENTITY_DROPDOWN) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2249 p_scene->p_entities[index].active = FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2250 } |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2251 if ((int32)index != p_scene->selected_index && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2252 p_scene->p_entities[index].type == CANVAS_ENTITY_LUCIDE_GALLERY) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2253 p_scene->p_entities[index].active = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2254 } |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2255 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2256 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2257 if (p_scene->selected_index >= 0) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2258 Canvas_Entity *p_entity = &p_scene->p_entities[p_scene->selected_index]; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2259 if (p_entity->type == CANVAS_ENTITY_LUCIDE_GALLERY) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2260 p_entity->active = CheckCollisionPointRec( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2261 world_pointer, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2262 Canvas_Lucide_Search_Bounds(p_entity)) ? TRUE : FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2263 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2264 p_scene->selecting_text = FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2265 if (p_entity->type == CANVAS_ENTITY_TEXT_AREA) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2266 boolean inside_content = CheckCollisionPointRec( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2267 world_pointer, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2268 Canvas_Text_Area_Content_Bounds(p_entity)) ? TRUE : FALSE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2269 p_entity->active = inside_content; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2270 if (inside_content) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2271 int32 cursor = Canvas_Text_Cursor_At_Point( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2272 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2273 p_entity, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2274 world_pointer); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2275 p_entity->text_cursor = cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2276 if (!Canvas_Shift_Is_Down()) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2277 p_entity->text_selection_anchor = cursor; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2278 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2279 p_scene->selecting_text = TRUE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2280 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2281 } |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2282 p_scene->pressed_index = p_scene->selected_index; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2283 p_scene->dragging = FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2284 p_scene->resizing = Canvas_Web_Resize_Handle_Contains( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2285 p_entity, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2286 world_pointer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2287 p_camera->zoom); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2288 p_scene->pointer_start = world_pointer; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2289 p_scene->entity_start = p_entity->position; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2290 p_scene->entity_size_start = p_entity->size; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2291 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2292 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2293 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2294 if (p_scene->pressed_index >= 0 && IsMouseButtonDown(MOUSE_BUTTON_LEFT)) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2295 Vector2 delta = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2296 world_pointer.x - p_scene->pointer_start.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2297 world_pointer.y - p_scene->pointer_start.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2298 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2299 float screen_distance_squared = |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2300 (delta.x * p_camera->zoom) * (delta.x * p_camera->zoom) + |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2301 (delta.y * p_camera->zoom) * (delta.y * p_camera->zoom); |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2302 Canvas_Entity *p_pressed = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2303 &p_scene->p_entities[p_scene->pressed_index]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2304 if (p_scene->selecting_text && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2305 p_pressed->type == CANVAS_ENTITY_TEXT_AREA) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2306 p_pressed->text_cursor = Canvas_Text_Cursor_At_Point( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2307 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2308 p_pressed, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2309 world_pointer); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2310 Canvas_Text_Ensure_Cursor_Visible(p_pressed, font); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2311 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2312 if (screen_distance_squared >= 16.0f && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2313 !p_scene->selecting_text && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2314 !(p_pressed->type == CANVAS_ENTITY_LUCIDE_GALLERY && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2315 p_pressed->active)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2316 p_scene->dragging = TRUE; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2317 } |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2318 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2319 if (p_scene->dragging) { |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2320 Canvas_Entity *p_entity = p_pressed; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2321 if (p_entity->type == CANVAS_ENTITY_NOTIFICATION) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2322 p_scene->dragging = FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2323 } else if (p_scene->resizing) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2324 p_entity->size = (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2325 fmaxf(CANVAS_WEB_MIN_WIDTH, p_scene->entity_size_start.x + delta.x), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2326 fmaxf(CANVAS_WEB_MIN_HEIGHT, p_scene->entity_size_start.y + delta.y), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2327 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2328 } else { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2329 p_entity->position = (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2330 p_scene->entity_start.x + delta.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2331 p_scene->entity_start.y + delta.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2332 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2333 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2334 if (p_entity->pinned) Canvas_Entity_Capture_Pin(p_entity, p_camera); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2335 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2336 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2337 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2338 if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2339 if (p_scene->pressed_index >= 0 && !p_scene->dragging) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2340 Canvas_Entity *p_entity = &p_scene->p_entities[p_scene->pressed_index]; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2341 if (p_entity->type != CANVAS_ENTITY_TEXT_AREA) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2342 Canvas_Scene_Activate( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2343 p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2344 p_scene->pressed_index, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2345 world_pointer); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2346 } |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2347 if (p_entity->pinned) Canvas_Entity_Capture_Pin(p_entity, p_camera); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2348 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2349 p_scene->pressed_index = -1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2350 p_scene->dragging = FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2351 p_scene->resizing = FALSE; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2352 p_scene->selecting_text = FALSE; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2353 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2354 return p_scene->pressed_index >= 0 || consumed_scroll; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2355 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2356 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2357 boolean Canvas_Scene_Is_Text_Editing(const Canvas_Scene *p_scene) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2358 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2359 if (p_scene->selected_index < 0 || |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2360 p_scene->selected_index >= (int32)Dowa_Array_Length(p_scene->p_entities)) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2361 return FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2362 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2363 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2364 const Canvas_Entity *p_entity = &p_scene->p_entities[p_scene->selected_index]; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2365 return ((p_entity->type == CANVAS_ENTITY_TEXT_AREA || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2366 p_entity->type == CANVAS_ENTITY_LUCIDE_GALLERY) && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2367 p_entity->active) ? TRUE : FALSE; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2368 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2369 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2370 void Canvas_Scene_Toggle_Selected_Pin( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2371 Canvas_Scene *p_scene, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2372 const Canvas_Camera *p_camera) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2373 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2374 if (p_scene->selected_index < 0 || |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2375 p_scene->selected_index >= (int32)Dowa_Array_Length(p_scene->p_entities)) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2376 return; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2377 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2378 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2379 Canvas_Entity *p_entity = &p_scene->p_entities[p_scene->selected_index]; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2380 if (p_entity->type == CANVAS_ENTITY_NOTIFICATION) return; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2381 p_entity->pinned = !p_entity->pinned; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2382 if (p_entity->pinned) Canvas_Entity_Capture_Pin(p_entity, p_camera); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2383 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2384 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2385 void Canvas_Scene_Update_Notification_Stack( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2386 Canvas_Scene *p_scene, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2387 const Canvas_Camera *p_camera) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2388 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2389 const float width = 384.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2390 const float height = 82.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2391 const float margin = 24.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2392 const float gap = 12.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2393 float delta = GetFrameTime(); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2394 float follow = 1.0f - expf(-delta * 16.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2395 Vector2 mouse = GetMousePosition(); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2396 boolean hovered = FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2397 int32 active_count = 0; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2398 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2399 for (size_t index = 0; index < Dowa_Array_Length(p_scene->p_entities); index++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2400 Canvas_Entity *p_entity = &p_scene->p_entities[index]; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2401 if (p_entity->type != CANVAS_ENTITY_NOTIFICATION) continue; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2402 float visibility_target = p_entity->active ? 1.0f : 0.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2403 if (p_entity->animation_amount < visibility_target) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2404 p_entity->animation_amount = fminf( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2405 visibility_target, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2406 p_entity->animation_amount + delta * 7.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2407 } else if (p_entity->animation_amount > visibility_target) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2408 p_entity->animation_amount = fmaxf( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2409 visibility_target, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2410 p_entity->animation_amount - delta * 7.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2411 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2412 if (p_entity->active) active_count++; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2413 if (p_entity->screen_space_initialized && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2414 p_entity->animation_amount > 0.01f && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2415 CheckCollisionPointRec( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2416 mouse, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2417 (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2418 p_entity->pinned_screen_position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2419 p_entity->pinned_screen_position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2420 p_entity->pinned_screen_size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2421 p_entity->pinned_screen_size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2422 })) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2423 hovered = TRUE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2424 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2425 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2426 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2427 if (!hovered && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2428 active_count > 1 && |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2429 p_scene->notification_stack_amount > 0.08f) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2430 float right = (float)p_camera->viewport_width - margin; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2431 float bottom = (float)p_camera->viewport_height - margin; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2432 float top = bottom - (float)active_count * height - |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2433 (float)(active_count - 1) * gap; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2434 hovered = CheckCollisionPointRec( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2435 mouse, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2436 (Rectangle){right - width, top, width, bottom - top}) ? TRUE : FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2437 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2438 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2439 float stack_target = hovered ? 1.0f : 0.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2440 p_scene->notification_stack_amount += |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2441 (stack_target - p_scene->notification_stack_amount) * follow; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2442 float amount = p_scene->notification_stack_amount; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2443 float eased = amount * amount * (3.0f - 2.0f * amount); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2444 int32 rank = 0; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2445 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2446 for (size_t index = 0; index < Dowa_Array_Length(p_scene->p_entities); index++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2447 Canvas_Entity *p_entity = &p_scene->p_entities[index]; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2448 if (p_entity->type != CANVAS_ENTITY_NOTIFICATION || |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2449 p_entity->animation_amount <= 0.01f) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2450 continue; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2451 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2452 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2453 Vector2 target_position = p_entity->pinned_screen_position; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2454 Vector2 target_size = {width, height}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2455 if (p_entity->active) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2456 int32 depth = active_count - rank - 1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2457 Vector2 collapsed_position = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2458 (float)p_camera->viewport_width - margin - width + (float)depth * 8.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2459 (float)p_camera->viewport_height - margin - height - (float)depth * 8.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2460 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2461 Vector2 expanded_position = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2462 (float)p_camera->viewport_width - margin - width, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2463 (float)p_camera->viewport_height - margin - height - |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2464 (float)depth * (height + gap), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2465 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2466 target_position = (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2467 collapsed_position.x + |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2468 (expanded_position.x - collapsed_position.x) * eased, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2469 collapsed_position.y + |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2470 (expanded_position.y - collapsed_position.y) * eased, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2471 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2472 target_size.x = width - (float)depth * 12.0f * (1.0f - eased); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2473 rank++; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2474 } else { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2475 target_position.x = (float)p_camera->viewport_width + 20.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2476 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2477 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2478 if (!p_entity->screen_space_initialized) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2479 p_entity->pinned_screen_position = target_position; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2480 p_entity->pinned_screen_size = target_size; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2481 p_entity->screen_space_initialized = TRUE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2482 } else { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2483 p_entity->pinned_screen_position.x += |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2484 (target_position.x - p_entity->pinned_screen_position.x) * follow; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2485 p_entity->pinned_screen_position.y += |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2486 (target_position.y - p_entity->pinned_screen_position.y) * follow; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2487 p_entity->pinned_screen_size.x += |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2488 (target_size.x - p_entity->pinned_screen_size.x) * follow; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2489 p_entity->pinned_screen_size.y += |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2490 (target_size.y - p_entity->pinned_screen_size.y) * follow; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2491 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2492 p_entity->position = Canvas_Camera_Screen_To_World( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2493 p_camera, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2494 p_entity->pinned_screen_position); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2495 p_entity->size = (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2496 p_entity->pinned_screen_size.x / p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2497 p_entity->pinned_screen_size.y / p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2498 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2499 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2500 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2501 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2502 void Canvas_Scene_Sync_Pinned( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2503 Canvas_Scene *p_scene, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2504 const Canvas_Camera *p_camera) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2505 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2506 for (size_t index = 0; index < Dowa_Array_Length(p_scene->p_entities); index++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2507 Canvas_Entity *p_entity = &p_scene->p_entities[index]; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2508 if (!p_entity->pinned) continue; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2509 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2510 Vector2 min_offset = {0.0f, 0.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2511 Vector2 max_offset = p_entity->pinned_screen_size; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2512 if (p_entity->type == CANVAS_ENTITY_CIRCLE) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2513 min_offset = (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2514 -p_entity->pinned_screen_size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2515 -p_entity->pinned_screen_size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2516 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2517 max_offset = (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2518 p_entity->pinned_screen_size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2519 p_entity->pinned_screen_size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2520 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2521 } else if (p_entity->type == CANVAS_ENTITY_LINE) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2522 min_offset = (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2523 fminf(0.0f, p_entity->pinned_screen_size.x), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2524 fminf(0.0f, p_entity->pinned_screen_size.y), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2525 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2526 max_offset = (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2527 fmaxf(0.0f, p_entity->pinned_screen_size.x), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2528 fmaxf(0.0f, p_entity->pinned_screen_size.y), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2529 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2530 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2531 float min_x = -min_offset.x; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2532 float min_y = -min_offset.y; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2533 float max_x = fmaxf( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2534 min_x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2535 (float)p_camera->viewport_width - max_offset.x); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2536 float max_y = fmaxf( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2537 min_y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2538 (float)p_camera->viewport_height - max_offset.y); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2539 p_entity->pinned_screen_position.x = Canvas_Clamp( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2540 p_entity->pinned_screen_position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2541 min_x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2542 max_x); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2543 p_entity->pinned_screen_position.y = Canvas_Clamp( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2544 p_entity->pinned_screen_position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2545 min_y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2546 max_y); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2547 p_entity->position = Canvas_Camera_Screen_To_World( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2548 p_camera, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2549 p_entity->pinned_screen_position); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2550 p_entity->size = (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2551 p_entity->pinned_screen_size.x / p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2552 p_entity->pinned_screen_size.y / p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2553 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2554 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2555 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2556 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2557 void Canvas_Update_Camera_Input( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2558 Canvas_Camera *p_camera, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2559 boolean block_pointer_input, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2560 boolean block_keyboard_input) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2561 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2562 boolean keyboard_pan = IsKeyDown(KEY_SPACE); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2563 boolean pointer_pan = IsMouseButtonDown(MOUSE_BUTTON_MIDDLE) || |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2564 (keyboard_pan && IsMouseButtonDown(MOUSE_BUTTON_LEFT)); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2565 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2566 if (pointer_pan && !block_pointer_input) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2567 Canvas_Camera_Pan(p_camera, GetMouseDelta()); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2568 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2569 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2570 if (!block_pointer_input) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2571 float wheel = GetMouseWheelMove(); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2572 if (wheel != 0.0f) { |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2573 if (Canvas_Control_Is_Down()) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2574 Canvas_Camera_Zoom_At( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2575 p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2576 GetMousePosition(), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2577 powf(1.15f, wheel)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2578 } else { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2579 Canvas_Camera_Pan( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2580 p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2581 (Vector2){0.0f, wheel * 72.0f}); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2582 } |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2583 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2584 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2585 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2586 if (!block_keyboard_input) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2587 Vector2 keyboard_delta = {0.0f, 0.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2588 float speed = 600.0f * GetFrameTime(); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2589 if (IsKeyDown(KEY_A) || IsKeyDown(KEY_LEFT)) keyboard_delta.x += speed; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2590 if (IsKeyDown(KEY_D) || IsKeyDown(KEY_RIGHT)) keyboard_delta.x -= speed; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2591 if (IsKeyDown(KEY_W) || IsKeyDown(KEY_UP)) keyboard_delta.y += speed; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2592 if (IsKeyDown(KEY_S) || IsKeyDown(KEY_DOWN)) keyboard_delta.y -= speed; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2593 Canvas_Camera_Pan(p_camera, keyboard_delta); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2594 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2595 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2596 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2597 static void Canvas_Draw_Grid( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2598 const Canvas_Camera *p_camera, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2599 const Canvas_Theme *p_theme) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2600 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2601 Rectangle bounds = Canvas_Camera_Viewport_Bounds(p_camera); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2602 float spacing = Canvas_Grid_Spacing(p_camera->zoom); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2603 int32 first_x = (int32)floorf(bounds.x / spacing); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2604 int32 last_x = (int32)ceilf((bounds.x + bounds.width) / spacing); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2605 int32 first_y = (int32)floorf(bounds.y / spacing); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2606 int32 last_y = (int32)ceilf((bounds.y + bounds.height) / spacing); |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2607 Color minor = Canvas_Color_Fade(p_theme->border, 0.36f); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2608 Color major = Canvas_Color_Fade(p_theme->border, 0.65f); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2609 Color axis = p_theme->text_muted; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2610 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2611 for (int32 index = first_x; index <= last_x; index++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2612 float x = (float)index * spacing; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2613 Color color = (index == 0) ? axis : ((index % 4 == 0) ? major : minor); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2614 DrawLineV( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2615 (Vector2){x, bounds.y}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2616 (Vector2){x, bounds.y + bounds.height}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2617 color); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2618 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2619 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2620 for (int32 index = first_y; index <= last_y; index++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2621 float y = (float)index * spacing; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2622 Color color = (index == 0) ? axis : ((index % 4 == 0) ? major : minor); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2623 DrawLineV( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2624 (Vector2){bounds.x, y}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2625 (Vector2){bounds.x + bounds.width, y}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2626 color); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2627 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2628 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2629 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2630 static void Canvas_Draw_Selection( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2631 const Canvas_Entity *p_entity, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2632 float zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2633 Color selection) |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2634 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2635 float line = 2.0f / zoom; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2636 float padding = 7.0f / zoom; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2637 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2638 switch (p_entity->type) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2639 case CANVAS_ENTITY_RECTANGLE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2640 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2641 (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2642 p_entity->position.x - padding, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2643 p_entity->position.y - padding, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2644 p_entity->size.x + padding * 2.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2645 p_entity->size.y + padding * 2.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2646 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2647 0.14f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2648 12, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2649 line, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2650 selection); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2651 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2652 case CANVAS_ENTITY_CIRCLE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2653 DrawCircleLinesV( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2654 p_entity->position, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2655 p_entity->size.x + padding, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2656 selection); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2657 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2658 case CANVAS_ENTITY_LINE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2659 DrawLineEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2660 p_entity->position, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2661 (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2662 p_entity->position.x + p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2663 p_entity->position.y + p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2664 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2665 10.0f / zoom, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2666 Canvas_Color_Fade(selection, 0.35f)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2667 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2668 case CANVAS_ENTITY_TEXT: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2669 case CANVAS_ENTITY_BUTTON: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2670 case CANVAS_ENTITY_TEXT_AREA: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2671 case CANVAS_ENTITY_DROPDOWN: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2672 case CANVAS_ENTITY_ACCORDION: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2673 case CANVAS_ENTITY_CARD: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2674 case CANVAS_ENTITY_CALENDAR: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2675 case CANVAS_ENTITY_SWITCH: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2676 case CANVAS_ENTITY_TABLE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2677 case CANVAS_ENTITY_NOTIFICATION: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2678 case CANVAS_ENTITY_SCROLL_AREA: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2679 case CANVAS_ENTITY_IMAGE: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2680 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2681 (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2682 p_entity->position.x - padding, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2683 p_entity->position.y - padding, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2684 p_entity->size.x + padding * 2.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2685 p_entity->size.y + padding * 2.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2686 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2687 0.18f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2688 10, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2689 line, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2690 selection); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2691 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2692 } |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2693 case CANVAS_ENTITY_LUCIDE_GALLERY: { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2694 DrawRectangleRoundedLinesEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2695 (Rectangle){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2696 p_entity->position.x - padding, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2697 p_entity->position.y - padding, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2698 p_entity->size.x + padding * 2.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2699 p_entity->size.y + padding * 2.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2700 }, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2701 0.04f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2702 10, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2703 line, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2704 selection); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2705 break; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2706 } |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2707 case CANVAS_ENTITY_WEB_CONTENT: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2708 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2709 (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2710 p_entity->position.x - padding, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2711 p_entity->position.y - padding, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2712 p_entity->size.x + padding * 2.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2713 p_entity->size.y + padding * 2.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2714 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2715 0.04f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2716 10, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2717 line, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2718 selection); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2719 DrawRectangleRec( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2720 (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2721 p_entity->position.x + p_entity->size.x - |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2722 CANVAS_WEB_RESIZE_HANDLE / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2723 p_entity->position.y + p_entity->size.y - |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2724 CANVAS_WEB_RESIZE_HANDLE / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2725 CANVAS_WEB_RESIZE_HANDLE / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2726 CANVAS_WEB_RESIZE_HANDLE / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2727 }, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2728 Canvas_Color_Fade(selection, 0.18f)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2729 DrawLineEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2730 (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2731 p_entity->position.x + p_entity->size.x - 11.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2732 p_entity->position.y + p_entity->size.y - 4.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2733 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2734 (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2735 p_entity->position.x + p_entity->size.x - 4.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2736 p_entity->position.y + p_entity->size.y - 11.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2737 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2738 1.5f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2739 selection); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2740 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2741 default: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2742 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2743 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2744 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2745 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2746 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2747 static void Canvas_Draw_Text_Area_Content( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2748 const Canvas_Entity *p_entity, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2749 Font font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2750 const Canvas_Theme *p_theme) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2751 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2752 Rectangle content = Canvas_Text_Area_Content_Bounds(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2753 if (!p_entity->text[0]) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2754 DrawTextEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2755 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2756 "Write something...", |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2757 (Vector2){content.x, content.y}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2758 CANVAS_TEXT_AREA_FONT_SIZE, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2759 CANVAS_TEXT_AREA_SPACING, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2760 p_theme->text_muted); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2761 if (p_entity->active && fmod(GetTime(), 1.0) < 0.55) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2762 DrawLineEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2763 (Vector2){content.x, content.y}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2764 (Vector2){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2765 content.x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2766 content.y + CANVAS_TEXT_AREA_FONT_SIZE + 2.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2767 }, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2768 1.5f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2769 p_theme->accent); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2770 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2771 return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2772 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2773 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2774 Canvas_Text_Line lines[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2775 int32 line_count = Canvas_Text_Build_Lines( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2776 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2777 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2778 content.width, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2779 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2780 CANVAS_ENTITY_TEXT_CAPACITY); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2781 int32 selection_start = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2782 int32 selection_end = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2783 Canvas_Text_Selection_Bounds( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2784 p_entity, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2785 &selection_start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2786 &selection_end); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2787 int32 cursor_line = Canvas_Text_Line_For_Cursor( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2788 lines, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2789 line_count, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2790 p_entity->text_cursor); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2791 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2792 for (int32 line = 0; line < line_count; line++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2793 float y = content.y + |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2794 (float)line * CANVAS_TEXT_AREA_LINE_HEIGHT - |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2795 p_entity->text_scroll_y; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2796 if (y < content.y || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2797 y + CANVAS_TEXT_AREA_FONT_SIZE > content.y + content.height) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2798 continue; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2799 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2800 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2801 int32 line_selection_start = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2802 selection_start > lines[line].start ? |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2803 selection_start : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2804 lines[line].start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2805 int32 line_selection_end = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2806 selection_end < lines[line].end ? |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2807 selection_end : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2808 lines[line].end; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2809 if (line_selection_end > line_selection_start) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2810 float selection_x = content.x + Canvas_Text_Measure_Range( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2811 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2812 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2813 lines[line].start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2814 line_selection_start); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2815 float selection_width = Canvas_Text_Measure_Range( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2816 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2817 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2818 line_selection_start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2819 line_selection_end); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2820 DrawRectangleRec( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2821 (Rectangle){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2822 selection_x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2823 y - 1.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2824 fmaxf(selection_width, 2.0f), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2825 CANVAS_TEXT_AREA_LINE_HEIGHT, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2826 }, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2827 p_theme->accent_soft); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2828 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2829 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2830 char line_text[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2831 int32 line_length = lines[line].end - lines[line].start; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2832 memcpy( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2833 line_text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2834 p_entity->text + lines[line].start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2835 (size_t)line_length); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2836 line_text[line_length] = '\0'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2837 DrawTextEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2838 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2839 line_text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2840 (Vector2){content.x, y}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2841 CANVAS_TEXT_AREA_FONT_SIZE, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2842 CANVAS_TEXT_AREA_SPACING, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2843 p_theme->text); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2844 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2845 if (p_entity->active && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2846 line == cursor_line && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2847 fmod(GetTime(), 1.0) < 0.55) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2848 float cursor_x = content.x + Canvas_Text_Measure_Range( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2849 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2850 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2851 lines[line].start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2852 p_entity->text_cursor); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2853 DrawLineEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2854 (Vector2){cursor_x, y}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2855 (Vector2){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2856 cursor_x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2857 y + CANVAS_TEXT_AREA_FONT_SIZE + 2.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2858 }, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2859 1.5f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2860 p_theme->accent); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2861 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2862 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2863 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2864 |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2865 static void Canvas_Draw_Entity( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2866 const Canvas_Entity *p_entity, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2867 Font font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2868 float zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2869 boolean selected, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2870 boolean pressed, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2871 const Canvas_Theme *p_theme) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2872 { |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2873 float opacity = Canvas_Entity_Visibility(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2874 if (opacity <= 0.001f) return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2875 Canvas_Entity faded_entity = *p_entity; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2876 faded_entity.color = Canvas_Color_With_Opacity( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2877 faded_entity.color, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2878 opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2879 Canvas_Theme faded_theme = Canvas_Theme_With_Opacity(p_theme, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2880 p_entity = &faded_entity; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2881 p_theme = &faded_theme; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2882 |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2883 float shadow_offset = 6.0f / zoom; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2884 Color shadow = p_theme->shadow; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2885 static const char *calendar_weekdays[] = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2886 "S", "M", "T", "W", "T", "F", "S", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2887 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2888 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2889 switch (p_entity->type) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2890 case CANVAS_ENTITY_RECTANGLE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2891 Canvas_Theme_Draw_Shadow( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2892 p_theme, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2893 (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2894 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2895 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2896 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2897 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2898 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2899 0.14f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2900 12, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2901 zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2902 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2903 DrawRectangleRounded( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2904 (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2905 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2906 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2907 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2908 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2909 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2910 0.14f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2911 12, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2912 Canvas_Color_Fade(p_entity->color, 0.92f)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2913 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2914 (Rectangle){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2915 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2916 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2917 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2918 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2919 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2920 0.14f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2921 12, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2922 1.0f / zoom, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2923 p_theme->entity_outline); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2924 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2925 case CANVAS_ENTITY_CIRCLE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2926 DrawCircleV( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2927 (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2928 p_entity->position.x + shadow_offset, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2929 p_entity->position.y + shadow_offset, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2930 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2931 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2932 shadow); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2933 DrawCircleV(p_entity->position, p_entity->size.x, p_entity->color); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2934 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2935 case CANVAS_ENTITY_LINE: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2936 DrawLineEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2937 p_entity->position, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2938 (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2939 p_entity->position.x + p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2940 p_entity->position.y + p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2941 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2942 5.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2943 p_entity->color); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2944 DrawCircleV(p_entity->position, 2.5f, p_entity->color); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2945 DrawCircleV( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2946 (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2947 p_entity->position.x + p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2948 p_entity->position.y + p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2949 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2950 2.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2951 p_entity->color); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2952 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2953 case CANVAS_ENTITY_TEXT: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2954 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2955 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2956 p_entity->text, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2957 p_entity->position, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2958 28.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2959 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2960 p_theme->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2961 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2962 case CANVAS_ENTITY_BUTTON: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2963 float hover = p_entity->hover_amount; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2964 float grow = pressed ? -1.0f : hover * 2.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2965 float lift = pressed ? 0.0f : hover * 2.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2966 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2967 p_entity->position.x - grow, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2968 p_entity->position.y - grow - lift, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2969 p_entity->size.x + grow * 2.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2970 p_entity->size.y + grow * 2.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2971 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2972 Color base_fill = p_entity->active ? |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2973 p_theme->button_active : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2974 p_theme->button; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2975 Color hover_fill = p_entity->active ? |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2976 p_theme->button_active_hover : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2977 p_theme->button_hover; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2978 Color fill = Canvas_Color_Lerp(base_fill, hover_fill, hover); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2979 Canvas_Theme_Draw_Shadow( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2980 p_theme, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2981 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2982 0.46f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2983 16, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2984 zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2985 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2986 DrawRectangleRounded(bounds, 0.46f, 16, fill); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2987 Vector2 text_size = MeasureTextEx(font, p_entity->text, 16.0f, 0.1f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2988 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2989 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2990 p_entity->text, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2991 (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2992 bounds.x + (bounds.width - text_size.x) * 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2993 bounds.y + (bounds.height - text_size.y) * 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2994 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2995 16.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2996 0.1f, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
2997 p_theme->on_accent); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2998 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2999 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3000 case CANVAS_ENTITY_TEXT_AREA: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3001 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3002 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3003 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3004 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3005 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3006 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3007 Canvas_Theme_Draw_Shadow(p_theme, bounds, 0.10f, 14, zoom, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3008 DrawRectangleRounded(bounds, 0.10f, 14, p_theme->surface); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3009 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3010 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3011 0.10f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3012 14, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3013 (p_entity->active ? 2.0f : 1.0f) / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3014 p_entity->active ? p_theme->accent : p_theme->border); |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3015 Canvas_Draw_Text_Area_Content(p_entity, font, p_theme); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3016 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3017 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3018 case CANVAS_ENTITY_DROPDOWN: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3019 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3020 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3021 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3022 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3023 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3024 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3025 Canvas_Theme_Draw_Shadow(p_theme, bounds, 0.30f, 14, zoom, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3026 DrawRectangleRounded(bounds, 0.30f, 14, p_theme->surface); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3027 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3028 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3029 0.30f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3030 14, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3031 1.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3032 p_theme->border); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3033 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3034 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3035 CANVAS_DROPDOWN_OPTIONS[p_entity->value], |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3036 (Vector2){bounds.x + 16.0f, bounds.y + 14.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3037 16.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3038 0.1f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3039 p_theme->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3040 Vector2 chevron = {bounds.x + bounds.width - 22.0f, bounds.y + bounds.height * 0.5f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3041 DrawTriangle( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3042 (Vector2){chevron.x - 5.0f, chevron.y - 2.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3043 (Vector2){chevron.x, chevron.y + 4.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3044 (Vector2){chevron.x + 5.0f, chevron.y - 2.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3045 p_theme->text_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3046 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3047 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3048 case CANVAS_ENTITY_ACCORDION: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3049 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3050 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3051 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3052 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3053 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3054 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3055 Canvas_Theme_Draw_Shadow(p_theme, bounds, 0.10f, 14, zoom, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3056 DrawRectangleRounded(bounds, 0.10f, 14, p_theme->surface); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3057 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3058 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3059 0.10f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3060 14, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3061 1.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3062 p_theme->border); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3063 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3064 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3065 p_entity->text, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3066 (Vector2){bounds.x + 16.0f, bounds.y + 18.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3067 16.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3068 0.1f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3069 p_theme->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3070 float amount = p_entity->animation_amount; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3071 float angle = amount * PI * 0.5f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3072 Vector2 chevron = {bounds.x + bounds.width - 22.0f, bounds.y + 28.0f}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3073 Vector2 direction = {cosf(angle), sinf(angle)}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3074 Vector2 normal = {-direction.y, direction.x}; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3075 Vector2 tip = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3076 chevron.x + direction.x * 3.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3077 chevron.y + direction.y * 3.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3078 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3079 DrawLineEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3080 tip, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3081 (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3082 chevron.x - direction.x * 3.0f + normal.x * 4.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3083 chevron.y - direction.y * 3.0f + normal.y * 4.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3084 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3085 1.5f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3086 p_theme->text_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3087 DrawLineEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3088 tip, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3089 (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3090 chevron.x - direction.x * 3.0f - normal.x * 4.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3091 chevron.y - direction.y * 3.0f - normal.y * 4.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3092 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3093 1.5f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3094 p_theme->text_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3095 if (amount > 0.0f) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3096 DrawLineEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3097 (Vector2){bounds.x, bounds.y + 56.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3098 (Vector2){bounds.x + bounds.width, bounds.y + 56.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3099 1.0f / zoom, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3100 Canvas_Color_Fade(p_theme->border, amount)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3101 if (amount > 0.55f) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3102 float body_alpha = Canvas_Clamp( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3103 (amount - 0.55f) / 0.45f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3104 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3105 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3106 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3107 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3108 "Drag, zoom, pin, and combine primitives\nacross one continuous workspace.", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3109 (Vector2){bounds.x + 16.0f, bounds.y + 76.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3110 14.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3111 0.1f, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3112 Canvas_Color_Fade(p_theme->text_muted, body_alpha)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3113 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3114 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3115 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3116 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3117 case CANVAS_ENTITY_CARD: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3118 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3119 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3120 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3121 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3122 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3123 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3124 Canvas_Theme_Draw_Shadow(p_theme, bounds, 0.08f, 14, zoom, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3125 DrawRectangleRounded(bounds, 0.08f, 14, p_theme->surface); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3126 DrawRectangleRounded( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3127 (Rectangle){bounds.x + 12.0f, bounds.y + 12.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3128 bounds.width - 24.0f, 92.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3129 0.08f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3130 12, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3131 p_entity->active ? |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3132 p_theme->accent_soft : |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3133 Canvas_Color_Fade(p_entity->color, 0.22f)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3134 DrawCircleV( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3135 (Vector2){bounds.x + 44.0f, bounds.y + 58.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3136 18.0f, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3137 p_entity->active ? |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3138 p_theme->accent : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3139 p_entity->color); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3140 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3141 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3142 p_entity->text, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3143 (Vector2){bounds.x + 16.0f, bounds.y + 122.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3144 20.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3145 0.1f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3146 p_theme->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3147 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3148 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3149 "A flexible surface for tools,\ncontent, and live browser views.", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3150 (Vector2){bounds.x + 16.0f, bounds.y + 154.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3151 14.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3152 0.1f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3153 p_theme->text_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3154 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3155 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3156 0.08f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3157 14, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3158 (p_entity->active ? 2.0f : 1.0f) / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3159 p_entity->active ? |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3160 p_theme->accent : |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3161 p_theme->border); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3162 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3163 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3164 case CANVAS_ENTITY_CALENDAR: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3165 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3166 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3167 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3168 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3169 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3170 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3171 Canvas_Theme_Draw_Shadow(p_theme, bounds, 0.08f, 14, zoom, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3172 DrawRectangleRounded(bounds, 0.08f, 14, p_theme->surface); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3173 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3174 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3175 0.08f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3176 14, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3177 1.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3178 p_theme->border); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3179 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3180 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3181 "August 2026", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3182 (Vector2){bounds.x + 16.0f, bounds.y + 18.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3183 20.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3184 0.1f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3185 p_theme->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3186 for (int32 column = 0; column < 7; column++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3187 float cell_x = bounds.x + 14.0f + (float)column * 36.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3188 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3189 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3190 calendar_weekdays[column], |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3191 (Vector2){cell_x + 12.0f, bounds.y + 56.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3192 12.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3193 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3194 p_theme->text_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3195 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3196 for (int32 day = 1; day <= 31; day++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3197 int32 cell = day + 6 - 1; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3198 int32 row = cell / 7; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3199 int32 column = cell % 7; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3200 Vector2 center = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3201 bounds.x + 14.0f + (float)column * 36.0f + 18.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3202 bounds.y + 82.0f + (float)row * 32.0f + 16.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3203 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3204 if (day == p_entity->value) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3205 DrawCircleV(center, 14.0f, p_theme->accent); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3206 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3207 const char *label = TextFormat("%d", day); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3208 Vector2 label_size = MeasureTextEx(font, label, 13.0f, 0.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3209 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3210 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3211 label, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3212 (Vector2){center.x - label_size.x * 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3213 center.y - label_size.y * 0.5f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3214 13.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3215 0.0f, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3216 day == p_entity->value ? |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3217 p_theme->on_accent : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3218 p_theme->text); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3219 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3220 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3221 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3222 case CANVAS_ENTITY_SWITCH: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3223 float amount = p_entity->animation_amount; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3224 float eased = amount * amount * (3.0f - 2.0f * amount); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3225 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3226 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3227 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3228 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3229 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3230 }; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3231 Color off_track = Canvas_Color_Lerp( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3232 p_theme->switch_track_off, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3233 p_theme->switch_track_off_hover, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3234 p_entity->hover_amount); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3235 Color on_track = Canvas_Color_Lerp( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3236 p_theme->switch_track_on, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3237 p_theme->switch_track_on_hover, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3238 p_entity->hover_amount); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3239 Color track = Canvas_Color_Lerp(off_track, on_track, eased); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3240 Canvas_Theme_Draw_Shadow(p_theme, bounds, 0.50f, 18, zoom, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3241 DrawRectangleRounded(bounds, 0.50f, 18, track); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3242 float knob_x = bounds.x + 18.0f + |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3243 eased * (bounds.width - 36.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3244 float knob_radius = pressed ? 12.5f : 14.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3245 DrawCircleV( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3246 (Vector2){knob_x, bounds.y + bounds.height * 0.5f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3247 knob_radius, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3248 p_theme->switch_thumb); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3249 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3250 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3251 case CANVAS_ENTITY_TABLE: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3252 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3253 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3254 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3255 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3256 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3257 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3258 Canvas_Theme_Draw_Shadow(p_theme, bounds, 0.06f, 12, zoom, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3259 DrawRectangleRounded(bounds, 0.06f, 12, p_theme->surface); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3260 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3261 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3262 0.06f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3263 12, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3264 1.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3265 p_theme->border); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3266 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3267 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3268 "Name", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3269 (Vector2){bounds.x + 16.0f, bounds.y + 22.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3270 13.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3271 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3272 p_theme->text_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3273 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3274 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3275 "Status", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3276 (Vector2){bounds.x + 292.0f, bounds.y + 22.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3277 13.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3278 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3279 p_theme->text_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3280 DrawLineEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3281 (Vector2){bounds.x, bounds.y + 52.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3282 (Vector2){bounds.x + bounds.width, bounds.y + 52.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3283 1.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3284 p_theme->border); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3285 for (int32 row = 0; row < 4; row++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3286 float row_y = bounds.y + 62.0f + (float)row * 38.0f; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3287 if (row == p_entity->value) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3288 DrawRectangle( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3289 (int32)(bounds.x + 8.0f), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3290 (int32)(row_y - 4.0f), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3291 (int32)(bounds.width - 16.0f), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3292 34, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3293 p_theme->accent_soft); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3294 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3295 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3296 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3297 CANVAS_TABLE_NAMES[row], |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3298 (Vector2){bounds.x + 16.0f, row_y + 5.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3299 14.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3300 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3301 p_theme->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3302 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3303 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3304 CANVAS_TABLE_STATUSES[row], |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3305 (Vector2){bounds.x + 292.0f, row_y + 5.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3306 14.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3307 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3308 row == p_entity->value ? |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3309 p_theme->accent : |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3310 p_theme->text_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3311 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3312 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3313 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3314 case CANVAS_ENTITY_NOTIFICATION: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3315 if (p_entity->animation_amount <= 0.01f) break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3316 float unit = 1.0f / zoom; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3317 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3318 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3319 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3320 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3321 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3322 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3323 float opacity = p_entity->animation_amount; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3324 Canvas_Theme_Draw_Shadow( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3325 p_theme, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3326 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3327 0.20f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3328 16, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3329 zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3330 opacity); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3331 DrawRectangleRounded( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3332 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3333 0.20f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3334 16, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3335 Canvas_Color_Fade(p_theme->toast_surface, opacity)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3336 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3337 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3338 0.20f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3339 16, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3340 1.0f / zoom, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3341 Canvas_Color_Fade(p_theme->toast_border, opacity)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3342 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3343 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3344 p_entity->text, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3345 (Vector2){bounds.x + 16.0f * unit, bounds.y + 18.0f * unit}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3346 15.0f * unit, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3347 0.0f, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3348 Canvas_Color_Fade(p_theme->text, opacity)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3349 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3350 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3351 "Sunday, December 3 at 9:00 AM", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3352 (Vector2){bounds.x + 16.0f * unit, bounds.y + 45.0f * unit}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3353 14.0f * unit, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3354 0.0f, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3355 Canvas_Color_Fade(p_theme->text_muted, opacity)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3356 Rectangle undo = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3357 bounds.x + bounds.width - 108.0f * unit, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3358 bounds.y + 24.0f * unit, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3359 54.0f * unit, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3360 34.0f * unit, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3361 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3362 DrawRectangleRounded( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3363 undo, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3364 0.26f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3365 10, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3366 Canvas_Color_Fade(p_theme->surface_muted, opacity)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3367 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3368 undo, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3369 0.26f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3370 10, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3371 1.0f / zoom, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3372 Canvas_Color_Fade(p_theme->border, opacity)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3373 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3374 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3375 "Undo", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3376 (Vector2){undo.x + 12.0f * unit, undo.y + 10.0f * unit}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3377 13.0f * unit, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3378 0.0f, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3379 Canvas_Color_Fade(p_theme->text, opacity)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3380 Vector2 close = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3381 bounds.x + bounds.width - 24.0f * unit, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3382 bounds.y + bounds.height * 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3383 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3384 DrawLineEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3385 (Vector2){close.x - 4.0f * unit, close.y - 4.0f * unit}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3386 (Vector2){close.x + 4.0f * unit, close.y + 4.0f * unit}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3387 1.5f / zoom, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3388 Canvas_Color_Fade(p_theme->text_muted, opacity)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3389 DrawLineEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3390 (Vector2){close.x + 4.0f * unit, close.y - 4.0f * unit}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3391 (Vector2){close.x - 4.0f * unit, close.y + 4.0f * unit}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3392 1.5f / zoom, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3393 Canvas_Color_Fade(p_theme->text_muted, opacity)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3394 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3395 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3396 case CANVAS_ENTITY_SCROLL_AREA: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3397 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3398 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3399 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3400 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3401 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3402 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3403 Canvas_Theme_Draw_Shadow(p_theme, bounds, 0.08f, 12, zoom, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3404 DrawRectangleRounded(bounds, 0.08f, 12, p_theme->surface); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3405 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3406 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3407 0.08f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3408 12, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3409 1.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3410 p_theme->border); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3411 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3412 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3413 "Scrollable area", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3414 (Vector2){bounds.x + 16.0f, bounds.y + 16.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3415 18.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3416 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3417 p_theme->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3418 for (int32 item = 0; item < 10; item++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3419 float item_y = |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3420 bounds.y + 52.0f + (float)item * 42.0f - (float)p_entity->value; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3421 if (item_y < bounds.y + 46.0f || |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3422 item_y + 34.0f > bounds.y + bounds.height - 12.0f) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3423 continue; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3424 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3425 DrawRectangleRounded( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3426 (Rectangle){bounds.x + 14.0f, item_y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3427 bounds.width - 38.0f, 34.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3428 0.16f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3429 8, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3430 item % 2 == 0 ? |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3431 p_theme->surface_muted : |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3432 Canvas_Color_Lerp(p_theme->surface, p_theme->surface_muted, 0.5f)); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3433 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3434 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3435 TextFormat("Item %d", item + 1), |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3436 (Vector2){bounds.x + 26.0f, item_y + 9.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3437 13.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3438 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3439 p_theme->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3440 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3441 float thumb_y = bounds.y + 52.0f + |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3442 ((float)p_entity->value / 240.0f) * (bounds.height - 106.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3443 DrawRectangleRounded( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3444 (Rectangle){bounds.x + bounds.width - 14.0f, thumb_y, 5.0f, 42.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3445 0.50f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3446 6, |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3447 Canvas_Color_Fade(p_theme->text_muted, 0.82f)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3448 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3449 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3450 case CANVAS_ENTITY_IMAGE: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3451 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3452 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3453 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3454 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3455 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3456 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3457 Canvas_Theme_Draw_Shadow(p_theme, bounds, 0.04f, 12, zoom, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3458 DrawRectangleRounded(bounds, 0.04f, 12, p_theme->surface_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3459 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3460 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3461 0.04f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3462 12, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3463 1.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3464 p_theme->border); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3465 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3466 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3467 "Loading image...", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3468 (Vector2){bounds.x + 16.0f, bounds.y + 16.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3469 14.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3470 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3471 p_theme->text_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3472 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3473 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3474 case CANVAS_ENTITY_WEB_CONTENT: { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3475 Rectangle bounds = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3476 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3477 p_entity->position.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3478 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3479 p_entity->size.y, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3480 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3481 Canvas_Theme_Draw_Shadow(p_theme, bounds, 0.04f, 14, zoom, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3482 DrawRectangleRounded(bounds, 0.04f, 14, p_theme->surface_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3483 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3484 bounds, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3485 0.04f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3486 14, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3487 1.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3488 p_theme->border); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3489 #if !defined(PLATFORM_WEB) && !defined(__EMSCRIPTEN__) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3490 Vector2 label_size = MeasureTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3491 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3492 "Loading browser surface...", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3493 18.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3494 0.1f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3495 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3496 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3497 "Loading browser surface...", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3498 (Vector2){ |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3499 bounds.x + (bounds.width - label_size.x) * 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3500 bounds.y + (bounds.height - label_size.y) * 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3501 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3502 18.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3503 0.1f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3504 p_theme->text_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3505 #endif |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3506 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3507 } |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3508 case CANVAS_ENTITY_LUCIDE_GALLERY: { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3509 Rectangle bounds = { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3510 p_entity->position.x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3511 p_entity->position.y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3512 p_entity->size.x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3513 p_entity->size.y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3514 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3515 Canvas_Theme_Draw_Shadow(p_theme, bounds, 0.04f, 14, zoom, 1.0f); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3516 DrawRectangleRounded(bounds, 0.04f, 14, p_theme->surface); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3517 DrawRectangleRoundedLinesEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3518 bounds, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3519 0.04f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3520 14, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3521 1.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3522 p_theme->border); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3523 DrawTextEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3524 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3525 "Lucide icons", |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3526 (Vector2){bounds.x + 24.0f, bounds.y + 22.0f}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3527 26.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3528 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3529 p_theme->text); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3530 DrawTextEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3531 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3532 TextFormat( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3533 "%d of %d icons - Raylib vectors", |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3534 Canvas_Lucide_Count_Matches(p_entity->text), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3535 CANVAS_LUCIDE_ICON_COUNT), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3536 (Vector2){bounds.x + 24.0f, bounds.y + 56.0f}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3537 13.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3538 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3539 p_theme->text_muted); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3540 Rectangle search = Canvas_Lucide_Search_Bounds(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3541 DrawRectangleRounded( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3542 search, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3543 0.24f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3544 10, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3545 p_entity->active ? p_theme->surface : p_theme->surface_muted); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3546 DrawRectangleRoundedLinesEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3547 search, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3548 0.24f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3549 10, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3550 (p_entity->active ? 2.0f : 1.0f) / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3551 p_entity->active ? p_theme->accent : p_theme->border); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3552 const char *p_search_text = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3553 p_entity->text[0] ? p_entity->text : "Search icons"; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3554 DrawTextEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3555 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3556 p_search_text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3557 (Vector2){search.x + 16.0f, search.y + 13.0f}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3558 14.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3559 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3560 p_entity->text[0] ? p_theme->text : p_theme->text_muted); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3561 if (p_entity->active) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3562 Vector2 query_size = MeasureTextEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3563 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3564 p_entity->text, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3565 14.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3566 0.0f); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3567 float caret_x = search.x + 16.0f + query_size.x + 1.0f; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3568 DrawLineEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3569 (Vector2){caret_x, search.y + 11.0f}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3570 (Vector2){caret_x, search.y + 31.0f}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3571 1.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3572 p_theme->accent); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3573 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3574 DrawLineEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3575 (Vector2){bounds.x, bounds.y + CANVAS_LUCIDE_HEADER_HEIGHT}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3576 (Vector2){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3577 bounds.x + bounds.width, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3578 bounds.y + CANVAS_LUCIDE_HEADER_HEIGHT, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3579 }, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3580 1.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3581 p_theme->border); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3582 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3583 float content_top = bounds.y + CANVAS_LUCIDE_HEADER_HEIGHT; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3584 float content_bottom = bounds.y + bounds.height - CANVAS_LUCIDE_PADDING; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3585 int32 visible_index = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3586 for (int32 icon_index = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3587 icon_index < CANVAS_LUCIDE_ICON_COUNT; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3588 icon_index++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3589 const Canvas_Lucide_Icon *p_icon = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3590 &CANVAS_LUCIDE_ICONS[icon_index]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3591 if (!Canvas_Lucide_Name_Matches( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3592 p_icon->p_name, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3593 p_entity->text)) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3594 continue; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3595 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3596 int32 row = visible_index / CANVAS_LUCIDE_COLUMNS; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3597 int32 column = visible_index % CANVAS_LUCIDE_COLUMNS; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3598 visible_index++; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3599 float card_x = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3600 bounds.x + CANVAS_LUCIDE_PADDING + |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3601 (float)column * |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3602 (CANVAS_LUCIDE_CARD_WIDTH + CANVAS_LUCIDE_GAP); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3603 float card_y = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3604 content_top + CANVAS_LUCIDE_PADDING + |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3605 (float)row * |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3606 (CANVAS_LUCIDE_CARD_HEIGHT + CANVAS_LUCIDE_GAP) - |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3607 (float)p_entity->value; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3608 if (card_y < content_top || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3609 card_y + CANVAS_LUCIDE_CARD_HEIGHT > content_bottom) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3610 continue; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3611 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3612 Rectangle card = { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3613 card_x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3614 card_y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3615 CANVAS_LUCIDE_CARD_WIDTH, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3616 CANVAS_LUCIDE_CARD_HEIGHT, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3617 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3618 DrawRectangleRounded(card, 0.10f, 8, p_theme->surface_muted); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3619 DrawRectangleRoundedLinesEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3620 card, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3621 0.10f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3622 8, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3623 1.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3624 p_theme->border); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3625 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3626 float icon_scale = 2.0f; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3627 Vector2 icon_origin = { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3628 card.x + (card.width - 24.0f * icon_scale) * 0.5f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3629 card.y + 13.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3630 }; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3631 Canvas_Lucide_Draw_Icon( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3632 p_icon, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3633 icon_origin, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3634 icon_scale, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3635 1.8f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3636 p_theme->text); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3637 Vector2 label_size = MeasureTextEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3638 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3639 p_icon->p_name, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3640 11.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3641 0.0f); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3642 float label_x = card.x + (card.width - label_size.x) * 0.5f; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3643 if (label_x < card.x + 5.0f) label_x = card.x + 5.0f; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3644 DrawTextEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3645 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3646 p_icon->p_name, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3647 (Vector2){label_x, card.y + 73.0f}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3648 11.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3649 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3650 p_theme->text_muted); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3651 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3652 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3653 float max_scroll = Canvas_Lucide_Max_Scroll(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3654 if (max_scroll > 0.0f) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3655 float track_height = bounds.height - CANVAS_LUCIDE_HEADER_HEIGHT - 24.0f; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3656 float thumb_height = fmaxf( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3657 36.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3658 track_height * bounds.height / |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3659 Canvas_Lucide_Content_Height(p_entity->text)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3660 float thumb_y = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3661 content_top + 12.0f + |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3662 ((float)p_entity->value / max_scroll) * |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3663 (track_height - thumb_height); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3664 DrawRectangleRounded( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3665 (Rectangle){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3666 bounds.x + bounds.width - 10.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3667 thumb_y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3668 5.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3669 thumb_height, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3670 }, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3671 0.50f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3672 6, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3673 Canvas_Color_Fade(p_theme->text_muted, 0.72f)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3674 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3675 break; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3676 } |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3677 default: |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3678 break; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3679 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3680 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3681 if (p_entity->pinned) { |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3682 const Canvas_Lucide_Icon *p_pin = Canvas_Lucide_Find_Icon("pin"); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3683 float scale = 0.72f / zoom; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3684 Vector2 origin = { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3685 p_entity->position.x + p_entity->size.x - 21.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3686 p_entity->position.y + 3.0f / zoom, |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3687 }; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3688 Canvas_Lucide_Draw_Icon( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3689 p_pin, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3690 origin, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3691 scale, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3692 1.8f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3693 p_theme->pin); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3694 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3695 if (selected && p_entity->type != CANVAS_ENTITY_NOTIFICATION) { |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3696 Canvas_Draw_Selection(p_entity, zoom, p_theme->selection); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3697 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3698 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3699 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3700 static void Canvas_Draw_Dropdown_Menu( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3701 const Canvas_Entity *p_entity, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3702 Font font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3703 Vector2 world_pointer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3704 float zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3705 const Canvas_Theme *p_theme) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3706 { |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3707 float opacity = Canvas_Entity_Visibility(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3708 if (opacity <= 0.001f) return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3709 Canvas_Theme faded_theme = Canvas_Theme_With_Opacity(p_theme, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3710 p_theme = &faded_theme; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3711 |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3712 static const char *options[] = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3713 "Design", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3714 "Engineering", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3715 "Research", |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3716 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3717 Rectangle menu = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3718 p_entity->position.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3719 p_entity->position.y + p_entity->size.y + 8.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3720 p_entity->size.x, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3721 120.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3722 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3723 Canvas_Theme_Draw_Shadow(p_theme, menu, 0.12f, 14, zoom, 1.0f); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3724 DrawRectangleRounded(menu, 0.12f, 14, p_theme->surface); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3725 DrawRectangleRoundedLinesEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3726 menu, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3727 0.12f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3728 14, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3729 1.0f / zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3730 p_theme->border); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3731 |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3732 for (int32 option = 0; option < 3; option++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3733 Rectangle row = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3734 menu.x + 5.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3735 menu.y + 4.0f + (float)option * 38.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3736 menu.width - 10.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3737 36.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3738 }; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3739 boolean hovered = CheckCollisionPointRec(world_pointer, row) ? TRUE : FALSE; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3740 boolean selected = p_entity->value == option; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3741 if (hovered || selected) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3742 DrawRectangleRounded( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3743 row, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3744 0.20f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3745 10, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3746 hovered ? p_theme->accent_soft : p_theme->surface_muted); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3747 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3748 DrawTextEx( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3749 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3750 options[option], |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3751 (Vector2){row.x + 12.0f, row.y + 9.0f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3752 15.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3753 0.1f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3754 selected ? p_theme->accent : p_theme->text); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3755 if (selected) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3756 DrawCircleV( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3757 (Vector2){row.x + row.width - 14.0f, row.y + row.height * 0.5f}, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3758 3.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3759 p_theme->accent); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3760 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3761 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3762 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3763 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3764 static Camera2D Canvas_Raylib_Camera(const Canvas_Camera *p_camera) |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3765 { |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3766 return (Camera2D){ |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3767 .offset = { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3768 (float)p_camera->viewport_width * 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3769 (float)p_camera->viewport_height * 0.5f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3770 }, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3771 .target = p_camera->target, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3772 .rotation = 0.0f, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3773 .zoom = p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3774 }; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3775 } |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3776 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3777 void Canvas_Draw_World_Background( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3778 const Canvas_Camera *p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3779 const Canvas_Scene *p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3780 const Canvas_Theme *p_theme) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3781 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3782 BeginMode2D(Canvas_Raylib_Camera(p_camera)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3783 if (p_scene->show_grid) Canvas_Draw_Grid(p_camera, p_theme); |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3784 EndMode2D(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3785 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3786 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3787 void Canvas_Draw_World_Entity( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3788 const Canvas_Camera *p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3789 const Canvas_Scene *p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3790 size_t entity_index, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3791 Font font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3792 const Canvas_Theme *p_theme) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3793 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3794 if (entity_index >= Dowa_Array_Length(p_scene->p_entities)) return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3795 BeginMode2D(Canvas_Raylib_Camera(p_camera)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3796 Canvas_Draw_Entity( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3797 &p_scene->p_entities[entity_index], |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3798 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3799 p_camera->zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3800 (int32)entity_index == p_scene->selected_index, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3801 (int32)entity_index == p_scene->pressed_index && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3802 IsMouseButtonDown(MOUSE_BUTTON_LEFT), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3803 p_theme); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3804 EndMode2D(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3805 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3806 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3807 void Canvas_Draw_Web_Chrome_Entity( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3808 const Canvas_Camera *p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3809 const Canvas_Scene *p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3810 size_t entity_index, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3811 Font font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3812 const Canvas_Theme *p_theme, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3813 const char *p_url, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3814 boolean can_go_back, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3815 boolean can_go_forward) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3816 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3817 if (entity_index >= Dowa_Array_Length(p_scene->p_entities)) return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3818 const Canvas_Entity *p_entity = &p_scene->p_entities[entity_index]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3819 if (p_entity->type != CANVAS_ENTITY_WEB_CONTENT || |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3820 p_entity->web_chrome_amount <= 0.01f) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3821 return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3822 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3823 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3824 float zoom = p_camera->zoom; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3825 float opacity = Canvas_Entity_Visibility(p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3826 Canvas_Theme faded_theme = Canvas_Theme_With_Opacity(p_theme, opacity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3827 p_theme = &faded_theme; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3828 Rectangle toolbar = Canvas_Web_Toolbar_Bounds(p_camera, p_entity); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3829 Rectangle back = Canvas_Web_Toolbar_Button_Bounds(toolbar, zoom, 0); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3830 Rectangle forward = Canvas_Web_Toolbar_Button_Bounds(toolbar, zoom, 1); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3831 Rectangle address = Canvas_Web_Address_Bounds(toolbar, zoom); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3832 Vector2 pointer = Canvas_Camera_Screen_To_World( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3833 p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3834 GetMousePosition()); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3835 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3836 BeginMode2D(Canvas_Raylib_Camera(p_camera)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3837 Vector2 toolbar_screen = Canvas_Camera_World_To_Screen( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3838 p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3839 (Vector2){toolbar.x, toolbar.y}); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3840 BeginScissorMode( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3841 (int32)toolbar_screen.x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3842 (int32)toolbar_screen.y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3843 (int32)(toolbar.width * zoom), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3844 (int32)fmaxf(1.0f, toolbar.height * zoom)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3845 DrawRectangleRounded(toolbar, 0.18f, 10, p_theme->surface); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3846 DrawRectangleRoundedLinesEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3847 toolbar, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3848 0.18f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3849 10, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3850 1.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3851 p_theme->border); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3852 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3853 Rectangle buttons[] = {back, forward}; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3854 boolean enabled[] = {can_go_back, can_go_forward}; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3855 const char *icon_names[] = {"arrow-left", "arrow-right"}; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3856 for (int32 index = 0; index < 2; index++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3857 boolean hovered = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3858 CheckCollisionPointRec(pointer, buttons[index]) && enabled[index]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3859 if (hovered) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3860 DrawRectangleRounded( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3861 buttons[index], |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3862 0.28f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3863 8, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3864 p_theme->accent_soft); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3865 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3866 Canvas_Lucide_Draw_Icon( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3867 Canvas_Lucide_Find_Icon(icon_names[index]), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3868 (Vector2){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3869 buttons[index].x + 5.5f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3870 buttons[index].y + 5.5f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3871 }, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3872 0.71f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3873 1.8f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3874 enabled[index] ? p_theme->text : p_theme->text_muted); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3875 } |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3876 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3877 DrawRectangleRounded(address, 0.32f, 8, p_theme->surface_muted); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3878 DrawRectangleRoundedLinesEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3879 address, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3880 0.32f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3881 8, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3882 1.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3883 p_theme->border); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3884 boolean editing = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3885 p_scene->editing_web_url && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3886 p_scene->web_url_entity_id == p_entity->id; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3887 const char *p_display_url = editing ? |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3888 p_scene->web_url_draft : |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3889 p_url; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3890 char visible_url[CANVAS_ENTITY_TEXT_CAPACITY] = {0}; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3891 snprintf( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3892 visible_url, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3893 sizeof(visible_url), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3894 "%s", |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3895 p_display_url && p_display_url[0] ? p_display_url : "about:blank"); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3896 float font_size = 13.0f / zoom; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3897 float max_width = address.width - 18.0f / zoom; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3898 size_t url_length = strlen(visible_url); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3899 while (!editing && url_length > 3 && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3900 MeasureTextEx(font, visible_url, font_size, 0.0f).x > max_width) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3901 url_length--; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3902 visible_url[url_length] = '\0'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3903 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3904 if (!editing && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3905 p_display_url && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3906 strlen(p_display_url) > url_length && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3907 url_length > 3) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3908 visible_url[url_length - 3] = '.'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3909 visible_url[url_length - 2] = '.'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3910 visible_url[url_length - 1] = '.'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3911 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3912 Vector2 address_screen = Canvas_Camera_World_To_Screen( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3913 p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3914 (Vector2){address.x, address.y}); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3915 float address_clip_height = fminf( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3916 address.height, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3917 toolbar.y + toolbar.height - address.y); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3918 if (address_clip_height < 1.0f / zoom) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3919 EndScissorMode(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3920 EndMode2D(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3921 return; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3922 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3923 BeginScissorMode( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3924 (int32)address_screen.x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3925 (int32)address_screen.y, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3926 (int32)(address.width * zoom), |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3927 (int32)(address_clip_height * zoom)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3928 float text_x = address.x + 9.0f / zoom - |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3929 (editing ? p_scene->web_url_scroll_x : 0.0f); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3930 if (editing && |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3931 p_scene->web_url_cursor != p_scene->web_url_selection_anchor) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3932 int32 selection_start = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3933 int32 selection_end = 0; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3934 Canvas_Web_URL_Selection_Bounds( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3935 p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3936 &selection_start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3937 &selection_end); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3938 char prefix[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3939 char selected[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3940 memcpy(prefix, visible_url, (size_t)selection_start); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3941 prefix[selection_start] = '\0'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3942 memcpy( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3943 selected, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3944 visible_url + selection_start, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3945 (size_t)(selection_end - selection_start)); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3946 selected[selection_end - selection_start] = '\0'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3947 float selection_x = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3948 text_x + MeasureTextEx(font, prefix, font_size, 0.0f).x; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3949 float selection_width = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3950 MeasureTextEx(font, selected, font_size, 0.0f).x; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3951 DrawRectangleRec( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3952 (Rectangle){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3953 selection_x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3954 address.y + 5.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3955 selection_width, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3956 18.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3957 }, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3958 p_theme->accent_soft); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3959 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3960 DrawTextEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3961 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3962 visible_url, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3963 (Vector2){ |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3964 text_x, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3965 address.y + 7.0f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3966 }, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3967 font_size, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3968 0.0f, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3969 editing ? p_theme->text : p_theme->text_muted); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3970 if (editing && ((int32)(GetTime() * 2.0) % 2) == 0) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3971 char prefix[CANVAS_ENTITY_TEXT_CAPACITY]; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3972 memcpy( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3973 prefix, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3974 visible_url, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3975 (size_t)p_scene->web_url_cursor); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3976 prefix[p_scene->web_url_cursor] = '\0'; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3977 float caret_x = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3978 text_x + MeasureTextEx(font, prefix, font_size, 0.0f).x; |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3979 DrawLineEx( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3980 (Vector2){caret_x, address.y + 6.0f / zoom}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3981 (Vector2){caret_x, address.y + 22.0f / zoom}, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3982 1.5f / zoom, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3983 p_theme->accent); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3984 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3985 EndScissorMode(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3986 EndMode2D(); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3987 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3988 |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3989 void Canvas_Draw_World_Overlays( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3990 const Canvas_Camera *p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3991 const Canvas_Scene *p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3992 Font font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3993 const Canvas_Theme *p_theme) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3994 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3995 Vector2 world_pointer = |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3996 Canvas_Camera_Screen_To_World(p_camera, GetMousePosition()); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
3997 BeginMode2D(Canvas_Raylib_Camera(p_camera)); |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3998 for (size_t index = 0; index < Dowa_Array_Length(p_scene->p_entities); index++) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3999 const Canvas_Entity *p_entity = &p_scene->p_entities[index]; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4000 if (p_entity->type == CANVAS_ENTITY_DROPDOWN && p_entity->active) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4001 Canvas_Draw_Dropdown_Menu( |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4002 p_entity, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4003 font, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4004 world_pointer, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4005 p_camera->zoom, |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4006 p_theme); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4007 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4008 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4009 EndMode2D(); |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4010 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4011 |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4012 void Canvas_Draw_World( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4013 const Canvas_Camera *p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4014 const Canvas_Scene *p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4015 Font font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4016 const Canvas_Theme *p_theme) |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4017 { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4018 Canvas_Draw_World_Background(p_camera, p_scene, p_theme); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4019 for (size_t index = 0; index < Dowa_Array_Length(p_scene->p_entities); index++) { |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4020 Canvas_Draw_World_Entity( |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4021 p_camera, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4022 p_scene, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4023 index, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4024 font, |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4025 p_theme); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4026 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4027 Canvas_Draw_World_Overlays(p_camera, p_scene, font, p_theme); |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4028 } |
|
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4029 |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4030 const char *Canvas_Entity_Type_Name(Canvas_Entity_Type type) |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4031 { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4032 switch (type) { |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4033 case CANVAS_ENTITY_RECTANGLE: return "Rectangle"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4034 case CANVAS_ENTITY_CIRCLE: return "Circle"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4035 case CANVAS_ENTITY_LINE: return "Line"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4036 case CANVAS_ENTITY_TEXT: return "Text"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4037 case CANVAS_ENTITY_BUTTON: return "Button"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4038 case CANVAS_ENTITY_TEXT_AREA: return "Text area"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4039 case CANVAS_ENTITY_DROPDOWN: return "Dropdown"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4040 case CANVAS_ENTITY_ACCORDION: return "Accordion"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4041 case CANVAS_ENTITY_CARD: return "Card"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4042 case CANVAS_ENTITY_CALENDAR: return "Calendar"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4043 case CANVAS_ENTITY_SWITCH: return "Switch"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4044 case CANVAS_ENTITY_TABLE: return "Table"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4045 case CANVAS_ENTITY_NOTIFICATION: return "Notification"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4046 case CANVAS_ENTITY_SCROLL_AREA: return "Scrollable area"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4047 case CANVAS_ENTITY_IMAGE: return "Image"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4048 case CANVAS_ENTITY_WEB_CONTENT: return "Web content"; |
|
278
8d560f50ed4c
Improve infinite canvas interactions and browser chrome
MrJuneJune <me@mrjunejune.com>
parents:
276
diff
changeset
|
4049 case CANVAS_ENTITY_LUCIDE_GALLERY: return "Lucide gallery"; |
|
276
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4050 default: return "Unknown"; |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4051 } |
|
b55c22cff335
Add interactive infinite canvas prototype
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4052 } |