MWAWPosition.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */
2
3/* libmwaw
4* Version: MPL 2.0 / LGPLv2+
5*
6* The contents of this file are subject to the Mozilla Public License Version
7* 2.0 (the "License"); you may not use this file except in compliance with
8* the License or as specified alternatively below. You may obtain a copy of
9* the License at http://www.mozilla.org/MPL/
10*
11* Software distributed under the License is distributed on an "AS IS" basis,
12* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13* for the specific language governing rights and limitations under the
14* License.
15*
16* Major Contributor(s):
17* Copyright (C) 2002 William Lachance (wrlach@gmail.com)
18* Copyright (C) 2002,2004 Marc Maurer (uwog@uwog.net)
19* Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
20* Copyright (C) 2006, 2007 Andrew Ziem
21* Copyright (C) 2011, 2012 Alonso Laurent (alonso@loria.fr)
22*
23*
24* All Rights Reserved.
25*
26* For minor contributions see the git repository.
27*
28* Alternatively, the contents of this file may be used under the terms of
29* the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
30* in which case the provisions of the LGPLv2+ are applicable
31* instead of those above.
32*/
33
34#ifndef MWAW_POSITION_H
35#define MWAW_POSITION_H
36
37#include <ostream>
38
39#include <librevenge/librevenge.h>
40
41#include "libmwaw_internal.hxx"
42
48{
49public:
58
59public:
61 MWAWPosition(MWAWVec2f const &orig=MWAWVec2f(), MWAWVec2f const &sz=MWAWVec2f(), librevenge::RVNGUnit theUnit=librevenge::RVNG_INCH):
63 m_page(0), m_orig(orig), m_size(sz), m_naturalSize(), m_LTClip(), m_RBClip(), m_unit(theUnit), m_order(0) {}
67 friend std::ostream &operator<<(std::ostream &o, MWAWPosition const &pos)
68 {
69 MWAWVec2f dest(pos.m_orig+pos.m_size);
70 o << "Pos=(" << pos.m_orig << ")x(" << dest << ")";
71 switch (pos.m_unit) {
72 case librevenge::RVNG_INCH:
73 o << "(inch)";
74 break;
75 case librevenge::RVNG_POINT:
76 o << "(pt)";
77 break;
78 case librevenge::RVNG_TWIP:
79 o << "(tw)";
80 break;
81 case librevenge::RVNG_PERCENT:
82 case librevenge::RVNG_GENERIC:
83 case librevenge::RVNG_UNIT_ERROR:
84#if !defined(__clang__)
85 default:
86#endif
87 break;
88 }
89 if (pos.page()>0) o << ", page=" << pos.page();
90 return o;
91 }
93 bool operator==(MWAWPosition const &f) const
94 {
95 return cmp(f) == 0;
96 }
98 bool operator!=(MWAWPosition const &f) const
99 {
100 return cmp(f) != 0;
101 }
103 bool operator<(MWAWPosition const &f) const
104 {
105 return cmp(f) < 0;
106 }
107
109 int page() const
110 {
111 return m_page;
112 }
114 MWAWVec2f const &origin() const
115 {
116 return m_orig;
117 }
119 MWAWVec2f const &size() const
120 {
121 return m_size;
122 }
124 MWAWVec2f const &naturalSize() const
125 {
126 return m_naturalSize;
127 }
130 {
131 return m_LTClip;
132 }
135 {
136 return m_RBClip;
137 }
139 librevenge::RVNGUnit unit() const
140 {
141 return m_unit;
142 }
143 static float getScaleFactor(librevenge::RVNGUnit orig, librevenge::RVNGUnit dest)
144 {
145 float actSc = 1.0, newSc = 1.0;
146 switch (orig) {
147 case librevenge::RVNG_TWIP:
148 break;
149 case librevenge::RVNG_POINT:
150 actSc=20;
151 break;
152 case librevenge::RVNG_INCH:
153 actSc = 1440;
154 break;
155 case librevenge::RVNG_PERCENT:
156 case librevenge::RVNG_GENERIC:
157 case librevenge::RVNG_UNIT_ERROR:
158#if !defined(__clang__)
159 default:
160#endif
161 MWAW_DEBUG_MSG(("MWAWPosition::getScaleFactor %d unit must not appear\n", int(orig)));
162 }
163 switch (dest) {
164 case librevenge::RVNG_TWIP:
165 break;
166 case librevenge::RVNG_POINT:
167 newSc=20;
168 break;
169 case librevenge::RVNG_INCH:
170 newSc = 1440;
171 break;
172 case librevenge::RVNG_PERCENT:
173 case librevenge::RVNG_GENERIC:
174 case librevenge::RVNG_UNIT_ERROR:
175#if !defined(__clang__)
176 default:
177#endif
178 MWAW_DEBUG_MSG(("MWAWPosition::getScaleFactor %d unit must not appear\n", int(dest)));
179 }
180 return actSc/newSc;
181 }
183 float getInvUnitScale(librevenge::RVNGUnit fromUnit) const
184 {
185 return getScaleFactor(fromUnit, m_unit);
186 }
187
189 void setPage(int pg) const
190 {
191 const_cast<MWAWPosition *>(this)->m_page = pg;
192 }
194 void setOrigin(MWAWVec2f const &orig)
195 {
196 m_orig = orig;
197 }
199 void setSize(MWAWVec2f const &sz)
200 {
201 m_size = sz;
202 }
204 void setNaturalSize(MWAWVec2f const &naturalSz)
205 {
206 m_naturalSize = naturalSz;
207 }
209 void setUnit(librevenge::RVNGUnit newUnit)
210 {
211 m_unit = newUnit;
212 }
214 void setPagePos(int pg, MWAWVec2f const &newOrig) const
215 {
216 const_cast<MWAWPosition *>(this)->m_page = pg;
217 const_cast<MWAWPosition *>(this)->m_orig = newOrig;
218 }
219
222 {
223 m_anchorTo = anchor;
224 m_xPos = X;
225 m_yPos = Y;
226 }
228 void setAnchorToCell(librevenge::RVNGString const &cellName)
229 {
231 m_xPos = XLeft;
232 m_yPos = YTop;
233 m_anchorCellName=cellName;
234 }
237 {
238 m_LTClip = lTop;
239 m_RBClip = rBottom;
240 }
241
243 int order() const
244 {
245 return m_order;
246 }
248 void setOrder(int ord) const
249 {
250 m_order = ord;
251 }
252
256 librevenge::RVNGString m_anchorCellName;
263
264protected:
266 int cmp(MWAWPosition const &f) const
267 {
268 int diff = int(m_anchorTo) - int(f.m_anchorTo);
269 if (diff) return diff < 0 ? -1 : 1;
270 diff = int(m_xPos) - int(f.m_xPos);
271 if (diff) return diff < 0 ? -1 : 1;
272 diff = int(m_yPos) - int(f.m_yPos);
273 if (diff) return diff < 0 ? -1 : 1;
274 diff = page() - f.page();
275 if (diff) return diff < 0 ? -1 : 1;
276 diff = int(m_unit) - int(f.m_unit);
277 if (diff) return diff < 0 ? -1 : 1;
278 diff = m_orig.cmpY(f.m_orig);
279 if (diff) return diff;
280 diff = m_size.cmpY(f.m_size);
281 if (diff) return diff;
283 if (diff) return diff;
284 diff = m_LTClip.cmpY(f.m_LTClip);
285 if (diff) return diff;
286 diff = m_RBClip.cmpY(f.m_RBClip);
287 if (diff) return diff;
288
289 return 0;
290 }
291
294 MWAWVec2f m_orig , m_size /* the size of the data*/, m_naturalSize ;
295 MWAWVec2f m_LTClip , m_RBClip /* the right bottom clip position */;
297 librevenge::RVNGUnit m_unit;
299 mutable int m_order;
300};
301
302#endif
303// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
Class to define the position of an object (textbox, picture, ..) in the document.
Definition: MWAWPosition.hxx:48
MWAWVec2f m_naturalSize
the natural size of the data (if known)
Definition: MWAWPosition.hxx:294
int cmp(MWAWPosition const &f) const
basic function to compare two positions
Definition: MWAWPosition.hxx:266
XPos
an enum used to define the relative X position
Definition: MWAWPosition.hxx:55
@ XRight
Definition: MWAWPosition.hxx:55
@ XFull
Definition: MWAWPosition.hxx:55
@ XLeft
Definition: MWAWPosition.hxx:55
@ XCenter
Definition: MWAWPosition.hxx:55
Wrapping m_wrapping
Wrapping.
Definition: MWAWPosition.hxx:262
void setRelativePosition(AnchorTo anchor, XPos X=XLeft, YPos Y=YTop)
sets the relative position
Definition: MWAWPosition.hxx:221
int m_order
background/foward order
Definition: MWAWPosition.hxx:299
bool operator==(MWAWPosition const &f) const
basic operator==
Definition: MWAWPosition.hxx:93
MWAWPosition(MWAWVec2f const &orig=MWAWVec2f(), MWAWVec2f const &sz=MWAWVec2f(), librevenge::RVNGUnit theUnit=librevenge::RVNG_INCH)
constructor
Definition: MWAWPosition.hxx:61
MWAWVec2f const & naturalSize() const
returns the natural size (if known)
Definition: MWAWPosition.hxx:124
MWAWVec2f const & origin() const
return the frame origin
Definition: MWAWPosition.hxx:114
void setAnchorToCell(librevenge::RVNGString const &cellName)
sets the anchor to a cell position
Definition: MWAWPosition.hxx:228
bool operator!=(MWAWPosition const &f) const
basic operator!=
Definition: MWAWPosition.hxx:98
void setUnit(librevenge::RVNGUnit newUnit)
sets the dimension unit
Definition: MWAWPosition.hxx:209
MWAWVec2f m_orig
the origin position in a page
Definition: MWAWPosition.hxx:294
friend std::ostream & operator<<(std::ostream &o, MWAWPosition const &pos)
operator<<
Definition: MWAWPosition.hxx:67
void setOrigin(MWAWVec2f const &orig)
sets the frame origin
Definition: MWAWPosition.hxx:194
int page() const
returns the frame page
Definition: MWAWPosition.hxx:109
MWAWVec2f const & leftTopClipping() const
returns the left top clipping
Definition: MWAWPosition.hxx:129
void setPagePos(int pg, MWAWVec2f const &newOrig) const
sets/resets the page and the origin
Definition: MWAWPosition.hxx:214
void setPage(int pg) const
sets the page
Definition: MWAWPosition.hxx:189
MWAWVec2f const & size() const
returns the frame size
Definition: MWAWPosition.hxx:119
MWAWVec2f m_LTClip
the left top clip position
Definition: MWAWPosition.hxx:295
static float getScaleFactor(librevenge::RVNGUnit orig, librevenge::RVNGUnit dest)
Definition: MWAWPosition.hxx:143
void setSize(MWAWVec2f const &sz)
sets the frame size
Definition: MWAWPosition.hxx:199
librevenge::RVNGUnit unit() const
returns the unit
Definition: MWAWPosition.hxx:139
int m_page
the page
Definition: MWAWPosition.hxx:293
XPos m_xPos
X relative position.
Definition: MWAWPosition.hxx:258
YPos
an enum used to define the relative Y position
Definition: MWAWPosition.hxx:57
@ YTop
Definition: MWAWPosition.hxx:57
@ YFull
Definition: MWAWPosition.hxx:57
@ YBottom
Definition: MWAWPosition.hxx:57
@ YCenter
Definition: MWAWPosition.hxx:57
float getInvUnitScale(librevenge::RVNGUnit fromUnit) const
returns a float which can be used to scale some data in object unit
Definition: MWAWPosition.hxx:183
~MWAWPosition()
destructor
Definition: MWAWPosition.cxx:36
MWAWVec2f m_RBClip
Definition: MWAWPosition.hxx:295
AnchorTo m_anchorTo
anchor position
Definition: MWAWPosition.hxx:254
int order() const
returns background/foward order
Definition: MWAWPosition.hxx:243
librevenge::RVNGUnit m_unit
the unit used in orig, in m_size and in m_LTClip , .... Default: in inches
Definition: MWAWPosition.hxx:297
void setOrder(int ord) const
set background/foward order
Definition: MWAWPosition.hxx:248
AnchorTo
a list of enum used to defined the anchor
Definition: MWAWPosition.hxx:51
@ Frame
Definition: MWAWPosition.hxx:51
@ Paragraph
Definition: MWAWPosition.hxx:51
@ Unknown
Definition: MWAWPosition.hxx:51
@ Char
Definition: MWAWPosition.hxx:51
@ Page
Definition: MWAWPosition.hxx:51
@ CharBaseLine
Definition: MWAWPosition.hxx:51
@ Cell
Definition: MWAWPosition.hxx:51
bool operator<(MWAWPosition const &f) const
basic operator<
Definition: MWAWPosition.hxx:103
YPos m_yPos
Y relative position.
Definition: MWAWPosition.hxx:260
librevenge::RVNGString m_anchorCellName
the anchor cell name
Definition: MWAWPosition.hxx:256
void setClippingPosition(MWAWVec2f lTop, MWAWVec2f rBottom)
sets the clipping position
Definition: MWAWPosition.hxx:236
MWAWVec2f m_size
Definition: MWAWPosition.hxx:294
MWAWVec2f const & rightBottomClipping() const
returns the right bottom clipping
Definition: MWAWPosition.hxx:134
void setNaturalSize(MWAWVec2f const &naturalSz)
sets the natural size (if known)
Definition: MWAWPosition.hxx:204
Wrapping
an enum used to define the wrapping: none, ...
Definition: MWAWPosition.hxx:53
@ WBackground
Definition: MWAWPosition.hxx:53
@ WForeground
Definition: MWAWPosition.hxx:53
@ WDynamic
Definition: MWAWPosition.hxx:53
@ WRunThrough
Definition: MWAWPosition.hxx:53
@ WParallel
Definition: MWAWPosition.hxx:53
@ WNone
Definition: MWAWPosition.hxx:53
int cmpY(MWAWVec2< T > const &p) const
a comparison function: which first compares y then x
Definition: libmwaw_internal.hxx:729
MWAWVec2< float > MWAWVec2f
MWAWVec2 of float.
Definition: libmwaw_internal.hxx:785
#define MWAW_DEBUG_MSG(M)
Definition: libmwaw_internal.hxx:127

Generated on Wed Jan 19 2022 22:23:16 for libmwaw by doxygen 1.9.3