Changeset 1824

Show
Ignore:
Timestamp:
08/02/07 05:55:05 (1 year ago)
Author:
arj..@yirdis.nl
Message:
  • Do bounding box updates in a separate idle method, no longer depends on expose() being called.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphas/trunk/gaphas/canvas.py

    r1800 r1824  
    7777 
    7878        self.request_update(item) 
    79         self._update_views((item,)) 
     79        #self._update_views((item,)) 
    8080 
    8181 
  • gaphas/trunk/gaphas/tests/test_view.py

    r1823 r1824  
    7777            gtk.main_iteration() 
    7878 
    79         assert not view._update_bounding_box 
    8079        assert len(view._qtree._ids) == 1 
    8180        assert not view._qtree._bucket.bounds == (0, 0, 0, 0), view._qtree._bucket.bounds 
  • gaphas/trunk/gaphas/view.py

    r1823 r1824  
    410410        self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#FFF')) 
    411411 
    412         self._update_bounding_box = set() 
    413  
    414412 
    415413    def emit(self, *args, **kwargs): 
     
    508506         
    509507 
    510     @async(single=False, priority=PRIORITY_HIGH_IDLE) 
    511     def _idle_queue_draw_item(self, *items): 
    512         self.queue_draw_item(*items) 
    513  
    514  
    515508    def queue_draw_item(self, *items): 
    516509        """ 
     
    551544 
    552545            for item in removed_items: 
    553                 # Be cautious, item may be removed before its bounding box 
    554                 # is calculated. 
    555                 if item in self._qtree: 
    556                     self._qtree.remove(item) 
     546                self._qtree.remove(item) 
    557547                self.selected_items.discard(item) 
    558548 
     
    605595                self.queue_draw_item(i) 
    606596 
    607             self._update_bounding_box.update(dirty_items) 
    608  
     597            self.update_bounding_box(set(dirty_items)) 
    609598        finally: 
    610599            self._dirty_items.clear() 
    611600            self._dirty_matrix_items.clear() 
     601 
     602 
     603    @async(single=False) 
     604    def update_bounding_box(self, items): 
     605        """ 
     606        Update bounding box is not necessary 
     607        """ 
     608        cr = self.window.cairo_create() 
     609 
     610        cr.save() 
     611        cr.rectangle(0, 0, 0, 0) 
     612        cr.clip() 
     613        try: 
     614            super(GtkView, self).update_bounding_box(cr, items) 
     615        finally: 
     616            cr.restore() 
     617        self.queue_draw_item(*items) 
     618        self.update_adjustments() 
    612619 
    613620 
     
    643650        cr.rectangle(x, y, w, h) 
    644651        cr.clip() 
    645  
    646         update_bounding_box = self._update_bounding_box 
    647         if update_bounding_box: 
    648             try: 
    649                 cr.save() 
    650                 cr.rectangle(0, 0, 0, 0) 
    651                 cr.clip() 
    652                 try: 
    653                     self.update_bounding_box(cr, update_bounding_box) 
    654                 finally: 
    655                     cr.restore() 
    656                 self._idle_queue_draw_item(*update_bounding_box) 
    657                 self.update_adjustments() 
    658             finally: 
    659                 update_bounding_box.clear() 
    660652 
    661653        area = Rectangle(x, y, width=w, height=h)