Commit: 2822a749585962de778738eea2c5f4036095cac4
Author: Severin
Date:   Sun Dec 30 12:48:33 2018 +0100
Branches: userpref_redesign
https://developer.blender.org/rB2822a749585962de778738eea2c5f4036095cac4

Fix invisible scrollbars in Preferences

Need to force correct updates of action-zone alphas for dynamically
sized regions.

===================================================================

M       source/blender/editors/include/ED_screen.h
M       source/blender/editors/screen/area.c
M       source/blender/editors/screen/screen_edit.c
M       source/blender/editors/screen/screen_intern.h
M       source/blender/editors/screen/screen_ops.c

===================================================================

diff --git a/source/blender/editors/include/ED_screen.h 
b/source/blender/editors/include/ED_screen.h
index 4adf040f1ea..9ad4c06dee6 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -143,7 +143,7 @@ void    ED_area_tag_redraw_no_rebuild(ScrArea *sa);
 void    ED_area_tag_redraw_regiontype(ScrArea *sa, int type);
 void    ED_area_tag_refresh(ScrArea *sa);
 void    ED_area_do_refresh(struct bContext *C, ScrArea *sa);
-void    ED_area_azones_update(ScrArea *sa, const int mouse_xy[]);
+struct AZone *ED_area_azones_update(ScrArea *sa, const int mouse_xy[]);
 void    ED_area_status_text(ScrArea *sa, const char *str);
 void    ED_area_newspace(struct bContext *C, ScrArea *sa, int type, const bool 
skip_ar_exit);
 void    ED_area_prevspace(struct bContext *C, ScrArea *sa);
diff --git a/source/blender/editors/screen/area.c 
b/source/blender/editors/screen/area.c
index 26960c3d114..34a20c8ccf7 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -186,52 +186,6 @@ void ED_area_do_refresh(bContext *C, ScrArea *sa)
        sa->do_refresh = false;
 }
 
-/**
- * Action zones are only updated if the mouse is inside of them, but in some 
cases (currently only fullscreen icon)
- * it might be needed to update their properties and redraw if the mouse isn't 
inside.
- */
-void ED_area_azones_update(ScrArea *sa, const int mouse_xy[2])
-{
-       AZone *az;
-       bool changed = false;
-
-       for (az = sa->actionzones.first; az; az = az->next) {
-               if (az->type == AZONE_FULLSCREEN) {
-                       /* only if mouse is not hovering the azone */
-                       if (BLI_rcti_isect_pt_v(&az->rect, mouse_xy) == false) {
-                               az->alpha = 0.0f;
-                               changed = true;
-
-                               /* can break since currently only this is 
handled here */
-                               break;
-                       }
-               }
-               else if (az->type == AZONE_REGION_SCROLL) {
-                       /* only if mouse is not hovering the azone */
-                       if (BLI_rcti_isect_pt_v(&az->rect, mouse_xy) == false) {
-                               View2D *v2d = &az->ar->v2d;
-
-                               if (az->direction == AZ_SCROLL_VERT) {
-                                       az->alpha = v2d->alpha_vert = 0;
-                                       changed = true;
-                               }
-                               else if (az->direction == AZ_SCROLL_HOR) {
-                                       az->alpha = v2d->alpha_hor = 0;
-                                       changed = true;
-                               }
-                               else {
-                                       BLI_assert(0);
-                               }
-                       }
-               }
-       }
-
-       if (changed) {
-               sa->flag &= ~AREA_FLAG_ACTIONZONES_UPDATE;
-               ED_area_tag_redraw_no_rebuild(sa);
-       }
-}
-
 /**
  * \brief Corner widget use for quitting fullscreen.
  */
@@ -412,18 +366,11 @@ static void region_draw_azones(ScrArea *sa, ARegion *ar)
                        }
                        else if (az->type == AZONE_FULLSCREEN) {
                                area_draw_azone_fullscreen(az->x1, az->y1, 
az->x2, az->y2, az->alpha);
-
-                               if (az->alpha != 0.0f) {
-                                       area_azone_tag_update(sa);
-                               }
-                       }
-                       else if (az->type == AZONE_REGION_SCROLL) {
-                               if (az->alpha != 0.0f) {
-                                       area_azone_tag_update(sa);
-                               }
-                               /* Don't draw this azone. */
                        }
                }
+               if (!IS_EQF(az->alpha, 0.0f) && ELEM(az->type, 
AZONE_FULLSCREEN, AZONE_REGION_SCROLL)) {
+                       area_azone_tag_update(sa);
+               }
        }
 
        GPU_matrix_pop();
@@ -1629,6 +1576,7 @@ void ED_area_update_region_sizes(wmWindowManager *wm, 
wmWindow *win, ScrArea *ar
                /* Some AZones use View2D data which is only updated in region 
init, so call that first! */
                region_azones_add(screen, area, ar, ar->alignment & 
~RGN_SPLIT_PREV);
        }
+       ED_area_azones_update(area, &win->eventstate->x);
 
        area->flag &= ~AREA_FLAG_REGION_SIZE_UPDATE;
 }
diff --git a/source/blender/editors/screen/screen_edit.c 
b/source/blender/editors/screen/screen_edit.c
index 376b334358c..7e6e31d339d 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -639,7 +639,7 @@ void ED_screen_set_active_region(bContext *C, wmWindow 
*win, const int xy[2])
                ED_screen_areas_iter(win, scr, area_iter) {
                        if (xy[0] > area_iter->totrct.xmin && xy[0] < 
area_iter->totrct.xmax) {
                                if (xy[1] > area_iter->totrct.ymin && xy[1] < 
area_iter->totrct.ymax) {
-                                       if 
(ED_area_actionzone_refresh_xy(area_iter, xy) == NULL) {
+                                       if (ED_area_azones_update(area_iter, 
xy) == NULL) {
                                                sa = area_iter;
                                                break;
                                        }
diff --git a/source/blender/editors/screen/screen_intern.h 
b/source/blender/editors/screen/screen_intern.h
index 87bcd1b7006..2813ac474da 100644
--- a/source/blender/editors/screen/screen_intern.h
+++ b/source/blender/editors/screen/screen_intern.h
@@ -58,7 +58,6 @@ int         screen_area_join(struct bContext *C, bScreen 
*scr, ScrArea *sa1, Scr
 int         area_getorientation(ScrArea *sa, ScrArea *sb);
 
 struct AZone *ED_area_actionzone_find_xy(ScrArea *sa, const int xy[2]);
-struct AZone *ED_area_actionzone_refresh_xy(ScrArea *sa, const int xy[2]);
 
 /* screen_geometry.c */
 int         screen_geom_area_height(const ScrArea *area);
diff --git a/source/blender/editors/screen/screen_ops.c 
b/source/blender/editors/screen/screen_ops.c
index 0f066fc3866..d8539c4dd8c 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -802,6 +802,32 @@ static AZone *area_actionzone_refresh_xy(ScrArea *sa, 
const int xy[2], const boo
                                }
                        }
                }
+               else if (!test_only && !IS_EQF(az->alpha, 0.0f)) {
+                       bool changed = false;
+
+                       if (az->type == AZONE_FULLSCREEN) {
+                               az->alpha = 0.0f;
+                               changed = true;
+                       }
+                       else if (az->type == AZONE_REGION_SCROLL) {
+                               if (az->direction == AZ_SCROLL_VERT) {
+                                       az->alpha = az->ar->v2d.alpha_vert = 0;
+                                       changed = true;
+                               }
+                               else if (az->direction == AZ_SCROLL_HOR) {
+                                       az->alpha = az->ar->v2d.alpha_hor = 0;
+                                       changed = true;
+                               }
+                               else {
+                                       BLI_assert(0);
+                               }
+                       }
+
+                       if (changed) {
+                               sa->flag &= ~AREA_FLAG_ACTIONZONES_UPDATE;
+                               ED_area_tag_redraw_no_rebuild(sa);
+                       }
+               }
        }
 
        return az;
@@ -812,7 +838,7 @@ AZone *ED_area_actionzone_find_xy(ScrArea *sa, const int 
xy[2])
        return area_actionzone_refresh_xy(sa, xy, true);
 }
 
-AZone *ED_area_actionzone_refresh_xy(ScrArea *sa, const int xy[2])
+AZone *ED_area_azones_update(ScrArea *sa, const int xy[2])
 {
        return area_actionzone_refresh_xy(sa, xy, false);
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to