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:
authorTon Roosendaal <ton@blender.org>2004-10-12 19:47:15 +0400
committerTon Roosendaal <ton@blender.org>2004-10-12 19:47:15 +0400
commit5ae1191a12929240d6f0b38e83ebfa0f72c5fa94 (patch)
tree58e752eabfe6ff825786ec62b05f05866a6fe1d3 /source/blender/src/editscreen.c
parentc957ec93dfabcd459bcf243075786a605d2d5314 (diff)
Added safety test for occurance of zero scaled areas in Blender. This
totally screws up opengl calls... If it detects a zero area now, it removes it and prints warning in terminal
Diffstat (limited to 'source/blender/src/editscreen.c')
-rw-r--r--source/blender/src/editscreen.c60
1 files changed, 36 insertions, 24 deletions
diff --git a/source/blender/src/editscreen.c b/source/blender/src/editscreen.c
index 75590ad59cd..96b0b6f803c 100644
--- a/source/blender/src/editscreen.c
+++ b/source/blender/src/editscreen.c
@@ -1637,38 +1637,51 @@ static int rcti_eq(rcti *a, rcti *b) {
static void testareas(void)
{
- ScrArea *sa;
+ ScrArea *sa, *next;
/* test for header, if removed, or moved */
- /* testen for window, if removed, or moved */
-
- for (sa= G.curscreen->areabase.first; sa; sa= sa->next) {
+ /* test for window, if removed, or moved */
+
+ sa= G.curscreen->areabase.first;
+ while(sa) {
+ next= sa->next;
+
rcti oldhr= sa->headrct;
rcti oldwr= sa->winrct;
calc_arearcts(sa);
-
- /* test header */
- if (sa->headwin) {
- if (!rcti_eq(&oldhr, &sa->headrct)) {
- mywinposition(sa->headwin, sa->headrct.xmin, sa->headrct.xmax, sa->headrct.ymin, sa->headrct.ymax);
- addqueue(sa->headwin, CHANGED, 1);
- }
-
- if(sa->headbutlen<sa->winx) {
- sa->headbutofs= 0;
- addqueue(sa->headwin, CHANGED, 1);
- }
- else if(sa->headbutofs+sa->winx > sa->headbutlen) {
- sa->headbutofs= sa->headbutlen-sa->winx;
- addqueue(sa->headwin, CHANGED, 1);
- }
+
+ /* ilegally scaled down area.... */
+ if(sa->totrct.xmin>=sa->totrct.xmax || sa->totrct.ymin>=sa->totrct.ymax) {
+ del_area(sa);
+ BLI_remlink(&G.curscreen->areabase, sa);
+ MEM_freeN(sa);
+ printf("Warning, removed zero sized window from screen %s\n", G.curscreen->id.name+2);
}
+ else {
+ /* test header */
+ if (sa->headwin) {
+ if (!rcti_eq(&oldhr, &sa->headrct)) {
+ mywinposition(sa->headwin, sa->headrct.xmin, sa->headrct.xmax, sa->headrct.ymin, sa->headrct.ymax);
+ addqueue(sa->headwin, CHANGED, 1);
+ }
+
+ if(sa->headbutlen<sa->winx) {
+ sa->headbutofs= 0;
+ addqueue(sa->headwin, CHANGED, 1);
+ }
+ else if(sa->headbutofs+sa->winx > sa->headbutlen) {
+ sa->headbutofs= sa->headbutlen-sa->winx;
+ addqueue(sa->headwin, CHANGED, 1);
+ }
+ }
- if (!rcti_eq(&oldwr, &sa->winrct)) {
- mywinposition(sa->win, sa->winrct.xmin, sa->winrct.xmax, sa->winrct.ymin, sa->winrct.ymax);
- addqueue(sa->win, CHANGED, 1);
+ if (!rcti_eq(&oldwr, &sa->winrct)) {
+ mywinposition(sa->win, sa->winrct.xmin, sa->winrct.xmax, sa->winrct.ymin, sa->winrct.ymax);
+ addqueue(sa->win, CHANGED, 1);
+ }
}
+ sa= next;
}
/* remake global windowarray */
@@ -2647,7 +2660,6 @@ void test_scale_screen(bScreen *sc)
}
/* make each window at least HEADERY high */
-
sa= sc->areabase.first;
while(sa) {