|
1 | 1 | <script> |
2 | | - import { appWindow, WebviewWindow, LogicalSize, LogicalPosition, UserAttentionType, getCurrent } from "@tauri-apps/api/window"; |
| 2 | + import { appWindow, WebviewWindow, LogicalSize, LogicalPosition, UserAttentionType, getCurrent, PhysicalSize, PhysicalPosition } from "@tauri-apps/api/window"; |
3 | 3 | import { open as openDialog } from "@tauri-apps/api/dialog"; |
4 | 4 | import { open } from "@tauri-apps/api/shell"; |
5 | 5 |
|
|
26 | 26 | let maxHeight = null; |
27 | 27 | let x = 100; |
28 | 28 | let y = 100; |
| 29 | + let scaleFactor = 1; |
| 30 | + let innerPosition = new PhysicalPosition(x, y); |
| 31 | + let outerPosition = new PhysicalPosition(x, y); |
| 32 | + let innerSize = new PhysicalSize(width, height); |
| 33 | + let outerSize = new PhysicalSize(width, height); |
| 34 | + let resizeEventUnlisten; |
| 35 | + let moveEventUnlisten; |
29 | 36 |
|
30 | 37 | let windowTitle = "Awesome Tauri Example!"; |
31 | 38 |
|
|
62 | 69 | }) |
63 | 70 | } |
64 | 71 |
|
| 72 | + function handleWindowResize() { |
| 73 | + windowMap[selectedWindow].innerSize().then(response => { |
| 74 | + innerSize = response |
| 75 | + width = innerSize.width |
| 76 | + height = innerSize.height |
| 77 | + }); |
| 78 | + windowMap[selectedWindow].outerSize().then(response => { |
| 79 | + outerSize = response |
| 80 | + }); |
| 81 | + } |
| 82 | +
|
| 83 | + function handleWindowMove() { |
| 84 | + windowMap[selectedWindow].innerPosition().then(response => { |
| 85 | + innerPosition = response |
| 86 | + }); |
| 87 | + windowMap[selectedWindow].outerPosition().then(response => { |
| 88 | + outerPosition = response |
| 89 | + x = outerPosition.x |
| 90 | + y = outerPosition.y |
| 91 | + }); |
| 92 | + } |
| 93 | +
|
| 94 | + function addWindowEventListeners(window) { |
| 95 | + if (resizeEventUnlisten) { |
| 96 | + resizeEventUnlisten(); |
| 97 | + } |
| 98 | + if(moveEventUnlisten) { |
| 99 | + moveEventUnlisten(); |
| 100 | + } |
| 101 | + moveEventUnlisten = window.listen('tauri://move', handleWindowMove); |
| 102 | + resizeEventUnlisten = window.listen('tauri://resize', handleWindowResize); |
| 103 | + } |
| 104 | +
|
65 | 105 | async function requestUserAttention_() { |
66 | 106 | await windowMap[selectedWindow].minimize(); |
67 | 107 | await windowMap[selectedWindow].requestUserAttention(UserAttentionType.Critical); |
|
79 | 119 | $: minWidth && minHeight ? windowMap[selectedWindow].setMinSize(new LogicalSize(minWidth, minHeight)) : windowMap[selectedWindow].setMinSize(null); |
80 | 120 | $: maxWidth && maxHeight ? windowMap[selectedWindow].setMaxSize(new LogicalSize(maxWidth, maxHeight)) : windowMap[selectedWindow].setMaxSize(null); |
81 | 121 | $: windowMap[selectedWindow].setPosition(new LogicalPosition(x, y)); |
| 122 | + $: windowMap[selectedWindow].scaleFactor().then(factor => scaleFactor = factor); |
| 123 | + $: addWindowEventListeners(windowMap[selectedWindow]); |
82 | 124 | </script> |
83 | 125 |
|
84 | 126 | <div class="flex col"> |
|
171 | 213 | </div> |
172 | 214 | </div> |
173 | 215 | </div> |
| 216 | +<div> |
| 217 | + <div class="flex"> |
| 218 | + <div class="grow window-property"> |
| 219 | + <div>Inner Size</div> |
| 220 | + <span>Width: {innerSize.width}</span> |
| 221 | + <span>Height: {innerSize.height}</span> |
| 222 | + </div> |
| 223 | + <div class="grow window-property"> |
| 224 | + <div>Outer Size</div> |
| 225 | + <span>Width: {outerSize.width}</span> |
| 226 | + <span>Height: {outerSize.height}</span> |
| 227 | + </div> |
| 228 | + </div> |
| 229 | + <div class="flex"> |
| 230 | + <div class="grow window-property"> |
| 231 | + <div>Inner Logical Size</div> |
| 232 | + <span>Width: {innerSize.toLogical(scaleFactor).width}</span> |
| 233 | + <span>Height: {innerSize.toLogical(scaleFactor).height}</span> |
| 234 | + </div> |
| 235 | + <div class="grow window-property"> |
| 236 | + <div>Outer Logical Size</div> |
| 237 | + <span>Width: {outerSize.toLogical(scaleFactor).width}</span> |
| 238 | + <span>Height: {outerSize.toLogical(scaleFactor).height}</span> |
| 239 | + </div> |
| 240 | + </div> |
| 241 | + <div class="flex"> |
| 242 | + <div class="grow window-property"> |
| 243 | + <div>Inner Position</div> |
| 244 | + <span>x: {innerPosition.x}</span> |
| 245 | + <span>y: {innerPosition.y}</span> |
| 246 | + </div> |
| 247 | + <div class="grow window-property"> |
| 248 | + <div>Outer Position</div> |
| 249 | + <span>x: {outerPosition.x}</span> |
| 250 | + <span>y: {outerPosition.y}</span> |
| 251 | + </div> |
| 252 | + </div> |
| 253 | + <div class="flex"> |
| 254 | + <div class="grow window-property"> |
| 255 | + <div>Inner Logical Position</div> |
| 256 | + <span>x: {innerPosition.toLogical(scaleFactor).x}</span> |
| 257 | + <span>y: {innerPosition.toLogical(scaleFactor).y}</span> |
| 258 | + </div> |
| 259 | + <div class="grow window-property"> |
| 260 | + <div>Outer Logical Position</div> |
| 261 | + <span>x: {outerPosition.toLogical(scaleFactor).x}</span> |
| 262 | + <span>y: {outerPosition.toLogical(scaleFactor).y}</span> |
| 263 | + </div> |
| 264 | + </div> |
| 265 | +</div> |
174 | 266 | <form style="margin-top: 24px" on:submit|preventDefault={setTitle_}> |
175 | 267 | <input id="title" bind:value={windowTitle} /> |
176 | 268 | <button class="button" type="submit">Set title</button> |
|
194 | 286 | .window-controls input { |
195 | 287 | width: 50px; |
196 | 288 | } |
| 289 | +
|
| 290 | + .window-property { |
| 291 | + margin-top: 12px; |
| 292 | + } |
| 293 | + .window-property span { |
| 294 | + font-size: 0.8rem; |
| 295 | + } |
197 | 296 | </style> |
0 commit comments