Haiku: Better map mouse cursors

Drop custom cursor bitmaps in favor of the system ones.

We only miss the wait cursor now, but the progress one should do.
vince/tools
François Revol 5 years ago
parent 4b8ed9b777
commit 600b2ed60a

@ -1108,93 +1108,79 @@ static void gui_window_update_extent(struct gui_window *g)
g->view->UnlockLooper();
}
/* some cursors like those in Firefox */
// XXX: move to separate file or resource ?
const uint8 kLinkCursorBits[] = {
16, /* cursor size */
1, /* bits per pixel */
2, /* vertical hot spot */
2, /* horizontal hot spot */
/* data */
0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x24, 0x00, 0x24, 0x00, 0x13, 0xe0, 0x12, 0x5c, 0x09, 0x2a,
0x08, 0x01, 0x3c, 0x21, 0x4c, 0x71, 0x42, 0x71, 0x30, 0xf9, 0x0c, 0xf9, 0x02, 0x02, 0x01, 0x00,
/* mask */
0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x1f, 0xe0, 0x1f, 0xfc, 0x0f, 0xfe,
0x0f, 0xff, 0x3f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x3f, 0xff, 0x0f, 0xff, 0x03, 0xfc, 0x01, 0xe0
};
static BCursorID gui_haiku_pointer(gui_pointer_shape shape)
{
switch (shape) {
case GUI_POINTER_POINT: /* link */
return B_CURSOR_ID_FOLLOW_LINK;
const uint8 kWatchCursorBits[] = {
16, /* cursor size */
1, /* bits per pixel */
0, /* vertical hot spot */
1, /* horizontal hot spot */
case GUI_POINTER_CARET: /* input */
return B_CURSOR_ID_I_BEAM;
/* data */
0x70, 0x00, 0x48, 0x00, 0x48, 0x00, 0x27, 0xc0, 0x24, 0xb8, 0x12, 0x54, 0x10, 0x02, 0x78, 0x02,
0x98, 0x02, 0x84, 0x02, 0x60, 0x3a, 0x18, 0x46, 0x04, 0x8a, 0x02, 0x92, 0x01, 0x82, 0x00, 0x45,
case GUI_POINTER_MENU:
return B_CURSOR_ID_CONTEXT_MENU;
/* mask */
0x70, 0x00, 0x78, 0x00, 0x78, 0x00, 0x3f, 0xc0, 0x3f, 0xf8, 0x1f, 0xfc, 0x1f, 0xfe, 0x7f, 0xfe,
0xff, 0xfe, 0xff, 0xfe, 0x7f, 0xfe, 0x1f, 0xfe, 0x07, 0xfe, 0x03, 0xfe, 0x01, 0xfe, 0x00, 0x7f
};
case GUI_POINTER_UP:
return B_CURSOR_ID_RESIZE_NORTH;
const uint8 kWatch2CursorBits[] = {
16, /* cursor size */
1, /* bits per pixel */
0, /* vertical hot spot */
1, /* horizontal hot spot */
case GUI_POINTER_DOWN:
return B_CURSOR_ID_RESIZE_SOUTH;
/* data */
0x70, 0x00, 0x48, 0x00, 0x48, 0x00, 0x27, 0xc0, 0x24, 0xb8, 0x12, 0x54, 0x10, 0x02, 0x78, 0x02,
0x98, 0x02, 0x84, 0x02, 0x60, 0x3a, 0x18, 0x46, 0x04, 0xa2, 0x02, 0x92, 0x01, 0xa2, 0x00, 0x45,
case GUI_POINTER_LEFT:
return B_CURSOR_ID_RESIZE_WEST;
/* mask */
0x70, 0x00, 0x78, 0x00, 0x78, 0x00, 0x3f, 0xc0, 0x3f, 0xf8, 0x1f, 0xfc, 0x1f, 0xfe, 0x7f, 0xfe,
0xff, 0xfe, 0xff, 0xfe, 0x7f, 0xfe, 0x1f, 0xfe, 0x07, 0xfe, 0x03, 0xfe, 0x01, 0xfe, 0x00, 0x7f
};
case GUI_POINTER_RIGHT:
return B_CURSOR_ID_RESIZE_EAST;
case GUI_POINTER_RU:
return B_CURSOR_ID_RESIZE_NORTH_EAST;
static void gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
{
BCursor *cursor = NULL;
bool allocated = false;
case GUI_POINTER_LD:
return B_CURSOR_ID_RESIZE_SOUTH_WEST;
if (g->current_pointer == shape)
return;
case GUI_POINTER_LU:
return B_CURSOR_ID_RESIZE_NORTH_WEST;
g->current_pointer = shape;
case GUI_POINTER_RD:
return B_CURSOR_ID_RESIZE_SOUTH_EAST;
case GUI_POINTER_CROSS:
return B_CURSOR_ID_CROSS_HAIR;
case GUI_POINTER_MOVE:
return B_CURSOR_ID_MOVE;
switch (shape) {
case GUI_POINTER_POINT:
cursor = new BCursor(kLinkCursorBits);
allocated = true;
break;
case GUI_POINTER_CARET:
cursor = (BCursor *)B_CURSOR_I_BEAM;
break;
case GUI_POINTER_WAIT:
cursor = new BCursor(kWatchCursorBits);
allocated = true;
break;
case GUI_POINTER_PROGRESS:
cursor = new BCursor(kWatch2CursorBits);
allocated = true;
break;
return B_CURSOR_ID_PROGRESS;
case GUI_POINTER_NO_DROP:
case GUI_POINTER_NOT_ALLOWED:
return B_CURSOR_ID_NOT_ALLOWED;
case GUI_POINTER_HELP:
return B_CURSOR_ID_HELP;
case GUI_POINTER_DEFAULT:
default:
cursor = (BCursor *)B_CURSOR_SYSTEM_DEFAULT;
allocated = false;
break;
}
return B_CURSOR_ID_SYSTEM_DEFAULT;
}
static void gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
{
if (g->current_pointer == shape)
return;
g->current_pointer = shape;
BCursor cursor(gui_haiku_pointer(shape));
if (g->view && g->view->LockLooper()) {
g->view->SetViewCursor(cursor);
g->view->SetViewCursor(&cursor);
g->view->UnlockLooper();
}
if (allocated)
delete cursor;
}
static void gui_window_place_caret(struct gui_window *g, int x, int y, int height,

Loading…
Cancel
Save