Changeset 1823

Show
Ignore:
Timestamp:
08/02/07 04:37:44 (1 year ago)
Author:
arj..@yirdis.nl
Message:

Allow items to be removed from the canvas before the bounding box is calculated.

Files:

Legend:

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

    r1694 r1823  
    5353            assert view1.get_item_bounding_box(line) == view2.get_item_bounding_box(line), '%s != %s' % (view1.get_item_bounding_box(line), view2.get_item_bounding_box(line)) 
    5454        finally: 
     55            window1.destroy() 
    5556            window2.destroy() 
    5657 
     
    8384        assert view.get_item_at_point(60, 10) is None 
    8485 
     86        window.destroy() 
    8587 
     88 
     89    def test_item_removal(self): 
     90        canvas = Canvas() 
     91        view = GtkView(canvas) 
     92        window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     93        window.add(view) 
     94        window.show_all() 
     95 
     96        box = Box() 
     97        canvas.add(box) 
     98        # No gtk main loop, so updates occur instantly 
     99        assert not canvas.require_update() 
     100 
     101        # Process pending (expose) events, which cause the canvas to be drawn. 
     102        while gtk.events_pending(): 
     103            gtk.main_iteration() 
     104 
     105        assert len(canvas.get_all_items()) == len(view._qtree) 
     106 
     107        view.focused_item = box 
     108        canvas.remove(box) 
     109 
     110        assert len(canvas.get_all_items()) == 0 
     111        assert len(view._qtree) == 0 
     112 
     113        window.destroy() 
     114 
     115         
    86116if __name__ == '__main__': 
    87117    unittest.main() 
  • gaphas/trunk/gaphas/view.py

    r1822 r1823  
    507507            self._qtree.resize((0, 0, allocation.width, allocation.height)) 
    508508         
     509 
    509510    @async(single=False, priority=PRIORITY_HIGH_IDLE) 
    510511    def _idle_queue_draw_item(self, *items): 
    511512        self.queue_draw_item(*items) 
     513 
    512514 
    513515    def queue_draw_item(self, *items): 
     
    525527                pass # No bounds calculated yet? bummer. 
    526528 
     529 
    527530    def queue_draw_area(self, x, y, w, h): 
    528531        """ 
     
    530533        """ 
    531534        super(GtkView, self).queue_draw_area(int(x), int(y), int(w+1), int(h+1)) 
     535 
    532536 
    533537    def request_update(self, items, matrix_only_items=(), removed_items=()): 
     
    547551 
    548552            for item in removed_items: 
    549                 self._qtree.remove(item) 
     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) 
    550557                self.selected_items.discard(item) 
    551558 
     
    558565 
    559566        self.update() 
     567 
    560568 
    561569    @async(single=True, priority=PRIORITY_HIGH_IDLE) 
     
    603611            self._dirty_matrix_items.clear() 
    604612 
     613 
    605614    @nonrecursive 
    606615    def do_size_allocate(self, allocation): 
     
    612621        self.update_adjustments(allocation) 
    613622        
     623 
    614624    def do_realize(self): 
    615625        #super(GtkView, self).do_realize() 
     
    617627        if self._canvas: 
    618628            self.request_update(self._canvas.get_all_items()) 
     629 
    619630 
    620631    def do_expose_event(self, event): 
     
    687698        return False 
    688699 
     700 
    689701    def on_adjustment_changed(self, adj): 
    690702        """