1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sd.hxx"
26
27 #ifndef _SVX_ACCESSIBILITY_ACCESSIBLE_VIEW_FORWARDER_HXX
28 #include "AccessibleViewForwarder.hxx"
29 #endif
30 #include <svx/svdpntv.hxx>
31 #include <vcl/outdev.hxx>
32 #include <svx/sdrpaintwindow.hxx>
33
34 namespace accessibility {
35
36 /** For the time beeing, the implementation of this class will not use the
37 member mrDevice. Instead the device is retrieved from the view
38 everytime it is used. This is necessary because the device has to stay
39 up-to-date with the current view and the class has to stay compatible.
40 May change in the future.
41 */
42
AccessibleViewForwarder(SdrPaintView * pView,OutputDevice & rDevice)43 AccessibleViewForwarder::AccessibleViewForwarder (SdrPaintView* pView, OutputDevice& rDevice)
44 : mpView (pView),
45 mnWindowId (0),
46 mrDevice (rDevice)
47 {
48 // Search the output device to determine its id.
49 for(sal_uInt32 a(0L); a < mpView->PaintWindowCount(); a++)
50 {
51 SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow(a);
52 OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
53
54 if(&rOutDev == &rDevice)
55 {
56 mnWindowId = (sal_uInt16)a;
57 break;
58 }
59 }
60 }
61
62
63
64
~AccessibleViewForwarder(void)65 AccessibleViewForwarder::~AccessibleViewForwarder (void)
66 {
67 // empty
68 }
69
70
71
72
IsValid(void) const73 sal_Bool AccessibleViewForwarder::IsValid (void) const
74 {
75 return sal_True;
76 }
77
78
79
80
GetVisibleArea(void) const81 Rectangle AccessibleViewForwarder::GetVisibleArea (void) const
82 {
83 Rectangle aVisibleArea;
84
85 if((sal_uInt32)mnWindowId < mpView->PaintWindowCount())
86 {
87 SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow((sal_uInt32)mnWindowId);
88 aVisibleArea = pPaintWindow->GetVisibleArea();
89 }
90
91 return aVisibleArea;
92 }
93
94
95
96
97 /** Tansform the given point into pixel coordiantes. After the the pixel
98 coordiantes of the window origin are added to make the point coordinates
99 absolute.
100 */
LogicToPixel(const Point & rPoint) const101 Point AccessibleViewForwarder::LogicToPixel (const Point& rPoint) const
102 {
103 OSL_ASSERT (mpView != NULL);
104 if((sal_uInt32)mnWindowId < mpView->PaintWindowCount())
105 {
106 SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow((sal_uInt32)mnWindowId);
107 OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
108 Rectangle aBBox(static_cast<Window&>(rOutDev).GetWindowExtentsRelative(0L));
109 return rOutDev.LogicToPixel (rPoint) + aBBox.TopLeft();
110 }
111 else
112 return Point();
113 }
114
115
116
117
LogicToPixel(const Size & rSize) const118 Size AccessibleViewForwarder::LogicToPixel (const Size& rSize) const
119 {
120 OSL_ASSERT (mpView != NULL);
121 if((sal_uInt32)mnWindowId < mpView->PaintWindowCount())
122 {
123 SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow((sal_uInt32)mnWindowId);
124 OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
125 return rOutDev.LogicToPixel (rSize);
126 }
127 else
128 return Size();
129 }
130
131
132
133
134 /** First subtract the window origin to make the point coordinates relative
135 to the window and then transform them into internal coordinates.
136 */
PixelToLogic(const Point & rPoint) const137 Point AccessibleViewForwarder::PixelToLogic (const Point& rPoint) const
138 {
139 OSL_ASSERT (mpView != NULL);
140 if((sal_uInt32)mnWindowId < mpView->PaintWindowCount())
141 {
142 SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow((sal_uInt32)mnWindowId);
143 OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
144 Rectangle aBBox (static_cast<Window&>(rOutDev).GetWindowExtentsRelative(0L));
145 return rOutDev.PixelToLogic (rPoint - aBBox.TopLeft());
146 }
147 else
148 return Point();
149 }
150
151
152
153
PixelToLogic(const Size & rSize) const154 Size AccessibleViewForwarder::PixelToLogic (const Size& rSize) const
155 {
156 OSL_ASSERT (mpView != NULL);
157 if((sal_uInt32)mnWindowId < mpView->PaintWindowCount())
158 {
159 SdrPaintWindow* pPaintWindow = mpView->GetPaintWindow((sal_uInt32)mnWindowId);
160 OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
161 return rOutDev.PixelToLogic (rSize);
162 }
163 else
164 return Size();
165 }
166
167
168 } // end of namespace accessibility
169