summaryrefslogtreecommitdiff
path: root/sd/source/ui/accessibility/AccessibleViewForwarder.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/accessibility/AccessibleViewForwarder.cxx')
-rwxr-xr-xsd/source/ui/accessibility/AccessibleViewForwarder.cxx172
1 files changed, 172 insertions, 0 deletions
diff --git a/sd/source/ui/accessibility/AccessibleViewForwarder.cxx b/sd/source/ui/accessibility/AccessibleViewForwarder.cxx
new file mode 100755
index 000000000000..de5342afd23f
--- /dev/null
+++ b/sd/source/ui/accessibility/AccessibleViewForwarder.cxx
@@ -0,0 +1,172 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sd.hxx"
+
+#ifndef _SVX_ACCESSIBILITY_ACCESSIBLE_VIEW_FORWARDER_HXX
+#include "AccessibleViewForwarder.hxx"
+#endif
+#include <svx/svdpntv.hxx>
+#include <vcl/outdev.hxx>
+#include <svx/sdrpaintwindow.hxx>
+
+namespace accessibility {
+
+/** For the time beeing, the implementation of this class will not use the
+ member mrDevice. Instead the device is retrieved from the view
+ everytime it is used. This is necessary because the device has to stay
+ up-to-date with the current view and the class has to stay compatible.
+ May change in the future.
+*/
+
+AccessibleViewForwarder::AccessibleViewForwarder (SdrPaintView* pView, OutputDevice& rDevice)
+ : mpView (pView),
+ mnWindowId (0),
+ mrDevice (rDevice)
+{
+ // Search the output device to determine its id.
+ for(sal_uInt32 a(0L); a < mpView->PaintWindowCount(); a++)
+ {
+ SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow(a);
+ OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
+
+ if(&rOutDev == &rDevice)
+ {
+ mnWindowId = (sal_uInt16)a;
+ break;
+ }
+ }
+}
+
+
+
+
+AccessibleViewForwarder::~AccessibleViewForwarder (void)
+{
+ // empty
+}
+
+
+
+
+sal_Bool AccessibleViewForwarder::IsValid (void) const
+{
+ return sal_True;
+}
+
+
+
+
+Rectangle AccessibleViewForwarder::GetVisibleArea (void) const
+{
+ Rectangle aVisibleArea;
+
+ if((sal_uInt32)mnWindowId < mpView->PaintWindowCount())
+ {
+ SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow((sal_uInt32)mnWindowId);
+ aVisibleArea = pPaintWindow->GetVisibleArea();
+ }
+
+ return aVisibleArea;
+}
+
+
+
+
+/** Tansform the given point into pixel coordiantes. After the the pixel
+ coordiantes of the window origin are added to make the point coordinates
+ absolute.
+*/
+Point AccessibleViewForwarder::LogicToPixel (const Point& rPoint) const
+{
+ OSL_ASSERT (mpView != NULL);
+ if((sal_uInt32)mnWindowId < mpView->PaintWindowCount())
+ {
+ SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow((sal_uInt32)mnWindowId);
+ OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
+ Rectangle aBBox(static_cast<Window&>(rOutDev).GetWindowExtentsRelative(0L));
+ return rOutDev.LogicToPixel (rPoint) + aBBox.TopLeft();
+ }
+ else
+ return Point();
+}
+
+
+
+
+Size AccessibleViewForwarder::LogicToPixel (const Size& rSize) const
+{
+ OSL_ASSERT (mpView != NULL);
+ if((sal_uInt32)mnWindowId < mpView->PaintWindowCount())
+ {
+ SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow((sal_uInt32)mnWindowId);
+ OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
+ return rOutDev.LogicToPixel (rSize);
+ }
+ else
+ return Size();
+}
+
+
+
+
+/** First subtract the window origin to make the point coordinates relative
+ to the window and then transform them into internal coordinates.
+*/
+Point AccessibleViewForwarder::PixelToLogic (const Point& rPoint) const
+{
+ OSL_ASSERT (mpView != NULL);
+ if((sal_uInt32)mnWindowId < mpView->PaintWindowCount())
+ {
+ SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow((sal_uInt32)mnWindowId);
+ OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
+ Rectangle aBBox (static_cast<Window&>(rOutDev).GetWindowExtentsRelative(0L));
+ return rOutDev.PixelToLogic (rPoint - aBBox.TopLeft());
+ }
+ else
+ return Point();
+}
+
+
+
+
+Size AccessibleViewForwarder::PixelToLogic (const Size& rSize) const
+{
+ OSL_ASSERT (mpView != NULL);
+ if((sal_uInt32)mnWindowId < mpView->PaintWindowCount())
+ {
+ SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow((sal_uInt32)mnWindowId);
+ OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
+ return rOutDev.PixelToLogic (rSize);
+ }
+ else
+ return Size();
+}
+
+
+} // end of namespace accessibility