[Libreoffice-commits] core.git: Branch 'feature/tiled-editing' - sw/qa sw/source

Miklos Vajna vmiklos at collabora.co.uk
Tue Mar 17 08:25:11 PDT 2015


 sw/qa/extras/tiledrendering/tiledrendering.cxx |   46 ++++++++++++++++++++++++-
 sw/source/uibase/uno/unotxdoc.cxx              |    2 +
 2 files changed, 47 insertions(+), 1 deletion(-)

New commits:
commit 20d26e398a8fa67f39696d2d82c69399df546c1f
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Tue Mar 17 16:12:26 2015 +0100

    Add SwXTextDocument::registerCallback() testcase.
    
    Change-Id: I435bb683bae1634f156b3912e6120d479a917b00

diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx
index 2b28b7c..9bc1537 100644
--- a/sw/qa/extras/tiledrendering/tiledrendering.cxx
+++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx
@@ -9,6 +9,7 @@
 
 #include <swmodeltestbase.hxx>
 #include <LibreOfficeKit/LibreOfficeKitEnums.h>
+#include <comphelper/string.hxx>
 #include <svx/svdpage.hxx>
 #include <svx/svdview.hxx>
 #include <crsskip.hxx>
@@ -20,14 +21,15 @@ static const char* DATA_DIRECTORY = "/sw/qa/extras/tiledrendering/data/";
 /// Testsuite for the SwXTextDocument methods implementing the vcl::ITiledRenderable interface.
 class SwTiledRenderingTest : public SwModelTestBase
 {
-
 public:
+    void testRegisterCallback();
     void testPostMouseEvent();
     void testSetTextSelection();
     void testSetGraphicSelection();
     void testResetSelection();
 
     CPPUNIT_TEST_SUITE(SwTiledRenderingTest);
+    CPPUNIT_TEST(testRegisterCallback);
     CPPUNIT_TEST(testPostMouseEvent);
     CPPUNIT_TEST(testSetTextSelection);
     CPPUNIT_TEST(testSetGraphicSelection);
@@ -36,6 +38,9 @@ public:
 
 private:
     SwXTextDocument* createDoc(const char* pName);
+    static void callback(int nType, const char* pPayload, void* pData);
+    void callbackImpl(int nType, const char* pPayload);
+    Rectangle m_aInvalidation;
 };
 
 SwXTextDocument* SwTiledRenderingTest::createDoc(const char* pName)
@@ -48,6 +53,45 @@ SwXTextDocument* SwTiledRenderingTest::createDoc(const char* pName)
     return pTextDocument;
 }
 
+void SwTiledRenderingTest::callback(int nType, const char* pPayload, void* pData)
+{
+    static_cast<SwTiledRenderingTest*>(pData)->callbackImpl(nType, pPayload);
+}
+
+void SwTiledRenderingTest::callbackImpl(int nType, const char* pPayload)
+{
+    switch (nType)
+    {
+    case LOK_CALLBACK_INVALIDATE_TILES:
+    {
+        if (m_aInvalidation.IsEmpty())
+        {
+            uno::Sequence<OUString> aSeq = comphelper::string::convertCommaSeparated(OUString::createFromAscii(pPayload));
+            CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4), aSeq.getLength());
+            m_aInvalidation.setX(aSeq[0].toInt32());
+            m_aInvalidation.setY(aSeq[1].toInt32());
+            m_aInvalidation.setWidth(aSeq[2].toInt32());
+            m_aInvalidation.setHeight(aSeq[3].toInt32());
+        }
+    }
+    break;
+    }
+}
+
+void SwTiledRenderingTest::testRegisterCallback()
+{
+    SwXTextDocument* pXTextDocument = createDoc("dummy.fodt");
+    pXTextDocument->registerCallback(&SwTiledRenderingTest::callback, this);
+    SwWrtShell* pWrtShell = pXTextDocument->GetDocShell()->GetWrtShell();
+    // Insert a character at the begining of the document.
+    pWrtShell->Insert("x");
+
+    // Check that the top left 256x256px tile would be invalidated.
+    Rectangle aTopLeft(0, 0, 256*15, 256*15); // 1 px = 15 twips, assuming 96 DPI.
+    CPPUNIT_ASSERT(!m_aInvalidation.IsEmpty());
+    CPPUNIT_ASSERT(m_aInvalidation.IsOver(aTopLeft));
+}
+
 void SwTiledRenderingTest::testPostMouseEvent()
 {
     SwXTextDocument* pXTextDocument = createDoc("dummy.fodt");
diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx
index e806a50..e818ffe 100644
--- a/sw/source/uibase/uno/unotxdoc.cxx
+++ b/sw/source/uibase/uno/unotxdoc.cxx
@@ -3175,6 +3175,8 @@ void SwXTextDocument::initializeForTiledRendering()
 
 void SwXTextDocument::registerCallback(LibreOfficeKitCallback pCallback, void* pData)
 {
+    SolarMutexGuard aGuard;
+
     SwDoc* pDoc = pDocShell->GetDoc();
     SwViewShell* pViewShell = pDoc->getIDocumentLayoutAccess().GetCurrentViewShell();
     pViewShell->registerLibreOfficeKitCallback(pCallback, pData);


More information about the Libreoffice-commits mailing list