#ifndef MSP_GLTK_GEOMETRY_H_
#define MSP_GLTK_GEOMETRY_H_
-#include <msp/datafile/loader.h>
+#include <msp/datafile/objectloader.h>
+#include "mspgltk_api.h"
namespace Msp {
namespace GLtk {
/**
Specifies the position and size of a widget or graphic.
*/
-struct Geometry
+struct MSPGLTK_API Geometry
{
- int x, y;
- unsigned w, h;
+ int x = 0;
+ int y = 0;
+ unsigned w = 1;
+ unsigned h = 1;
- Geometry(): x(0), y(0), w(1), h(1) { }
+ Geometry() = default;
Geometry(int x_, int y_, unsigned w_, unsigned h_): x(x_), y(y_), w(w_), h(h_) { }
+
bool is_inside(int, int) const;
+ bool is_inside_relative(int, int) const;
};
+
/**
Specifies margins on the sides of an element.
*/
-struct Sides
+struct MSPGLTK_API Sides
{
- class Loader: public DataFile::Loader
+ class Loader: public DataFile::ObjectLoader<Sides>
{
public:
Loader(Sides &);
- Sides &get_object() { return sides; }
private:
- Sides &sides;
+ void horizontal(unsigned);
+ void vertical(unsigned);
};
- unsigned top;
- unsigned right;
- unsigned bottom;
- unsigned left;
+ unsigned top = 0;
+ unsigned right = 0;
+ unsigned bottom = 0;
+ unsigned left = 0;
+
+ Sides() = default;
+ Sides(unsigned);
+ Sides(unsigned, unsigned);
+ Sides(unsigned, unsigned, unsigned);
+ Sides(unsigned, unsigned, unsigned, unsigned);
+};
+
+
+/**
+Performs alignment of nested geometries, such as widgets and their parts.
+*/
+struct MSPGLTK_API Alignment
+{
+ float x = 0.0f;
+ float y = 0.0f;
+ float w = 1.0f;
+ float h = 1.0f;
- Sides();
+ void apply(Geometry &, const Geometry &) const;
+ void apply(Geometry &, const Geometry &, const Sides &) const;
};
} // namespace GLtk