소스 검색

performance

David 9 년 전
부모
커밋
362c5e6b5d
2개의 변경된 파일51개의 추가작업 그리고 28개의 파일을 삭제
  1. 4 4
      CanvasController.pro.user
  2. 47 24
      main.qml

+ 4 - 4
CanvasController.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.0.3, 2016-11-10T13:27:13. -->
+<!-- Written by QtCreator 4.0.3, 2016-11-11T10:10:21. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
@@ -64,7 +64,7 @@
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.7.0 GCC 64bit</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.7.0 GCC 64bit</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.57.gcc_64_kit</value>
-   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">2</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
@@ -312,7 +312,7 @@
     <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">CanvasController.pro</value>
     <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
     <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
-    <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">/home/david/build-CanvasController-Desktop_Qt_5_7_0_GCC_64bit-Profile</value>
+    <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">/home/david/build-CanvasController-Desktop_Qt_5_7_0_GCC_64bit-Debug</value>
     <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
     <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
@@ -649,7 +649,7 @@
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Android for armeabi-v7a (GCC 4.9, Qt 5.7.0)</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Android for armeabi-v7a (GCC 4.9, Qt 5.7.0)</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{adf126d9-d8b7-4993-bb9f-0f17f134f6d3}</value>
-   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">2</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
    <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">

+ 47 - 24
main.qml

@@ -72,13 +72,18 @@ ApplicationWindow {
 
                 Canvas {
                     id: canvas
-                    antialiasing: true
+                    antialiasing: false
                     renderTarget: Canvas.Image
+                    renderStrategy: Canvas.Immediate
+                    //defaults
+                    //renderStrategy: Canvas.Cooperative
+
+                    //renderTarget: Canvas.FramebufferObject
+                    //renderStrategy
 
                     property color strokeStyle: Qt.darker(fillStyle, 1.2)
                     property color fillStyle: "#6400aa"
                     property string curColor: "#ff0000"
-                    property int count: 0
 
                     property real px: width / 2
                     property real py: height / 2 + 10
@@ -95,13 +100,14 @@ ApplicationWindow {
                         ctx.lineCap = 'square'
                         ctx.lineWidth = 4
                         ctx.strokeStyle = "#000000"
-                        requestPaint()
+                        full_repaint()
                     }
 
                     function clean_path() {
-                        points_array = []
-                        requestPaint()
-                        canvas.count = 0
+                        //points_array = []
+                        points_array.length=0
+                        console.log("clean")
+                        full_repaint()
                     }
 
                     function start_path() {
@@ -115,7 +121,7 @@ ApplicationWindow {
                         points_array[points_array.length - 1].points = Simplify.simplify(
                                     points_array[points_array.length - 1].points,
                                     2.2)
-                        //requestPaint()
+
                         if (points_array[points_array.length - 1].points.length <=1)
                             return;
                         //normalized to 800x600
@@ -129,7 +135,6 @@ ApplicationWindow {
                                         }
                                     })
 
-                        console.log(ar.length);
                         var MAX_ELEMS=65;
                         while (ar.length > MAX_ELEMS) {
                             socket.send_drawing(ar.splice(0, MAX_ELEMS-1));
@@ -140,25 +145,34 @@ ApplicationWindow {
                     function change_image(pdf, number) {
                         curImageUrl = "https://plataforma.especificosba.com.ar/diapo/"
                                 + pdf + "/" + number + ".png"
-                        requestPaint()
                     }
 
                     function add_point(p) {
                         var pts = points_array[points_array.length - 1].points
+                        var lastpoint;
+                        if (pts.length>1)
+                            lastpoint = pts[pts.length-1];
+
                         pts.push(p)
-                        if (pts.length > 80) {
+                        if (pts.length > 150) {
                             //FIXME
                             finish_path()
                             start_path()
                             pts.push(p)
                         }
-
-                        requestPaint()
+                        if (lastpoint)
+                            markDirty(Qt.rect(Math.min(p.x,lastpoint.x),Math.min(p.y,lastpoint.y), Math.abs(p.x-lastpoint.x)+4, Math.abs(p.y-lastpoint.y)+1))
                     }
 
 
                     function stroke(points, color) {
-                        ctx.strokeStyle = color;
+                        if (points.length===0)
+                            return;
+                        if (ctx.strokeStyle !== color){
+                            ctx.strokeStyle = color;
+                            console.log("Changing colors");
+                        }
+                        console.log(points.length)
                         ctx.beginPath()
                         ctx.moveTo(points[0].x, points[0].y)
                         var i = 0;
@@ -169,7 +183,8 @@ ApplicationWindow {
                         ctx.stroke()
                     }
 
-                    function paint_canvas() {
+                    function full_repaint(){
+                        //console.log("Fullpaint")
                         canvas.loadImage(curImageUrl)
                         if (canvas.isImageLoaded(curImageUrl)) {
                             ctx.drawImage(curImageUrl, 0, 0, canvas.width,
@@ -179,16 +194,26 @@ ApplicationWindow {
                         for (j = 0; j < points_array.length; j++) {
                             if (points_array[j].points.length <= 1)
                                 continue
-                            //setTimeout( function() { }, 0);
                             stroke(points_array[j].points,points_array[j].color);
                         }
+                        requestPaint()
+                    }
+
+                    function paint_canvas() {
+                        //full_repaint();
+                        //return;
+                        if (points_array.length==0)
+                            return;
+                        var ar = points_array[points_array.length -1];
+                        stroke(ar.points,ar.color);
+
                     }
                 }
 
                 MouseArea {
                     id: mouseArea1
                     x: 0
-                    y: 0
+                    y:0
                     width: canvas.width
                     height: canvas.height
                     property var last_point;
@@ -208,15 +233,11 @@ ApplicationWindow {
                             return;
                         last_point = point
                         canvas.add_point(point)
-                        canvas.count++
-                        /*console.log(canvas.count)
-                        console.log(canvas.points_array[canvas.points_array.length-1].length)*/
                     }
                     onReleased: {
                         if (!socket.isOpen)
                             return
                         canvas.finish_path()
-                        canvas.requestPaint()
                     }
                     function distance(p1,p2){
                         return (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)
@@ -243,6 +264,7 @@ ApplicationWindow {
                             width: parent.width/2
                             height: 70
                             Image {
+                                anchors.centerIn: parent.Center
                                 source: "qrc:///images/back.png"
                                 height: parent.height
                                 fillMode: Image.PreserveAspectFit
@@ -256,6 +278,7 @@ ApplicationWindow {
                             width: parent.width/2
                             height: 70
                             Image {
+                                anchors.centerIn: parent.Center
                                 height: parent.height
                                 source: "qrc:///images/fwd.png"
                                 fillMode: Image.PreserveAspectFit
@@ -318,7 +341,7 @@ ApplicationWindow {
                                 background: Rectangle {
                                     implicitWidth: 100
                                     implicitHeight: 25
-                                    border.width: 2
+                                    border.width: 3
                                     border.color: color3.checked?"#000":"#FFF"
                                     radius: 8
                                     gradient: Gradient {
@@ -344,7 +367,7 @@ ApplicationWindow {
                                 background: Rectangle {
                                     implicitWidth: 100
                                     implicitHeight: 25
-                                    border.width: 2
+                                    border.width: 3
                                     border.color: color2.checked?"#000":"#FFF"
                                     radius: 8
                                     gradient: Gradient {
@@ -371,7 +394,7 @@ ApplicationWindow {
                                 background: Rectangle {
                                     implicitWidth: 100
                                     implicitHeight: 25
-                                    border.width: 2
+                                    border.width: 3
                                     border.color: color1.checked?"#000":"#FFF"
                                     radius: 8
                                     gradient: Gradient {
@@ -391,8 +414,8 @@ ApplicationWindow {
                         text: qsTr("Limpiar")
                         enabled: socket.isOpen
                         onClicked: {
-                            socket.clear_path();
                             canvas.clean_path();
+                            socket.clear_path();
                         }
                     }