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 {
49 public:
55  enum XPos { XRight, XLeft, XCenter, XFull };
57  enum YPos { YTop, YBottom, YCenter, YFull };
58 
59 public:
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) {}
65  ~MWAWPosition();
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  }
129  MWAWVec2f const &leftTopClipping() const
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  {
230  m_anchorTo = Cell;
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 
264 protected:
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;
282  diff = m_naturalSize.cmpY(f.m_naturalSize);
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 
293  int m_page;
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:
Definition: MWAWPosition.hxx:51
MWAWVec2f m_orig
the origin position in a page
Definition: MWAWPosition.hxx:294
librevenge::RVNGUnit m_unit
the unit used in orig, in m_size and in m_LTClip , .... Default: in inches
Definition: MWAWPosition.hxx:297
Definition: MWAWPosition.hxx:55
MWAWVec2f const & size() const
returns the frame size
Definition: MWAWPosition.hxx:119
Definition: MWAWPosition.hxx:53
void setOrigin(MWAWVec2f const &orig)
sets the frame origin
Definition: MWAWPosition.hxx:194
MWAWVec2f const & leftTopClipping() const
returns the left top clipping
Definition: MWAWPosition.hxx:129
void setPage(int pg) const
sets the page
Definition: MWAWPosition.hxx:189
int m_order
background/foward order
Definition: MWAWPosition.hxx:299
Definition: MWAWPosition.hxx:51
Definition: MWAWPosition.hxx:53
Definition: MWAWPosition.hxx:55
YPos
an enum used to define the relative Y position
Definition: MWAWPosition.hxx:57
MWAWVec2f m_naturalSize
the natural size of the data (if known)
Definition: MWAWPosition.hxx:294
void setNaturalSize(MWAWVec2f const &naturalSz)
sets the natural size (if known)
Definition: MWAWPosition.hxx:204
MWAWVec2f const & origin() const
return the frame origin
Definition: MWAWPosition.hxx:114
Definition: MWAWPosition.hxx:55
XPos
an enum used to define the relative X position
Definition: MWAWPosition.hxx:55
librevenge::RVNGString m_anchorCellName
the anchor cell name
Definition: MWAWPosition.hxx:256
bool operator<(MWAWPosition const &f) const
basic operator<
Definition: MWAWPosition.hxx:103
bool operator!=(MWAWPosition const &f) const
basic operator!=
Definition: MWAWPosition.hxx:98
void setPagePos(int pg, MWAWVec2f const &newOrig) const
sets/resets the page and the origin
Definition: MWAWPosition.hxx:214
static float getScaleFactor(librevenge::RVNGUnit orig, librevenge::RVNGUnit dest)
Definition: MWAWPosition.hxx:143
AnchorTo m_anchorTo
anchor position
Definition: MWAWPosition.hxx:254
Definition: MWAWPosition.hxx:57
Definition: MWAWPosition.hxx:57
friend std::ostream & operator<<(std::ostream &o, MWAWPosition const &pos)
operator<<
Definition: MWAWPosition.hxx:67
Definition: MWAWPosition.hxx:51
Definition: MWAWPosition.hxx:55
Definition: MWAWPosition.hxx:53
void setOrder(int ord) const
set background/foward order
Definition: MWAWPosition.hxx:248
MWAWVec2f const & rightBottomClipping() const
returns the right bottom clipping
Definition: MWAWPosition.hxx:134
#define MWAW_DEBUG_MSG(M)
Definition: libmwaw_internal.hxx:127
int cmpY(MWAWVec2< T > const &p) const
a comparison function: which first compares y then x
Definition: libmwaw_internal.hxx:729
Definition: MWAWPosition.hxx:53
bool operator==(MWAWPosition const &f) const
basic operator==
Definition: MWAWPosition.hxx:93
AnchorTo
a list of enum used to defined the anchor
Definition: MWAWPosition.hxx:51
Definition: MWAWPosition.hxx:57
MWAWVec2< float > MWAWVec2f
MWAWVec2 of float.
Definition: libmwaw_internal.hxx:785
MWAWVec2f m_RBClip
Definition: MWAWPosition.hxx:295
YPos m_yPos
Y relative position.
Definition: MWAWPosition.hxx:260
~MWAWPosition()
destructor
Definition: MWAWPosition.cxx:36
void setRelativePosition(AnchorTo anchor, XPos X=XLeft, YPos Y=YTop)
sets the relative position
Definition: MWAWPosition.hxx:221
MWAWVec2f m_size
Definition: MWAWPosition.hxx:294
void setSize(MWAWVec2f const &sz)
sets the frame size
Definition: MWAWPosition.hxx:199
XPos m_xPos
X relative position.
Definition: MWAWPosition.hxx:258
Definition: MWAWPosition.hxx:51
Definition: MWAWPosition.hxx:51
MWAWVec2f const & naturalSize() const
returns the natural size (if known)
Definition: MWAWPosition.hxx:124
MWAWVec2f m_LTClip
the left top clip position
Definition: MWAWPosition.hxx:295
void setAnchorToCell(librevenge::RVNGString const &cellName)
sets the anchor to a cell position
Definition: MWAWPosition.hxx:228
int cmp(MWAWPosition const &f) const
basic function to compare two positions
Definition: MWAWPosition.hxx:266
MWAWPosition(MWAWVec2f const &orig=MWAWVec2f(), MWAWVec2f const &sz=MWAWVec2f(), librevenge::RVNGUnit theUnit=librevenge::RVNG_INCH)
constructor
Definition: MWAWPosition.hxx:61
Definition: MWAWPosition.hxx:53
Wrapping
an enum used to define the wrapping: none, ...
Definition: MWAWPosition.hxx:53
librevenge::RVNGUnit unit() const
returns the unit
Definition: MWAWPosition.hxx:139
Definition: MWAWPosition.hxx:53
Class to define the position of an object (textbox, picture, ..) in the document. ...
Definition: MWAWPosition.hxx:47
void setUnit(librevenge::RVNGUnit newUnit)
sets the dimension unit
Definition: MWAWPosition.hxx:209
int page() const
returns the frame page
Definition: MWAWPosition.hxx:109
void setClippingPosition(MWAWVec2f lTop, MWAWVec2f rBottom)
sets the clipping position
Definition: MWAWPosition.hxx:236
Definition: MWAWPosition.hxx:51
Definition: MWAWPosition.hxx:51
Wrapping m_wrapping
Wrapping.
Definition: MWAWPosition.hxx:262
int m_page
the page
Definition: MWAWPosition.hxx:293
Definition: MWAWPosition.hxx:57
int order() const
returns background/foward order
Definition: MWAWPosition.hxx:243
float getInvUnitScale(librevenge::RVNGUnit fromUnit) const
returns a float which can be used to scale some data in object unit
Definition: MWAWPosition.hxx:183

Generated on Wed Feb 1 2017 01:25:56 for libmwaw by doxygen 1.8.11