mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-22 04:02:34 +03:00
change browser_window_drop_file_at_point() to take unscaled coordinates
This commit is contained in:
parent
c88a55999a
commit
3be2b98cc2
@ -1925,10 +1925,10 @@ html_get_contextual_content(struct content *c, int x, int y,
|
||||
}
|
||||
|
||||
if (box->iframe) {
|
||||
browser_window_get_features(
|
||||
box->iframe,
|
||||
(x - box_x) * browser_window_get_scale(box->iframe),
|
||||
(y - box_y) * browser_window_get_scale(box->iframe),
|
||||
float scale = browser_window_get_scale(box->iframe);
|
||||
browser_window_get_features(box->iframe,
|
||||
(x - box_x) * scale,
|
||||
(y - box_y) * scale,
|
||||
data);
|
||||
}
|
||||
|
||||
@ -2004,13 +2004,15 @@ html_scroll_at_point(struct content *c, int x, int y, int scrx, int scry)
|
||||
continue;
|
||||
|
||||
/* Pass into iframe */
|
||||
if (box->iframe &&
|
||||
browser_window_scroll_at_point(
|
||||
box->iframe,
|
||||
(x - box_x) * browser_window_get_scale(box->iframe),
|
||||
(y - box_y) * browser_window_get_scale(box->iframe),
|
||||
if (box->iframe) {
|
||||
float scale = browser_window_get_scale(box->iframe);
|
||||
|
||||
if (browser_window_scroll_at_point(box->iframe,
|
||||
(x - box_x) * scale,
|
||||
(y - box_y) * scale,
|
||||
scrx, scry) == true)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Pass into textarea widget */
|
||||
if (box->gadget && (box->gadget->type == GADGET_TEXTAREA ||
|
||||
@ -2146,15 +2148,21 @@ static bool html_drop_file_at_point(struct content *c, int x, int y, char *file)
|
||||
&box_x, &box_y)) != NULL) {
|
||||
box = next;
|
||||
|
||||
if (box->style && css_computed_visibility(box->style) ==
|
||||
CSS_VISIBILITY_HIDDEN)
|
||||
if (box->style &&
|
||||
css_computed_visibility(box->style) == CSS_VISIBILITY_HIDDEN)
|
||||
continue;
|
||||
|
||||
if (box->iframe)
|
||||
return browser_window_drop_file_at_point(box->iframe,
|
||||
x - box_x, y - box_y, file);
|
||||
if (box->iframe) {
|
||||
float scale = browser_window_get_scale(box->iframe);
|
||||
return browser_window_drop_file_at_point(
|
||||
box->iframe,
|
||||
(x - box_x) * scale,
|
||||
(y - box_y) * scale,
|
||||
file);
|
||||
}
|
||||
|
||||
if (box->object && content_drop_file_at_point(box->object,
|
||||
if (box->object &&
|
||||
content_drop_file_at_point(box->object,
|
||||
x - box_x, y - box_y, file) == true)
|
||||
return true;
|
||||
|
||||
|
@ -1819,6 +1819,13 @@ browser_window_mouse_track_internal(struct browser_window *bw,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* perform a scroll operation at a given coordinate
|
||||
*
|
||||
* \param bw The browsing context receiving the event
|
||||
* \param x The scaled x co-ordinate of the event
|
||||
* \param y The scaled y co-ordinate of the event
|
||||
*/
|
||||
static bool
|
||||
browser_window_scroll_at_point_internal(struct browser_window *bw,
|
||||
int x, int y,
|
||||
@ -1876,6 +1883,60 @@ browser_window_scroll_at_point_internal(struct browser_window *bw,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* allows a dragged file to be dropped into a browser window at a position
|
||||
*
|
||||
* \param bw The browsing context receiving the event
|
||||
* \param x The scaled x co-ordinate of the event
|
||||
* \param y The scaled y co-ordinate of the event
|
||||
* \param file filename to be put in the widget
|
||||
*/
|
||||
static bool
|
||||
browser_window_drop_file_at_point_internal(struct browser_window *bw,
|
||||
int x, int y,
|
||||
char *file)
|
||||
{
|
||||
assert(bw != NULL);
|
||||
|
||||
/* Handle (i)frame scroll offset (core-managed browser windows only) */
|
||||
x += scrollbar_get_offset(bw->scroll_x);
|
||||
y += scrollbar_get_offset(bw->scroll_y);
|
||||
|
||||
if (bw->children) {
|
||||
/* Browser window has children, so pass request on to
|
||||
* appropriate child */
|
||||
struct browser_window *bwc;
|
||||
int cur_child;
|
||||
int children = bw->rows * bw->cols;
|
||||
|
||||
/* Loop through all children of bw */
|
||||
for (cur_child = 0; cur_child < children; cur_child++) {
|
||||
/* Set current child */
|
||||
bwc = &bw->children[cur_child];
|
||||
|
||||
/* Skip this frame if (x, y) coord lies outside */
|
||||
if (x < bwc->x || bwc->x + bwc->width < x ||
|
||||
y < bwc->y || bwc->y + bwc->height < y)
|
||||
continue;
|
||||
|
||||
/* Pass request into this child */
|
||||
return browser_window_drop_file_at_point_internal(bwc,
|
||||
(x - bwc->x),
|
||||
(y - bwc->y),
|
||||
file);
|
||||
}
|
||||
}
|
||||
|
||||
/* Pass file drop on to any content */
|
||||
if (bw->current_content != NULL) {
|
||||
return content_drop_file_at_point(bw->current_content,
|
||||
x, y, file);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/* exported interface, documented in netsurf/browser_window.h */
|
||||
nserror
|
||||
browser_window_get_name(struct browser_window *bw, const char **out_name)
|
||||
@ -2366,44 +2427,10 @@ browser_window_drop_file_at_point(struct browser_window *bw,
|
||||
int x, int y,
|
||||
char *file)
|
||||
{
|
||||
assert(bw != NULL);
|
||||
|
||||
/* Handle (i)frame scroll offset (core-managed browser windows only) */
|
||||
x += scrollbar_get_offset(bw->scroll_x);
|
||||
y += scrollbar_get_offset(bw->scroll_y);
|
||||
|
||||
if (bw->children) {
|
||||
/* Browser window has children, so pass request on to
|
||||
* appropriate child */
|
||||
struct browser_window *bwc;
|
||||
int cur_child;
|
||||
int children = bw->rows * bw->cols;
|
||||
|
||||
/* Loop through all children of bw */
|
||||
for (cur_child = 0; cur_child < children; cur_child++) {
|
||||
/* Set current child */
|
||||
bwc = &bw->children[cur_child];
|
||||
|
||||
/* Skip this frame if (x, y) coord lies outside */
|
||||
if (x < bwc->x || bwc->x + bwc->width < x ||
|
||||
y < bwc->y || bwc->y + bwc->height < y)
|
||||
continue;
|
||||
|
||||
/* Pass request into this child */
|
||||
return browser_window_drop_file_at_point(bwc,
|
||||
(x - bwc->x),
|
||||
(y - bwc->y),
|
||||
return browser_window_drop_file_at_point_internal(bw,
|
||||
x / bw->scale,
|
||||
y / bw->scale,
|
||||
file);
|
||||
}
|
||||
}
|
||||
|
||||
/* Pass file drop on to any content */
|
||||
if (bw->current_content != NULL) {
|
||||
return content_drop_file_at_point(bw->current_content,
|
||||
x, y, file);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -4365,7 +4365,7 @@ bool ro_gui_window_dataload(struct gui_window *g, wimp_message *message)
|
||||
message->data.data_xfer.pos.y, &pos))
|
||||
return false;
|
||||
|
||||
if (browser_window_drop_file_at_point(g->bw, pos.x/g->scale, pos.y/g->scale,
|
||||
if (browser_window_drop_file_at_point(g->bw, pos.x, pos.y,
|
||||
message->data.data_xfer.file_name) == false)
|
||||
return false;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user