Cleanup: Use array for BKE cursor functions
Differential Revision: https://developer.blender.org/D12962
This commit is contained in:
@@ -465,7 +465,9 @@ void BKE_region_callback_refresh_tag_gizmomap_set(void (*callback)(struct wmGizm
|
||||
*/
|
||||
struct ARegion *BKE_area_find_region_type(const struct ScrArea *area, int type);
|
||||
struct ARegion *BKE_area_find_region_active_win(struct ScrArea *area);
|
||||
struct ARegion *BKE_area_find_region_xy(struct ScrArea *area, const int regiontype, int x, int y);
|
||||
struct ARegion *BKE_area_find_region_xy(struct ScrArea *area,
|
||||
const int regiontype,
|
||||
const int xy[2]) ATTR_NONNULL(1, 3);
|
||||
/**
|
||||
* \note This is only for screen level regions (typically menus/popups).
|
||||
*/
|
||||
@@ -476,9 +478,7 @@ struct ARegion *BKE_screen_find_region_xy(struct bScreen *screen,
|
||||
|
||||
struct ARegion *BKE_screen_find_main_region_at_xy(struct bScreen *screen,
|
||||
const int space_type,
|
||||
const int x,
|
||||
const int y);
|
||||
|
||||
const int xy[2]) ATTR_NONNULL(1, 3);
|
||||
/**
|
||||
* \note Ideally we can get the area from the context,
|
||||
* there are a few places however where this isn't practical.
|
||||
@@ -495,9 +495,10 @@ struct ScrArea *BKE_screen_find_big_area(struct bScreen *screen,
|
||||
const short min);
|
||||
struct ScrArea *BKE_screen_area_map_find_area_xy(const struct ScrAreaMap *areamap,
|
||||
const int spacetype,
|
||||
int x,
|
||||
int y);
|
||||
struct ScrArea *BKE_screen_find_area_xy(struct bScreen *screen, const int spacetype, int x, int y);
|
||||
const int xy[2]) ATTR_NONNULL(1, 3);
|
||||
struct ScrArea *BKE_screen_find_area_xy(struct bScreen *screen,
|
||||
const int spacetype,
|
||||
const int xy[2]) ATTR_NONNULL(1, 3);
|
||||
|
||||
void BKE_screen_gizmo_tag_refresh(struct bScreen *screen);
|
||||
|
||||
|
||||
@@ -900,7 +900,7 @@ ARegion *BKE_area_find_region_active_win(ScrArea *area)
|
||||
return BKE_area_find_region_type(area, RGN_TYPE_WINDOW);
|
||||
}
|
||||
|
||||
ARegion *BKE_area_find_region_xy(ScrArea *area, const int regiontype, int x, int y)
|
||||
ARegion *BKE_area_find_region_xy(ScrArea *area, const int regiontype, const int xy[2])
|
||||
{
|
||||
if (area == NULL) {
|
||||
return NULL;
|
||||
@@ -908,7 +908,7 @@ ARegion *BKE_area_find_region_xy(ScrArea *area, const int regiontype, int x, int
|
||||
|
||||
LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
|
||||
if (ELEM(regiontype, RGN_TYPE_ANY, region->regiontype)) {
|
||||
if (BLI_rcti_isect_pt(®ion->winrct, x, y)) {
|
||||
if (BLI_rcti_isect_pt_v(®ion->winrct, xy)) {
|
||||
return region;
|
||||
}
|
||||
}
|
||||
@@ -961,11 +961,10 @@ ScrArea *BKE_screen_find_big_area(bScreen *screen, const int spacetype, const sh
|
||||
|
||||
ScrArea *BKE_screen_area_map_find_area_xy(const ScrAreaMap *areamap,
|
||||
const int spacetype,
|
||||
int x,
|
||||
int y)
|
||||
const int xy[2])
|
||||
{
|
||||
LISTBASE_FOREACH (ScrArea *, area, &areamap->areabase) {
|
||||
if (BLI_rcti_isect_pt(&area->totrct, x, y)) {
|
||||
if (BLI_rcti_isect_pt_v(&area->totrct, xy)) {
|
||||
if (ELEM(spacetype, SPACE_TYPE_ANY, area->spacetype)) {
|
||||
return area;
|
||||
}
|
||||
@@ -974,9 +973,9 @@ ScrArea *BKE_screen_area_map_find_area_xy(const ScrAreaMap *areamap,
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
ScrArea *BKE_screen_find_area_xy(bScreen *screen, const int spacetype, int x, int y)
|
||||
ScrArea *BKE_screen_find_area_xy(bScreen *screen, const int spacetype, const int xy[2])
|
||||
{
|
||||
return BKE_screen_area_map_find_area_xy(AREAMAP_FROM_SCREEN(screen), spacetype, x, y);
|
||||
return BKE_screen_area_map_find_area_xy(AREAMAP_FROM_SCREEN(screen), spacetype, xy);
|
||||
}
|
||||
|
||||
void BKE_screen_view3d_sync(View3D *v3d, struct Scene *scene)
|
||||
@@ -1016,16 +1015,13 @@ void BKE_screen_view3d_shading_init(View3DShading *shading)
|
||||
memcpy(shading, shading_default, sizeof(*shading));
|
||||
}
|
||||
|
||||
ARegion *BKE_screen_find_main_region_at_xy(bScreen *screen,
|
||||
const int space_type,
|
||||
const int x,
|
||||
const int y)
|
||||
ARegion *BKE_screen_find_main_region_at_xy(bScreen *screen, const int space_type, const int xy[2])
|
||||
{
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, space_type, x, y);
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, space_type, xy);
|
||||
if (!area) {
|
||||
return NULL;
|
||||
}
|
||||
return BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, x, y);
|
||||
return BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, xy);
|
||||
}
|
||||
|
||||
/* Magic zoom calculation, no idea what it signifies, if you find out, tell me! -zr
|
||||
|
||||
@@ -2575,8 +2575,7 @@ static int annotation_draw_modal(bContext *C, wmOperator *op, const wmEvent *eve
|
||||
*/
|
||||
if ((p->region) && (p->region->regiontype == RGN_TYPE_TOOLS)) {
|
||||
/* Change to whatever region is now under the mouse */
|
||||
ARegion *current_region = BKE_area_find_region_xy(
|
||||
p->area, RGN_TYPE_ANY, event->xy[0], event->xy[1]);
|
||||
ARegion *current_region = BKE_area_find_region_xy(p->area, RGN_TYPE_ANY, event->xy);
|
||||
|
||||
if (current_region) {
|
||||
/* Assume that since we found the cursor in here, it is in bounds
|
||||
|
||||
@@ -2108,8 +2108,7 @@ static int gpencil_fill_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
|
||||
/* first time the event is not enabled to show help lines. */
|
||||
if ((tgpf->oldkey != -1) || (!help_lines)) {
|
||||
ARegion *region = BKE_area_find_region_xy(
|
||||
CTX_wm_area(C), RGN_TYPE_ANY, event->xy[0], event->xy[1]);
|
||||
ARegion *region = BKE_area_find_region_xy(CTX_wm_area(C), RGN_TYPE_ANY, event->xy);
|
||||
if (region) {
|
||||
bool in_bounds = false;
|
||||
/* Perform bounds check */
|
||||
|
||||
@@ -3681,8 +3681,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
*/
|
||||
if ((p->region) && (p->region->regiontype == RGN_TYPE_TOOLS)) {
|
||||
/* Change to whatever region is now under the mouse */
|
||||
ARegion *current_region = BKE_area_find_region_xy(
|
||||
p->area, RGN_TYPE_ANY, event->xy[0], event->xy[1]);
|
||||
ARegion *current_region = BKE_area_find_region_xy(p->area, RGN_TYPE_ANY, event->xy);
|
||||
|
||||
if (current_region) {
|
||||
/* Assume that since we found the cursor in here, it is in bounds
|
||||
|
||||
@@ -146,8 +146,8 @@ void eyedropper_draw_cursor_text_region(const int x, const int y, const char *na
|
||||
uiBut *eyedropper_get_property_button_under_mouse(bContext *C, const wmEvent *event)
|
||||
{
|
||||
bScreen *screen = CTX_wm_screen(C);
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, event->xy[0], event->xy[1]);
|
||||
const ARegion *region = BKE_area_find_region_xy(area, RGN_TYPE_ANY, event->xy[0], event->xy[1]);
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, event->xy);
|
||||
const ARegion *region = BKE_area_find_region_xy(area, RGN_TYPE_ANY, event->xy);
|
||||
|
||||
uiBut *but = ui_but_find_mouse_over(region, event);
|
||||
|
||||
@@ -163,13 +163,13 @@ void datadropper_win_area_find(
|
||||
bScreen *screen = CTX_wm_screen(C);
|
||||
|
||||
*r_win = CTX_wm_window(C);
|
||||
*r_area = BKE_screen_find_area_xy(screen, -1, mval[0], mval[1]);
|
||||
*r_area = BKE_screen_find_area_xy(screen, -1, mval);
|
||||
if (*r_area == NULL) {
|
||||
wmWindowManager *wm = CTX_wm_manager(C);
|
||||
*r_win = WM_window_find_under_cursor(wm, NULL, *r_win, mval, r_mval);
|
||||
if (*r_win) {
|
||||
screen = WM_window_get_active_screen(*r_win);
|
||||
*r_area = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, r_mval[0], r_mval[1]);
|
||||
*r_area = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, r_mval);
|
||||
}
|
||||
}
|
||||
else if (mval != r_mval) {
|
||||
|
||||
@@ -263,12 +263,12 @@ static bool eyedropper_cryptomatte_sample_fl(
|
||||
}
|
||||
|
||||
bScreen *screen = CTX_wm_screen(C);
|
||||
ScrArea *sa = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, mx, my);
|
||||
ScrArea *sa = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, (const int[2]){mx, my});
|
||||
if (!sa || !ELEM(sa->spacetype, SPACE_IMAGE, SPACE_NODE, SPACE_CLIP)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ARegion *region = BKE_area_find_region_xy(sa, RGN_TYPE_WINDOW, mx, my);
|
||||
ARegion *region = BKE_area_find_region_xy(sa, RGN_TYPE_WINDOW, (const int[2]){mx, my});
|
||||
if (!region) {
|
||||
return false;
|
||||
}
|
||||
@@ -337,7 +337,7 @@ void eyedropper_color_sample_fl(bContext *C, int mx, int my, float r_col[3])
|
||||
|
||||
if (area) {
|
||||
if (area->spacetype == SPACE_IMAGE) {
|
||||
ARegion *region = BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, mval[0], mval[1]);
|
||||
ARegion *region = BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, mval);
|
||||
if (region) {
|
||||
SpaceImage *sima = area->spacedata.first;
|
||||
int region_mval[2] = {mval[0] - region->winrct.xmin, mval[1] - region->winrct.ymin};
|
||||
@@ -348,7 +348,7 @@ void eyedropper_color_sample_fl(bContext *C, int mx, int my, float r_col[3])
|
||||
}
|
||||
}
|
||||
else if (area->spacetype == SPACE_NODE) {
|
||||
ARegion *region = BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, mval[0], mval[1]);
|
||||
ARegion *region = BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, mval);
|
||||
if (region) {
|
||||
SpaceNode *snode = area->spacedata.first;
|
||||
int region_mval[2] = {mval[0] - region->winrct.xmin, mval[1] - region->winrct.ymin};
|
||||
@@ -359,7 +359,7 @@ void eyedropper_color_sample_fl(bContext *C, int mx, int my, float r_col[3])
|
||||
}
|
||||
}
|
||||
else if (area->spacetype == SPACE_CLIP) {
|
||||
ARegion *region = BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, mval[0], mval[1]);
|
||||
ARegion *region = BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, mval);
|
||||
if (region) {
|
||||
SpaceClip *sc = area->spacedata.first;
|
||||
int region_mval[2] = {mval[0] - region->winrct.xmin, mval[1] - region->winrct.ymin};
|
||||
|
||||
@@ -162,7 +162,7 @@ static void datadropper_id_sample_pt(
|
||||
|
||||
if (area) {
|
||||
if (ELEM(area->spacetype, SPACE_VIEW3D, SPACE_OUTLINER)) {
|
||||
ARegion *region = BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, mx, my);
|
||||
ARegion *region = BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, (const int[2]){mx, my});
|
||||
if (region) {
|
||||
const int mval[2] = {mx - region->winrct.xmin, my - region->winrct.ymin};
|
||||
Base *base;
|
||||
|
||||
@@ -157,7 +157,7 @@ static void depthdropper_depth_sample_pt(
|
||||
{
|
||||
/* we could use some clever */
|
||||
bScreen *screen = CTX_wm_screen(C);
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, mx, my);
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, (const int[2]){mx, my});
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
|
||||
ScrArea *area_prev = CTX_wm_area(C);
|
||||
@@ -167,7 +167,7 @@ static void depthdropper_depth_sample_pt(
|
||||
|
||||
if (area) {
|
||||
if (area->spacetype == SPACE_VIEW3D) {
|
||||
ARegion *region = BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, mx, my);
|
||||
ARegion *region = BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, (const int[2]){mx, my});
|
||||
if (region) {
|
||||
struct Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
|
||||
View3D *v3d = area->spacedata.first;
|
||||
|
||||
@@ -388,8 +388,7 @@ static int face_set_extract_modal(bContext *C, wmOperator *op, const wmEvent *ev
|
||||
* that the mouse clicked in a viewport region and its coordinates can be used to ray-cast
|
||||
* the PBVH and update the active Face Set ID. */
|
||||
bScreen *screen = CTX_wm_screen(C);
|
||||
ARegion *region = BKE_screen_find_main_region_at_xy(
|
||||
screen, SPACE_VIEW3D, event->xy[0], event->xy[1]);
|
||||
ARegion *region = BKE_screen_find_main_region_at_xy(screen, SPACE_VIEW3D, event->xy);
|
||||
|
||||
if (!region) {
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
@@ -1128,8 +1128,7 @@ static int actionzone_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
AREAMAP_FROM_SCREEN(screen), &screen_rect, event->xy[0], event->xy[1]) == NULL)) {
|
||||
|
||||
/* What area are we now in? */
|
||||
ScrArea *area = BKE_screen_find_area_xy(
|
||||
screen, SPACE_TYPE_ANY, event->xy[0], event->xy[1]);
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, event->xy);
|
||||
|
||||
if (area == sad->sa1) {
|
||||
/* Same area, so possible split. */
|
||||
@@ -1173,7 +1172,7 @@ static int actionzone_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
/* gesture is large enough? */
|
||||
if (is_gesture) {
|
||||
/* second area, for join when (sa1 != sa2) */
|
||||
sad->sa2 = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, event->xy[0], event->xy[1]);
|
||||
sad->sa2 = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, event->xy);
|
||||
/* apply sends event */
|
||||
actionzone_apply(C, op, sad->az->type);
|
||||
actionzone_exit(op);
|
||||
@@ -1241,12 +1240,16 @@ static ScrEdge *screen_area_edge_from_cursor(const bContext *C,
|
||||
int borderwidth = (4 * UI_DPI_FAC);
|
||||
ScrArea *sa1, *sa2;
|
||||
if (screen_geom_edge_is_horizontal(actedge)) {
|
||||
sa1 = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, cursor[0], cursor[1] + borderwidth);
|
||||
sa2 = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, cursor[0], cursor[1] - borderwidth);
|
||||
sa1 = BKE_screen_find_area_xy(
|
||||
screen, SPACE_TYPE_ANY, (const int[2]){cursor[0], cursor[1] + borderwidth});
|
||||
sa2 = BKE_screen_find_area_xy(
|
||||
screen, SPACE_TYPE_ANY, (const int[2]){cursor[0], cursor[1] - borderwidth});
|
||||
}
|
||||
else {
|
||||
sa1 = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, cursor[0] + borderwidth, cursor[1]);
|
||||
sa2 = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, cursor[0] - borderwidth, cursor[1]);
|
||||
sa1 = BKE_screen_find_area_xy(
|
||||
screen, SPACE_TYPE_ANY, (const int[2]){cursor[0] + borderwidth, cursor[1]});
|
||||
sa2 = BKE_screen_find_area_xy(
|
||||
screen, SPACE_TYPE_ANY, (const int[2]){cursor[0] - borderwidth, cursor[1]});
|
||||
}
|
||||
bool isGlobal = ((sa1 && ED_area_is_global(sa1)) || (sa2 && ED_area_is_global(sa2)));
|
||||
if (!isGlobal) {
|
||||
@@ -1334,8 +1337,7 @@ static int area_swap_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
switch (event->type) {
|
||||
case MOUSEMOVE:
|
||||
/* second area, for join */
|
||||
sad->sa2 = BKE_screen_find_area_xy(
|
||||
CTX_wm_screen(C), SPACE_TYPE_ANY, event->xy[0], event->xy[1]);
|
||||
sad->sa2 = BKE_screen_find_area_xy(CTX_wm_screen(C), SPACE_TYPE_ANY, event->xy);
|
||||
break;
|
||||
case LEFTMOUSE: /* release LMB */
|
||||
if (event->val == KM_RELEASE) {
|
||||
@@ -2508,8 +2510,7 @@ static int area_split_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
ED_area_tag_redraw(sd->sarea);
|
||||
}
|
||||
/* area context not set */
|
||||
sd->sarea = BKE_screen_find_area_xy(
|
||||
CTX_wm_screen(C), SPACE_TYPE_ANY, event->xy[0], event->xy[1]);
|
||||
sd->sarea = BKE_screen_find_area_xy(CTX_wm_screen(C), SPACE_TYPE_ANY, event->xy);
|
||||
|
||||
if (sd->sarea) {
|
||||
ScrArea *area = sd->sarea;
|
||||
@@ -3517,7 +3518,7 @@ static int area_join_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
switch (event->type) {
|
||||
|
||||
case MOUSEMOVE: {
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, event->xy[0], event->xy[1]);
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, event->xy);
|
||||
jd->dir = area_getorientation(jd->sa1, jd->sa2);
|
||||
|
||||
if (area == jd->sa1) {
|
||||
|
||||
@@ -166,8 +166,7 @@ static int screenshot_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
if (use_crop) {
|
||||
area = CTX_wm_area(C);
|
||||
bScreen *screen = CTX_wm_screen(C);
|
||||
ScrArea *area_test = BKE_screen_find_area_xy(
|
||||
screen, SPACE_TYPE_ANY, event->xy[0], event->xy[1]);
|
||||
ScrArea *area_test = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, event->xy);
|
||||
if (area_test != NULL) {
|
||||
area = area_test;
|
||||
}
|
||||
|
||||
@@ -248,8 +248,10 @@ static int sample_detail(bContext *C, int mx, int my, int mode)
|
||||
{
|
||||
/* Find 3D view to pick from. */
|
||||
bScreen *screen = CTX_wm_screen(C);
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, SPACE_VIEW3D, mx, my);
|
||||
ARegion *region = (area) ? BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, mx, my) : NULL;
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, SPACE_VIEW3D, (const int[2]){mx, my});
|
||||
ARegion *region = (area) ?
|
||||
BKE_area_find_region_xy(area, RGN_TYPE_WINDOW, (const int[2]){mx, my}) :
|
||||
NULL;
|
||||
if (region == NULL) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
@@ -884,7 +884,7 @@ void wm_drags_draw(bContext *C, wmWindow *win)
|
||||
bScreen *screen = CTX_wm_screen(C);
|
||||
/* To start with, use the area and region under the mouse cursor, just like event handling. The
|
||||
* operator context may still override it. */
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, UNPACK2(xy));
|
||||
ScrArea *area = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, xy);
|
||||
ARegion *region = ED_area_find_region_xy_visual(area, RGN_TYPE_ANY, xy);
|
||||
/* Will be overridden and unset eventually. */
|
||||
BLI_assert(!CTX_wm_area(C) && !CTX_wm_region(C));
|
||||
|
||||
@@ -1861,8 +1861,7 @@ static void wm_handler_op_context(bContext *C, wmEventHandler_Op *handler, const
|
||||
CTX_wm_area_set(C, area);
|
||||
|
||||
if (op && (op->flag & OP_IS_MODAL_CURSOR_REGION)) {
|
||||
region = BKE_area_find_region_xy(
|
||||
area, handler->context.region_type, event->xy[0], event->xy[1]);
|
||||
region = BKE_area_find_region_xy(area, handler->context.region_type, event->xy);
|
||||
if (region) {
|
||||
handler->context.region = region;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user