# qwt_double_rect.h

    00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
    00002  * Qwt Widget Library
    00003  * Copyright (C) 1997   Josef Wilgen
    00004  * Copyright (C) 2002   Uwe Rathmann
    00005  *
    00006  * This library is free software; you can redistribute it and/or
    00007  * modify it under the terms of the Qwt License, Version 1.0
    00008  *****************************************************************************/
    00009
    00011 #ifndef QWT_DOUBLE_RECT_H
    00012 #define QWT_DOUBLE_RECT_H 1
    00013
    00014 #include "qwt_global.h"
    00015 #include "qwt_array.h"
    00016
    00017 #if QT_VERSION >= 0x040000
    00018
    00019 #include <QPointF>
    00020 #include <QSizeF>
    00021 #include <QRectF>
    00022
    00029 typedef QPointF QwtDoublePoint;
    00030
    00037 typedef QSizeF QwtDoubleSize;
    00038
    00045 typedef QRectF QwtDoubleRect;
    00046
    00047 #else
    00048
    00049 #include <qpoint.h>
    00050 #include <qsize.h>
    00051 #include <qrect.h>
    00052
    00057 class QWT_EXPORT QwtDoublePoint
    00058 {
    00059 public:
    00060     QwtDoublePoint();
    00061     QwtDoublePoint(double x, double y);
    00062     QwtDoublePoint(const QPoint &);
    00063
    00064     QPoint toPoint() const;
    00065
    00066     bool isNull()    const;
    00067
    00068     double x() const;
    00069     double y() const;
    00070
    00071     double &rx();
    00072     double &ry();
    00073
    00074     void setX(double x);
    00075     void setY(double y);
    00076
    00077     bool operator==(const QwtDoublePoint &) const;
    00078     bool operator!=(const QwtDoublePoint &) const;
    00079
    00080     const QwtDoublePoint operator-() const;
    00081     const QwtDoublePoint operator+(const QwtDoublePoint &) const;
    00082     const QwtDoublePoint operator-(const QwtDoublePoint &) const;
    00083     const QwtDoublePoint operator*(double) const;
    00084     const QwtDoublePoint operator/(double) const;
    00085
    00086     QwtDoublePoint &operator+=(const QwtDoublePoint &);
    00087     QwtDoublePoint &operator-=(const QwtDoublePoint &);
    00088     QwtDoublePoint &operator*=(double);
    00089     QwtDoublePoint &operator/=(double);
    00090
    00091 private:
    00092     double d_x;
    00093     double d_y;
    00094 };
    00095
    00100 class QWT_EXPORT QwtDoubleSize
    00101 {
    00102 public:
    00103     QwtDoubleSize();
    00104     QwtDoubleSize(double width, double height);
    00105     QwtDoubleSize(const QSize &);
    00106
    00107     bool isNull() const;
    00108     bool isEmpty() const;
    00109     bool isValid() const;
    00110
    00111     double width() const;
    00112     double height() const;
    00113     void setWidth( double w );
    00114     void setHeight( double h );
    00115     void transpose();
    00116
    00117     QwtDoubleSize expandedTo(const QwtDoubleSize &) const;
    00118     QwtDoubleSize boundedTo(const QwtDoubleSize &) const;
    00119
    00120     bool operator==(const QwtDoubleSize &) const;
    00121     bool operator!=(const QwtDoubleSize &) const;
    00122
    00123     const QwtDoubleSize operator+(const QwtDoubleSize &) const;
    00124     const QwtDoubleSize operator-(const QwtDoubleSize &) const;
    00125     const QwtDoubleSize operator*(double) const;
    00126     const QwtDoubleSize operator/(double) const;
    00127
    00128     QwtDoubleSize &operator+=(const QwtDoubleSize &);
    00129     QwtDoubleSize &operator-=(const QwtDoubleSize &);
    00130     QwtDoubleSize &operator*=(double c);
    00131     QwtDoubleSize &operator/=(double c);
    00132
    00133 private:
    00134     double d_width;
    00135     double d_height;
    00136 };
    00137
    00142 class QWT_EXPORT QwtDoubleRect
    00143 {
    00144 public:
    00145     QwtDoubleRect();
    00146     QwtDoubleRect(double left, double top, double width, double height);
    00147     QwtDoubleRect(const QwtDoublePoint&, const QwtDoubleSize &);
    00148
    00149     QwtDoubleRect(const QRect &);
    00150     QRect toRect() const;
    00151
    00152     bool isNull()    const;
    00153     bool isEmpty()   const;
    00154     bool isValid()   const;
    00155
    00156     QwtDoubleRect normalized() const;
    00157
    00158     double x()  const;
    00159     double y()  const;
    00160
    00161     double left()  const;
    00162     double right()  const;
    00163     double top()  const;
    00164     double bottom()  const;
    00165
    00166     void setX(double);
    00167     void setY(double);
    00168
    00169     void setLeft(double);
    00170     void setRight(double);
    00171     void setTop(double);
    00172     void setBottom(double);
    00173
    00174     QwtDoublePoint center()  const;
    00175
    00176     void moveLeft(double x);
    00177     void moveRight(double x);
    00178     void moveTop(double y );
    00179     void moveBottom(double y );
    00180     void moveTo(double x, double y);
    00181     void moveTo(const QwtDoublePoint &);
    00182     void moveBy(double dx, double dy);
    00183     void moveCenter(const QwtDoublePoint &);
    00184     void moveCenter(double dx, double dy);
    00185
    00186     void setRect(double x1, double x2, double width, double height);
    00187
    00188     double width()   const;
    00189     double height()  const;
    00190     QwtDoubleSize size() const;
    00191
    00192     void setWidth(double w );
    00193     void setHeight(double h );
    00194     void setSize(const QwtDoubleSize &);
    00195
    00196     QwtDoubleRect  operator|(const QwtDoubleRect &r) const;
    00197     QwtDoubleRect  operator&(const QwtDoubleRect &r) const;
    00198     QwtDoubleRect &operator|=(const QwtDoubleRect &r);
    00199     QwtDoubleRect &operator&=(const QwtDoubleRect &r);
    00200     bool operator==( const QwtDoubleRect &) const;
    00201     bool operator!=( const QwtDoubleRect &) const;
    00202
    00203     bool contains(const QwtDoublePoint &p, bool proper = false) const;
    00204     bool contains(double x, double y, bool proper = false) const;
    00205     bool contains(const QwtDoubleRect &r, bool proper=false) const;
    00206
    00207     QwtDoubleRect unite(const QwtDoubleRect &) const;
    00208     QwtDoubleRect intersect(const QwtDoubleRect &) const;
    00209     bool intersects(const QwtDoubleRect &) const;
    00210
    00211     QwtDoublePoint bottomRight() const;
    00212     QwtDoublePoint topRight() const;
    00213     QwtDoublePoint topLeft() const;
    00214     QwtDoublePoint bottomLeft() const;
    00215
    00216 private:
    00217     double d_left;
    00218     double d_right;
    00219     double d_top;
    00220     double d_bottom;
    00221 };
    00222
    00229 inline bool QwtDoublePoint::isNull() const
    00230 {
    00231     return d_x == 0.0 && d_y == 0.0;
    00232 }
    00233
    00235 inline double QwtDoublePoint::x() const
    00236 {
    00237     return d_x;
    00238 }
    00239
    00241 inline double QwtDoublePoint::y() const
    00242 {
    00243     return d_y;
    00244 }
    00245
    00247 inline double &QwtDoublePoint::rx()
    00248 {
    00249     return d_x;
    00250 }
    00251
    00253 inline double &QwtDoublePoint::ry()
    00254 {
    00255     return d_y;
    00256 }
    00257
    00259 inline void QwtDoublePoint::setX(double x)
    00260 {
    00261     d_x = x;
    00262 }
    00263
    00265 inline void QwtDoublePoint::setY(double y)
    00266 {
    00267     d_y = y;
    00268 }
    00269
    00274 inline QPoint QwtDoublePoint::toPoint() const
    00275 {
    00276     return QPoint(qRound(d_x), qRound(d_y));
    00277 }
    00278
    00283 inline bool QwtDoubleSize::isNull() const
    00284 {
    00285     return d_width == 0.0 && d_height == 0.0;
    00286 }
    00287
    00292 inline bool QwtDoubleSize::isEmpty() const
    00293 {
    00294     return d_width <= 0.0 || d_height <= 0.0;
    00295 }
    00296
    00301 inline bool QwtDoubleSize::isValid() const
    00302 {
    00303     return d_width >= 0.0 && d_height >= 0.0;
    00304 }
    00305
    00307 inline double QwtDoubleSize::width() const
    00308 {
    00309     return d_width;
    00310 }
    00311
    00313 inline double QwtDoubleSize::height() const
    00314 {
    00315     return d_height;
    00316 }
    00317
    00319 inline void QwtDoubleSize::setWidth(double width)
    00320 {
    00321     d_width = width;
    00322 }
    00323
    00325 inline void QwtDoubleSize::setHeight(double height)
    00326 {
    00327     d_height = height;
    00328 }
    00329
    00337 inline bool QwtDoubleRect::isNull() const
    00338 {
    00339     return d_right == d_left && d_bottom == d_top;
    00340 }
    00341
    00349 inline bool QwtDoubleRect::isEmpty() const
    00350 {
    00351     return d_left >= d_right || d_top >= d_bottom;
    00352 }
    00353
    00362 inline bool QwtDoubleRect::isValid() const
    00363 {
    00364     return d_left < d_right && d_top < d_bottom;
    00365 }
    00366
    00368 inline double QwtDoubleRect::x() const
    00369 {
    00370     return d_left;
    00371 }
    00372
    00374 inline double QwtDoubleRect::y() const
    00375 {
    00376     return d_top;
    00377 }
    00378
    00380 inline double QwtDoubleRect::left() const
    00381 {
    00382     return d_left;
    00383 }
    00384
    00386 inline double QwtDoubleRect::right() const
    00387 {
    00388     return d_right;
    00389 }
    00390
    00392 inline double QwtDoubleRect::top() const
    00393 {
    00394     return d_top;
    00395 }
    00396
    00398 inline double QwtDoubleRect::bottom() const
    00399 {
    00400     return d_bottom;
    00401 }
    00402
    00404 inline void QwtDoubleRect::setX(double x)
    00405 {
    00406     d_left = x;
    00407 }
    00408
    00410 inline void QwtDoubleRect::setY(double y)
    00411 {
    00412     d_top = y;
    00413 }
    00414
    00416 inline void QwtDoubleRect::setLeft(double x)
    00417 {
    00418     d_left = x;
    00419 }
    00420
    00422 inline void QwtDoubleRect::setRight(double x)
    00423 {
    00424     d_right = x;
    00425 }
    00426
    00428 inline void QwtDoubleRect::setTop(double y)
    00429 {
    00430     d_top = y;
    00431 }
    00432
    00434 inline void QwtDoubleRect::setBottom(double y)
    00435 {
    00436     d_bottom = y;
    00437 }
    00438
    00440 inline double QwtDoubleRect::width() const
    00441 {
    00442     return  d_right - d_left;
    00443 }
    00444
    00446 inline double QwtDoubleRect::height() const
    00447 {
    00448     return  d_bottom - d_top;
    00449 }
    00450
    00452 inline QwtDoubleSize QwtDoubleRect::size() const
    00453 {
    00454     return QwtDoubleSize(width(), height());
    00455 }
    00456
    00458 inline void QwtDoubleRect::setWidth(double w)
    00459 {
    00460     d_right = d_left + w;
    00461 }
    00462
    00464 inline void QwtDoubleRect::setHeight(double h)
    00465 {
    00466     d_bottom = d_top + h;
    00467 }
    00468
    00473 inline void QwtDoubleRect::moveTo(const QwtDoublePoint &p)
    00474 {
    00475     moveTo(p.x(), p.y());
    00476 }
    00477
    00478 inline QwtDoublePoint QwtDoubleRect::bottomRight() const
    00479 {
    00480     return QwtDoublePoint(bottom(), right());
    00481 }
    00482
    00483 inline QwtDoublePoint QwtDoubleRect::topRight() const
    00484 {
    00485     return QwtDoublePoint(top(), right());
    00486 }
    00487
    00488 inline QwtDoublePoint QwtDoubleRect::topLeft() const
    00489 {
    00490     return QwtDoublePoint(top(), left());
    00491 }
    00492
    00493 inline QwtDoublePoint QwtDoubleRect::bottomLeft() const
    00494 {
    00495     return QwtDoublePoint(bottom(), left());
    00496 }
    00497
    00498
    00499 #endif // QT_VERSION < 0x040000
    00500
    00501 #endif // QWT_DOUBLE_RECT_H