1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 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
@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
@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.
*/
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.
*/
virtual void CalcPosition();
// calculated anchored position for object position type AS_CHAR
Point GetAnchorPos() const;
// calculated relative position to base line for object position type AS_CHAR
SwTwips GetRelPosY() const;
// determined object rectangle including spacing for object position type AS_CHAR
SwRect GetObjBoundRectInclSpacing() const;
// determined line alignment relative to line height
sal_uInt8 GetLineAlignment() const;
};
} // namespace objectpositioning
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|