Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarley Acheson <harley.acheson@gmail.com>2019-09-26 15:31:47 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-09-26 15:31:47 +0300
commit3bf4610347376d326ac376e62a810e20661f1479 (patch)
treed1b2f67b0666b7028add304ce1b6f4713a21e9a8
parent6292cab193a6aa2a80ceba929079b47de7d8f48a (diff)
GHOST: refresh standard cursors available for platforms
* Add more standard cursor types, that platforms can optionally support. * Remove a few unused cursor types that were not properly supported and would show the wrong cursor when used. * Add native cursor files for Windows. These scale well with DPI and have anti-aliasing. Designed by Duarte Farrajota Ramos. Ref D5197
-rw-r--r--intern/ghost/GHOST_Types.h21
-rw-r--r--intern/ghost/intern/GHOST_WindowCocoa.mm18
-rw-r--r--intern/ghost/intern/GHOST_WindowSDL.cpp28
-rw-r--r--intern/ghost/intern/GHOST_WindowWin32.cpp137
-rw-r--r--intern/ghost/intern/GHOST_WindowX11.cpp24
-rw-r--r--release/windows/icons/cursors/arrowdown.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/arrowleft.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/arrowright.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/arrowup.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/cross.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/crossa.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/crossb.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/crossc.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/eraser.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/eyedropper.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/forbidden.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/handopen.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/knife.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/moveew.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/movens.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/pencil.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/pointer.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/scrollew.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/scrollns.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/scrollnsew.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/splith.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/splitv.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/zoomin.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/cursors/zoomout.curbin0 -> 30894 bytes
-rw-r--r--release/windows/icons/winblender.rc25
30 files changed, 146 insertions, 107 deletions
diff --git a/intern/ghost/GHOST_Types.h b/intern/ghost/GHOST_Types.h
index 68516c3ecf8..891f9d982b9 100644
--- a/intern/ghost/GHOST_Types.h
+++ b/intern/ghost/GHOST_Types.h
@@ -197,11 +197,27 @@ typedef enum {
GHOST_kStandardCursorInfo,
GHOST_kStandardCursorDestroy,
GHOST_kStandardCursorHelp,
- GHOST_kStandardCursorCycle,
- GHOST_kStandardCursorSpray,
GHOST_kStandardCursorWait,
GHOST_kStandardCursorText,
GHOST_kStandardCursorCrosshair,
+ GHOST_kStandardCursorCrosshairA,
+ GHOST_kStandardCursorCrosshairB,
+ GHOST_kStandardCursorCrosshairC,
+ GHOST_kStandardCursorPencil,
+ GHOST_kStandardCursorUpArrow,
+ GHOST_kStandardCursorDownArrow,
+ GHOST_kStandardCursorVerticalSplit,
+ GHOST_kStandardCursorHorizontalSplit,
+ GHOST_kStandardCursorEraser,
+ GHOST_kStandardCursorKnife,
+ GHOST_kStandardCursorEyedropper,
+ GHOST_kStandardCursorZoomIn,
+ GHOST_kStandardCursorZoomOut,
+ GHOST_kStandardCursorMove,
+ GHOST_kStandardCursorNSEWScroll,
+ GHOST_kStandardCursorNSScroll,
+ GHOST_kStandardCursorEWScroll,
+ GHOST_kStandardCursorStop,
GHOST_kStandardCursorUpDown,
GHOST_kStandardCursorLeftRight,
GHOST_kStandardCursorTopSide,
@@ -214,7 +230,6 @@ typedef enum {
GHOST_kStandardCursorBottomLeftCorner,
GHOST_kStandardCursorCopy,
GHOST_kStandardCursorCustom,
- GHOST_kStandardCursorPencil,
GHOST_kStandardCursorNumCursors
} GHOST_TStandardCursor;
diff --git a/intern/ghost/intern/GHOST_WindowCocoa.mm b/intern/ghost/intern/GHOST_WindowCocoa.mm
index dcf6d5da487..dff45ba85fb 100644
--- a/intern/ghost/intern/GHOST_WindowCocoa.mm
+++ b/intern/ghost/intern/GHOST_WindowCocoa.mm
@@ -942,8 +942,10 @@ NSCursor *GHOST_WindowCocoa::getStandardCursor(GHOST_TStandardCursor shape) cons
case GHOST_kStandardCursorCrosshair:
return [NSCursor crosshairCursor];
case GHOST_kStandardCursorUpDown:
+ case GHOST_kStandardCursorHorizontalSplit:
return [NSCursor resizeUpDownCursor];
case GHOST_kStandardCursorLeftRight:
+ case GHOST_kStandardCursorVerticalSplit:
return [NSCursor resizeLeftRightCursor];
case GHOST_kStandardCursorTopSide:
return [NSCursor resizeUpCursor];
@@ -953,18 +955,12 @@ NSCursor *GHOST_WindowCocoa::getStandardCursor(GHOST_TStandardCursor shape) cons
return [NSCursor resizeLeftCursor];
case GHOST_kStandardCursorRightSide:
return [NSCursor resizeRightCursor];
- case GHOST_kStandardCursorRightArrow:
- case GHOST_kStandardCursorInfo:
- case GHOST_kStandardCursorLeftArrow:
- case GHOST_kStandardCursorHelp:
- case GHOST_kStandardCursorCycle:
- case GHOST_kStandardCursorSpray:
- case GHOST_kStandardCursorWait:
- case GHOST_kStandardCursorTopLeftCorner:
- case GHOST_kStandardCursorTopRightCorner:
- case GHOST_kStandardCursorBottomRightCorner:
- case GHOST_kStandardCursorBottomLeftCorner:
case GHOST_kStandardCursorCopy:
+ return [NSCursor dragCopyCursor];
+ case GHOST_kStandardCursorStop:
+ return [NSCursor operationNotAllowedCursor];
+ case GHOST_kStandardCursorMove:
+ return [NSCursor pointingHandCursor];
case GHOST_kStandardCursorDefault:
return [NSCursor arrowCursor];
default:
diff --git a/intern/ghost/intern/GHOST_WindowSDL.cpp b/intern/ghost/intern/GHOST_WindowSDL.cpp
index 38c6f51dea4..99988dd55cc 100644
--- a/intern/ghost/intern/GHOST_WindowSDL.cpp
+++ b/intern/ghost/intern/GHOST_WindowSDL.cpp
@@ -301,19 +301,6 @@ static unsigned char sdl_std_cursor_top_left_corner[] = {
#define sdl_std_cursor_HOT_X_top_left_corner 0
#define sdl_std_cursor_HOT_Y_top_left_corner -14
-static unsigned char sdl_std_cursor_mask_spraycan[] = {
- 0x00, 0x0c, 0x18, 0x0d, 0x7c, 0x0d, 0x7c, 0x0d, 0x7e, 0x0d, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
- 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
-};
-static unsigned char sdl_std_cursor_spraycan[] = {
- 0x00, 0x06, 0x80, 0x00, 0x2c, 0x06, 0x9e, 0x00, 0x16, 0x06, 0x3f, 0x00, 0x21, 0x00, 0x27, 0x00,
- 0x25, 0x00, 0x27, 0x00, 0x25, 0x00, 0x27, 0x00, 0x27, 0x00, 0x21, 0x00, 0x21, 0x00, 0x3f, 0x00,
-};
-#define sdl_std_cursor_WIDTH_spraycan 12
-#define sdl_std_cursor_HEIGHT_spraycan 16
-#define sdl_std_cursor_HOT_X_spraycan -9
-#define sdl_std_cursor_HOT_Y_spraycan -14
-
static unsigned char sdl_std_cursor_mask_sb_v_double_arrow[] = {
0x38, 0x00, 0x7c, 0x00, 0xfe, 0x00, 0xff, 0x01, 0xff, 0x01, 0x7c, 0x00, 0x7c, 0x00, 0x7c,
0x00, 0x7c, 0x00, 0x7c, 0x00, 0xff, 0x01, 0xff, 0x01, 0xfe, 0x00, 0x7c, 0x00, 0x38, 0x00,
@@ -450,19 +437,6 @@ static unsigned char sdl_std_cursor_left_ptr[] = {
#define sdl_std_cursor_HOT_X_left_ptr -8
#define sdl_std_cursor_HOT_Y_left_ptr -14
-static unsigned char sdl_std_cursor_mask_exchange[] = {
- 0xe3, 0x07, 0xf7, 0x0f, 0xff, 0x1f, 0xff, 0x3f, 0x3f, 0x38, 0xff, 0x30, 0xff, 0x00, 0xff, 0x00,
- 0x00, 0xff, 0x00, 0xff, 0x0c, 0xfe, 0x1c, 0xfc, 0xfc, 0xff, 0xf8, 0xff, 0xf0, 0xef, 0xe0, 0xc7,
-};
-static unsigned char sdl_std_cursor_exchange[] = {
- 0xf1, 0x03, 0xfb, 0x07, 0x1f, 0x0c, 0x09, 0x08, 0x19, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x3f, 0x00, 0x26, 0x04, 0x24, 0x0c, 0x3e, 0xf8, 0x37, 0xf0, 0x23, 0x00, 0x00, 0x00, 0x00,
-};
-#define sdl_std_cursor_WIDTH_exchange 16
-#define sdl_std_cursor_HEIGHT_exchange 16
-#define sdl_std_cursor_HOT_X_exchange -6
-#define sdl_std_cursor_HOT_Y_exchange -8
-
static unsigned char sdl_std_cursor_mask_crosshair[] = {
0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
@@ -605,8 +579,6 @@ static void getStandardCursorShape(GHOST_TStandardCursor shape)
DEF_CURSOR(umbrella, GHOST_kStandardCursorInfo); // TODO, replace this one.
DEF_CURSOR(pirate, GHOST_kStandardCursorDestroy);
DEF_CURSOR(question_arrow, GHOST_kStandardCursorHelp);
- DEF_CURSOR(exchange, GHOST_kStandardCursorCycle);
- DEF_CURSOR(spraycan, GHOST_kStandardCursorSpray);
DEF_CURSOR(watch, GHOST_kStandardCursorWait);
DEF_CURSOR(xterm, GHOST_kStandardCursorText);
DEF_CURSOR(crosshair, GHOST_kStandardCursorCrosshair);
diff --git a/intern/ghost/intern/GHOST_WindowWin32.cpp b/intern/ghost/intern/GHOST_WindowWin32.cpp
index 679431e8597..d283e9e3aff 100644
--- a/intern/ghost/intern/GHOST_WindowWin32.cpp
+++ b/intern/ghost/intern/GHOST_WindowWin32.cpp
@@ -769,6 +769,11 @@ void GHOST_WindowWin32::registerMouseClickEvent(int press)
HCURSOR GHOST_WindowWin32::getStandardCursor(GHOST_TStandardCursor shape) const
{
// Convert GHOST cursor to Windows OEM cursor
+ HANDLE cursor = NULL;
+ HMODULE module = ::GetModuleHandle(0);
+ GHOST_TUns32 flags = LR_SHARED | LR_DEFAULTSIZE;
+ int cx = 0, cy = 0;
+
switch (shape) {
case GHOST_kStandardCursorCustom:
if (m_customCursor) {
@@ -777,64 +782,114 @@ HCURSOR GHOST_WindowWin32::getStandardCursor(GHOST_TStandardCursor shape) const
else {
return NULL;
}
- case GHOST_kStandardCursorDefault:
- return ::LoadCursor(0, IDC_ARROW);
case GHOST_kStandardCursorRightArrow:
- return ::LoadCursor(0, IDC_ARROW);
+ cursor = ::LoadImage(module, "arrowright_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
case GHOST_kStandardCursorLeftArrow:
- return ::LoadCursor(0, IDC_ARROW);
- case GHOST_kStandardCursorInfo:
- // Four-pointed arrow pointing north, south, east, and west
- return ::LoadCursor(0, IDC_SIZEALL);
- case GHOST_kStandardCursorDestroy:
- // Slashed circle
- return ::LoadCursor(0, IDC_NO);
+ cursor = ::LoadImage(module, "arrowleft_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorUpArrow:
+ cursor = ::LoadImage(module, "arrowup_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorDownArrow:
+ cursor = ::LoadImage(module, "arrowdown_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorVerticalSplit:
+ cursor = ::LoadImage(module, "splitv_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorHorizontalSplit:
+ cursor = ::LoadImage(module, "splith_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorKnife:
+ cursor = ::LoadImage(module, "knife_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorEyedropper:
+ cursor = ::LoadImage(module, "eyedropper_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorZoomIn:
+ cursor = ::LoadImage(module, "zoomin_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorZoomOut:
+ cursor = ::LoadImage(module, "zoomout_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorMove:
+ cursor = ::LoadImage(module, "handopen_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorNSEWScroll:
+ cursor = ::LoadImage(module, "scrollnsew_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorNSScroll:
+ cursor = ::LoadImage(module, "scrollns_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorEWScroll:
+ cursor = ::LoadImage(module, "scrollew_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
case GHOST_kStandardCursorHelp:
- // Arrow and question mark
- return ::LoadCursor(0, IDC_HELP);
- case GHOST_kStandardCursorCycle:
- // Slashed circle
- return ::LoadCursor(0, IDC_NO);
- case GHOST_kStandardCursorSpray:
- // Four-pointed arrow pointing north, south, east, and west
- return ::LoadCursor(0, IDC_SIZEALL);
+ cursor = ::LoadImage(NULL, IDC_HELP, IMAGE_CURSOR, cx, cy, flags);
+ break; // Arrow and question mark
case GHOST_kStandardCursorWait:
- // Hourglass
- return ::LoadCursor(0, IDC_WAIT);
+ cursor = ::LoadImage(NULL, IDC_WAIT, IMAGE_CURSOR, cx, cy, flags);
+ break; // Hourglass
case GHOST_kStandardCursorText:
- // I-beam
- return ::LoadCursor(0, IDC_IBEAM);
+ cursor = ::LoadImage(NULL, IDC_IBEAM, IMAGE_CURSOR, cx, cy, flags);
+ break; // I-beam
case GHOST_kStandardCursorCrosshair:
- // Crosshair
- return ::LoadCursor(0, IDC_CROSS);
+ cursor = ::LoadImage(module, "cross_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break; // Standard Cross
+ case GHOST_kStandardCursorCrosshairA:
+ cursor = ::LoadImage(module, "crossA_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break; // Crosshair A
+ case GHOST_kStandardCursorCrosshairB:
+ cursor = ::LoadImage(module, "crossB_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break; // Diagonal Crosshair B
+ case GHOST_kStandardCursorCrosshairC:
+ cursor = ::LoadImage(module, "crossC_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break; // Minimal Crosshair C
+ case GHOST_kStandardCursorBottomSide:
case GHOST_kStandardCursorUpDown:
- // Double-pointed arrow pointing north and south
- return ::LoadCursor(0, IDC_SIZENS);
+ cursor = ::LoadImage(module, "movens_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break; // Double-pointed arrow pointing north and south
+ case GHOST_kStandardCursorLeftSide:
case GHOST_kStandardCursorLeftRight:
- // Double-pointed arrow pointing west and east
- return ::LoadCursor(0, IDC_SIZEWE);
+ cursor = ::LoadImage(module, "moveew_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break; // Double-pointed arrow pointing west and east
case GHOST_kStandardCursorTopSide:
- // Vertical arrow
- return ::LoadCursor(0, IDC_UPARROW);
- case GHOST_kStandardCursorBottomSide:
- return ::LoadCursor(0, IDC_SIZENS);
- case GHOST_kStandardCursorLeftSide:
- return ::LoadCursor(0, IDC_SIZEWE);
+ cursor = ::LoadImage(NULL, IDC_UPARROW, IMAGE_CURSOR, cx, cy, flags);
+ break; // Vertical arrow
case GHOST_kStandardCursorTopLeftCorner:
- return ::LoadCursor(0, IDC_SIZENWSE);
+ cursor = ::LoadImage(NULL, IDC_SIZENWSE, IMAGE_CURSOR, cx, cy, flags);
+ break;
case GHOST_kStandardCursorTopRightCorner:
- return ::LoadCursor(0, IDC_SIZENESW);
+ cursor = ::LoadImage(NULL, IDC_SIZENESW, IMAGE_CURSOR, cx, cy, flags);
+ break;
case GHOST_kStandardCursorBottomRightCorner:
- return ::LoadCursor(0, IDC_SIZENWSE);
+ cursor = ::LoadImage(NULL, IDC_SIZENWSE, IMAGE_CURSOR, cx, cy, flags);
+ break;
case GHOST_kStandardCursorBottomLeftCorner:
- return ::LoadCursor(0, IDC_SIZENESW);
+ cursor = ::LoadImage(NULL, IDC_SIZENESW, IMAGE_CURSOR, cx, cy, flags);
+ break;
case GHOST_kStandardCursorPencil:
- return ::LoadCursor(0, IDC_ARROW);
- case GHOST_kStandardCursorCopy:
- return ::LoadCursor(0, IDC_ARROW);
+ cursor = ::LoadImage(module, "pencil_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorEraser:
+ cursor = ::LoadImage(module, "eraser_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break;
+ case GHOST_kStandardCursorDestroy:
+ case GHOST_kStandardCursorStop:
+ cursor = ::LoadImage(module, "forbidden_cursor", IMAGE_CURSOR, cx, cy, flags);
+ break; // Slashed circle
+ case GHOST_kStandardCursorDefault:
+ cursor = NULL;
+ break;
default:
return NULL;
}
+
+ if (cursor == NULL) {
+ cursor = ::LoadImage(NULL, IDC_ARROW, IMAGE_CURSOR, cx, cy, flags);
+ }
+
+ return (HCURSOR)cursor;
}
void GHOST_WindowWin32::loadCursor(bool visible, GHOST_TStandardCursor shape) const
diff --git a/intern/ghost/intern/GHOST_WindowX11.cpp b/intern/ghost/intern/GHOST_WindowX11.cpp
index 402c48bc0fc..8aa4a4e284a 100644
--- a/intern/ghost/intern/GHOST_WindowX11.cpp
+++ b/intern/ghost/intern/GHOST_WindowX11.cpp
@@ -1289,27 +1289,9 @@ GHOST_TSuccess GHOST_WindowX11::getStandardCursor(GHOST_TStandardCursor g_cursor
unsigned int xcursor_id;
switch (g_cursor) {
- case GHOST_kStandardCursorRightArrow:
- xcursor_id = XC_arrow;
- break;
- case GHOST_kStandardCursorLeftArrow:
- xcursor_id = XC_top_left_arrow;
- break;
- case GHOST_kStandardCursorInfo:
- xcursor_id = XC_hand1;
- break;
- case GHOST_kStandardCursorDestroy:
- xcursor_id = XC_pirate;
- break;
case GHOST_kStandardCursorHelp:
xcursor_id = XC_question_arrow;
break;
- case GHOST_kStandardCursorCycle:
- xcursor_id = XC_exchange;
- break;
- case GHOST_kStandardCursorSpray:
- xcursor_id = XC_spraycan;
- break;
case GHOST_kStandardCursorWait:
xcursor_id = XC_watch;
break;
@@ -1349,12 +1331,6 @@ GHOST_TSuccess GHOST_WindowX11::getStandardCursor(GHOST_TStandardCursor g_cursor
case GHOST_kStandardCursorBottomLeftCorner:
xcursor_id = XC_bottom_left_corner;
break;
- case GHOST_kStandardCursorPencil:
- xcursor_id = XC_pencil;
- break;
- case GHOST_kStandardCursorCopy:
- xcursor_id = XC_arrow;
- break;
case GHOST_kStandardCursorDefault:
xcursor = None;
return GHOST_kSuccess;
diff --git a/release/windows/icons/cursors/arrowdown.cur b/release/windows/icons/cursors/arrowdown.cur
new file mode 100644
index 00000000000..251f3453e63
--- /dev/null
+++ b/release/windows/icons/cursors/arrowdown.cur
Binary files differ
diff --git a/release/windows/icons/cursors/arrowleft.cur b/release/windows/icons/cursors/arrowleft.cur
new file mode 100644
index 00000000000..6935e461a05
--- /dev/null
+++ b/release/windows/icons/cursors/arrowleft.cur
Binary files differ
diff --git a/release/windows/icons/cursors/arrowright.cur b/release/windows/icons/cursors/arrowright.cur
new file mode 100644
index 00000000000..ae561a54d04
--- /dev/null
+++ b/release/windows/icons/cursors/arrowright.cur
Binary files differ
diff --git a/release/windows/icons/cursors/arrowup.cur b/release/windows/icons/cursors/arrowup.cur
new file mode 100644
index 00000000000..5c29145f16b
--- /dev/null
+++ b/release/windows/icons/cursors/arrowup.cur
Binary files differ
diff --git a/release/windows/icons/cursors/cross.cur b/release/windows/icons/cursors/cross.cur
new file mode 100644
index 00000000000..62c5c322cfb
--- /dev/null
+++ b/release/windows/icons/cursors/cross.cur
Binary files differ
diff --git a/release/windows/icons/cursors/crossa.cur b/release/windows/icons/cursors/crossa.cur
new file mode 100644
index 00000000000..f6f11f32b28
--- /dev/null
+++ b/release/windows/icons/cursors/crossa.cur
Binary files differ
diff --git a/release/windows/icons/cursors/crossb.cur b/release/windows/icons/cursors/crossb.cur
new file mode 100644
index 00000000000..39c0b3fba02
--- /dev/null
+++ b/release/windows/icons/cursors/crossb.cur
Binary files differ
diff --git a/release/windows/icons/cursors/crossc.cur b/release/windows/icons/cursors/crossc.cur
new file mode 100644
index 00000000000..5c54525b2dc
--- /dev/null
+++ b/release/windows/icons/cursors/crossc.cur
Binary files differ
diff --git a/release/windows/icons/cursors/eraser.cur b/release/windows/icons/cursors/eraser.cur
new file mode 100644
index 00000000000..c1e14ef3bae
--- /dev/null
+++ b/release/windows/icons/cursors/eraser.cur
Binary files differ
diff --git a/release/windows/icons/cursors/eyedropper.cur b/release/windows/icons/cursors/eyedropper.cur
new file mode 100644
index 00000000000..2294297b210
--- /dev/null
+++ b/release/windows/icons/cursors/eyedropper.cur
Binary files differ
diff --git a/release/windows/icons/cursors/forbidden.cur b/release/windows/icons/cursors/forbidden.cur
new file mode 100644
index 00000000000..2e45bad168b
--- /dev/null
+++ b/release/windows/icons/cursors/forbidden.cur
Binary files differ
diff --git a/release/windows/icons/cursors/handopen.cur b/release/windows/icons/cursors/handopen.cur
new file mode 100644
index 00000000000..cba18448873
--- /dev/null
+++ b/release/windows/icons/cursors/handopen.cur
Binary files differ
diff --git a/release/windows/icons/cursors/knife.cur b/release/windows/icons/cursors/knife.cur
new file mode 100644
index 00000000000..edc97d9e9f2
--- /dev/null
+++ b/release/windows/icons/cursors/knife.cur
Binary files differ
diff --git a/release/windows/icons/cursors/moveew.cur b/release/windows/icons/cursors/moveew.cur
new file mode 100644
index 00000000000..c2bef134cca
--- /dev/null
+++ b/release/windows/icons/cursors/moveew.cur
Binary files differ
diff --git a/release/windows/icons/cursors/movens.cur b/release/windows/icons/cursors/movens.cur
new file mode 100644
index 00000000000..409176a23f9
--- /dev/null
+++ b/release/windows/icons/cursors/movens.cur
Binary files differ
diff --git a/release/windows/icons/cursors/pencil.cur b/release/windows/icons/cursors/pencil.cur
new file mode 100644
index 00000000000..ac76b367d25
--- /dev/null
+++ b/release/windows/icons/cursors/pencil.cur
Binary files differ
diff --git a/release/windows/icons/cursors/pointer.cur b/release/windows/icons/cursors/pointer.cur
new file mode 100644
index 00000000000..d9b1ee8a60b
--- /dev/null
+++ b/release/windows/icons/cursors/pointer.cur
Binary files differ
diff --git a/release/windows/icons/cursors/scrollew.cur b/release/windows/icons/cursors/scrollew.cur
new file mode 100644
index 00000000000..c5eab1b9890
--- /dev/null
+++ b/release/windows/icons/cursors/scrollew.cur
Binary files differ
diff --git a/release/windows/icons/cursors/scrollns.cur b/release/windows/icons/cursors/scrollns.cur
new file mode 100644
index 00000000000..4b443220da8
--- /dev/null
+++ b/release/windows/icons/cursors/scrollns.cur
Binary files differ
diff --git a/release/windows/icons/cursors/scrollnsew.cur b/release/windows/icons/cursors/scrollnsew.cur
new file mode 100644
index 00000000000..fd0cad49c42
--- /dev/null
+++ b/release/windows/icons/cursors/scrollnsew.cur
Binary files differ
diff --git a/release/windows/icons/cursors/splith.cur b/release/windows/icons/cursors/splith.cur
new file mode 100644
index 00000000000..9b74fca7c6f
--- /dev/null
+++ b/release/windows/icons/cursors/splith.cur
Binary files differ
diff --git a/release/windows/icons/cursors/splitv.cur b/release/windows/icons/cursors/splitv.cur
new file mode 100644
index 00000000000..68a739eb11b
--- /dev/null
+++ b/release/windows/icons/cursors/splitv.cur
Binary files differ
diff --git a/release/windows/icons/cursors/zoomin.cur b/release/windows/icons/cursors/zoomin.cur
new file mode 100644
index 00000000000..8e6930b465a
--- /dev/null
+++ b/release/windows/icons/cursors/zoomin.cur
Binary files differ
diff --git a/release/windows/icons/cursors/zoomout.cur b/release/windows/icons/cursors/zoomout.cur
new file mode 100644
index 00000000000..834686c7ec0
--- /dev/null
+++ b/release/windows/icons/cursors/zoomout.cur
Binary files differ
diff --git a/release/windows/icons/winblender.rc b/release/windows/icons/winblender.rc
index a7d9eff8dbf..ba3363aacc5 100644
--- a/release/windows/icons/winblender.rc
+++ b/release/windows/icons/winblender.rc
@@ -13,6 +13,31 @@
APPICON ICON DISCARDABLE "winblender.ico"
BLENDERFILE ICON DISCARDABLE "winblenderfile.ico"
+pointer_cursor CURSOR "cursors/pointer.cur"
+moveew_cursor CURSOR "cursors/moveew.cur"
+movens_cursor CURSOR "cursors/movens.cur"
+arrowdown_cursor CURSOR "cursors/arrowdown.cur"
+arrowleft_cursor CURSOR "cursors/arrowleft.cur"
+arrowright_cursor CURSOR "cursors/arrowright.cur"
+arrowup_cursor CURSOR "cursors/arrowup.cur"
+cross_cursor CURSOR "cursors/cross.cur"
+crossA_cursor CURSOR "cursors/crossa.cur"
+crossB_cursor CURSOR "cursors/crossb.cur"
+crossC_cursor CURSOR "cursors/crossc.cur"
+eraser_cursor CURSOR "cursors/eraser.cur"
+eyedropper_cursor CURSOR "cursors/eyedropper.cur"
+handopen_cursor CURSOR "cursors/handopen.cur"
+knife_cursor CURSOR "cursors/knife.cur"
+pencil_cursor CURSOR "cursors/pencil.cur"
+scrollew_cursor CURSOR "cursors/scrollew.cur"
+scrollns_cursor CURSOR "cursors/scrollns.cur"
+scrollnsew_cursor CURSOR "cursors/scrollnsew.cur"
+splith_cursor CURSOR "cursors/splith.cur"
+splitv_cursor CURSOR "cursors/splitv.cur"
+zoomin_cursor CURSOR "cursors/zoomin.cur"
+zoomout_cursor CURSOR "cursors/zoomout.cur"
+forbidden_cursor CURSOR "cursors/forbidden.cur"
+
IDR_VERSION1 VERSIONINFO
FILEVERSION BLEN_VER_RC_1, BLEN_VER_RC_2, BLEN_VER_RC_3, BLEN_VER_RC_4
PRODUCTVERSION BLEN_VER_RC_1, BLEN_VER_RC_2, BLEN_VER_RC_3, BLEN_VER_RC_4