Explorar o código

Cache painter, cleanup

Test OpenGL based drawing. Much faster, but lower quality and produced errors
at certain zoom levels, so leave it commented out.
Michael Pitidis %!s(int64=13) %!d(string=hai) anos
pai
achega
b93a0c51cf
Modificáronse 1 ficheiros con 5 adicións e 3 borrados
  1. 5 3
      canvas.py

+ 5 - 3
canvas.py

@@ -3,6 +3,7 @@ from math import sqrt
 
 from PyQt4.QtGui import *
 from PyQt4.QtCore import *
+from PyQt4.QtOpenGL import *
 
 from shape import Shape
 
@@ -17,6 +18,7 @@ CURSOR_DRAW    = Qt.CrossCursor
 CURSOR_MOVE    = Qt.ClosedHandCursor
 CURSOR_GRAB    = Qt.OpenHandCursor
 
+#class Canvas(QGLWidget):
 class Canvas(QWidget):
     zoomRequest = pyqtSignal(int)
     scrollRequest = pyqtSignal(int, int)
@@ -47,6 +49,7 @@ class Canvas(QWidget):
         self._hideBackround = False
         self.hideBackround = False
         self.highlightedShape = None
+        self._painter = QPainter()
         # Menus:
         self.menus = (QMenu(), QMenu())
         # Set widget options.
@@ -79,8 +82,6 @@ class Canvas(QWidget):
                 self.repaint()
             elif self.selectedShape:
                 self.selectedShapeCopy = self.selectedShape.copy()
-               # self.selectedShapeCopy.line_color = QColor(255, 0, 0, 64)
-                #self.selectedShapeCopy.fill_color = QColor(0, 255, 0, 64)
                 self.repaint()
             return
 
@@ -277,9 +278,10 @@ class Canvas(QWidget):
         if not self.pixmap:
             return super(Canvas, self).paintEvent(event)
 
-        p = QPainter()
+        p = self._painter
         p.begin(self)
         p.setRenderHint(QPainter.Antialiasing)
+        p.setRenderHint(QPainter.HighQualityAntialiasing)
         p.setRenderHint(QPainter.SmoothPixmapTransform)
 
         p.scale(self.scale, self.scale)