[Libreoffice-commits] core.git: 2 commits - chart2/source

xukai xukai at multicorewareinc.com
Tue Sep 23 08:04:59 PDT 2014


 chart2/source/view/charttypes/GL3DBarChart.cxx |   74 +++++++++++++++++--------
 1 file changed, 52 insertions(+), 22 deletions(-)

New commits:
commit 5c9ca2fb863e84ae2328f6b0186e137cd5f02ed6
Author: xukai <xukai at multicorewareinc.com>
Date:   Fri Sep 19 15:18:41 2014 +0800

    update effect of bar click
    
    Change-Id: Ibb09537d418e78c7fc9b6760988abd56505268b3
    Reviewed-on: https://gerrit.libreoffice.org/11539
    Reviewed-by: Kohei Yoshida <libreoffice at kohei.us>
    Tested-by: Kohei Yoshida <libreoffice at kohei.us>

diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx
index d07653f..9b44421 100644
--- a/chart2/source/view/charttypes/GL3DBarChart.cxx
+++ b/chart2/source/view/charttypes/GL3DBarChart.cxx
@@ -567,6 +567,19 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer
 {
     SharedResourceAccess(maCond1, maCond2);
     osl::MutexGuard aGuard(maMutex);
+    mnPreSelectBarId = mnSelectBarId;
+    mnSelectBarId -= 10;
+    sal_uInt32 nSelectRow = (mnSelectBarId - SHAPE_START_ID) / ID_STEP / (mnBarsInRow + 1);
+    sal_uInt32 nPreSelectRow = (mnPreSelectBarId - SHAPE_START_ID) / ID_STEP / (mnBarsInRow + 1);
+    if(nSelectRow != nPreSelectRow)
+    {
+        mnSelectBarId = mnPreSelectBarId;
+    }
+    else
+    {
+        mpRenderer->EndClick();
+        mpRenderer->StartClick(mnSelectBarId);
+    }
     mpRenderer->ReleaseShapes();
     // Each series of data flows from left to right, and multiple series are
     // stacked vertically along y axis.
commit 32d267f556634d3bbceba4978efc4d8cb62b148c
Author: xukai <xukai at multicorewareinc.com>
Date:   Mon Sep 22 20:08:26 2014 +0800

    make Camera flythrough looks more smooth
    
    Change-Id: I46f79bb6ede2da133fe8971319fc4b7257848382
    Reviewed-on: https://gerrit.libreoffice.org/11590
    Reviewed-by: Kohei Yoshida <libreoffice at kohei.us>
    Tested-by: Kohei Yoshida <libreoffice at kohei.us>

diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx
index 3474de3..d07653f 100644
--- a/chart2/source/view/charttypes/GL3DBarChart.cxx
+++ b/chart2/source/view/charttypes/GL3DBarChart.cxx
@@ -209,6 +209,7 @@ protected:
 private:
     void ProcessMouseEvent();
     void MoveCamera();
+    void MoveCameraToBar();
     void MoveToBar();
     void MoveToDefault();
     void MoveToCorner();
@@ -224,11 +225,14 @@ private:
     bool mbNeedFlyBack;
     glm::vec3 maStep;
     glm::vec3 maStepDirection;
+    glm::mat4 maMatrixStep;
     size_t mnStep;
     size_t mnStepsTotal;
     TimeValue maClickFlyBackStartTime;
     TimeValue maClickFlyBackEndTime;
     OUString maFPS;
+    glm::vec3 maTargetPosition;
+    glm::vec3 maTargetDirection;
 };
 
 void RenderBenchMarkThread::MoveCamera()
@@ -246,21 +250,36 @@ void RenderBenchMarkThread::MoveCamera()
         mnStep = 0;
         mbExecuting = false;
         mbAutoFlyExecuting = false;
-        if ((mpChart->maRenderEvent == EVENT_CLICK) || (mpChart->maRenderEvent == EVENT_AUTO_FLY))
-        {
-            mbNeedFlyBack = true;
-            osl_getSystemTime(&maClickFlyBackStartTime);
-            osl_getSystemTime(&maClickFlyBackEndTime);
-            mpChart->maRenderEvent = EVENT_SHOW_SELECT;
-        }
-        else
-        {
-            mbNeedFlyBack = false;
-            mpChart->maRenderEvent = EVENT_NONE;
-        }
+        mbNeedFlyBack = false;
+        mpChart->maRenderEvent = EVENT_NONE;
+    }
+}
+
+void RenderBenchMarkThread::MoveCameraToBar()
+{
+    if(mnStep < mnStepsTotal)
+    {
+        ++mnStep;
+        mpChart->mpRenderer->AddMatrixDiff(maMatrixStep);
+    }
+    else
+    {
+        mpChart->maCameraPosition = maTargetPosition;
+        mpChart->maCameraDirection = maTargetDirection;
+        mpChart->mpCamera->setPosition(maTargetPosition);
+        mpChart->mpCamera->setDirection(maTargetDirection);
+        mpChart->mpRenderer->ResetMatrixDiff();
+        mnStep = 0;
+        mbExecuting = false;
+        mbAutoFlyExecuting = false;
+        mbNeedFlyBack = true;
+        osl_getSystemTime(&maClickFlyBackStartTime);
+        osl_getSystemTime(&maClickFlyBackEndTime);
+        mpChart->maRenderEvent = EVENT_SHOW_SELECT;
     }
 }
 
+
 void RenderBenchMarkThread::MoveToDefault()
 {
     if ((mpChart->maCameraPosition == mpChart->maDefaultCameraDirection) &&
@@ -301,21 +320,20 @@ void RenderBenchMarkThread::MoveToBar()
         const GL3DBarChart::BarInformation& rBarInfo = itr->second;
         mnStep = 0;
         mnStepsTotal = STEPS;
-        glm::vec3 maTargetPosition = rBarInfo.maPos;
+        maTargetPosition = rBarInfo.maPos;
         maTargetPosition.z += 240;
         maTargetPosition.x += BAR_SIZE_X / 2.0f;
-        glm::vec3 maTargetDirection = rBarInfo.maPos;
+        maTargetDirection = rBarInfo.maPos;
         maTargetDirection.x += BAR_SIZE_X / 2.0f;
         maTargetDirection.y += BAR_SIZE_Y / 2.0f;
         maTargetPosition.y = maTargetDirection.y - 240;
-        maStep = (maTargetPosition - mpChart->maCameraPosition)/((float)mnStepsTotal);
-        maStepDirection = (maTargetDirection - mpChart->maCameraDirection)/((float)mnStepsTotal);
+        maMatrixStep = mpChart->mpRenderer->GetDiffOfTwoCameras(mpChart->maCameraPosition, maTargetPosition, mpChart->maCameraDirection, maTargetDirection)/((float)mnStepsTotal);
         mpChart->maClickCond.set();
         mbExecuting = true;
         mbNeedFlyBack = false;
         mpChart->mpRenderer->StartClick(mpChart->mnSelectBarId);
     }
-    MoveCamera();
+    MoveCameraToBar();
 }
 
 void RenderBenchMarkThread::AutoMoveToBar()
@@ -332,20 +350,19 @@ void RenderBenchMarkThread::AutoMoveToBar()
         const GL3DBarChart::BarInformation& rBarInfo = itr->second;
         mnStep = 0;
         mnStepsTotal = STEPS;
-        glm::vec3 maTargetPosition = rBarInfo.maPos;
+         maTargetPosition = rBarInfo.maPos;
         maTargetPosition.z += 240;
         maTargetPosition.x += BAR_SIZE_X / 2.0f;
-        glm::vec3 maTargetDirection = rBarInfo.maPos;
+        maTargetDirection = rBarInfo.maPos;
         maTargetDirection.x += BAR_SIZE_X / 2.0f;
         maTargetDirection.y += BAR_SIZE_Y / 2.0f;
         maTargetPosition.y = maTargetDirection.y - 240;
-        maStep = (maTargetPosition - mpChart->maCameraPosition)/((float)mnStepsTotal);
-        maStepDirection = (maTargetDirection - mpChart->maCameraDirection)/((float)mnStepsTotal);
+        maMatrixStep = mpChart->mpRenderer->GetDiffOfTwoCameras(mpChart->maCameraPosition, maTargetPosition, mpChart->maCameraDirection, maTargetDirection)/((float)mnStepsTotal);
         mpChart->mpRenderer->StartClick(mpChart->mnSelectBarId);
         mbAutoFlyExecuting = true;
         mbNeedFlyBack = false;
     }
-    MoveCamera();
+    MoveCameraToBar();
 }
 
 void RenderBenchMarkThread::MoveToCorner()


More information about the Libreoffice-commits mailing list