diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2020-06-26 09:06:18 +0200 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2020-06-29 21:54:11 +0200 |
commit | 5e7d767643bcf86b4ea7c5fb4cd91c5ea5d737ff (patch) | |
tree | 220ca883c87b7f63ab2136dabfe1e1727c499682 /sd | |
parent | 6a95b382272cccc1887fc56c48baa192cf23a9e5 (diff) |
sd: send annotation position for LOKit, fix multiple annotations
This adds support to send annotation position in the document when
sending the available annotations using LOKit.
It also fixes an issue with the json structure for the annotations,
which sends multiple annotation objects with the same (empty) key,
that after parsing reduces to only one (so only one of the many
annotations is present). This fix changes that so annotation
objects have each its own unique key.
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97329
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
(cherry picked from commit f008bd0277001226f2dd695836a019c9b9c84799)
Change-Id: I9d994383d6ee322f27f1426be5bd96ac81e8e609
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97446
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'sd')
-rw-r--r-- | sd/source/core/annotations/Annotation.cxx | 6 | ||||
-rw-r--r-- | sd/source/ui/unoidl/unomodel.cxx | 14 |
2 files changed, 17 insertions, 3 deletions
diff --git a/sd/source/core/annotations/Annotation.cxx b/sd/source/core/annotations/Annotation.cxx index 554dc4318786..17dcb12eb638 100644 --- a/sd/source/core/annotations/Annotation.cxx +++ b/sd/source/core/annotations/Annotation.cxx @@ -429,6 +429,12 @@ std::string lcl_LOKGetCommentPayload(CommentNotificationType nType, Reference<XA aAnnotation.put("text", xText->getString()); const SdPage* pPage = sd::getAnnotationPage(rxAnnotation); aAnnotation.put("parthash", pPage ? OString::number(pPage->GetHashCode()) : OString()); + geometry::RealPoint2D const & rPoint = rxAnnotation->getPosition(); + geometry::RealSize2D const & rSize = rxAnnotation->getSize(); + ::tools::Rectangle aRectangle(Point(rPoint.X * 100.0, rPoint.Y * 100.0), Size(rSize.Width * 100.0, rSize.Height * 100.0)); + aRectangle = OutputDevice::LogicToLogic(aRectangle, MapMode(MapUnit::Map100thMM), MapMode(MapUnit::MapTwip)); + OString sRectangle = aRectangle.toString(); + aAnnotation.put("rectangle", sRectangle.getStr()); } boost::property_tree::ptree aTree; diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx index 5b8386022652..cea0b9f4c420 100644 --- a/sd/source/ui/unoidl/unomodel.cxx +++ b/sd/source/ui/unoidl/unomodel.cxx @@ -118,6 +118,7 @@ #include <drawinglayer/primitive2d/structuretagprimitive2d.hxx> #include <sfx2/lokcharthelper.hxx> +#include <tools/gen.hxx> #include <tools/debug.hxx> #include <tools/diagnose_ex.h> @@ -2399,14 +2400,21 @@ OUString SdXImpressDocument::getPostIts() for (const uno::Reference<office::XAnnotation>& xAnnotation : aPageAnnotations) { boost::property_tree::ptree aAnnotation; - aAnnotation.put("id", sd::getAnnotationId(xAnnotation)); + sal_uInt32 nID = sd::getAnnotationId(xAnnotation); + OString nodeName = "comment" + OString::number(nID); + aAnnotation.put("id", nID); aAnnotation.put("author", xAnnotation->getAuthor()); aAnnotation.put("dateTime", utl::toISO8601(xAnnotation->getDateTime())); uno::Reference<text::XText> xText(xAnnotation->getTextRange()); aAnnotation.put("text", xText->getString()); aAnnotation.put("parthash", OUString(OUString::number(pPage->GetHashCode()))); - - aAnnotations.push_back(std::make_pair("", aAnnotation)); + geometry::RealPoint2D const & rPoint = xAnnotation->getPosition(); + geometry::RealSize2D const & rSize = xAnnotation->getSize(); + ::tools::Rectangle aRectangle(Point(rPoint.X * 100.0, rPoint.Y * 100.0), Size(rSize.Width * 100.0, rSize.Height * 100.0)); + aRectangle = OutputDevice::LogicToLogic(aRectangle, MapMode(MapUnit::Map100thMM), MapMode(MapUnit::MapTwip)); + OString sRectangle = aRectangle.toString(); + aAnnotation.put("rectangle", sRectangle.getStr()); + aAnnotations.push_back(std::make_pair(nodeName.getStr(), aAnnotation)); } } |