summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
Diffstat (limited to 'desktop')
-rw-r--r--desktop/browser.c61
-rw-r--r--desktop/gui.h4
2 files changed, 57 insertions, 8 deletions
diff --git a/desktop/browser.c b/desktop/browser.c
index aec455fc2..2413df7aa 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -79,6 +79,7 @@ static void browser_window_input_click(struct browser_window* bw,
static void browser_window_input_callback(struct browser_window *bw, char key, void *p);
static void browser_window_place_caret(struct browser_window *bw, int x, int y,
int height, void (*callback)(struct browser_window *bw, char key, void *p), void *p);
+static gui_pointer_shape get_pointer_shape(css_cursor cursor);
/**
@@ -1332,6 +1333,47 @@ void box_under_area(struct box *box, unsigned long x, unsigned long y,
return;
}
+gui_pointer_shape get_pointer_shape(css_cursor cursor) {
+
+ gui_pointer_shape pointer;
+
+ switch (cursor) {
+ case CSS_CURSOR_CROSSHAIR:
+ pointer = GUI_POINTER_CROSS;
+ break;
+ case CSS_CURSOR_POINTER:
+ pointer = GUI_POINTER_POINT;
+ break;
+ case CSS_CURSOR_MOVE:
+ pointer = GUI_POINTER_MOVE;
+ break;
+ case CSS_CURSOR_E_RESIZE:
+ case CSS_CURSOR_W_RESIZE:
+ pointer = GUI_POINTER_LR;
+ break;
+ case CSS_CURSOR_N_RESIZE:
+ case CSS_CURSOR_S_RESIZE:
+ pointer = GUI_POINTER_UD;
+ break;
+ case CSS_CURSOR_NE_RESIZE:
+ case CSS_CURSOR_SW_RESIZE:
+ pointer = GUI_POINTER_LD;
+ break;
+ case CSS_CURSOR_SE_RESIZE:
+ case CSS_CURSOR_NW_RESIZE:
+ pointer = GUI_POINTER_RD;
+ break;
+ case CSS_CURSOR_TEXT:
+ pointer = GUI_POINTER_CARET;
+ break;
+ default:
+ pointer = GUI_POINTER_DEFAULT;
+ break;
+ }
+
+ return pointer;
+}
+
void browser_window_follow_link(struct browser_window *bw,
unsigned long click_x,
unsigned long click_y, int click_type)
@@ -1340,6 +1382,7 @@ void browser_window_follow_link(struct browser_window *bw,
int found, plot_index;
int i;
int done = 0;
+ gui_pointer_shape pointer = GUI_POINTER_DEFAULT;
found = 0;
click_boxes = NULL;
@@ -1385,7 +1428,7 @@ void browser_window_follow_link(struct browser_window *bw,
}
} else if (click_type == 0) {
browser_window_set_status(bw, url);
- browser_window_set_pointer(GUI_POINTER_POINT);
+ pointer = GUI_POINTER_POINT;
done = 1;
}
free(url);
@@ -1426,7 +1469,7 @@ void browser_window_follow_link(struct browser_window *bw,
}
} else if (click_type == 0) {
browser_window_set_status(bw, url);
- browser_window_set_pointer(GUI_POINTER_POINT);
+ pointer = GUI_POINTER_POINT;
done = 1;
}
free(url);
@@ -1437,12 +1480,12 @@ void browser_window_follow_link(struct browser_window *bw,
click_boxes[i].box->gadget->type == GADGET_TEXTAREA ||
click_boxes[i].box->gadget->type == GADGET_PASSWORD ||
click_boxes[i].box->gadget->type == GADGET_FILE) {
- browser_window_set_pointer(GUI_POINTER_CARET);
+ pointer = GUI_POINTER_CARET;
done = 1;
break;
}
else if (click_boxes[i].box->gadget->type == GADGET_SELECT) {
- browser_window_set_pointer(GUI_POINTER_MENU);
+ pointer = GUI_POINTER_MENU;
done = 1;
break;
}
@@ -1465,10 +1508,14 @@ void browser_window_follow_link(struct browser_window *bw,
browser_window_set_status(bw,
click_boxes[i].box->
title);
- browser_window_set_pointer(GUI_POINTER_DEFAULT);
done = 1;
break;
}
+ if (click_type == 0 && click_boxes[i].box->style->cursor != CSS_CURSOR_UNKNOWN) {
+ pointer = get_pointer_shape(click_boxes[i].box->style->cursor);
+ done = 1;
+ break;
+ }
}
if (click_type == 0 && done == 0) {
@@ -1476,16 +1523,16 @@ void browser_window_follow_link(struct browser_window *bw,
browser_window_set_status(bw,
bw->loading_content->
status_message);
- browser_window_set_pointer(GUI_POINTER_DEFAULT);
}
else {
browser_window_set_status(bw,
bw->current_content->
status_message);
- browser_window_set_pointer(GUI_POINTER_DEFAULT);
}
}
+ browser_window_set_pointer(pointer);
+
free(click_boxes);
return;
diff --git a/desktop/gui.h b/desktop/gui.h
index 9bb8412e4..95b18083f 100644
--- a/desktop/gui.h
+++ b/desktop/gui.h
@@ -16,7 +16,9 @@
struct gui_window;
typedef struct gui_window gui_window;
typedef enum { GUI_POINTER_DEFAULT, GUI_POINTER_POINT, GUI_POINTER_CARET,
- GUI_POINTER_MENU } gui_pointer_shape;
+ GUI_POINTER_MENU, GUI_POINTER_UD, GUI_POINTER_LR,
+ GUI_POINTER_LD, GUI_POINTER_RD, GUI_POINTER_CROSS,
+ GUI_POINTER_MOVE } gui_pointer_shape;
#include <stdbool.h>
#include "netsurf/desktop/browser.h"