Bugfix #25756
authorTon Roosendaal <ton@blender.org>
Wed, 26 Jan 2011 12:26:44 +0000 (12:26 +0000)
committerTon Roosendaal <ton@blender.org>
Wed, 26 Jan 2011 12:26:44 +0000 (12:26 +0000)
Outliner was drawing icons sometimes blurred. Happens when subpixel
positions vary. UI code doesn't suffer this, it makes own ortho for
it.

This fix re-uses an un-used v2d flag (V2D_PIXELOFS_X) to force a 2d
view on pixel exact positions. It's set for outliner only, I need
testing feedback first.

source/blender/editors/interface/view2d.c
source/blender/editors/space_outliner/outliner.c

index ae414c6e5573a93841af0097f32ce19f954670a7..a2a16afc2f8c23848e52474eeb631563af39809e 100644 (file)
@@ -255,8 +255,6 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
                                /* absolutely no scrollers allowed */
                                v2d->scroll= 0;
                                
-                               /* pixel offsets need to be applied for smooth UI controls */
-                               v2d->flag |= (V2D_PIXELOFS_X|V2D_PIXELOFS_Y);
                        }
                                break;
                        
@@ -980,10 +978,6 @@ void UI_view2d_view_ortho(View2D *v2d)
        /* pixel offsets (-0.375f) are needed to get 1:1 correspondance with pixels for smooth UI drawing, 
         * but only applied where requsted
         */
-       /* XXX ton: fix this! */
-       xofs= 0.0; // (v2d->flag & V2D_PIXELOFS_X) ? 0.375f : 0.0f;
-       yofs= 0.0; // (v2d->flag & V2D_PIXELOFS_Y) ? 0.375f : 0.0f;
-
        /* XXX brecht: instead of zero at least use a tiny offset, otherwise
         * pixel rounding is effectively random due to float inaccuracy */
        xofs= 0.001f*(v2d->cur.xmax - v2d->cur.xmin)/(v2d->mask.xmax - v2d->mask.xmin);
@@ -992,6 +986,19 @@ void UI_view2d_view_ortho(View2D *v2d)
        /* apply mask-based adjustments to cur rect (due to scrollers), to eliminate scaling artifacts */
        view2d_map_cur_using_mask(v2d, &curmasked);
        
+       curmasked.xmin-= xofs; curmasked.xmax-=xofs;
+       curmasked.ymin-= yofs; curmasked.ymax-=yofs;
+       
+       /* XXX ton: this flag set by outliner, for icons */
+       if(v2d->flag & V2D_PIXELOFS_X) {
+               curmasked.xmin= floor(curmasked.xmin) + 0.375f;
+               curmasked.xmax= floor(curmasked.xmax) + 0.375f;
+       }
+       if(v2d->flag & V2D_PIXELOFS_Y) {
+               curmasked.ymin= floor(curmasked.ymin) + 0.375f;
+               curmasked.ymax= floor(curmasked.ymax) + 0.375f;
+       }
+       
        /* set matrix on all appropriate axes */
        wmOrtho2(curmasked.xmin-xofs, curmasked.xmax-xofs, curmasked.ymin-yofs, curmasked.ymax-yofs);
        
index b16fae73980b02d35c98fe958fc8552656c35cc2..466eaa4c6e9d659ac58991e31b86bda7e93017c9 100644 (file)
@@ -5718,6 +5718,8 @@ void draw_outliner(const bContext *C)
        /* update size of tot-rect (extents of data/viewable area) */
        UI_view2d_totRect_set(v2d, sizex, sizey);
 
+       /* force display to pixel coords */
+       v2d->flag |= (V2D_PIXELOFS_X|V2D_PIXELOFS_Y);
        /* set matrix for 2d-view controls */
        UI_view2d_view_ortho(v2d);