From 61bc3ed0bbb7ce64b5e95f4d351952cf399bba98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Thu, 31 Oct 2024 00:03:17 +0100 Subject: [PATCH] Add more cursors --- .../resources/Cursors/Cursors from Firefox | 1 + GlitchyEditor/resources/Cursors/aliasb.cur | Bin 0 -> 326 bytes GlitchyEditor/resources/Cursors/cell.cur | Bin 0 -> 326 bytes .../resources/Cursors/col_resize.cur | Bin 0 -> 326 bytes GlitchyEditor/resources/Cursors/copy.cur | Bin 0 -> 326 bytes GlitchyEditor/resources/Cursors/grab.cur | Bin 0 -> 326 bytes GlitchyEditor/resources/Cursors/grabbing.cur | Bin 0 -> 326 bytes GlitchyEditor/resources/Cursors/none.cur | Bin 0 -> 326 bytes .../resources/Cursors/row_resize.cur | Bin 0 -> 326 bytes GlitchyEditor/resources/Cursors/select.cur | Bin 0 -> 326 bytes .../resources/Cursors/vertical_text.cur | Bin 0 -> 326 bytes GlitchyEditor/resources/Cursors/zoom_in.cur | Bin 0 -> 326 bytes GlitchyEditor/resources/Cursors/zoom_out.cur | Bin 0 -> 326 bytes .../src/Ultralight/UltralightWindow.bf | 4 +- .../src/Platform/Windows/WindowsWindow.bf | 73 ++++++++++++------ 15 files changed, 53 insertions(+), 25 deletions(-) create mode 100644 GlitchyEditor/resources/Cursors/Cursors from Firefox create mode 100644 GlitchyEditor/resources/Cursors/aliasb.cur create mode 100644 GlitchyEditor/resources/Cursors/cell.cur create mode 100644 GlitchyEditor/resources/Cursors/col_resize.cur create mode 100644 GlitchyEditor/resources/Cursors/copy.cur create mode 100644 GlitchyEditor/resources/Cursors/grab.cur create mode 100644 GlitchyEditor/resources/Cursors/grabbing.cur create mode 100644 GlitchyEditor/resources/Cursors/none.cur create mode 100644 GlitchyEditor/resources/Cursors/row_resize.cur create mode 100644 GlitchyEditor/resources/Cursors/select.cur create mode 100644 GlitchyEditor/resources/Cursors/vertical_text.cur create mode 100644 GlitchyEditor/resources/Cursors/zoom_in.cur create mode 100644 GlitchyEditor/resources/Cursors/zoom_out.cur diff --git a/GlitchyEditor/resources/Cursors/Cursors from Firefox b/GlitchyEditor/resources/Cursors/Cursors from Firefox new file mode 100644 index 0000000..7a170dd --- /dev/null +++ b/GlitchyEditor/resources/Cursors/Cursors from Firefox @@ -0,0 +1 @@ +https://hg.mozilla.org/mozilla-central/file/tip/widget/windows/res \ No newline at end of file diff --git a/GlitchyEditor/resources/Cursors/aliasb.cur b/GlitchyEditor/resources/Cursors/aliasb.cur new file mode 100644 index 0000000000000000000000000000000000000000..8d9ac9478c543e781d3e3ba13e5a87d575a5e808 GIT binary patch literal 326 zcmaLRy$!-J5C!08j6z2Pq9iUUDA>R$7=#hnz>z?#0jton1U(I1is&BC#8SGP_4$1M z2WD^x0a##;g9A1IcA_aX;?(|8(ol>&$+4IkxmK5n*QTtJo4n*By|5K!%k>H99>BK& z-h1G=2HL9@j*@deFogav9hS&G4!T6k&ZGr#1!@|iB*}Akny+b9q%Bvpt*1pv7ro^R GCB+Z<-g+qj literal 0 HcmV?d00001 diff --git a/GlitchyEditor/resources/Cursors/cell.cur b/GlitchyEditor/resources/Cursors/cell.cur new file mode 100644 index 0000000000000000000000000000000000000000..decfbdcac5a724ba28c9a7a1373d5ab94e1b5323 GIT binary patch literal 326 zcmb`CyA6Oa3`EaRWCL1KQnCSTMn+DV?s5U77>N$fdj1zSFu)Ka5M-+X6M#jig8QAqz>jIF15%{H*0oy5Y0ROlC(iJ@&@<+{+tT0Wmpv`~Uy| literal 0 HcmV?d00001 diff --git a/GlitchyEditor/resources/Cursors/col_resize.cur b/GlitchyEditor/resources/Cursors/col_resize.cur new file mode 100644 index 0000000000000000000000000000000000000000..8f7f675122fae7ad797c6a209fddb18ad983f4f7 GIT binary patch literal 326 zcmZQzU}9ioP*7lG;9}rlFkob05My9q&;ViuAa(#^Mj!-%1~7?9{Qv(SQ;-yq0H9(t iED+$pU=WbNkPu+N@GtlWm&kGE&-EDy5}2NRHr9ya80UIg`Byu!{$n34_E}wZUpJ4!C z2ZtDefCg6w906QJTj<1TELCD{>P)gWTPv4!nRp$V?d2ga`N|~BqO{VF5%}GJ&l`9) yKvqKi@;gN-{b9Q-kyE=G6K!@UEs85}rlFN2WzP?^(9;fqcJj1VnR>l7NUcAX4tzlX literal 0 HcmV?d00001 diff --git a/GlitchyEditor/resources/Cursors/grab.cur b/GlitchyEditor/resources/Cursors/grab.cur new file mode 100644 index 0000000000000000000000000000000000000000..db7ad5aed3ef958aa13903afa769386382a87ad3 GIT binary patch literal 326 zcmajZAr8Vo5QX7?si;7#!yvj6Nx}i(CG{p)>hLyxD99 z76ej)=-vic0UL9~!GgO~9_MsOnufoUx`QHG)5E@a!o?nT8@#*2`fMlI9X~2&%Qwtd fAElzRww7{H`T9z)QIL|gUwP@h-(DMO`2YPI1=f8x literal 0 HcmV?d00001 diff --git a/GlitchyEditor/resources/Cursors/grabbing.cur b/GlitchyEditor/resources/Cursors/grabbing.cur new file mode 100644 index 0000000000000000000000000000000000000000..e0dfd04e4d3fcbaa6588c8cbb9e9065609bcb862 GIT binary patch literal 326 zcmZQzU}9ioP*7lC;0HnjMg|5k1_lNVAO;FCH~=vt5Q0Dhn8YOh|NoCEh)sn30RsaF z^8>N`2L=Xv5dHz=L$Uk|1_tQ_266z<4TQl5{{R0$_yG_fVE_NW0fd=>Y#@FBr9t9P K<`XsxO$7j30D*Y` literal 0 HcmV?d00001 diff --git a/GlitchyEditor/resources/Cursors/none.cur b/GlitchyEditor/resources/Cursors/none.cur new file mode 100644 index 0000000000000000000000000000000000000000..2114dfaee3acce126e79dc0de72edfa7cfc87e1b GIT binary patch literal 326 zcmZQzU}9ioP*7lE009F=1_m)8tpUUeK1JKL^ s3=GT<7#P?#02KoHa13OE!2kaZC^VP@5`tooK9GKpIUq5h8wL~r06`9s)&Kwi literal 0 HcmV?d00001 diff --git a/GlitchyEditor/resources/Cursors/select.cur b/GlitchyEditor/resources/Cursors/select.cur new file mode 100644 index 0000000000000000000000000000000000000000..5a88b3707eec9461f920e225a5091ff46a913737 GIT binary patch literal 326 zcmZ|JI}U>|5QO31>5xL37D~$8Aha9?}VU8#*cu#97bF-e3*5>M#jqtM1;_X_uv(z=Z`|;k@yj|`;99I{lKcvPu5%WH( Nq`_mhzQ?g=$q&;}dK3Tv literal 0 HcmV?d00001 diff --git a/GlitchyEditor/resources/Cursors/vertical_text.cur b/GlitchyEditor/resources/Cursors/vertical_text.cur new file mode 100644 index 0000000000000000000000000000000000000000..3de04ebec3b47247c1167ccccb554d11726c167e GIT binary patch literal 326 zcmZQzU}9ioP*7lG;ACKCFkob05My9q&;ViuAa(#^Mj!-%1~7?9{Qv(SQ;-HC4M5kx QaQ*)VI2$Aebi;rG0JL3-od5s; literal 0 HcmV?d00001 diff --git a/GlitchyEditor/resources/Cursors/zoom_in.cur b/GlitchyEditor/resources/Cursors/zoom_in.cur new file mode 100644 index 0000000000000000000000000000000000000000..b594d792712eeeb2e2300f3eaa8d8deb9d0f6f5e GIT binary patch literal 326 zcmb`BJrY1L6ofYltxhYYQmf)9uAy_Zbgp5>1?V(p?GuKcee)&z{xSg)IC!5RRa6eh z0hGdvRyf6}>x#*9l6;aMU8c910Mw$NfUb*}x0>~A#-u-d)2{VRtYRjYkqj9*6cNb3 Kx$B|PtX2-x?|bq9 literal 0 HcmV?d00001 diff --git a/GlitchyEditor/resources/Cursors/zoom_out.cur b/GlitchyEditor/resources/Cursors/zoom_out.cur new file mode 100644 index 0000000000000000000000000000000000000000..7e495fbaa4041e6aa402ba73280dd0cbcc211c2c GIT binary patch literal 326 zcmb`Bu?>JQ3l9CNz6gGj;(y;~-3qVJMo(}G9hOEMQfI;X$dkQip5?-S8K{Wue)8@}n#`YtxHkn2PSM~+nj@^7Ag IXf>;q6XRce3IG5A literal 0 HcmV?d00001 diff --git a/GlitchyEditor/src/Ultralight/UltralightWindow.bf b/GlitchyEditor/src/Ultralight/UltralightWindow.bf index 5d4d426..0c5cf9b 100644 --- a/GlitchyEditor/src/Ultralight/UltralightWindow.bf +++ b/GlitchyEditor/src/Ultralight/UltralightWindow.bf @@ -25,7 +25,7 @@ abstract class UltralightWindow { WindowDescription windowDesc = .Default; windowDesc.Title = title; - windowDesc.WindowStyle = .Borderless; + windowDesc.WindowStyle = .CustomTitle; _window = new Window(windowDesc); _window.EventCallback = new => EventHandler; @@ -327,11 +327,9 @@ abstract class UltralightWindow cursor = .ResizeNorthWestSouthEast; case .kCursor_ColumnResize: - // TODO use cursor file cursor = .ResizeColumn; case .kCursor_RowResize: - // TODO use cursor file cursor = .ResizeRow; case .kCursor_MiddlePanning: diff --git a/GlitchyEngine/src/Platform/Windows/WindowsWindow.bf b/GlitchyEngine/src/Platform/Windows/WindowsWindow.bf index 368189b..046b5ed 100644 --- a/GlitchyEngine/src/Platform/Windows/WindowsWindow.bf +++ b/GlitchyEngine/src/Platform/Windows/WindowsWindow.bf @@ -11,6 +11,7 @@ using System.Diagnostics; using GlitchyEngine.Math; using GlitchyEngine.Renderer; using DirectX.Windows.Winuser.RawInput; +using System.Collections; using static System.Windows; using internal GlitchyEngine; @@ -634,11 +635,36 @@ namespace GlitchyEngine.UI _title = new String(titleSpan); } + [CLink] + private static extern HCURSOR LoadCursorFromFileW(LPCWSTR lpFileName); + + [CLink] + private static extern IntBool DestroyCursor(HCURSOR hCursor); + + private static HCURSOR ResizeColumnCursor = 0 ~ DestroyCursor(_); + private static HCURSOR VerticalTextCursor = 0 ~ DestroyCursor(_); + private static HCURSOR ColResizeCursor = 0 ~ DestroyCursor(_); + private static HCURSOR RowResizeCursor = 0 ~ DestroyCursor(_); + private static HCURSOR CellCursor = 0 ~ DestroyCursor(_); + private static HCURSOR AliasCursor = 0 ~ DestroyCursor(_); + private static HCURSOR CopyCursor = 0 ~ DestroyCursor(_); + private static HCURSOR ZoomInCursor = 0 ~ DestroyCursor(_); + private static HCURSOR ZoomOutCursor = 0 ~ DestroyCursor(_); + private static HCURSOR GrabCursor = 0 ~ DestroyCursor(_); + private static HCURSOR GrabbingCursor = 0 ~ DestroyCursor(_); + public override Result SetCursor(CursorImage cursorImage) { LPCTSTR cursor = null; + Handle hCursor = 0; - // Firefox cursors: https://hg.mozilla.org/mozilla-central/file/tip/widget/windows/res + void UseCustomCursor(ref HCURSOR cursor, StringView path) + { + if (cursor == 0) + cursor = LoadCursorFromFileW(path.ToScopedNativeWChar!()); + + hCursor = cursor; + } switch (cursorImage) { @@ -673,12 +699,10 @@ namespace GlitchyEngine.UI cursor = Winuser.IDC_SIZENWSE; case .ResizeColumn: - // TODO use cursor file - cursor = Winuser.IDC_SIZEWE; + UseCustomCursor(ref ColResizeCursor, "Resources/Cursors/col_resize.cur"); case .ResizeRow: - // TODO use cursor file - cursor = Winuser.IDC_SIZENS; + UseCustomCursor(ref RowResizeCursor, "Resources/Cursors/row_resize.cur"); case .PanMiddle: cursor = Winuser.MAKEINTRESOURCEW(32654); @@ -703,16 +727,17 @@ namespace GlitchyEngine.UI cursor = Winuser.IDC_SIZEALL; case .VerticalText: - // TODO + UseCustomCursor(ref VerticalTextCursor, "Resources/Cursors/vertical_text.cur"); case .Cell: - // TODO + UseCustomCursor(ref CellCursor, "Resources/Cursors/cell.cur"); case .ContextMenu: // TODO + cursor = Winuser.IDC_ARROW; case .Alias: - // TODO + UseCustomCursor(ref AliasCursor, "Resources/Cursors/aliasb.cur"); case .Progress: cursor = Winuser.IDC_APPSTARTING; @@ -721,26 +746,30 @@ namespace GlitchyEngine.UI cursor = Winuser.IDC_NO; case .Copy: + UseCustomCursor(ref CopyCursor, "Resources/Cursors/copy.cur"); + + case .ZoomIn: + UseCustomCursor(ref ZoomInCursor, "Resources/Cursors/zoom_in.cur"); + case .ZoomOut: + UseCustomCursor(ref ZoomOutCursor, "Resources/Cursors/zoom_out.cur"); + + case .Grab: + UseCustomCursor(ref GrabCursor, "Resources/Cursors/grab.cur"); + case .Grabbing: + UseCustomCursor(ref GrabbingCursor, "Resources/Cursors/grabbing.cur"); + + case .Custom: // TODO + cursor = Winuser.IDC_ARROW; case .None: cursor = null; - - case .ZoomIn: - // TODO - - case .ZoomOut: - - case .Grab: - // TODO - case .Grabbing: - // TODO - - case .Custom: - // TODO: Use cursor file specified by user } - var hCursor = Winuser.LoadCursorW((.)0, cursor); + if (hCursor == 0) + { + hCursor = Winuser.LoadCursorW((.)0, cursor); + } _cursor = hCursor; Winuser.SetCursor(hCursor);