1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski #ifndef _ASCHARANCHOREDOBJECTPOSITION_HXX 24*b1cdbd2cSJim Jagielski #define _ASCHARANCHOREDOBJECTPOSITION_HXX 25*b1cdbd2cSJim Jagielski #include <anchoredobjectposition.hxx> 26*b1cdbd2cSJim Jagielski #include <sal/types.h> 27*b1cdbd2cSJim Jagielski #include <swtypes.hxx> 28*b1cdbd2cSJim Jagielski #include <swrect.hxx> 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski class SwTxtFrm; 31*b1cdbd2cSJim Jagielski class SwFmtVertOrient; 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski namespace objectpositioning 34*b1cdbd2cSJim Jagielski { 35*b1cdbd2cSJim Jagielski // flags for positioning algorithm of as-character-anchored objects 36*b1cdbd2cSJim Jagielski typedef sal_uInt8 AsCharFlags; 37*b1cdbd2cSJim Jagielski #define AS_CHAR_NOFLAG 0 38*b1cdbd2cSJim Jagielski #define AS_CHAR_QUICK 1 39*b1cdbd2cSJim Jagielski #define AS_CHAR_ULSPACE 2 40*b1cdbd2cSJim Jagielski #define AS_CHAR_INIT 4 41*b1cdbd2cSJim Jagielski #define AS_CHAR_ROTATE 8 42*b1cdbd2cSJim Jagielski #define AS_CHAR_REVERSE 16 43*b1cdbd2cSJim Jagielski #define AS_CHAR_BIDI 32 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski class SwAsCharAnchoredObjectPosition : public SwAnchoredObjectPosition 46*b1cdbd2cSJim Jagielski { 47*b1cdbd2cSJim Jagielski private: 48*b1cdbd2cSJim Jagielski // data to calculate object position 49*b1cdbd2cSJim Jagielski // proposed anchor position, starting point for the calculation 50*b1cdbd2cSJim Jagielski // of the object position 51*b1cdbd2cSJim Jagielski const Point& mrProposedAnchorPos; 52*b1cdbd2cSJim Jagielski // flags that influences the calculation of the anchor position 53*b1cdbd2cSJim Jagielski // AS_CHAR_QUICK : quick formatting - calculated position not set at object 54*b1cdbd2cSJim Jagielski // AS_CHAR_ULSPACE : consider upper/lower spacing - adjustment of anchor position 55*b1cdbd2cSJim Jagielski // AS_CHAR_INIT : initial calculation 56*b1cdbd2cSJim Jagielski // AS_CHAR_ROTATE : object is rotated by 90 degrees 57*b1cdbd2cSJim Jagielski // AS_CHAR_REVERSE : object is reversed (rotated by 270 degrees) 58*b1cdbd2cSJim Jagielski // AS_CHAR_BIDI : object belongs to a BIDI-multi-portion 59*b1cdbd2cSJim Jagielski const AsCharFlags mnFlags; 60*b1cdbd2cSJim Jagielski // needed line values for the different alignments. 61*b1cdbd2cSJim Jagielski const SwTwips mnLineAscent; 62*b1cdbd2cSJim Jagielski const SwTwips mnLineDescent; 63*b1cdbd2cSJim Jagielski const SwTwips mnLineAscentInclObjs; 64*b1cdbd2cSJim Jagielski const SwTwips mnLineDescentInclObjs; 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski // calculated data for object position 67*b1cdbd2cSJim Jagielski Point maAnchorPos; 68*b1cdbd2cSJim Jagielski SwTwips mnRelPos; 69*b1cdbd2cSJim Jagielski SwRect maObjBoundRect; 70*b1cdbd2cSJim Jagielski // line alignment relative to line height; gives feedback for line formatting 71*b1cdbd2cSJim Jagielski // 0 - no line alignment, 1 - at top, 2 - at center, 3 - at bottom 72*b1cdbd2cSJim Jagielski sal_uInt8 mnLineAlignment; 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski // method to cast <SwAnchoredObjectPosition::GetAnchorFrm()> 75*b1cdbd2cSJim Jagielski const SwTxtFrm& GetAnchorTxtFrm() const; 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski /** determine the relative position to base line for object position 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski @author OD 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski @param _ObjBoundHeight 82*b1cdbd2cSJim Jagielski height including corresponding spacing of the object, for which 83*b1cdbd2cSJim Jagielski the Y-position has to be calculated. 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski @param _rVert 86*b1cdbd2cSJim Jagielski given vertical positioning and alignment 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski @return relative position to the base line 89*b1cdbd2cSJim Jagielski */ 90*b1cdbd2cSJim Jagielski SwTwips _GetRelPosToBase( const SwTwips _nObjBoundHeight, 91*b1cdbd2cSJim Jagielski const SwFmtVertOrient& _rVert ); 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski // ********************************************************************* 94*b1cdbd2cSJim Jagielski public: 95*b1cdbd2cSJim Jagielski /** construtor; provided object to be positioned and needed data 96*b1cdbd2cSJim Jagielski for calculation of the object position 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski OD 28.10.2003 #110978# 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski @param _rDrawObj 101*b1cdbd2cSJim Jagielski input parameter - object, that is be positioned. 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski @param _rProposedAnchorPos 104*b1cdbd2cSJim Jagielski proposed anchor position; starting point for the calculation 105*b1cdbd2cSJim Jagielski of the anchor position 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielski @param _nFlags 108*b1cdbd2cSJim Jagielski flags that influences the calculation of the anchor position 109*b1cdbd2cSJim Jagielski AS_CHAR_QUICK : quick formatting - calculated position not set at object 110*b1cdbd2cSJim Jagielski AS_CHAR_ULSPACE : consider upper/lower spacing - adjustment of anchor position 111*b1cdbd2cSJim Jagielski AS_CHAR_INIT : initial calculation 112*b1cdbd2cSJim Jagielski AS_CHAR_ROTATE : object is rotated by 90 degrees 113*b1cdbd2cSJim Jagielski AS_CHAR_REVERSE : object is reversed (rotated by 270 degrees) 114*b1cdbd2cSJim Jagielski AS_CHAR_BIDI : object belongs to a BIDI-multi-portion 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski @param _nLineAscent, _nLineDescent, _nLineAscentInclObjs, 117*b1cdbd2cSJim Jagielski _nLineDescentInclObjs - needed line values for the different 118*b1cdbd2cSJim Jagielski alignments. 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski @author OD 121*b1cdbd2cSJim Jagielski */ 122*b1cdbd2cSJim Jagielski SwAsCharAnchoredObjectPosition( SdrObject& _rDrawObj, 123*b1cdbd2cSJim Jagielski const Point& _rProposedAnchorPos, 124*b1cdbd2cSJim Jagielski const AsCharFlags _nFlags, 125*b1cdbd2cSJim Jagielski const SwTwips _nLineAscent, 126*b1cdbd2cSJim Jagielski const SwTwips _nLineDescent, 127*b1cdbd2cSJim Jagielski const SwTwips _nLineAscentInclObjs, 128*b1cdbd2cSJim Jagielski const SwTwips _nLineDescentInclObjs ); 129*b1cdbd2cSJim Jagielski virtual ~SwAsCharAnchoredObjectPosition(); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski /** calculate position for object position 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski members <maAnchorPos>, <mnRelPos>, <maObjBoundRect> and 134*b1cdbd2cSJim Jagielski <mnLineAlignment> are calculated. 135*b1cdbd2cSJim Jagielski calculated position is set at the given object. 136*b1cdbd2cSJim Jagielski 137*b1cdbd2cSJim Jagielski @author OD 138*b1cdbd2cSJim Jagielski */ 139*b1cdbd2cSJim Jagielski virtual void CalcPosition(); 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski /** calculated anchored position for object position type AS_CHAR 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski @author OD 144*b1cdbd2cSJim Jagielski */ 145*b1cdbd2cSJim Jagielski Point GetAnchorPos() const; 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski /** calculated relative position to base line for object position type AS_CHAR 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski @author OD 150*b1cdbd2cSJim Jagielski */ 151*b1cdbd2cSJim Jagielski SwTwips GetRelPosY() const; 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski /** determined object rectangle including spacing for object position type AS_CHAR 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski @author OD 156*b1cdbd2cSJim Jagielski */ 157*b1cdbd2cSJim Jagielski SwRect GetObjBoundRectInclSpacing() const; 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski /** determined line alignment relative to line height 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski @author OD 162*b1cdbd2cSJim Jagielski */ 163*b1cdbd2cSJim Jagielski sal_uInt8 GetLineAlignment() const; 164*b1cdbd2cSJim Jagielski }; 165*b1cdbd2cSJim Jagielski } // namespace objectpositioning 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski #endif 168