Revision: 24632
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24632
Author: aligorith
Date: 2009-11-18 11:37:32 +0100 (Wed, 18 Nov 2009)
Log Message:
-----------
Partial fixes for #19881: Items existing on the same row as the window dividers
are not interactive (selectable, etc.)
The View 2D function for handling scrollbar events now takes into account
whether the scrollbar is visible or not, so that it won't block events when the
scrollbar isn't visible.
Also, made the UI code take this into account too for its region testing code.
Unforunately, there still seems to be something else which is still preventing
UI buttons from being processed when they are in those regions.
Modified Paths:
--------------
trunk/blender/source/blender/editors/interface/interface_handlers.c
trunk/blender/source/blender/editors/interface/view2d_ops.c
Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c
2009-11-18 09:49:42 UTC (rev 24631)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c
2009-11-18 10:37:32 UTC (rev 24632)
@@ -3747,26 +3747,55 @@
static int ui_mouse_inside_region(ARegion *ar, int x, int y)
{
uiBlock *block;
- int mx, my;
+
- /* check if the mouse is in the region, and in case of a view2d also
check
- * if it is inside the view2d itself, not over scrollbars for example */
+ /* check if the mouse is in the region */
if(!BLI_in_rcti(&ar->winrct, x, y)) {
for(block=ar->uiblocks.first; block; block=block->next)
block->auto_open= 0;
-
+
return 0;
}
+ /* also, check that with view2d, that the mouse is not over the
scrollbars
+ * NOTE: care is needed here, since the mask rect may include the
scrollbars
+ * even when they are not visible, so we need to make a copy of the
mask to
+ * use to check
+ */
if(ar->v2d.mask.xmin!=ar->v2d.mask.xmax) {
+ View2D *v2d= &ar->v2d;
+ rcti mask_rct;
+ int mx, my;
+
+ /* convert window coordinates to region coordinates */
mx= x;
my= y;
ui_window_to_region(ar, &mx, &my);
-
- if(!BLI_in_rcti(&ar->v2d.mask, mx, my))
+
+ /* make a copy of the mask rect, and tweak accordingly for
hidden scrollbars */
+ mask_rct.xmin= v2d->mask.xmin;
+ mask_rct.xmax= v2d->mask.xmax;
+ mask_rct.ymin= v2d->mask.ymin;
+ mask_rct.ymax= v2d->mask.ymax;
+
+ if (v2d->scroll & V2D_SCROLL_VERTICAL_HIDE) {
+ if (v2d->scroll & V2D_SCROLL_LEFT)
+ mask_rct.xmin= v2d->vert.xmin;
+ else if (v2d->scroll & V2D_SCROLL_RIGHT)
+ mask_rct.xmax= v2d->vert.xmax;
+ }
+ if (v2d->scroll & V2D_SCROLL_HORIZONTAL_HIDE) {
+ if (v2d->scroll &
(V2D_SCROLL_BOTTOM|V2D_SCROLL_BOTTOM_O))
+ mask_rct.ymin= v2d->hor.ymin;
+ else if (v2d->scroll & V2D_SCROLL_TOP)
+ mask_rct.ymax= v2d->hor.ymax;
+ }
+
+ /* check if in the rect */
+ if(!BLI_in_rcti(&mask_rct, mx, my))
return 0;
}
-
+
return 1;
}
Modified: trunk/blender/source/blender/editors/interface/view2d_ops.c
===================================================================
--- trunk/blender/source/blender/editors/interface/view2d_ops.c 2009-11-18
09:49:42 UTC (rev 24631)
+++ trunk/blender/source/blender/editors/interface/view2d_ops.c 2009-11-18
10:37:32 UTC (rev 24632)
@@ -1285,6 +1285,13 @@
return OPERATOR_PASS_THROUGH;
}
}
+ /* zone is also inappropriate if scroller is not visible... */
+ if ( ((vsm->scroller=='h') && (v2d->scroll &
V2D_SCROLL_HORIZONTAL_HIDE)) ||
+ ((vsm->scroller=='v') && (v2d->scroll &
V2D_SCROLL_VERTICAL_HIDE)) )
+ {
+ /* can't catch this event for ourselves, so let it go
to someone else? */
+ return OPERATOR_PASS_THROUGH;
+ }
if(vsm->scroller=='h')
v2d->scroll_ui |= V2D_SCROLL_H_ACTIVE;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs