| /************************************************************** | 
 |  *  | 
 |  * Licensed to the Apache Software Foundation (ASF) under one | 
 |  * or more contributor license agreements.  See the NOTICE file | 
 |  * distributed with this work for additional information | 
 |  * regarding copyright ownership.  The ASF licenses this file | 
 |  * to you under the Apache License, Version 2.0 (the | 
 |  * "License"); you may not use this file except in compliance | 
 |  * with the License.  You may obtain a copy of the License at | 
 |  *  | 
 |  *   http://www.apache.org/licenses/LICENSE-2.0 | 
 |  *  | 
 |  * Unless required by applicable law or agreed to in writing, | 
 |  * software distributed under the License is distributed on an | 
 |  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
 |  * KIND, either express or implied.  See the License for the | 
 |  * specific language governing permissions and limitations | 
 |  * under the License. | 
 |  *  | 
 |  *************************************************************/ | 
 |  | 
 |   | 
 | #ifndef _ASCHARANCHOREDOBJECTPOSITION_HXX | 
 | #define _ASCHARANCHOREDOBJECTPOSITION_HXX | 
 | #include <anchoredobjectposition.hxx> | 
 | #include <sal/types.h> | 
 | #include <swtypes.hxx> | 
 | #include <swrect.hxx> | 
 |  | 
 | class SwTxtFrm; | 
 | class SwFmtVertOrient; | 
 |  | 
 | namespace objectpositioning | 
 | { | 
 |     // flags for positioning algorithm of as-character-anchored objects | 
 |     typedef sal_uInt8 AsCharFlags; | 
 |     #define AS_CHAR_NOFLAG  0 | 
 |     #define AS_CHAR_QUICK   1 | 
 |     #define AS_CHAR_ULSPACE 2 | 
 |     #define AS_CHAR_INIT    4 | 
 |     #define AS_CHAR_ROTATE  8 | 
 |     #define AS_CHAR_REVERSE 16 | 
 |     #define AS_CHAR_BIDI    32 | 
 |  | 
 |     class SwAsCharAnchoredObjectPosition : public SwAnchoredObjectPosition | 
 |     { | 
 |         private: | 
 |          // data to calculate object position | 
 |             // proposed anchor position, starting point for the calculation | 
 |             // of the object position | 
 |             const Point& mrProposedAnchorPos; | 
 |             // flags that influences the calculation of the anchor position | 
 |             // AS_CHAR_QUICK   : quick formatting - calculated position not set at object | 
 |             // AS_CHAR_ULSPACE : consider upper/lower spacing - adjustment of anchor position | 
 |             // AS_CHAR_INIT    : initial calculation | 
 |             // AS_CHAR_ROTATE  : object is rotated by 90 degrees | 
 |             // AS_CHAR_REVERSE : object is reversed (rotated by 270 degrees) | 
 |             // AS_CHAR_BIDI    : object belongs to a BIDI-multi-portion | 
 |             const AsCharFlags mnFlags; | 
 |             // needed line values for the different alignments. | 
 |             const SwTwips mnLineAscent; | 
 |             const SwTwips mnLineDescent; | 
 |             const SwTwips mnLineAscentInclObjs; | 
 |             const SwTwips mnLineDescentInclObjs; | 
 |  | 
 |          // calculated data for object position | 
 |             Point       maAnchorPos; | 
 |             SwTwips     mnRelPos; | 
 |             SwRect      maObjBoundRect; | 
 |             // line alignment relative to line height; gives feedback for line formatting | 
 |             // 0 - no line alignment, 1 - at top, 2 - at center, 3 - at bottom | 
 |             sal_uInt8   mnLineAlignment; | 
 |  | 
 |             // method to cast <SwAnchoredObjectPosition::GetAnchorFrm()> | 
 |             const SwTxtFrm& GetAnchorTxtFrm() const; | 
 |  | 
 |             /** determine the relative position to base line for object position | 
 |  | 
 |                 @author OD | 
 |  | 
 |                 @param _ObjBoundHeight | 
 |                 height including corresponding spacing of the object, for which | 
 |                 the Y-position has to be calculated. | 
 |  | 
 |                 @param _rVert | 
 |                 given vertical positioning and alignment | 
 |  | 
 |                 @return relative position to the base line | 
 |             */ | 
 |             SwTwips _GetRelPosToBase( const SwTwips          _nObjBoundHeight, | 
 |                                       const SwFmtVertOrient& _rVert ); | 
 |  | 
 |         // ********************************************************************* | 
 |         public: | 
 |             /** construtor; provided object to be positioned and needed data | 
 |                 for calculation of the object position | 
 |  | 
 |                 OD 28.10.2003 #110978# | 
 |  | 
 |                 @param _rDrawObj | 
 |                 input parameter - object, that is be positioned. | 
 |  | 
 |                 @param _rProposedAnchorPos | 
 |                 proposed anchor position; starting point for the calculation | 
 |                 of the anchor position | 
 |  | 
 |                 @param _nFlags | 
 |                 flags that influences the calculation of the anchor position | 
 |                 AS_CHAR_QUICK   : quick formatting - calculated position not set at object | 
 |                 AS_CHAR_ULSPACE : consider upper/lower spacing - adjustment of anchor position | 
 |                 AS_CHAR_INIT    : initial calculation | 
 |                 AS_CHAR_ROTATE  : object is rotated by 90 degrees | 
 |                 AS_CHAR_REVERSE : object is reversed (rotated by 270 degrees) | 
 |                 AS_CHAR_BIDI    : object belongs to a BIDI-multi-portion | 
 |  | 
 |                 @param _nLineAscent, _nLineDescent, _nLineAscentInclObjs, | 
 |                 _nLineDescentInclObjs - needed line values for the different | 
 |                 alignments. | 
 |  | 
 |                 @author OD | 
 |             */ | 
 |             SwAsCharAnchoredObjectPosition( SdrObject&      _rDrawObj, | 
 |                                             const Point&    _rProposedAnchorPos, | 
 |                                             const AsCharFlags _nFlags, | 
 |                                             const SwTwips     _nLineAscent, | 
 |                                             const SwTwips     _nLineDescent, | 
 |                                             const SwTwips     _nLineAscentInclObjs, | 
 |                                             const SwTwips     _nLineDescentInclObjs ); | 
 |             virtual ~SwAsCharAnchoredObjectPosition(); | 
 |  | 
 |             /** calculate position for object position | 
 |  | 
 |                 members <maAnchorPos>, <mnRelPos>, <maObjBoundRect> and | 
 |                 <mnLineAlignment> are calculated. | 
 |                 calculated position is set at the given object. | 
 |  | 
 |                 @author OD | 
 |             */ | 
 |             virtual void CalcPosition(); | 
 |  | 
 |             /** calculated anchored position for object position type AS_CHAR | 
 |  | 
 |                 @author OD | 
 |             */ | 
 |             Point GetAnchorPos() const; | 
 |  | 
 |             /** calculated relative position to base line for object position type AS_CHAR | 
 |  | 
 |                 @author OD | 
 |             */ | 
 |             SwTwips GetRelPosY() const; | 
 |  | 
 |             /** determined object rectangle including spacing for object position type AS_CHAR | 
 |  | 
 |                 @author OD | 
 |             */ | 
 |             SwRect GetObjBoundRectInclSpacing() const; | 
 |  | 
 |             /** determined line alignment relative to line height | 
 |  | 
 |                 @author OD | 
 |             */ | 
 |             sal_uInt8 GetLineAlignment() const; | 
 |     }; | 
 | } // namespace objectpositioning | 
 |  | 
 | #endif |