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_editeng.hxx" 26 #include <vcl/outdev.hxx> 27 #include <vcl/window.hxx> 28 29 #include <editeng/unoviwou.hxx> 30 #include <editeng/outliner.hxx> 31 #include <editeng/editeng.hxx> 32 33 SvxDrawOutlinerViewForwarder::SvxDrawOutlinerViewForwarder( OutlinerView& rOutl ) : 34 mrOutlinerView ( rOutl ), maTextShapeTopLeft() 35 { 36 } 37 38 SvxDrawOutlinerViewForwarder::SvxDrawOutlinerViewForwarder( OutlinerView& rOutl, const Point& rShapePosTopLeft ) : 39 mrOutlinerView ( rOutl ), maTextShapeTopLeft( rShapePosTopLeft ) 40 { 41 } 42 43 SvxDrawOutlinerViewForwarder::~SvxDrawOutlinerViewForwarder() 44 { 45 } 46 47 Point SvxDrawOutlinerViewForwarder::GetTextOffset() const 48 { 49 // #101029# calc text offset from shape anchor 50 Rectangle aOutputRect( mrOutlinerView.GetOutputArea() ); 51 52 return aOutputRect.TopLeft() - maTextShapeTopLeft; 53 } 54 55 sal_Bool SvxDrawOutlinerViewForwarder::IsValid() const 56 { 57 return sal_True; 58 } 59 60 Rectangle SvxDrawOutlinerViewForwarder::GetVisArea() const 61 { 62 OutputDevice* pOutDev = mrOutlinerView.GetWindow(); 63 64 if( pOutDev ) 65 { 66 Rectangle aVisArea = mrOutlinerView.GetVisArea(); 67 68 // #101029# 69 Point aTextOffset( GetTextOffset() ); 70 aVisArea.Move( aTextOffset.X(), aTextOffset.Y() ); 71 72 // figure out map mode from edit engine 73 Outliner* pOutliner = mrOutlinerView.GetOutliner(); 74 75 if( pOutliner ) 76 { 77 MapMode aMapMode(pOutDev->GetMapMode()); 78 aVisArea = OutputDevice::LogicToLogic( aVisArea, 79 pOutliner->GetRefMapMode(), 80 aMapMode.GetMapUnit() ); 81 aMapMode.SetOrigin(Point()); 82 return pOutDev->LogicToPixel( aVisArea, aMapMode ); 83 } 84 } 85 86 return Rectangle(); 87 } 88 89 Point SvxDrawOutlinerViewForwarder::LogicToPixel( const Point& rPoint, const MapMode& rMapMode ) const 90 { 91 OutputDevice* pOutDev = mrOutlinerView.GetWindow(); 92 93 if( pOutDev ) 94 { 95 Point aPoint1( rPoint ); 96 Point aTextOffset( GetTextOffset() ); 97 98 // #101029# 99 aPoint1.X() += aTextOffset.X(); 100 aPoint1.Y() += aTextOffset.Y(); 101 102 MapMode aMapMode(pOutDev->GetMapMode()); 103 Point aPoint2( OutputDevice::LogicToLogic( aPoint1, rMapMode, 104 aMapMode.GetMapUnit() ) ); 105 aMapMode.SetOrigin(Point()); 106 return pOutDev->LogicToPixel( aPoint2, aMapMode ); 107 } 108 109 return Point(); 110 } 111 112 Point SvxDrawOutlinerViewForwarder::PixelToLogic( const Point& rPoint, const MapMode& rMapMode ) const 113 { 114 OutputDevice* pOutDev = mrOutlinerView.GetWindow(); 115 116 if( pOutDev ) 117 { 118 MapMode aMapMode(pOutDev->GetMapMode()); 119 aMapMode.SetOrigin(Point()); 120 Point aPoint1( pOutDev->PixelToLogic( rPoint, aMapMode ) ); 121 Point aPoint2( OutputDevice::LogicToLogic( aPoint1, 122 aMapMode.GetMapUnit(), 123 rMapMode ) ); 124 // #101029# 125 Point aTextOffset( GetTextOffset() ); 126 127 aPoint2.X() -= aTextOffset.X(); 128 aPoint2.Y() -= aTextOffset.Y(); 129 130 return aPoint2; 131 } 132 133 return Point(); 134 } 135 136 sal_Bool SvxDrawOutlinerViewForwarder::GetSelection( ESelection& rSelection ) const 137 { 138 rSelection = mrOutlinerView.GetSelection(); 139 return sal_True; 140 } 141 142 sal_Bool SvxDrawOutlinerViewForwarder::SetSelection( const ESelection& rSelection ) 143 { 144 mrOutlinerView.SetSelection( rSelection ); 145 return sal_True; 146 } 147 148 sal_Bool SvxDrawOutlinerViewForwarder::Copy() 149 { 150 mrOutlinerView.Copy(); 151 return sal_True; 152 } 153 154 sal_Bool SvxDrawOutlinerViewForwarder::Cut() 155 { 156 mrOutlinerView.Cut(); 157 return sal_True; 158 } 159 160 sal_Bool SvxDrawOutlinerViewForwarder::Paste() 161 { 162 mrOutlinerView.Paste(); 163 return sal_True; 164 } 165 166 void SvxDrawOutlinerViewForwarder::SetShapePos( const Point& rShapePosTopLeft ) 167 { 168 maTextShapeTopLeft = rShapePosTopLeft; 169 } 170