00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _CEGUIFalDimensions_h_
00029 #define _CEGUIFalDimensions_h_
00030
00031 #include "falagard/CEGUIFalEnums.h"
00032 #include "CEGUIString.h"
00033 #include "CEGUIUDim.h"
00034 #include "CEGUIXMLSerializer.h"
00035
00036
00037 namespace CEGUI
00038 {
00043 class CEGUIEXPORT BaseDim
00044 {
00045 public:
00046 BaseDim();
00047
00048 virtual ~BaseDim();
00049
00061 float getValue(const Window& wnd) const;
00062
00080 float getValue(const Window& wnd, const Rect& container) const;
00081
00094 BaseDim* clone() const;
00095
00104 DimensionOperator getDimensionOperator() const;
00105
00117 void setDimensionOperator(DimensionOperator op);
00118
00126 const BaseDim* getOperand() const;
00127
00139 void setOperand(const BaseDim& operand);
00140
00151 void writeXMLToStream(XMLSerializer& xml_stream) const;
00152
00153 protected:
00159 virtual float getValue_impl(const Window& wnd) const = 0;
00160
00166 virtual float getValue_impl(const Window& wnd, const Rect& container) const = 0;
00167
00174 virtual BaseDim* clone_impl() const = 0;
00175
00180 virtual void writeXMLElementName_impl(XMLSerializer& xml_stream) const = 0;
00181
00186 virtual void writeXMLElementAttributes_impl(XMLSerializer& xml_stream) const = 0;
00187
00188 private:
00189 DimensionOperator d_operator;
00190 BaseDim* d_operand;
00191 };
00192
00193
00198 class CEGUIEXPORT AbsoluteDim : public BaseDim
00199 {
00200 public:
00208 AbsoluteDim(float val);
00209
00214 void setValue(float val);
00215
00216 protected:
00217
00218 float getValue_impl(const Window& wnd) const;
00219 float getValue_impl(const Window& wnd, const Rect& container) const;
00220 void writeXMLElementName_impl(XMLSerializer& xml_stream) const;
00221 void writeXMLElementAttributes_impl(XMLSerializer& xml_stream) const;
00222
00223 BaseDim* clone_impl() const;
00224
00225 private:
00226 float d_val;
00227 };
00228
00229
00234 class CEGUIEXPORT ImageDim : public BaseDim
00235 {
00236 public:
00251 ImageDim(const String& imageset, const String& image, DimensionType dim);
00252
00266 void setSourceImage(const String& imageset, const String& image);
00267
00279 void setSourceDimension(DimensionType dim);
00280
00281 protected:
00282
00283 float getValue_impl(const Window& wnd) const;
00284 float getValue_impl(const Window& wnd, const Rect& container) const;
00285 void writeXMLElementName_impl(XMLSerializer& xml_stream) const;
00286 void writeXMLElementAttributes_impl(XMLSerializer& xml_stream) const;
00287 BaseDim* clone_impl() const;
00288
00289 private:
00290 String d_imageset;
00291 String d_image;
00292 DimensionType d_what;
00293 };
00294
00295
00305 class CEGUIEXPORT WidgetDim : public BaseDim
00306 {
00307 public:
00319 WidgetDim(const String& name, DimensionType dim);
00320
00331 void setWidgetName(const String& name);
00332
00344 void setSourceDimension(DimensionType dim);
00345
00346 protected:
00347
00348 float getValue_impl(const Window& wnd) const;
00349 float getValue_impl(const Window& wnd, const Rect& container) const;
00350 void writeXMLElementName_impl(XMLSerializer& xml_stream) const;
00351 void writeXMLElementAttributes_impl(XMLSerializer& xml_stream) const;
00352 BaseDim* clone_impl() const;
00353
00354 private:
00355 String d_widgetName;
00356 DimensionType d_what;
00357 };
00358
00359
00364 class CEGUIEXPORT UnifiedDim : public BaseDim
00365 {
00366 public:
00379 UnifiedDim(const UDim& value, DimensionType dim);
00380
00381 protected:
00382
00383 float getValue_impl(const Window& wnd) const;
00384 float getValue_impl(const Window& wnd, const Rect& container) const;
00385 void writeXMLElementName_impl(XMLSerializer& xml_stream) const;
00386 void writeXMLElementAttributes_impl(XMLSerializer& xml_stream) const;
00387 BaseDim* clone_impl() const;
00388
00389 private:
00390 UDim d_value;
00391 DimensionType d_what;
00392 };
00393
00398 class CEGUIEXPORT FontDim : public BaseDim
00399 {
00400 public:
00423 FontDim(const String& name, const String& font, const String& text, FontMetricType metric, float padding = 0);
00424
00425 protected:
00426
00427 float getValue_impl(const Window& wnd) const;
00428 float getValue_impl(const Window& wnd, const Rect& container) const;
00429 void writeXMLElementName_impl(XMLSerializer& xml_stream) const;
00430 void writeXMLElementAttributes_impl(XMLSerializer& xml_stream) const;
00431 BaseDim* clone_impl() const;
00432
00433 private:
00434 String d_font;
00435 String d_text;
00436 String d_childSuffix;
00437 FontMetricType d_metric;
00438 float d_padding;
00439 };
00440
00446 class CEGUIEXPORT PropertyDim : public BaseDim
00447 {
00448 public:
00474 PropertyDim(const String& name, const String& property, DimensionType type);
00475
00476 protected:
00477
00478 float getValue_impl(const Window& wnd) const;
00479 float getValue_impl(const Window& wnd, const Rect& container) const;
00480 void writeXMLElementName_impl(XMLSerializer& xml_stream) const;
00481 void writeXMLElementAttributes_impl(XMLSerializer& xml_stream) const;
00482 BaseDim* clone_impl() const;
00483
00484 private:
00485 String d_property;
00486 String d_childSuffix;
00487 DimensionType d_type;
00488 };
00489
00498 class CEGUIEXPORT Dimension
00499 {
00500 public:
00505 Dimension();
00506
00511 ~Dimension();
00512
00523 Dimension(const BaseDim& dim, DimensionType type);
00524
00529 Dimension(const Dimension& other);
00530
00535 Dimension& operator=(const Dimension& other);
00536
00544 const BaseDim& getBaseDimension() const;
00545
00556 void setBaseDimension(const BaseDim& dim);
00557
00565 DimensionType getDimensionType() const;
00566
00577 void setDimensionType(DimensionType type);
00578
00589 void writeXMLToStream(XMLSerializer& xml_stream) const;
00590
00591 private:
00592 BaseDim* d_value;
00593 DimensionType d_type;
00594 };
00595
00596
00606 class CEGUIEXPORT ComponentArea
00607 {
00608 public:
00620 Rect getPixelRect(const Window& wnd) const;
00621
00636 Rect getPixelRect(const Window& wnd, const Rect& container) const;
00637
00649 void writeXMLToStream(XMLSerializer& xml_stream) const;
00650
00659 bool isAreaFetchedFromProperty() const;
00660
00668 const String& getAreaPropertySource() const;
00669
00680 void setAreaPropertySource(const String& property);
00681
00682
00683 Dimension d_left;
00684 Dimension d_top;
00685 Dimension d_right_or_width;
00686 Dimension d_bottom_or_height;
00687
00688 private:
00689 String d_areaProperty;
00690 };
00691
00692 }
00693
00694
00695 #endif // end of guard _CEGUIFalDimensions_h_