1 /***********************************************************************
2 created: Mon Jul 18 2005
3 author: Paul D Turner <paul@cegui.org.uk>
4 *************************************************************************/
5 /***************************************************************************
6 * Copyright (C) 2004 - 2012 Paul D Turner & The CEGUI Development Team
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining
9 * a copy of this software and associated documentation files (the
10 * "Software"), to deal in the Software without restriction, including
11 * without limitation the rights to use, copy, modify, merge, publish,
12 * distribute, sublicense, and/or sell copies of the Software, and to
13 * permit persons to whom the Software is furnished to do so, subject to
14 * the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be
17 * included in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 ***************************************************************************/
27 #include "CEGUI/falagard/ComponentBase.h"
28 #include "CEGUI/falagard/XMLHandler.h"
29 #include "CEGUI/Exceptions.h"
30 #include "CEGUI/PropertyHelper.h"
31 #include "CEGUI/Colour.h"
32 #include <iostream>
33
34 namespace CEGUI
35 {
36 //----------------------------------------------------------------------------//
FalagardComponentBase()37 FalagardComponentBase::FalagardComponentBase() :
38 d_colours(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)
39 {}
40
41 //----------------------------------------------------------------------------//
~FalagardComponentBase()42 FalagardComponentBase::~FalagardComponentBase()
43 {}
44
45 //----------------------------------------------------------------------------//
render(Window & srcWindow,const CEGUI::ColourRect * modColours,const Rectf * clipper,bool clipToDisplay) const46 void FalagardComponentBase::render(Window& srcWindow,
47 const CEGUI::ColourRect* modColours,
48 const Rectf* clipper,
49 bool clipToDisplay) const
50 {
51 Rectf dest_rect(d_area.getPixelRect(srcWindow));
52
53 if (!clipper)
54 clipper = &dest_rect;
55
56 const Rectf final_clip_rect(dest_rect.getIntersection(*clipper));
57 render_impl(srcWindow, dest_rect, modColours,
58 &final_clip_rect, clipToDisplay);
59 }
60
61 //----------------------------------------------------------------------------//
render(Window & srcWindow,const Rectf & baseRect,const CEGUI::ColourRect * modColours,const Rectf * clipper,bool clipToDisplay) const62 void FalagardComponentBase::render(Window& srcWindow,
63 const Rectf& baseRect,
64 const CEGUI::ColourRect* modColours,
65 const Rectf* clipper,
66 bool clipToDisplay) const
67 {
68 Rectf dest_rect(d_area.getPixelRect(srcWindow, baseRect));
69
70 if (!clipper)
71 clipper = &dest_rect;
72
73 const Rectf final_clip_rect(dest_rect.getIntersection(*clipper));
74 render_impl(srcWindow, dest_rect, modColours,
75 &final_clip_rect, clipToDisplay);
76 }
77
78 //----------------------------------------------------------------------------//
getComponentArea() const79 const ComponentArea& FalagardComponentBase::getComponentArea() const
80 {
81 return d_area;
82 }
83
84 //----------------------------------------------------------------------------//
setComponentArea(const ComponentArea & area)85 void FalagardComponentBase::setComponentArea(const ComponentArea& area)
86 {
87 d_area = area;
88 }
89
90 //----------------------------------------------------------------------------//
getColours() const91 const ColourRect& FalagardComponentBase::getColours() const
92 {
93 return d_colours;
94 }
95
96 //----------------------------------------------------------------------------//
setColours(const ColourRect & cols)97 void FalagardComponentBase::setColours(const ColourRect& cols)
98 {
99 d_colours = cols;
100 }
101
102 //----------------------------------------------------------------------------//
getColoursPropertySource() const103 const String& FalagardComponentBase::getColoursPropertySource() const
104 {
105 return d_colourPropertyName;
106 }
107
108 //----------------------------------------------------------------------------//
setColoursPropertySource(const String & property)109 void FalagardComponentBase::setColoursPropertySource(const String& property)
110 {
111 d_colourPropertyName = property;
112 }
113
114 //----------------------------------------------------------------------------//
initColoursRect(const Window & wnd,const ColourRect * modCols,ColourRect & cr) const115 void FalagardComponentBase::initColoursRect(const Window& wnd,
116 const ColourRect* modCols,
117 ColourRect& cr) const
118 {
119 // if colours come via a colour property
120 if (!d_colourPropertyName.empty())
121 {
122 // if property accesses a ColourRect or a colour
123 cr = wnd.getProperty<ColourRect>(d_colourPropertyName);
124 }
125 // use explicit ColourRect.
126 else
127 cr = d_colours;
128
129 if (modCols)
130 cr *= *modCols;
131 }
132
133 //----------------------------------------------------------------------------//
writeColoursXML(XMLSerializer & xml_stream) const134 bool FalagardComponentBase::writeColoursXML(XMLSerializer& xml_stream) const
135 {
136
137 if (!d_colourPropertyName.empty())
138 {
139 xml_stream.openTag(Falagard_xmlHandler::ColourRectPropertyElement);
140 xml_stream.attribute(Falagard_xmlHandler::NameAttribute, d_colourPropertyName)
141 .closeTag();
142 }
143 else if (!d_colours.isMonochromatic() ||
144 d_colours.d_top_left != Colour(1,1,1,1))
145 {
146 xml_stream.openTag(Falagard_xmlHandler::ColoursElement)
147 .attribute(Falagard_xmlHandler::TopLeftAttribute,
148 PropertyHelper<Colour>::toString(d_colours.d_top_left))
149 .attribute(Falagard_xmlHandler::TopRightAttribute,
150 PropertyHelper<Colour>::toString(d_colours.d_top_right))
151 .attribute(Falagard_xmlHandler::BottomLeftAttribute,
152 PropertyHelper<Colour>::toString(d_colours.d_bottom_left))
153 .attribute(Falagard_xmlHandler::BottomRightAttribute,
154 PropertyHelper<Colour>::toString(d_colours.d_bottom_right))
155 .closeTag();
156 }
157 else
158 return false;
159
160 return true;
161 }
162
163 //----------------------------------------------------------------------------//
handleFontRenderSizeChange(Window & window,const Font * font) const164 bool FalagardComponentBase::handleFontRenderSizeChange(Window& window,
165 const Font* font) const
166 {
167 return d_area.handleFontRenderSizeChange(window, font);
168 }
169
170 //----------------------------------------------------------------------------//
171
172 }
173
174