Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-05-15 21:59:55 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-05-15 21:59:55 +0400
commitac433977674d64cbb513ecdb01d8245a5950a027 (patch)
treea193c91a6e80e6a4281b1c16fbaa22c222da272b /source/blender/editors/screen/area.c
parenta4b5c05aadf5a258fdc4e52596e20c9ca88607f2 (diff)
Fix action zones not drawing properly while sculpting, due to recent bugfix.
Partial redraw doesn't work so well with these, now I've changed the action zones to just draw as part of regions instead of as a special overdraw done at the end, which fits better with partial redraw by avoiding any special exceptions.
Diffstat (limited to 'source/blender/editors/screen/area.c')
-rw-r--r--source/blender/editors/screen/area.c86
1 files changed, 35 insertions, 51 deletions
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 82ba0568823..9196fdc1980 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -149,25 +149,6 @@ void ED_area_do_refresh(bContext *C, ScrArea *sa)
sa->do_refresh = FALSE;
}
-/* based on screen region draw tags, set draw tags in azones, and future region tabs etc */
-/* only exported for WM */
-void ED_area_overdraw_flush(ScrArea *sa, ARegion *ar)
-{
- AZone *az;
-
- for (az = sa->actionzones.first; az; az = az->next) {
- int xs, ys;
-
- xs = (az->x1 + az->x2) / 2;
- ys = (az->y1 + az->y2) / 2;
-
- /* test if inside */
- if (BLI_rcti_isect_pt(&ar->winrct, xs, ys)) {
- az->do_draw = TRUE;
- }
- }
-}
-
/**
* \brief Corner widgets use for dragging and splitting the view.
*/
@@ -347,49 +328,50 @@ static void region_draw_azone_tria(AZone *az)
glDisable(GL_BLEND);
}
-/* only exported for WM */
-void ED_area_overdraw(bContext *C)
+static void region_draw_azones(ScrArea *sa, ARegion *ar)
{
- wmWindow *win = CTX_wm_window(C);
- bScreen *screen = CTX_wm_screen(C);
- ScrArea *sa;
-
- /* Draw AZones, in screenspace */
- wmSubWindowSet(win, screen->mainwin);
+ AZone *az;
+
+ if (!sa)
+ return;
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ glPushMatrix();
+ glTranslatef(-ar->winrct.xmin, -ar->winrct.ymin, 0.0f);
- for (sa = screen->areabase.first; sa; sa = sa->next) {
- AZone *az;
- for (az = sa->actionzones.first; az; az = az->next) {
- if (az->do_draw) {
- if (az->type == AZONE_AREA) {
- area_draw_azone(az->x1, az->y1, az->x2, az->y2);
- }
- else if (az->type == AZONE_REGION) {
-
- if (az->ar) {
- /* only display tab or icons when the region is hidden */
- if (az->ar->flag & (RGN_FLAG_HIDDEN | RGN_FLAG_TOO_SMALL)) {
- if (G.debug_value == 3)
- region_draw_azone_icon(az);
- else if (G.debug_value == 2)
- region_draw_azone_tria(az);
- else if (G.debug_value == 1)
- region_draw_azone_tab(az);
- else
- region_draw_azone_tab_plus(az);
- }
+ for (az = sa->actionzones.first; az; az = az->next) {
+ /* test if action zone is over this region */
+ rcti azrct;
+ BLI_rcti_init(&azrct, az->x1, az->x2, az->y1, az->y2);
+
+ if (BLI_rcti_isect(&ar->drawrct, &azrct, NULL)) {
+ if (az->type == AZONE_AREA) {
+ area_draw_azone(az->x1, az->y1, az->x2, az->y2);
+ }
+ else if (az->type == AZONE_REGION) {
+
+ if (az->ar) {
+ /* only display tab or icons when the region is hidden */
+ if (az->ar->flag & (RGN_FLAG_HIDDEN | RGN_FLAG_TOO_SMALL)) {
+ if (G.debug_value == 3)
+ region_draw_azone_icon(az);
+ else if (G.debug_value == 2)
+ region_draw_azone_tria(az);
+ else if (G.debug_value == 1)
+ region_draw_azone_tab(az);
+ else
+ region_draw_azone_tab_plus(az);
}
}
-
- az->do_draw = FALSE;
}
}
}
+
+ glPopMatrix();
+
glDisable(GL_BLEND);
-
}
/* only exported for WM */
@@ -454,6 +436,8 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_PIXEL);
+ region_draw_azones(sa, ar);
+
/* for debugging unneeded area redraws and partial redraw */
#if 0
glEnable(GL_BLEND);