| ... | ... |
@@ -42,10 +42,25 @@ class TestDotWidget(DotWidget): |
| 42 | 42 |
|
| 43 | 43 |
import cairo |
| 44 | 44 |
|
| 45 |
+ # Scale to give 96 dpi instead of 72 dpi |
|
| 45 | 46 |
dpi = 96.0 |
| 46 |
- zoom_ratio = dpi/72.0 |
|
| 47 |
- w = int(self.graph.width*zoom_ratio) |
|
| 48 |
- h = int(self.graph.height*zoom_ratio) |
|
| 47 |
+ scale = dpi/72.0 |
|
| 48 |
+ w = int(self.graph.width*scale) |
|
| 49 |
+ h = int(self.graph.height*scale) |
|
| 50 |
+ |
|
| 51 |
+ CAIRO_XMAX = 32767 |
|
| 52 |
+ CAIRO_YMAX = 32767 |
|
| 53 |
+ if w >= CAIRO_XMAX: |
|
| 54 |
+ w = CAIRO_XMAX |
|
| 55 |
+ scale = w/self.graph.width |
|
| 56 |
+ h = int(self.graph.height*scale) |
|
| 57 |
+ if h >= CAIRO_YMAX: |
|
| 58 |
+ h = CAIRO_YMAX |
|
| 59 |
+ scale = h/self.graph.height |
|
| 60 |
+ w = int(self.graph.width*scale) |
|
| 61 |
+ |
|
| 62 |
+ assert w <= CAIRO_XMAX |
|
| 63 |
+ assert h <= CAIRO_YMAX |
|
| 49 | 64 |
|
| 50 | 65 |
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h) |
| 51 | 66 |
|
| ... | ... |
@@ -54,7 +69,7 @@ class TestDotWidget(DotWidget): |
| 54 | 69 |
cr.set_source_rgba(1.0, 1.0, 1.0, 1.0) |
| 55 | 70 |
cr.paint() |
| 56 | 71 |
|
| 57 |
- cr.scale(zoom_ratio, zoom_ratio) |
|
| 72 |
+ cr.scale(scale, scale) |
|
| 58 | 73 |
|
| 59 | 74 |
self.graph.draw(cr, highlight_items=self.highlight) |
| 60 | 75 |
|
| ... | ... |
@@ -89,9 +104,12 @@ def main(): |
| 89 | 104 |
except: |
| 90 | 105 |
exc_info = sys.exc_info() |
| 91 | 106 |
traceback.print_exception(*exc_info) |
| 92 |
- window.show() |
|
| 93 |
- Gtk.main() |
|
| 94 |
- window.destroy() |
|
| 107 |
+ continue |
|
| 108 |
+ try: |
|
| 109 |
+ window.show() |
|
| 110 |
+ Gtk.main() |
|
| 111 |
+ finally: |
|
| 112 |
+ window.destroy() |
|
| 95 | 113 |
|
| 96 | 114 |
|
| 97 | 115 |
if __name__ == '__main__': |