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 0000000..8d9ac94 Binary files /dev/null and b/GlitchyEditor/resources/Cursors/aliasb.cur differ diff --git a/GlitchyEditor/resources/Cursors/cell.cur b/GlitchyEditor/resources/Cursors/cell.cur new file mode 100644 index 0000000..decfbdc Binary files /dev/null and b/GlitchyEditor/resources/Cursors/cell.cur differ diff --git a/GlitchyEditor/resources/Cursors/col_resize.cur b/GlitchyEditor/resources/Cursors/col_resize.cur new file mode 100644 index 0000000..8f7f675 Binary files /dev/null and b/GlitchyEditor/resources/Cursors/col_resize.cur differ diff --git a/GlitchyEditor/resources/Cursors/copy.cur b/GlitchyEditor/resources/Cursors/copy.cur new file mode 100644 index 0000000..87f1519 Binary files /dev/null and b/GlitchyEditor/resources/Cursors/copy.cur differ diff --git a/GlitchyEditor/resources/Cursors/grab.cur b/GlitchyEditor/resources/Cursors/grab.cur new file mode 100644 index 0000000..db7ad5a Binary files /dev/null and b/GlitchyEditor/resources/Cursors/grab.cur differ diff --git a/GlitchyEditor/resources/Cursors/grabbing.cur b/GlitchyEditor/resources/Cursors/grabbing.cur new file mode 100644 index 0000000..e0dfd04 Binary files /dev/null and b/GlitchyEditor/resources/Cursors/grabbing.cur differ diff --git a/GlitchyEditor/resources/Cursors/none.cur b/GlitchyEditor/resources/Cursors/none.cur new file mode 100644 index 0000000..2114dfa Binary files /dev/null and b/GlitchyEditor/resources/Cursors/none.cur differ diff --git a/GlitchyEditor/resources/Cursors/row_resize.cur b/GlitchyEditor/resources/Cursors/row_resize.cur new file mode 100644 index 0000000..a7369d3 Binary files /dev/null and b/GlitchyEditor/resources/Cursors/row_resize.cur differ diff --git a/GlitchyEditor/resources/Cursors/select.cur b/GlitchyEditor/resources/Cursors/select.cur new file mode 100644 index 0000000..5a88b37 Binary files /dev/null and b/GlitchyEditor/resources/Cursors/select.cur differ diff --git a/GlitchyEditor/resources/Cursors/vertical_text.cur b/GlitchyEditor/resources/Cursors/vertical_text.cur new file mode 100644 index 0000000..3de04eb Binary files /dev/null and b/GlitchyEditor/resources/Cursors/vertical_text.cur differ diff --git a/GlitchyEditor/resources/Cursors/zoom_in.cur b/GlitchyEditor/resources/Cursors/zoom_in.cur new file mode 100644 index 0000000..b594d79 Binary files /dev/null and b/GlitchyEditor/resources/Cursors/zoom_in.cur differ diff --git a/GlitchyEditor/resources/Cursors/zoom_out.cur b/GlitchyEditor/resources/Cursors/zoom_out.cur new file mode 100644 index 0000000..7e495fb Binary files /dev/null and b/GlitchyEditor/resources/Cursors/zoom_out.cur differ 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);