winui-svelte 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/API.md +565 -19
- package/README.md +21 -5
- package/dist/app/activate.d.ts.map +1 -1
- package/dist/app/activate.js +3 -0
- package/dist/app/activate.js.map +1 -1
- package/dist/app/activation/index.d.ts +3 -0
- package/dist/app/activation/index.d.ts.map +1 -1
- package/dist/app/activation/index.js +2 -0
- package/dist/app/activation/index.js.map +1 -1
- package/dist/app/activation/login.d.ts +2 -1
- package/dist/app/activation/login.d.ts.map +1 -1
- package/dist/app/activation/login.js +2 -1
- package/dist/app/activation/login.js.map +1 -1
- package/dist/app/activation/native.js +1 -2
- package/dist/app/activation/native.js.map +1 -1
- package/dist/app/activation/packaged.d.ts +49 -0
- package/dist/app/activation/packaged.d.ts.map +1 -0
- package/dist/app/activation/packaged.js +90 -0
- package/dist/app/activation/packaged.js.map +1 -0
- package/dist/app/activation/receive.d.ts +11 -2
- package/dist/app/activation/receive.d.ts.map +1 -1
- package/dist/app/activation/receive.js +11 -4
- package/dist/app/activation/receive.js.map +1 -1
- package/dist/app/activation/registration.d.ts +3 -3
- package/dist/app/activation/registration.js +7 -7
- package/dist/app/activation/registration.js.map +1 -1
- package/dist/app/activation/scheme.d.ts +10 -0
- package/dist/app/activation/scheme.d.ts.map +1 -1
- package/dist/app/activation/scheme.js +17 -0
- package/dist/app/activation/scheme.js.map +1 -1
- package/dist/app/index.d.ts +4 -2
- package/dist/app/index.d.ts.map +1 -1
- package/dist/app/index.js +3 -1
- package/dist/app/index.js.map +1 -1
- package/dist/app/instance-running.d.ts +15 -0
- package/dist/app/instance-running.d.ts.map +1 -0
- package/dist/app/instance-running.js +20 -0
- package/dist/app/instance-running.js.map +1 -0
- package/dist/app/jump-list/native.d.ts.map +1 -1
- package/dist/app/jump-list/native.js +1 -2
- package/dist/app/jump-list/native.js.map +1 -1
- package/dist/app/native-messaging/browsers.d.ts +19 -0
- package/dist/app/native-messaging/browsers.d.ts.map +1 -0
- package/dist/app/native-messaging/browsers.js +17 -0
- package/dist/app/native-messaging/browsers.js.map +1 -0
- package/dist/app/native-messaging/index.d.ts +41 -0
- package/dist/app/native-messaging/index.d.ts.map +1 -0
- package/dist/app/native-messaging/index.js +84 -0
- package/dist/app/native-messaging/index.js.map +1 -0
- package/dist/app/native.d.ts +0 -6
- package/dist/app/native.d.ts.map +1 -1
- package/dist/app/native.js +1 -24
- package/dist/app/native.js.map +1 -1
- package/dist/app/notification-source.d.ts.map +1 -1
- package/dist/app/notification-source.js +1 -2
- package/dist/app/notification-source.js.map +1 -1
- package/dist/app/shell/native.js +1 -2
- package/dist/app/shell/native.js.map +1 -1
- package/dist/app/single-instance.d.ts +27 -1
- package/dist/app/single-instance.d.ts.map +1 -1
- package/dist/app/single-instance.js +32 -10
- package/dist/app/single-instance.js.map +1 -1
- package/dist/automation/native.d.ts.map +1 -1
- package/dist/automation/native.js +1 -2
- package/dist/automation/native.js.map +1 -1
- package/dist/bindings/.dynwinrt-js-types +198 -0
- package/dist/bindings/.dynwinrt-managed +1 -1
- package/dist/bindings/index.d.ts +15 -0
- package/dist/bindings/index.js +20 -0
- package/dist/bindings/index.mjs +2902 -2882
- package/dist/bindings/index.proxy.js +10 -0
- package/dist/bindings/windows/application-model/activation/ActivationKind.d.ts +49 -0
- package/dist/bindings/windows/application-model/activation/ActivationKind.js +50 -0
- package/dist/bindings/windows/application-model/activation/ApplicationExecutionState.d.ts +9 -0
- package/dist/bindings/windows/application-model/activation/ApplicationExecutionState.js +10 -0
- package/dist/bindings/windows/application-model/activation/IActivatedEventArgs.d.ts +36 -0
- package/dist/bindings/windows/application-model/activation/IActivatedEventArgs.js +149 -0
- package/dist/bindings/windows/application-model/activation/IActivatedEventArgsWithUser.d.ts +28 -0
- package/dist/bindings/windows/application-model/activation/IActivatedEventArgsWithUser.js +119 -0
- package/dist/bindings/windows/application-model/activation/IApplicationViewActivatedEventArgs.d.ts +27 -0
- package/dist/bindings/windows/application-model/activation/IApplicationViewActivatedEventArgs.js +116 -0
- package/dist/bindings/windows/application-model/activation/IProtocolActivatedEventArgsWithCallerPackageFamilyNameAndData.d.ts +31 -0
- package/dist/bindings/windows/application-model/activation/IProtocolActivatedEventArgsWithCallerPackageFamilyNameAndData.js +131 -0
- package/dist/bindings/windows/application-model/activation/IViewSwitcherProvider.d.ts +28 -0
- package/dist/bindings/windows/application-model/activation/IViewSwitcherProvider.js +119 -0
- package/dist/bindings/windows/application-model/activation/ProtocolActivatedEventArgs.d.ts +25 -0
- package/dist/bindings/windows/application-model/activation/ProtocolActivatedEventArgs.js +166 -0
- package/dist/bindings/windows/application-model/activation/SplashScreen.d.ts +35 -0
- package/dist/bindings/windows/application-model/activation/SplashScreen.js +105 -0
- package/dist/bindings/windows/foundation/TypedEventHandler_WindowsApplicationModelActivationSplashScreen_Object_g7a7dbfa699cd28ff.d.ts +7 -0
- package/dist/bindings/windows/foundation/TypedEventHandler_WindowsApplicationModelActivationSplashScreen_Object_g7a7dbfa699cd28ff.js +7 -0
- package/dist/bindings/windows/ui/view-management/ActivationViewSwitcher.d.ts +12 -0
- package/dist/bindings/windows/ui/view-management/ActivationViewSwitcher.js +96 -0
- package/dist/chrome/context-menus/context-menu-schema.d.ts.map +1 -1
- package/dist/chrome/context-menus/context-menu-schema.js +1 -7
- package/dist/chrome/context-menus/context-menu-schema.js.map +1 -1
- package/dist/chrome/parse-or-throw.d.ts +7 -0
- package/dist/chrome/parse-or-throw.d.ts.map +1 -0
- package/dist/chrome/parse-or-throw.js +9 -0
- package/dist/chrome/parse-or-throw.js.map +1 -0
- package/dist/chrome/permissions/permission-schema.d.ts.map +1 -1
- package/dist/chrome/permissions/permission-schema.js +1 -7
- package/dist/chrome/permissions/permission-schema.js.map +1 -1
- package/dist/chrome/windows/chrome-windows.d.ts.map +1 -1
- package/dist/chrome/windows/chrome-windows.js +1 -7
- package/dist/chrome/windows/chrome-windows.js.map +1 -1
- package/dist/components/hand-written/items/keyed-rows.svelte.d.ts.map +1 -1
- package/dist/components/hand-written/items/keyed-rows.svelte.js +6 -0
- package/dist/components/hand-written/items/keyed-rows.svelte.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/runtime.svelte.d.ts.map +1 -1
- package/dist/components/runtime.svelte.js +7 -0
- package/dist/components/runtime.svelte.js.map +1 -1
- package/dist/composition/expression.d.ts +1 -1
- package/dist/css/runtime/containers.d.ts.map +1 -1
- package/dist/css/runtime/containers.js +1 -17
- package/dist/css/runtime/containers.js.map +1 -1
- package/dist/css/runtime/native.d.ts.map +1 -1
- package/dist/css/runtime/native.js +40 -20
- package/dist/css/runtime/native.js.map +1 -1
- package/dist/css/translate/property-kit.d.ts +9 -0
- package/dist/css/translate/property-kit.d.ts.map +1 -1
- package/dist/css/translate/property-kit.js.map +1 -1
- package/dist/css/translate/transition-properties.d.ts +1 -1
- package/dist/css/translate/transition-properties.d.ts.map +1 -1
- package/dist/css/translate/transition-properties.js +32 -5
- package/dist/css/translate/transition-properties.js.map +1 -1
- package/dist/data-transfer/data-transfer.d.ts +3 -3
- package/dist/data-transfer/data-transfer.d.ts.map +1 -1
- package/dist/data-transfer/data-transfer.js.map +1 -1
- package/dist/data-transfer/drag-effects.d.ts +25 -2
- package/dist/data-transfer/drag-effects.d.ts.map +1 -1
- package/dist/data-transfer/drag-effects.js +27 -2
- package/dist/data-transfer/drag-effects.js.map +1 -1
- package/dist/data-transfer/drag-helper.d.ts +50 -0
- package/dist/data-transfer/drag-helper.d.ts.map +1 -0
- package/dist/data-transfer/drag-helper.js +156 -0
- package/dist/data-transfer/drag-helper.js.map +1 -0
- package/dist/data-transfer/drop-target.d.ts +6 -5
- package/dist/data-transfer/drop-target.d.ts.map +1 -1
- package/dist/data-transfer/drop-target.js +68 -20
- package/dist/data-transfer/drop-target.js.map +1 -1
- package/dist/data-transfer/index.d.ts +1 -0
- package/dist/data-transfer/index.d.ts.map +1 -1
- package/dist/data-transfer/index.js.map +1 -1
- package/dist/data-transfer/launcher.d.ts +4 -3
- package/dist/data-transfer/launcher.d.ts.map +1 -1
- package/dist/data-transfer/launcher.js +58 -9
- package/dist/data-transfer/launcher.js.map +1 -1
- package/dist/data-transfer/native.d.ts +66 -0
- package/dist/data-transfer/native.d.ts.map +1 -0
- package/dist/data-transfer/native.js +148 -0
- package/dist/data-transfer/native.js.map +1 -0
- package/dist/data-transfer/ole-data-object.d.ts +62 -0
- package/dist/data-transfer/ole-data-object.d.ts.map +1 -0
- package/dist/data-transfer/ole-data-object.js +162 -0
- package/dist/data-transfer/ole-data-object.js.map +1 -0
- package/dist/data-transfer/ole-drop-target.d.ts +54 -0
- package/dist/data-transfer/ole-drop-target.d.ts.map +1 -0
- package/dist/data-transfer/ole-drop-target.js +192 -0
- package/dist/data-transfer/ole-drop-target.js.map +1 -0
- package/dist/data-transfer/share-interop.d.ts.map +1 -1
- package/dist/data-transfer/share-interop.js +1 -1
- package/dist/data-transfer/share-interop.js.map +1 -1
- package/dist/data-transfer/shell-items.d.ts +10 -0
- package/dist/data-transfer/shell-items.d.ts.map +1 -0
- package/dist/data-transfer/shell-items.js +67 -0
- package/dist/data-transfer/shell-items.js.map +1 -0
- package/dist/data-transfer/window-drop.d.ts +35 -0
- package/dist/data-transfer/window-drop.d.ts.map +1 -0
- package/dist/data-transfer/window-drop.js +311 -0
- package/dist/data-transfer/window-drop.js.map +1 -0
- package/dist/devices/native.js +1 -2
- package/dist/devices/native.js.map +1 -1
- package/dist/enums.d.ts +3 -0
- package/dist/enums.d.ts.map +1 -1
- package/dist/enums.js +3 -0
- package/dist/enums.js.map +1 -1
- package/dist/input/index.d.ts +2 -0
- package/dist/input/index.d.ts.map +1 -1
- package/dist/input/index.js +1 -0
- package/dist/input/index.js.map +1 -1
- package/dist/input/modifier-keys.d.ts +24 -0
- package/dist/input/modifier-keys.d.ts.map +1 -0
- package/dist/input/modifier-keys.js +20 -0
- package/dist/input/modifier-keys.js.map +1 -0
- package/dist/media/pixel-buffer.d.ts.map +1 -1
- package/dist/media/pixel-buffer.js +1 -1
- package/dist/media/pixel-buffer.js.map +1 -1
- package/dist/messaging/web-view2/core.d.ts +56 -0
- package/dist/messaging/web-view2/core.d.ts.map +1 -1
- package/dist/messaging/web-view2/core.js +6 -0
- package/dist/messaging/web-view2/core.js.map +1 -1
- package/dist/messaging/web-view2/environment.d.ts +41 -0
- package/dist/messaging/web-view2/environment.d.ts.map +1 -0
- package/dist/messaging/web-view2/environment.js +91 -0
- package/dist/messaging/web-view2/environment.js.map +1 -0
- package/dist/messaging/web-view2/index.d.ts +9 -1
- package/dist/messaging/web-view2/index.d.ts.map +1 -1
- package/dist/messaging/web-view2/index.js +5 -0
- package/dist/messaging/web-view2/index.js.map +1 -1
- package/dist/messaging/web-view2/input.d.ts +68 -0
- package/dist/messaging/web-view2/input.d.ts.map +1 -0
- package/dist/messaging/web-view2/input.js +108 -0
- package/dist/messaging/web-view2/input.js.map +1 -0
- package/dist/messaging/web-view2/protocol.d.ts +24 -0
- package/dist/messaging/web-view2/protocol.d.ts.map +1 -0
- package/dist/messaging/web-view2/protocol.js +31 -0
- package/dist/messaging/web-view2/protocol.js.map +1 -0
- package/dist/messaging/web-view2/recovery.d.ts +65 -0
- package/dist/messaging/web-view2/recovery.d.ts.map +1 -0
- package/dist/messaging/web-view2/recovery.js +138 -0
- package/dist/messaging/web-view2/recovery.js.map +1 -0
- package/dist/messaging/web-view2/requests.d.ts +88 -0
- package/dist/messaging/web-view2/requests.d.ts.map +1 -0
- package/dist/messaging/web-view2/requests.js +169 -0
- package/dist/messaging/web-view2/requests.js.map +1 -0
- package/dist/messaging/web-view2/transport.d.ts.map +1 -1
- package/dist/messaging/web-view2/transport.js +1 -4
- package/dist/messaging/web-view2/transport.js.map +1 -1
- package/dist/native-identity.d.ts +10 -0
- package/dist/native-identity.d.ts.map +1 -0
- package/dist/native-identity.js +20 -0
- package/dist/native-identity.js.map +1 -0
- package/dist/renderer/host/host.d.ts.map +1 -1
- package/dist/renderer/host/host.js +33 -16
- package/dist/renderer/host/host.js.map +1 -1
- package/dist/renderer/host/structure-sync.d.ts +9 -0
- package/dist/renderer/host/structure-sync.d.ts.map +1 -0
- package/dist/renderer/host/structure-sync.js +24 -0
- package/dist/renderer/host/structure-sync.js.map +1 -0
- package/dist/security/data-protection-error.d.ts +14 -0
- package/dist/security/data-protection-error.d.ts.map +1 -0
- package/dist/security/data-protection-error.js +15 -0
- package/dist/security/data-protection-error.js.map +1 -0
- package/dist/security/index.d.ts +48 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +32 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/native.d.ts +43 -0
- package/dist/security/native.d.ts.map +1 -0
- package/dist/security/native.js +170 -0
- package/dist/security/native.js.map +1 -0
- package/dist/security/protection-scope.d.ts +13 -0
- package/dist/security/protection-scope.d.ts.map +1 -0
- package/dist/security/protection-scope.js +11 -0
- package/dist/security/protection-scope.js.map +1 -0
- package/dist/store/states.d.ts +2 -2
- package/dist/store/windows-identity.d.ts +2 -6
- package/dist/store/windows-identity.d.ts.map +1 -1
- package/dist/store/windows-identity.js +2 -29
- package/dist/store/windows-identity.js.map +1 -1
- package/dist/store/windows-packages.d.ts +2 -2
- package/dist/store/windows-store.d.ts +2 -2
- package/dist/tray/click-detector.d.ts.map +1 -1
- package/dist/tray/click-detector.js.map +1 -1
- package/dist/tray/flyout-model.d.ts +4 -3
- package/dist/tray/flyout-model.d.ts.map +1 -1
- package/dist/tray/flyout-model.js +12 -2
- package/dist/tray/flyout-model.js.map +1 -1
- package/dist/tray/menu/icon.d.ts +17 -0
- package/dist/tray/menu/icon.d.ts.map +1 -0
- package/dist/tray/menu/icon.js +31 -0
- package/dist/tray/menu/icon.js.map +1 -0
- package/dist/tray/menu/index.d.ts +1 -1
- package/dist/tray/menu/index.d.ts.map +1 -1
- package/dist/tray/menu/index.js.map +1 -1
- package/dist/tray/menu/types.d.ts +23 -6
- package/dist/tray/menu/types.d.ts.map +1 -1
- package/dist/tray/menu/types.js.map +1 -1
- package/dist/tray/menu-svelte/menu-node.d.ts +4 -4
- package/dist/tray/native.d.ts +9 -4
- package/dist/tray/native.d.ts.map +1 -1
- package/dist/tray/native.js +10 -18
- package/dist/tray/native.js.map +1 -1
- package/dist/tray/personalize.d.ts +18 -0
- package/dist/tray/personalize.d.ts.map +1 -0
- package/dist/tray/personalize.js +42 -0
- package/dist/tray/personalize.js.map +1 -0
- package/dist/tray/standalone/icon-raster.d.ts +72 -0
- package/dist/tray/standalone/icon-raster.d.ts.map +1 -0
- package/dist/tray/standalone/icon-raster.js +161 -0
- package/dist/tray/standalone/icon-raster.js.map +1 -0
- package/dist/tray/standalone/index.d.ts +3 -2
- package/dist/tray/standalone/index.d.ts.map +1 -1
- package/dist/tray/standalone/index.js +1 -0
- package/dist/tray/standalone/index.js.map +1 -1
- package/dist/tray/standalone/menu-icons.d.ts +9 -0
- package/dist/tray/standalone/menu-icons.d.ts.map +1 -0
- package/dist/tray/standalone/menu-icons.js +280 -0
- package/dist/tray/standalone/menu-icons.js.map +1 -0
- package/dist/tray/standalone/native.d.ts +19 -6
- package/dist/tray/standalone/native.d.ts.map +1 -1
- package/dist/tray/standalone/native.js +58 -15
- package/dist/tray/standalone/native.js.map +1 -1
- package/dist/tray/standalone/standalone-tray.d.ts +4 -2
- package/dist/tray/standalone/standalone-tray.d.ts.map +1 -1
- package/dist/tray/standalone/standalone-tray.js +12 -2
- package/dist/tray/standalone/standalone-tray.js.map +1 -1
- package/dist/tray/themed-icon.d.ts.map +1 -1
- package/dist/tray/themed-icon.js +4 -28
- package/dist/tray/themed-icon.js.map +1 -1
- package/dist/tray/tray-core.d.ts.map +1 -1
- package/dist/tray/tray-core.js +5 -1
- package/dist/tray/tray-core.js.map +1 -1
- package/dist/tray/tray-extras.d.ts +26 -2
- package/dist/tray/tray-extras.d.ts.map +1 -1
- package/dist/web-apis/eye-dropper.d.ts.map +1 -1
- package/dist/web-apis/eye-dropper.js +8 -5
- package/dist/web-apis/eye-dropper.js.map +1 -1
- package/dist/web-apis/media-devices-source.d.ts +1 -1
- package/dist/web-apis/native.d.ts +0 -7
- package/dist/web-apis/native.d.ts.map +1 -1
- package/dist/web-apis/native.js +0 -19
- package/dist/web-apis/native.js.map +1 -1
- package/dist/win2d/activation-failure.d.ts +10 -0
- package/dist/win2d/activation-failure.d.ts.map +1 -0
- package/dist/win2d/activation-failure.js +30 -0
- package/dist/win2d/activation-failure.js.map +1 -0
- package/dist/win2d/element-lifecycle.d.ts.map +1 -1
- package/dist/win2d/element-lifecycle.js +6 -1
- package/dist/win2d/element-lifecycle.js.map +1 -1
- package/dist/win2d/manifest.d.ts +29 -0
- package/dist/win2d/manifest.d.ts.map +1 -0
- package/dist/win2d/manifest.js +67 -0
- package/dist/win2d/manifest.js.map +1 -0
- package/dist/win32/index.d.ts +3 -0
- package/dist/win32/index.d.ts.map +1 -0
- package/dist/win32/index.js +11 -0
- package/dist/win32/index.js.map +1 -0
- package/dist/win32-calls.d.ts +6 -0
- package/dist/win32-calls.d.ts.map +1 -1
- package/dist/win32-calls.js +6 -1
- package/dist/win32-calls.js.map +1 -1
- package/dist/win32-foreground.d.ts +20 -0
- package/dist/win32-foreground.d.ts.map +1 -1
- package/dist/win32-foreground.js +24 -4
- package/dist/win32-foreground.js.map +1 -1
- package/dist/win32-icons.d.ts.map +1 -1
- package/dist/win32-icons.js +1 -2
- package/dist/win32-icons.js.map +1 -1
- package/dist/win32-key-state.d.ts +31 -0
- package/dist/win32-key-state.d.ts.map +1 -0
- package/dist/win32-key-state.js +41 -0
- package/dist/win32-key-state.js.map +1 -0
- package/dist/window/anchor.d.ts +15 -0
- package/dist/window/anchor.d.ts.map +1 -1
- package/dist/window/anchor.js +23 -0
- package/dist/window/anchor.js.map +1 -1
- package/dist/window/apply-frame.d.ts +4 -2
- package/dist/window/apply-frame.d.ts.map +1 -1
- package/dist/window/apply-frame.js +2 -3
- package/dist/window/apply-frame.js.map +1 -1
- package/dist/window/bootstrap-core.d.ts +69 -0
- package/dist/window/bootstrap-core.d.ts.map +1 -0
- package/dist/window/bootstrap-core.js +93 -0
- package/dist/window/bootstrap-core.js.map +1 -0
- package/dist/window/bootstrap-mode.d.ts +21 -0
- package/dist/window/bootstrap-mode.d.ts.map +1 -0
- package/dist/window/bootstrap-mode.js +17 -0
- package/dist/window/bootstrap-mode.js.map +1 -0
- package/dist/window/bootstrap.d.ts +12 -28
- package/dist/window/bootstrap.d.ts.map +1 -1
- package/dist/window/bootstrap.js +18 -66
- package/dist/window/bootstrap.js.map +1 -1
- package/dist/window/cover.d.ts +43 -0
- package/dist/window/cover.d.ts.map +1 -0
- package/dist/window/cover.js +64 -0
- package/dist/window/cover.js.map +1 -0
- package/dist/window/create-window.d.ts +1 -1
- package/dist/window/create-window.d.ts.map +1 -1
- package/dist/window/create-window.js +1 -0
- package/dist/window/create-window.js.map +1 -1
- package/dist/window/dpi-awareness.d.ts +71 -0
- package/dist/window/dpi-awareness.d.ts.map +1 -0
- package/dist/window/dpi-awareness.js +127 -0
- package/dist/window/dpi-awareness.js.map +1 -0
- package/dist/window/foreground-native.d.ts.map +1 -1
- package/dist/window/foreground-native.js +3 -5
- package/dist/window/foreground-native.js.map +1 -1
- package/dist/window/index.d.ts +2 -0
- package/dist/window/index.d.ts.map +1 -1
- package/dist/window/index.js +1 -0
- package/dist/window/index.js.map +1 -1
- package/dist/window/native.d.ts.map +1 -1
- package/dist/window/native.js +1 -2
- package/dist/window/native.js.map +1 -1
- package/dist/window/package-identity.d.ts +17 -0
- package/dist/window/package-identity.d.ts.map +1 -0
- package/dist/window/package-identity.js +97 -0
- package/dist/window/package-identity.js.map +1 -0
- package/dist/window/system-dispatcher-queue.d.ts.map +1 -1
- package/dist/window/system-dispatcher-queue.js +1 -2
- package/dist/window/system-dispatcher-queue.js.map +1 -1
- package/dist/window/taskbar-calls.d.ts +1 -1
- package/dist/window/taskbar-native.d.ts.map +1 -1
- package/dist/window/taskbar-native.js +1 -2
- package/dist/window/taskbar-native.js.map +1 -1
- package/dist/window/window-handle.d.ts +25 -1
- package/dist/window/window-handle.d.ts.map +1 -1
- package/dist/window/window-handle.js +27 -1
- package/dist/window/window-handle.js.map +1 -1
- package/dist/window/window-host.svelte.d.ts +10 -1
- package/dist/window/window-host.svelte.d.ts.map +1 -1
- package/dist/window/window-host.svelte.js +38 -4
- package/dist/window/window-host.svelte.js.map +1 -1
- package/package.json +26 -4
- package/src/app/activate.ts +3 -0
- package/src/app/activation/index.ts +3 -0
- package/src/app/activation/login.ts +2 -1
- package/src/app/activation/native.ts +1 -1
- package/src/app/activation/packaged.ts +118 -0
- package/src/app/activation/receive.ts +24 -4
- package/src/app/activation/registration.ts +7 -7
- package/src/app/activation/scheme.ts +19 -0
- package/src/app/index.ts +4 -2
- package/src/app/instance-running.ts +22 -0
- package/src/app/jump-list/native.ts +1 -2
- package/src/app/native-messaging/browsers.ts +21 -0
- package/src/app/native-messaging/index.ts +124 -0
- package/src/app/native.ts +1 -32
- package/src/app/notification-source.ts +1 -3
- package/src/app/shell/native.ts +1 -1
- package/src/app/single-instance.ts +34 -10
- package/src/automation/native.ts +1 -2
- package/src/chrome/context-menus/context-menu-schema.ts +1 -12
- package/src/chrome/parse-or-throw.ts +14 -0
- package/src/chrome/permissions/permission-schema.ts +1 -12
- package/src/chrome/windows/chrome-windows.ts +1 -13
- package/src/components/hand-written/items/keyed-rows.svelte.ts +6 -0
- package/src/components/index.ts +1 -0
- package/src/components/runtime.svelte.ts +8 -0
- package/src/css/runtime/containers.ts +1 -20
- package/src/css/runtime/native.ts +46 -21
- package/src/css/translate/property-kit.ts +9 -0
- package/src/css/translate/transition-properties.ts +44 -10
- package/src/data-transfer/data-transfer.ts +3 -3
- package/src/data-transfer/drag-effects.ts +48 -4
- package/src/data-transfer/drag-helper.ts +216 -0
- package/src/data-transfer/drop-target.ts +90 -26
- package/src/data-transfer/index.ts +1 -0
- package/src/data-transfer/launcher.ts +65 -9
- package/src/data-transfer/native.ts +184 -0
- package/src/data-transfer/ole-data-object.ts +200 -0
- package/src/data-transfer/ole-drop-target.ts +263 -0
- package/src/data-transfer/share-interop.ts +1 -1
- package/src/data-transfer/shell-items.ts +81 -0
- package/src/data-transfer/window-drop.ts +411 -0
- package/src/devices/native.ts +1 -1
- package/src/enums.ts +3 -0
- package/src/input/index.ts +2 -0
- package/src/input/modifier-keys.ts +30 -0
- package/src/media/pixel-buffer.ts +1 -1
- package/src/messaging/web-view2/core.ts +64 -0
- package/src/messaging/web-view2/environment.ts +131 -0
- package/src/messaging/web-view2/index.ts +11 -0
- package/src/messaging/web-view2/input.ts +154 -0
- package/src/messaging/web-view2/protocol.ts +41 -0
- package/src/messaging/web-view2/recovery.ts +177 -0
- package/src/messaging/web-view2/requests.ts +238 -0
- package/src/messaging/web-view2/transport.ts +1 -5
- package/src/native-identity.ts +22 -0
- package/src/renderer/host/host.ts +39 -17
- package/src/renderer/host/structure-sync.ts +25 -0
- package/src/security/data-protection-error.ts +18 -0
- package/src/security/index.ts +57 -0
- package/src/security/native.ts +234 -0
- package/src/security/protection-scope.ts +13 -0
- package/src/store/windows-identity.ts +3 -35
- package/src/tray/click-detector.ts +6 -7
- package/src/tray/flyout-model.ts +14 -3
- package/src/tray/menu/icon.ts +40 -0
- package/src/tray/menu/index.ts +3 -0
- package/src/tray/menu/types.ts +27 -6
- package/src/tray/native.ts +20 -21
- package/src/tray/personalize.ts +57 -0
- package/src/tray/pointer-share.ts +3 -3
- package/src/tray/standalone/icon-raster.ts +208 -0
- package/src/tray/standalone/index.ts +4 -1
- package/src/tray/standalone/menu-icons.ts +317 -0
- package/src/tray/standalone/native.ts +78 -15
- package/src/tray/standalone/standalone-tray.ts +26 -5
- package/src/tray/themed-icon.ts +4 -36
- package/src/tray/tray-core.ts +6 -1
- package/src/tray/tray-extras.ts +31 -2
- package/src/web-apis/eye-dropper.ts +9 -5
- package/src/web-apis/native.ts +0 -20
- package/src/win2d/activation-failure.ts +35 -0
- package/src/win2d/element-lifecycle.ts +6 -1
- package/src/win2d/manifest.ts +78 -0
- package/src/win32/index.ts +19 -0
- package/src/win32-calls.ts +8 -1
- package/src/win32-foreground.ts +28 -4
- package/src/win32-icons.ts +7 -2
- package/src/win32-key-state.ts +48 -0
- package/src/window/anchor.ts +28 -0
- package/src/window/apply-frame.ts +6 -4
- package/src/window/bootstrap-core.ts +165 -0
- package/src/window/bootstrap-mode.ts +23 -0
- package/src/window/bootstrap.ts +20 -103
- package/src/window/cover.ts +100 -0
- package/src/window/create-window.ts +2 -0
- package/src/window/dpi-awareness.ts +162 -0
- package/src/window/foreground-native.ts +3 -5
- package/src/window/index.ts +2 -0
- package/src/window/native.ts +1 -1
- package/src/window/package-identity.ts +112 -0
- package/src/window/system-dispatcher-queue.ts +7 -2
- package/src/window/taskbar-native.ts +1 -2
- package/src/window/window-handle.ts +29 -1
- package/src/window/window-host.svelte.ts +58 -5
- package/web-types.json +11 -3
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { BYTES_PER_PIXEL } from "#src/win32-icons.js";
|
|
2
|
+
import type { IconPixels } from "#src/win32-icons.js";
|
|
3
|
+
|
|
4
|
+
// The pixel work of a menu icon, as plain functions over bytes so that it is tested without Windows:
|
|
5
|
+
// tinting, dimming and the premultiplied-alpha square a menu bitmap holds.
|
|
6
|
+
|
|
7
|
+
const BLUE = 0;
|
|
8
|
+
const GREEN = 1;
|
|
9
|
+
const RED = 2;
|
|
10
|
+
const ALPHA = 3;
|
|
11
|
+
const BYTE_MAX = 255;
|
|
12
|
+
const RED_WEIGHT = 0.299;
|
|
13
|
+
const GREEN_WEIGHT = 0.587;
|
|
14
|
+
const BLUE_WEIGHT = 0.114;
|
|
15
|
+
|
|
16
|
+
const GREEN_SHIFT = 8;
|
|
17
|
+
const RED_SHIFT = 16;
|
|
18
|
+
|
|
19
|
+
function channelsOf(rgb: number) {
|
|
20
|
+
return [rgb & BYTE_MAX, rgb >> GREEN_SHIFT & BYTE_MAX, rgb >> RED_SHIFT & BYTE_MAX] as const;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** How much of its alpha a disabled item's icon keeps. */
|
|
24
|
+
export const DISABLED_ALPHA = 0.45;
|
|
25
|
+
|
|
26
|
+
/** An image of any shape; `bgra` is `width * height * 4` bytes, blue first, straight (not premultiplied) alpha. */
|
|
27
|
+
export interface Raster {
|
|
28
|
+
readonly width: number;
|
|
29
|
+
readonly height: number;
|
|
30
|
+
readonly bgra: Uint8Array;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The raster of square icon pixels.
|
|
35
|
+
*
|
|
36
|
+
* @param pixels - Square BGRA pixels.
|
|
37
|
+
* @returns The same pixels as a raster.
|
|
38
|
+
*/
|
|
39
|
+
export function rasterOf({ size, bgra }: IconPixels) {
|
|
40
|
+
return {
|
|
41
|
+
width: size,
|
|
42
|
+
height: size,
|
|
43
|
+
bgra
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Paints a raster in one color and keeps its alpha, so a monochrome glyph takes the menu's text color.
|
|
49
|
+
*
|
|
50
|
+
* @param options - `raster`: the glyph; `rgb`: the color as 0xRRGGBB.
|
|
51
|
+
* @returns The recolored raster.
|
|
52
|
+
*/
|
|
53
|
+
export function tintedRaster({ raster, rgb }: {
|
|
54
|
+
readonly raster: Raster;
|
|
55
|
+
readonly rgb: number;
|
|
56
|
+
}) {
|
|
57
|
+
const bgra = new Uint8Array(raster.bgra);
|
|
58
|
+
const [blue, green, red] = channelsOf(rgb);
|
|
59
|
+
for (let i = 0; i < bgra.length; i += BYTES_PER_PIXEL) {
|
|
60
|
+
bgra[i + BLUE] = blue;
|
|
61
|
+
bgra[i + GREEN] = green;
|
|
62
|
+
bgra[i + RED] = red;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return {
|
|
66
|
+
...raster,
|
|
67
|
+
bgra
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The look of a disabled item: the colors turned to grey and the alpha lowered.
|
|
73
|
+
*
|
|
74
|
+
* @param raster - The enabled picture.
|
|
75
|
+
* @returns The dimmed raster.
|
|
76
|
+
*/
|
|
77
|
+
export function dimmedRaster(raster: Raster) {
|
|
78
|
+
const bgra = new Uint8Array(raster.bgra);
|
|
79
|
+
for (let i = 0; i < bgra.length; i += BYTES_PER_PIXEL) {
|
|
80
|
+
const grey = Math.round(
|
|
81
|
+
(bgra[i + RED] ?? 0) * RED_WEIGHT + (bgra[i + GREEN] ?? 0) * GREEN_WEIGHT + (bgra[i + BLUE] ?? 0) * BLUE_WEIGHT
|
|
82
|
+
);
|
|
83
|
+
bgra[i + BLUE] = grey;
|
|
84
|
+
bgra[i + GREEN] = grey;
|
|
85
|
+
bgra[i + RED] = grey;
|
|
86
|
+
bgra[i + ALPHA] = Math.round((bgra[i + ALPHA] ?? 0) * DISABLED_ALPHA);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return {
|
|
90
|
+
...raster,
|
|
91
|
+
bgra
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function overlap({ low, high, index }: {
|
|
96
|
+
readonly low: number;
|
|
97
|
+
readonly high: number;
|
|
98
|
+
readonly index: number;
|
|
99
|
+
}) {
|
|
100
|
+
return Math.max(0, Math.min(high, index + 1) - Math.max(low, index));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function averaged({ raster, left, top, right, bottom }: {
|
|
104
|
+
readonly raster: Raster;
|
|
105
|
+
readonly left: number;
|
|
106
|
+
readonly top: number;
|
|
107
|
+
readonly right: number;
|
|
108
|
+
readonly bottom: number;
|
|
109
|
+
}) {
|
|
110
|
+
const sum = [0, 0, 0, 0];
|
|
111
|
+
let area = 0;
|
|
112
|
+
const lastX = Math.min(raster.width, Math.ceil(right));
|
|
113
|
+
const lastY = Math.min(raster.height, Math.ceil(bottom));
|
|
114
|
+
for (let y = Math.max(0, Math.floor(top)); y < lastY; y++) {
|
|
115
|
+
const rowWeight = overlap({
|
|
116
|
+
low: top,
|
|
117
|
+
high: bottom,
|
|
118
|
+
index: y
|
|
119
|
+
});
|
|
120
|
+
for (let x = Math.max(0, Math.floor(left)); x < lastX; x++) {
|
|
121
|
+
const weight = rowWeight * overlap({
|
|
122
|
+
low: left,
|
|
123
|
+
high: right,
|
|
124
|
+
index: x
|
|
125
|
+
});
|
|
126
|
+
const offset = (y * raster.width + x) * BYTES_PER_PIXEL;
|
|
127
|
+
const alpha = (raster.bgra[offset + ALPHA] ?? 0) / BYTE_MAX;
|
|
128
|
+
sum[BLUE] = (sum[BLUE] ?? 0) + weight * alpha * (raster.bgra[offset + BLUE] ?? 0);
|
|
129
|
+
sum[GREEN] = (sum[GREEN] ?? 0) + weight * alpha * (raster.bgra[offset + GREEN] ?? 0);
|
|
130
|
+
sum[RED] = (sum[RED] ?? 0) + weight * alpha * (raster.bgra[offset + RED] ?? 0);
|
|
131
|
+
sum[ALPHA] = (sum[ALPHA] ?? 0) + weight * alpha * BYTE_MAX;
|
|
132
|
+
area += weight;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return {
|
|
137
|
+
sum,
|
|
138
|
+
area
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* The raster fitted into a `size` square, centered and with its aspect kept, as the premultiplied-alpha
|
|
144
|
+
* BGRA bytes a menu bitmap holds. A square raster of exactly `size` is converted without resampling; any
|
|
145
|
+
* other is averaged over the source area each pixel covers, so a shrunk icon stays smooth.
|
|
146
|
+
*
|
|
147
|
+
* @param options - `raster`: the picture; `size`: the side of the square, in pixels.
|
|
148
|
+
* @returns `size * size * 4` bytes.
|
|
149
|
+
*/
|
|
150
|
+
export function premultipliedSquare({ raster, size }: {
|
|
151
|
+
readonly raster: Raster;
|
|
152
|
+
readonly size: number;
|
|
153
|
+
}) {
|
|
154
|
+
const out = new Uint8Array(size * size * BYTES_PER_PIXEL);
|
|
155
|
+
const scale = size / Math.max(raster.width, raster.height);
|
|
156
|
+
const offsetX = (size - raster.width * scale) / 2;
|
|
157
|
+
const offsetY = (size - raster.height * scale) / 2;
|
|
158
|
+
for (let y = 0; y < size; y++) {
|
|
159
|
+
for (let x = 0; x < size; x++) {
|
|
160
|
+
const { sum, area } = averaged({
|
|
161
|
+
raster,
|
|
162
|
+
left: (x - offsetX) / scale,
|
|
163
|
+
top: (y - offsetY) / scale,
|
|
164
|
+
right: (x + 1 - offsetX) / scale,
|
|
165
|
+
bottom: (y + 1 - offsetY) / scale
|
|
166
|
+
});
|
|
167
|
+
const offset = (y * size + x) * BYTES_PER_PIXEL;
|
|
168
|
+
const isCovered = area > 0;
|
|
169
|
+
for (let channel = 0; isCovered && channel < BYTES_PER_PIXEL; channel++) {
|
|
170
|
+
out[offset + channel] = Math.round((sum[channel] ?? 0) / area);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return out;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Draws a one-pixel frame around the edge of a premultiplied square, over what is there: how a ticked
|
|
180
|
+
* line with an icon shows its tick, because Windows draws the icon where the check mark would be.
|
|
181
|
+
*
|
|
182
|
+
* @param options - `bytes`: the premultiplied square; `size`: its side; `rgb`: the frame's color;
|
|
183
|
+
* `alpha`: its opacity from 0 to 1.
|
|
184
|
+
* @returns The square with the frame.
|
|
185
|
+
*/
|
|
186
|
+
export function framedSquare({ bytes, size, rgb, alpha }: {
|
|
187
|
+
readonly bytes: Uint8Array;
|
|
188
|
+
readonly size: number;
|
|
189
|
+
readonly rgb: number;
|
|
190
|
+
readonly alpha: number;
|
|
191
|
+
}) {
|
|
192
|
+
const out = new Uint8Array(bytes);
|
|
193
|
+
const last = size - 1;
|
|
194
|
+
const frame = channelsOf(rgb);
|
|
195
|
+
for (let y = 0; y < size; y++) {
|
|
196
|
+
for (let x = 0; x < size; x++) {
|
|
197
|
+
const isEdge = x === 0 || y === 0 || x === last || y === last;
|
|
198
|
+
const offset = (y * size + x) * BYTES_PER_PIXEL;
|
|
199
|
+
const kept = 1 - alpha;
|
|
200
|
+
for (let channel = 0; isEdge && channel < BYTES_PER_PIXEL; channel++) {
|
|
201
|
+
const over = channel === ALPHA ? BYTE_MAX : frame[channel] ?? 0;
|
|
202
|
+
out[offset + channel] = Math.round(over * alpha + (bytes[offset + channel] ?? 0) * kept);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return out;
|
|
208
|
+
}
|
|
@@ -5,7 +5,7 @@ export type { NativeChoice, NativeMenu } from "./native.ts";
|
|
|
5
5
|
export { resolveMenu } from "#src/tray/menu/resolve.js";
|
|
6
6
|
export type { MenuResolver } from "#src/tray/menu/resolve-lite.js";
|
|
7
7
|
export { MenuItemKind, MenuLevel } from "#src/tray/menu/types.js";
|
|
8
|
-
export type { MenuItem, MenuProfile } from "#src/tray/menu/types.js";
|
|
8
|
+
export type { MenuIcon, MenuIconPair, MenuIconTinted, MenuItem, MenuProfile } from "#src/tray/menu/types.js";
|
|
9
9
|
export type {
|
|
10
10
|
StandaloneTrayOptions,
|
|
11
11
|
StandaloneTraySeams
|
|
@@ -13,10 +13,13 @@ export type {
|
|
|
13
13
|
export { createStandaloneTray } from "./standalone-tray.ts";
|
|
14
14
|
export { balloons } from "#src/tray/balloons.js";
|
|
15
15
|
export { bounds } from "#src/tray/bounds.js";
|
|
16
|
+
export { menuIcons } from "./menu-icons.ts";
|
|
16
17
|
export { themedIcon } from "#src/tray/themed-icon.js";
|
|
17
18
|
export type {
|
|
18
19
|
BalloonsExtra,
|
|
19
20
|
BoundsExtra,
|
|
21
|
+
MenuIconCalls,
|
|
22
|
+
MenuIconsExtra,
|
|
20
23
|
ThemedIconExtra,
|
|
21
24
|
TrayExtra,
|
|
22
25
|
TrayHandle
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import {
|
|
2
|
+
dimmedRaster,
|
|
3
|
+
DISABLED_ALPHA,
|
|
4
|
+
framedSquare,
|
|
5
|
+
premultipliedSquare,
|
|
6
|
+
rasterOf,
|
|
7
|
+
tintedRaster
|
|
8
|
+
} from "./icon-raster.ts";
|
|
9
|
+
import type { Raster } from "./icon-raster.ts";
|
|
10
|
+
import { MenuColorScheme } from "./menu-theme.ts";
|
|
11
|
+
import { DynComRawMemory } from "@microsoft/dynwinrt/com/unsafe/raw";
|
|
12
|
+
import { pictureOf } from "#src/tray/menu/icon.js";
|
|
13
|
+
import type { MenuIcon } from "#src/tray/menu/types.js";
|
|
14
|
+
import { createLightReader, PersonalizeValue } from "#src/tray/personalize.js";
|
|
15
|
+
import type { MenuIconCalls, MenuIconsExtra } from "#src/tray/tray-extras.js";
|
|
16
|
+
import { bindDll, POINTER_BYTES, wideMemory, withMemory } from "#src/win32-calls.js";
|
|
17
|
+
import { BYTES_PER_PIXEL } from "#src/win32-icons.js";
|
|
18
|
+
import { statSync } from "node:fs";
|
|
19
|
+
import path from "node:path";
|
|
20
|
+
|
|
21
|
+
// The bitmaps a popup menu item draws beside its label (MIIM_BITMAP). Windows draws an item's bitmap
|
|
22
|
+
// with alpha only when it is a 32-bit DIB section of premultiplied pixels, at the size of the menu's
|
|
23
|
+
// check mark at the screen's scale; it does not dim the bitmap of a disabled item, so that is done here.
|
|
24
|
+
|
|
25
|
+
const SM_CXMENUCHECK = 71;
|
|
26
|
+
const SM_CXSMICON = 49;
|
|
27
|
+
const DIB_RGB_COLORS = 0;
|
|
28
|
+
const BITS_PER_PIXEL = 32;
|
|
29
|
+
const HEADER_BYTES = 40;
|
|
30
|
+
const INFO_BYTES = 44;
|
|
31
|
+
const OFFSET_WIDTH = 4;
|
|
32
|
+
const OFFSET_HEIGHT = 8;
|
|
33
|
+
const OFFSET_PLANES = 12;
|
|
34
|
+
const OFFSET_BIT_COUNT = 14;
|
|
35
|
+
const GDIP_OK = 0;
|
|
36
|
+
const GDIP_STARTUP_INPUT_BYTES = 24;
|
|
37
|
+
const GDIP_LOCK_READ = 1;
|
|
38
|
+
const GDIP_FORMAT_32BPP_ARGB = 0x26200A;
|
|
39
|
+
const RECT_BYTES = 16;
|
|
40
|
+
const OFFSET_RECT_WIDTH = 8;
|
|
41
|
+
const OFFSET_RECT_HEIGHT = 12;
|
|
42
|
+
const BITMAP_DATA_BYTES = 32;
|
|
43
|
+
const OFFSET_STRIDE = 8;
|
|
44
|
+
const OFFSET_SCAN0 = 16;
|
|
45
|
+
const NO_BITMAP = 0n;
|
|
46
|
+
const TICK_ALPHA = 0.8;
|
|
47
|
+
const DARK_TEXT_RGB = 0xFFFFFF;
|
|
48
|
+
const LIGHT_TEXT_RGB = 0x1B1B1B;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The menu's text color, which a tinted glyph takes.
|
|
52
|
+
*
|
|
53
|
+
* @param isDark - Whether the menu is dark.
|
|
54
|
+
* @returns The color as 0xRRGGBB.
|
|
55
|
+
*/
|
|
56
|
+
function menuTextRgb(isDark: boolean) {
|
|
57
|
+
return isDark ? DARK_TEXT_RGB : LIGHT_TEXT_RGB;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function fileKeyOf(file: string) {
|
|
61
|
+
const resolved = path.resolve(file);
|
|
62
|
+
const stat = statSync(resolved, { throwIfNoEntry: false });
|
|
63
|
+
return stat?.isFile() ? `${resolved}|${stat.mtimeMs}` : undefined;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The Win32 calls that decode a picture file and make a menu bitmap of pixels, bound when this is
|
|
68
|
+
* called. Files are decoded by GDI+ (png, ico, bmp, jpeg, gif and tiff, with no dependency of the
|
|
69
|
+
* package) and kept by path and modification time, so a menu that opens again does not decode again.
|
|
70
|
+
*/
|
|
71
|
+
function createMenuIconCalls() {
|
|
72
|
+
const { dpi, metrics } = bindDll({
|
|
73
|
+
dll: "user32.dll",
|
|
74
|
+
functions: {
|
|
75
|
+
dpi: ["GetDpiForSystem", [], "u32"],
|
|
76
|
+
metrics: ["GetSystemMetricsForDpi", ["i32", "u32"], "i32"]
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
const { createSection, deleteObject } = bindDll({
|
|
80
|
+
dll: "gdi32.dll",
|
|
81
|
+
functions: {
|
|
82
|
+
createSection: ["CreateDIBSection", ["pointer", "pointer", "u32", "pointer", "pointer", "u32"], "pointer"],
|
|
83
|
+
deleteObject: ["DeleteObject", ["pointer"], "i32"]
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
const { copyMemory } = bindDll({
|
|
87
|
+
dll: "kernel32.dll",
|
|
88
|
+
functions: {
|
|
89
|
+
copyMemory: ["RtlMoveMemory", ["pointer", "pointer", "i64"], "i32"]
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
const gdiplus = bindDll({
|
|
93
|
+
dll: "gdiplus.dll",
|
|
94
|
+
functions: {
|
|
95
|
+
startup: ["GdiplusStartup", ["pointer", "pointer", "pointer"], "i32"],
|
|
96
|
+
shutdown: ["GdiplusShutdown", ["pointer"], "i32"],
|
|
97
|
+
fromFile: ["GdipCreateBitmapFromFile", ["pointer", "pointer"], "i32"],
|
|
98
|
+
imageWidth: ["GdipGetImageWidth", ["pointer", "pointer"], "i32"],
|
|
99
|
+
imageHeight: ["GdipGetImageHeight", ["pointer", "pointer"], "i32"],
|
|
100
|
+
lockBits: ["GdipBitmapLockBits", ["pointer", "pointer", "u32", "i32", "pointer"], "i32"],
|
|
101
|
+
unlockBits: ["GdipBitmapUnlockBits", ["pointer", "pointer"], "i32"],
|
|
102
|
+
dispose: ["GdipDisposeImage", ["pointer"], "i32"]
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
const readAppsAreLight = createLightReader({
|
|
106
|
+
value: PersonalizeValue.APPS_ARE_LIGHT,
|
|
107
|
+
isLightWhenMissing: true
|
|
108
|
+
});
|
|
109
|
+
const decoded = new Map<string, Raster | undefined>();
|
|
110
|
+
|
|
111
|
+
function withGdiplus<T>(use: () => T) {
|
|
112
|
+
const token = DynComRawMemory.allocate(POINTER_BYTES, POINTER_BYTES);
|
|
113
|
+
const input = DynComRawMemory.allocate(GDIP_STARTUP_INPUT_BYTES, POINTER_BYTES);
|
|
114
|
+
input.writeU32(0, 1);
|
|
115
|
+
const isStarted = gdiplus.startup(token, input, null) === GDIP_OK;
|
|
116
|
+
input.release();
|
|
117
|
+
|
|
118
|
+
if (!isStarted) {
|
|
119
|
+
token.release();
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
try {
|
|
124
|
+
return use();
|
|
125
|
+
} finally {
|
|
126
|
+
gdiplus.shutdown(token.readU64(0));
|
|
127
|
+
token.release();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function sizeOf(image: bigint) {
|
|
132
|
+
return withMemory({
|
|
133
|
+
size: POINTER_BYTES,
|
|
134
|
+
alignment: POINTER_BYTES,
|
|
135
|
+
use(out) {
|
|
136
|
+
gdiplus.imageWidth(image, out);
|
|
137
|
+
const width = out.readU32(0);
|
|
138
|
+
gdiplus.imageHeight(image, out);
|
|
139
|
+
return {
|
|
140
|
+
width,
|
|
141
|
+
height: out.readU32(0)
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function straightPixelsOf(image: bigint) {
|
|
148
|
+
const { width, height } = sizeOf(image);
|
|
149
|
+
return withMemory({
|
|
150
|
+
size: RECT_BYTES + BITMAP_DATA_BYTES,
|
|
151
|
+
alignment: POINTER_BYTES,
|
|
152
|
+
use(block) {
|
|
153
|
+
block.writeI32(OFFSET_RECT_WIDTH, width);
|
|
154
|
+
block.writeI32(OFFSET_RECT_HEIGHT, height);
|
|
155
|
+
const data = block.pointer(RECT_BYTES).address;
|
|
156
|
+
const isLocked = gdiplus.lockBits(image, block, GDIP_LOCK_READ, GDIP_FORMAT_32BPP_ARGB, data) === GDIP_OK;
|
|
157
|
+
if (!isLocked) {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const stride = block.readI32(RECT_BYTES + OFFSET_STRIDE);
|
|
162
|
+
const scan0 = block.readU64(RECT_BYTES + OFFSET_SCAN0);
|
|
163
|
+
const bgra = new Uint8Array(width * height * BYTES_PER_PIXEL);
|
|
164
|
+
const isTight = stride === width * BYTES_PER_PIXEL;
|
|
165
|
+
if (isTight) {
|
|
166
|
+
withMemory({
|
|
167
|
+
size: bgra.length,
|
|
168
|
+
alignment: BYTES_PER_PIXEL,
|
|
169
|
+
use(copy) {
|
|
170
|
+
copyMemory(copy, scan0, BigInt(bgra.length));
|
|
171
|
+
bgra.set(copy.readBytes(0, bgra.length));
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
gdiplus.unlockBits(image, data);
|
|
177
|
+
return isTight ? {
|
|
178
|
+
width,
|
|
179
|
+
height,
|
|
180
|
+
bgra
|
|
181
|
+
} : undefined;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function decode(file: string) {
|
|
187
|
+
const name = wideMemory(file);
|
|
188
|
+
const out = DynComRawMemory.allocate(POINTER_BYTES, POINTER_BYTES);
|
|
189
|
+
try {
|
|
190
|
+
const isLoaded = gdiplus.fromFile(name, out) === GDIP_OK;
|
|
191
|
+
if (!isLoaded) {
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const image = out.readU64(0);
|
|
196
|
+
const raster = straightPixelsOf(image);
|
|
197
|
+
gdiplus.dispose(image);
|
|
198
|
+
return raster;
|
|
199
|
+
} finally {
|
|
200
|
+
name.release();
|
|
201
|
+
out.release();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function rasterOfFile(file: string) {
|
|
206
|
+
const key = fileKeyOf(file);
|
|
207
|
+
const isMissing = key === undefined;
|
|
208
|
+
if (isMissing) {
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (!decoded.has(key)) {
|
|
213
|
+
decoded.set(key, withGdiplus(() => decode(path.resolve(file))));
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return decoded.get(key);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
function sectionOf({ bytes, size }: {
|
|
220
|
+
readonly bytes: Uint8Array;
|
|
221
|
+
readonly size: number;
|
|
222
|
+
}) {
|
|
223
|
+
const block = DynComRawMemory.allocate(INFO_BYTES + POINTER_BYTES, POINTER_BYTES);
|
|
224
|
+
const source = DynComRawMemory.allocate(bytes.length, BYTES_PER_PIXEL);
|
|
225
|
+
try {
|
|
226
|
+
block.writeU32(0, HEADER_BYTES);
|
|
227
|
+
block.writeI32(OFFSET_WIDTH, size);
|
|
228
|
+
block.writeI32(OFFSET_HEIGHT, -size);
|
|
229
|
+
block.writeU16(OFFSET_PLANES, 1);
|
|
230
|
+
block.writeU16(OFFSET_BIT_COUNT, BITS_PER_PIXEL);
|
|
231
|
+
const bitsOut = block.pointer(INFO_BYTES).address;
|
|
232
|
+
const bitmap = createSection(null, block, DIB_RGB_COLORS, bitsOut, null, 0);
|
|
233
|
+
const bits = block.readU64(INFO_BYTES);
|
|
234
|
+
const isMade = bitmap !== NO_BITMAP && bits !== NO_BITMAP;
|
|
235
|
+
if (isMade) {
|
|
236
|
+
source.writeBytes(0, Buffer.from(bytes));
|
|
237
|
+
copyMemory(bits, source, BigInt(bytes.length));
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return bitmap;
|
|
241
|
+
} finally {
|
|
242
|
+
block.release();
|
|
243
|
+
source.release();
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
const calls: MenuIconCalls = {
|
|
248
|
+
isDark(colorScheme) {
|
|
249
|
+
const isSystem = colorScheme === MenuColorScheme.SYSTEM;
|
|
250
|
+
return isSystem ? !readAppsAreLight() : colorScheme === MenuColorScheme.DARK;
|
|
251
|
+
},
|
|
252
|
+
/** The side of a menu bitmap at the screen's scale: the menu's check mark, or the small icon if that is larger. */
|
|
253
|
+
size() {
|
|
254
|
+
const scale = dpi();
|
|
255
|
+
return Math.max(metrics(SM_CXMENUCHECK, scale), metrics(SM_CXSMICON, scale));
|
|
256
|
+
},
|
|
257
|
+
/**
|
|
258
|
+
* A premultiplied 32-bit bitmap of a picture, for `hbmpItem`.
|
|
259
|
+
*
|
|
260
|
+
* @returns The bitmap handle, to free with `free`; 0n when the picture cannot be read.
|
|
261
|
+
*/
|
|
262
|
+
bitmapOf({ icon, isDark, isEnabled, isChecked, size }: {
|
|
263
|
+
readonly icon: MenuIcon;
|
|
264
|
+
readonly isDark: boolean;
|
|
265
|
+
readonly isEnabled: boolean;
|
|
266
|
+
readonly isChecked: boolean;
|
|
267
|
+
readonly size: number;
|
|
268
|
+
}) {
|
|
269
|
+
const picture = pictureOf({
|
|
270
|
+
icon,
|
|
271
|
+
isDark
|
|
272
|
+
});
|
|
273
|
+
const { source } = picture;
|
|
274
|
+
const raster = typeof source === "string" ? rasterOfFile(source) : rasterOf(source);
|
|
275
|
+
const isUnreadable = raster === undefined;
|
|
276
|
+
if (isUnreadable) {
|
|
277
|
+
return NO_BITMAP;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const colored = picture.isTinted ? tintedRaster({
|
|
281
|
+
raster,
|
|
282
|
+
rgb: menuTextRgb(isDark)
|
|
283
|
+
}) : raster;
|
|
284
|
+
const square = premultipliedSquare({
|
|
285
|
+
raster: isEnabled ? colored : dimmedRaster(colored),
|
|
286
|
+
size
|
|
287
|
+
});
|
|
288
|
+
return sectionOf({
|
|
289
|
+
bytes: isChecked ? framedSquare({
|
|
290
|
+
bytes: square,
|
|
291
|
+
size,
|
|
292
|
+
rgb: menuTextRgb(isDark),
|
|
293
|
+
alpha: isEnabled ? TICK_ALPHA : TICK_ALPHA * DISABLED_ALPHA
|
|
294
|
+
}) : square,
|
|
295
|
+
size
|
|
296
|
+
});
|
|
297
|
+
},
|
|
298
|
+
/** Frees a bitmap `bitmapOf` made; call it after the menu is destroyed. */
|
|
299
|
+
free(bitmap: bigint) {
|
|
300
|
+
deleteObject(bitmap);
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
return calls;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* The extra that draws the `icon` of the lines of a standalone tray's menu, as a bitmap beside the label:
|
|
308
|
+
* a path to a png, ico, bmp, jpeg, gif or tiff, `IconPixels`, a `{ forLightMenu, forDarkMenu }` pair, or
|
|
309
|
+
* `{ tinted }` for a monochrome glyph that takes the menu's text color. Pass it in `extras`; without it
|
|
310
|
+
* no line shows an icon and none of this code is in the bundle.
|
|
311
|
+
*/
|
|
312
|
+
export const menuIcons: MenuIconsExtra = {
|
|
313
|
+
kind: "menuIcons",
|
|
314
|
+
createCalls() {
|
|
315
|
+
return createMenuIconCalls();
|
|
316
|
+
}
|
|
317
|
+
};
|