From 2796fbab947bd9ea57e4f62e47316381fe56f374 Mon Sep 17 00:00:00 2001
From: Marco Bubke <marco.bubke@nokia.com>
Date: Thu, 13 Jan 2011 15:10:43 +0100
Subject: [PATCH] QmlDesigner.NodeInstances: Restart render timer in Preview

Now rendering is only happen if no changes happen anymore.
---
 .../instances/nodeinstanceserver.cpp          | 20 +++++++++++++++++++
 .../instances/nodeinstanceserver.h            |  6 +++++-
 .../instances/previewnodeinstanceserver.cpp   | 11 +++++++++-
 .../instances/previewnodeinstanceserver.h     |  1 +
 4 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp
index 655736525bb..495438c58ed 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.cpp
@@ -135,6 +135,21 @@ void NodeInstanceServer::setSlowRenderTimerInterval(int timerInterval)
     m_slowRenderTimerInterval = timerInterval;
 }
 
+void NodeInstanceServer::setTimerId(int timerId)
+{
+    m_timer = timerId;
+}
+
+int NodeInstanceServer::timerId() const
+{
+    return m_timer;
+}
+
+int NodeInstanceServer::renderTimerInterval() const
+{
+    return m_renderTimerInterval;
+}
+
 void NodeInstanceServer::startRenderTimer()
 {
     if (m_slowRenderTimer)
@@ -151,6 +166,11 @@ void NodeInstanceServer::slowDownRenderTimer()
     if (!m_slowRenderTimer)
         stopRenderTimer();
 
+    if (m_timer != 0) {
+        killTimer(m_timer);
+        m_timer = 0;
+    }
+
     if (m_timer == 0)
         m_timer = startTimer(m_slowRenderTimerInterval);
 
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h
index b75ceaa6536..dd2fc124b6a 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserver.h
@@ -118,10 +118,11 @@ protected:
 
     void addChangedProperty(const InstancePropertyPair &property);
 
-    void startRenderTimer();
+    virtual void startRenderTimer();
     void slowDownRenderTimer();
     void stopRenderTimer();
     void setRenderTimerInterval(int timerInterval);
+    int renderTimerInterval() const;
     void setSlowRenderTimerInterval(int timerInterval);
 
     void initializeDeclarativeView();
@@ -129,6 +130,9 @@ protected:
 
     QImage renderPreviewImage();
 
+    void setTimerId(int timerId);
+    int timerId() const;
+
 private:
     ServerNodeInstance m_rootNodeInstance;
     ServerNodeInstance m_activeStateInstance;
diff --git a/src/plugins/qmldesigner/designercore/instances/previewnodeinstanceserver.cpp b/src/plugins/qmldesigner/designercore/instances/previewnodeinstanceserver.cpp
index 5ba1cf2982b..e88cb2ef133 100644
--- a/src/plugins/qmldesigner/designercore/instances/previewnodeinstanceserver.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/previewnodeinstanceserver.cpp
@@ -7,7 +7,7 @@ namespace QmlDesigner {
 PreviewNodeInstanceServer::PreviewNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) :
     NodeInstanceServer(nodeInstanceClient)
 {
-    setRenderTimerInterval(50);
+    setRenderTimerInterval(500);
     setSlowRenderTimerInterval(10000);
 }
 
@@ -18,6 +18,15 @@ void PreviewNodeInstanceServer::createScene(const CreateSceneCommand &command)
 
     startRenderTimer();
 }
+void PreviewNodeInstanceServer::startRenderTimer()
+{
+    if (timerId() != 0)
+        killTimer(timerId());
+
+    int timerId = startTimer(renderTimerInterval());
+
+    setTimerId(timerId);
+}
 
 void PreviewNodeInstanceServer::findItemChangesAndSendChangeCommands()
 {
diff --git a/src/plugins/qmldesigner/designercore/instances/previewnodeinstanceserver.h b/src/plugins/qmldesigner/designercore/instances/previewnodeinstanceserver.h
index 11c05595e56..9a0de118858 100644
--- a/src/plugins/qmldesigner/designercore/instances/previewnodeinstanceserver.h
+++ b/src/plugins/qmldesigner/designercore/instances/previewnodeinstanceserver.h
@@ -15,6 +15,7 @@ public:
 
 protected:
     void findItemChangesAndSendChangeCommands();
+    void startRenderTimer();
 
 private:
     ServerNodeInstance m_actualState;
-- 
GitLab