forked from bartvdbraak/blender
Merge branch 'master' into blender2.8
This commit is contained in:
commit
ec22327a5f
@ -1835,8 +1835,11 @@ static int area_split_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
|||||||
int dir;
|
int dir;
|
||||||
|
|
||||||
/* no full window splitting allowed */
|
/* no full window splitting allowed */
|
||||||
if (sc->state != SCREENNORMAL)
|
BLI_assert(sc->state == SCREENNORMAL);
|
||||||
return OPERATOR_CANCELLED;
|
|
||||||
|
PropertyRNA *prop_dir = RNA_struct_find_property(op->ptr, "direction");
|
||||||
|
PropertyRNA *prop_factor = RNA_struct_find_property(op->ptr, "factor");
|
||||||
|
PropertyRNA *prop_cursor = RNA_struct_find_property(op->ptr, "cursor");
|
||||||
|
|
||||||
if (event->type == EVT_ACTIONZONE_AREA) {
|
if (event->type == EVT_ACTIONZONE_AREA) {
|
||||||
sActionzoneData *sad = event->customdata;
|
sActionzoneData *sad = event->customdata;
|
||||||
@ -1856,49 +1859,73 @@ static int area_split_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
|||||||
/* prepare operator state vars */
|
/* prepare operator state vars */
|
||||||
if (sad->gesture_dir == 'n' || sad->gesture_dir == 's') {
|
if (sad->gesture_dir == 'n' || sad->gesture_dir == 's') {
|
||||||
dir = 'h';
|
dir = 'h';
|
||||||
RNA_float_set(op->ptr, "factor", ((float)(event->x - sad->sa1->v1->vec.x)) / (float)sad->sa1->winx);
|
RNA_property_float_set(
|
||||||
|
op->ptr, prop_factor,
|
||||||
|
((float)(event->x - sad->sa1->v1->vec.x)) / (float)sad->sa1->winx);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
dir = 'v';
|
dir = 'v';
|
||||||
RNA_float_set(op->ptr, "factor", ((float)(event->y - sad->sa1->v1->vec.y)) / (float)sad->sa1->winy);
|
RNA_property_float_set(
|
||||||
|
op->ptr, prop_factor,
|
||||||
|
((float)(event->y - sad->sa1->v1->vec.y)) / (float)sad->sa1->winy);
|
||||||
}
|
}
|
||||||
RNA_enum_set(op->ptr, "direction", dir);
|
RNA_property_enum_set(op->ptr, prop_dir, dir);
|
||||||
|
|
||||||
/* general init, also non-UI case, adds customdata, sets area and defaults */
|
/* general init, also non-UI case, adds customdata, sets area and defaults */
|
||||||
if (!area_split_init(C, op))
|
if (!area_split_init(C, op)) {
|
||||||
return OPERATOR_PASS_THROUGH;
|
return OPERATOR_PASS_THROUGH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (RNA_property_is_set(op->ptr, prop_dir)) {
|
||||||
|
ScrArea *sa = CTX_wm_area(C);
|
||||||
|
if (sa == NULL) {
|
||||||
|
return OPERATOR_CANCELLED;
|
||||||
|
}
|
||||||
|
dir = RNA_property_enum_get(op->ptr, prop_dir);
|
||||||
|
if (dir == 'h') {
|
||||||
|
RNA_property_float_set(
|
||||||
|
op->ptr, prop_factor,
|
||||||
|
((float)(event->x - sa->v1->vec.x)) / (float)sa->winx);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
RNA_property_float_set(
|
||||||
|
op->ptr, prop_factor,
|
||||||
|
((float)(event->y - sa->v1->vec.y)) / (float)sa->winy);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!area_split_init(C, op)) {
|
||||||
|
return OPERATOR_CANCELLED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ScrEdge *actedge;
|
ScrEdge *actedge;
|
||||||
rcti screen_rect;
|
rcti screen_rect;
|
||||||
int x, y;
|
int event_co[2];
|
||||||
|
|
||||||
/* retrieve initial mouse coord, so we can find the active edge */
|
/* retrieve initial mouse coord, so we can find the active edge */
|
||||||
if (RNA_struct_property_is_set(op->ptr, "mouse_x"))
|
if (RNA_property_is_set(op->ptr, prop_cursor)) {
|
||||||
x = RNA_int_get(op->ptr, "mouse_x");
|
RNA_property_int_get_array(op->ptr, prop_cursor, event_co);
|
||||||
else
|
}
|
||||||
x = event->x;
|
else {
|
||||||
|
copy_v2_v2_int(event_co, &event->x);
|
||||||
if (RNA_struct_property_is_set(op->ptr, "mouse_y"))
|
}
|
||||||
y = RNA_int_get(op->ptr, "mouse_y");
|
|
||||||
else
|
|
||||||
y = event->x;
|
|
||||||
|
|
||||||
WM_window_screen_rect_calc(win, &screen_rect);
|
WM_window_screen_rect_calc(win, &screen_rect);
|
||||||
|
|
||||||
actedge = screen_geom_area_map_find_active_scredge(AREAMAP_FROM_SCREEN(sc), &screen_rect, x, y);
|
actedge = screen_geom_area_map_find_active_scredge(
|
||||||
if (actedge == NULL)
|
AREAMAP_FROM_SCREEN(sc), &screen_rect, event_co[0], event_co[1]);
|
||||||
|
if (actedge == NULL) {
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
|
}
|
||||||
|
|
||||||
dir = screen_geom_edge_is_horizontal(actedge) ? 'v' : 'h';
|
dir = screen_geom_edge_is_horizontal(actedge) ? 'v' : 'h';
|
||||||
|
|
||||||
RNA_enum_set(op->ptr, "direction", dir);
|
RNA_property_enum_set(op->ptr, prop_dir, dir);
|
||||||
|
|
||||||
/* special case, adds customdata, sets defaults */
|
/* special case, adds customdata, sets defaults */
|
||||||
if (!area_split_menu_init(C, op))
|
if (!area_split_menu_init(C, op)) {
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sd = (sAreaSplitData *)op->customdata;
|
sd = (sAreaSplitData *)op->customdata;
|
||||||
@ -2098,8 +2125,7 @@ static void SCREEN_OT_area_split(wmOperatorType *ot)
|
|||||||
/* rna */
|
/* rna */
|
||||||
RNA_def_enum(ot->srna, "direction", prop_direction_items, 'h', "Direction", "");
|
RNA_def_enum(ot->srna, "direction", prop_direction_items, 'h', "Direction", "");
|
||||||
RNA_def_float(ot->srna, "factor", 0.5f, 0.0, 1.0, "Factor", "", 0.0, 1.0);
|
RNA_def_float(ot->srna, "factor", 0.5f, 0.0, 1.0, "Factor", "", 0.0, 1.0);
|
||||||
RNA_def_int(ot->srna, "mouse_x", -100, INT_MIN, INT_MAX, "Mouse X", "", INT_MIN, INT_MAX);
|
RNA_def_int_vector(ot->srna, "cursor", 2, NULL, INT_MIN, INT_MAX, "Cursor", "", INT_MIN, INT_MAX);
|
||||||
RNA_def_int(ot->srna, "mouse_y", -100, INT_MIN, INT_MAX, "Mouse Y", "", INT_MIN, INT_MAX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \} */
|
/** \} */
|
||||||
@ -3127,8 +3153,7 @@ static int screen_area_options_invoke(bContext *C, wmOperator *op, const wmEvent
|
|||||||
|
|
||||||
uiItemFullO(layout, "SCREEN_OT_area_split", NULL, ICON_NONE, NULL, WM_OP_INVOKE_DEFAULT, 0, &ptr);
|
uiItemFullO(layout, "SCREEN_OT_area_split", NULL, ICON_NONE, NULL, WM_OP_INVOKE_DEFAULT, 0, &ptr);
|
||||||
/* store initial mouse cursor position */
|
/* store initial mouse cursor position */
|
||||||
RNA_int_set(&ptr, "mouse_x", event->x);
|
RNA_int_set_array(&ptr, "cursor", &event->x);
|
||||||
RNA_int_set(&ptr, "mouse_y", event->y);
|
|
||||||
|
|
||||||
uiItemFullO(layout, "SCREEN_OT_area_join", NULL, ICON_NONE, NULL, WM_OP_INVOKE_DEFAULT, 0, &ptr);
|
uiItemFullO(layout, "SCREEN_OT_area_join", NULL, ICON_NONE, NULL, WM_OP_INVOKE_DEFAULT, 0, &ptr);
|
||||||
/* mouse cursor on edge, '4' can fail on wide edges... */
|
/* mouse cursor on edge, '4' can fail on wide edges... */
|
||||||
|
Loading…
Reference in New Issue
Block a user