mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-23 23:42:32 +00:00
util/geometry: support 'Rect::from_xml'
This patch eases the creation of 'Point', 'Area', and 'Rect' objects from XML attribute values. Fixes #4584
This commit is contained in:
parent
5319f36788
commit
42edac8a34
@ -15,6 +15,7 @@
|
|||||||
#define _INCLUDE__UTIL__GEOMETRY_H_
|
#define _INCLUDE__UTIL__GEOMETRY_H_
|
||||||
|
|
||||||
#include <util/misc_math.h>
|
#include <util/misc_math.h>
|
||||||
|
#include <util/xml_node.h>
|
||||||
#include <base/stdint.h>
|
#include <base/stdint.h>
|
||||||
#include <base/output.h>
|
#include <base/output.h>
|
||||||
|
|
||||||
@ -68,6 +69,17 @@ class Genode::Point
|
|||||||
Genode::print(out, _x >= 0 ? "+" : "-", abs(_x),
|
Genode::print(out, _x >= 0 ? "+" : "-", abs(_x),
|
||||||
_y >= 0 ? "+" : "-", abs(_y));
|
_y >= 0 ? "+" : "-", abs(_y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct point from XML node attributes
|
||||||
|
*
|
||||||
|
* The XML node is expected to feature the attributes 'xpos' and 'ypos'.
|
||||||
|
*/
|
||||||
|
static Point from_xml(Xml_node const &node)
|
||||||
|
{
|
||||||
|
return Point((CT)node.attribute_value("xpos", (CT)0),
|
||||||
|
(CT)node.attribute_value("ypos", (CT)0));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -104,6 +116,18 @@ class Genode::Area
|
|||||||
bool operator == (Area const &a) const { return a.w() == _w && a.h() == _h; }
|
bool operator == (Area const &a) const { return a.w() == _w && a.h() == _h; }
|
||||||
|
|
||||||
void print(Output &out) const { Genode::print(out, _w, "x", _h); }
|
void print(Output &out) const { Genode::print(out, _w, "x", _h); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct area from XML node attributes
|
||||||
|
*
|
||||||
|
* The XML node is expected to feature the attributes 'width' and
|
||||||
|
* 'height'.
|
||||||
|
*/
|
||||||
|
static Area from_xml(Xml_node const &node)
|
||||||
|
{
|
||||||
|
return Area((DT)node.attribute_value("width", (DT)0),
|
||||||
|
(DT)node.attribute_value("height", (DT)0));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -210,9 +234,21 @@ class Genode::Rect
|
|||||||
*
|
*
|
||||||
* The output has the form 'width' x 'height' +/- 'p1.x' +/- 'p1.y'.
|
* The output has the form 'width' x 'height' +/- 'p1.x' +/- 'p1.y'.
|
||||||
* For example, a rectange of size 15x16 as position (-13, 14) is
|
* For example, a rectange of size 15x16 as position (-13, 14) is
|
||||||
* printed as "15x16-13+14"
|
* printed as "15x16-13+14".
|
||||||
*/
|
*/
|
||||||
void print(Output &out) const { Genode::print(out, area(), p1()); }
|
void print(Output &out) const { Genode::print(out, area(), p1()); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct rectangle from XML node attributes
|
||||||
|
*
|
||||||
|
* The XML node is expected to feature the attributes 'xpos', 'ypos'.
|
||||||
|
* 'width', and 'height'. If an attribute is absent, the corresponding
|
||||||
|
* value is set to 0.
|
||||||
|
*/
|
||||||
|
static Rect from_xml(Xml_node const &node)
|
||||||
|
{
|
||||||
|
return Rect(Point<CT>::from_xml(node), Area<DT>::from_xml(node));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* _INCLUDE__UTIL__GEOMETRY_H_ */
|
#endif /* _INCLUDE__UTIL__GEOMETRY_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user