blob: f94115556c950c5421f28b75182c56c65753a8eb [file] [log] [blame]
/**************************************************************
*
* 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