38#ifndef DRAIN_ALIGN_SVG
39#define DRAIN_ALIGN_SVG
43#include "drain/Enum.h"
137 template <
typename OBJ,
typename A,
typename V>
139 void setAlign(
const OBJ & owner,
const A & axis,
const V &value){
155 void setAlign(
const AlignBase::Axis & axis,
const AlignBase::Pos & pos, MutualAlign::Topol topol=MutualAlign::Topol::INSIDE){
156 if (pos != AlignBase::FILL){
172 template <
typename ...T,
typename AX, AlignBase::Axis A>
174 if (align.pos == AlignBase::FILL){
176 setAlign(AlignSVG::OBJECT, align.axis, align.pos);
179 setAlign(align.axis, align.pos, args...);
186 template <
typename AX1, AlignBase::Axis A1,
typename AX2, AlignBase::Axis A2>
188 setAlign(align1.axis, align1.pos, MutualAlign::Topol::INSIDE);
189 setAlign(align2.axis, align2.pos, MutualAlign::Topol::INSIDE);
195 template <
typename AX1, AlignBase::Axis A1>
197 setAlign(align1.axis, align1.pos, align1.topol);
203 template <
typename AX, AlignBase::Axis A>
213 template <
typename T>
214 void setAlign(
const std::string & align,
const T & topol){
229 void setAlign(
const std::string & align);
255 template <
typename P,
typename A>
267 template <
typename P,
typename A>
276 const std::string & getAlignStr()
const {
283 template <typename ...TT>
284 bool isAlignSet(const TT... args) const {
285 bitvect_t v = combineAlign(args...);
286 return (alignment & v) == v;
294 typedef int bitvect_t;
298 bitvect_t alignment = 0;
300 std::string alignStr;
303 template <
typename P,
typename A,
typename V>
304 void modifyAlign(
const P & owner,
const A & axis,
const V &value){
309 void updateAlignStr();
317 typedef std::vector<AlignBase::Pos> align_vect_t;
318 typedef std::vector<align_vect_t > align_conf_t;
320 align_conf_t alignments = align_conf_t(2, align_vect_t(2, AlignBase::Pos::UNDEFINED_POS));
330DRAIN_ENUM_DICT(image::AlignSVG::Owner);
332DRAIN_ENUM_DICT(image::Alignment<>);
334DRAIN_ENUM_DICT(image::AlignSVG::HorzAlign);
335DRAIN_ENUM_DICT(image::AlignSVG::VertAlign);
353DRAIN_ENUM_OSTREAM(AlignSVG::Owner)
362void AlignSVG::HorzAlign::reset(){
364 pos = AlignBase::Pos::UNDEFINED_POS;
369void AlignSVG::VertAlign::reset(){
371 pos = AlignBase::Pos::UNDEFINED_POS;
382const drain::Enum<AlignSVG::VertAlign>::dict_t drain::Enum<AlignSVG::VertAlign>::dict;
386const drain::Enum<Alignment<> >::dict_t drain::Enum<Alignment<> >::dict;
392template <
typename OBJ,
typename A>
396 return alignments[p][a];
399template <
typename OBJ,
typename A>
403 return alignments[p][a];
410DRAIN_TYPENAME(image::AlignSVG::HorzAlign);
411DRAIN_TYPENAME(image::AlignSVG::VertAlign);
std::ostream & operator<<(std::ostream &ostr, const PlainData< DT > &d)
Definition Data.h:631
A container for a static dictionary of enumeration values.
Definition Enum.h:51
static E getValue(const E &value, bool lenient=true)
Convenience for object.set(...) like commands.
Definition Enum.h:96
static Axis flip(Axis axis)
supporting simultaneous HORZ|VERT
Definition Alignment.h:83
Pos
Reference position at Axis (HORZ or VERT)
Definition Alignment.h:55
User-friendly programming interface for alignment considering two elements.
Definition AlignSVG.h:59
static const HorzAlign LEFT
Alias for {HORZ:MIN}.
Definition AlignSVG.h:69
const AlignBase::Pos & getAlignPos(const P &pos, const A &axis) const
Return alignment setting of an object along horizontal or vertical axis .
static const VertAlign MIDDLE
Alias for {VERT:MID}.
Definition AlignSVG.h:96
void setAlign(const std::string &align, const T &topol)
High-level, user friendlier interface for setting the alignments for both OBJECT itself and its ANCHO...
Definition AlignSVG.h:214
void setAlign(const OBJ &owner, const A &axis, const V &value)
Low-level, "atomic" setter of alignment for OBJECT itself or its ANCHOR object.
Definition AlignSVG.h:139
AlignClass
Moved from Layput.
Definition AlignSVG.h:117
void setAlign(const AlignBase::Axis &axis, const AlignBase::Pos &pos, MutualAlign::Topol topol=MutualAlign::Topol::INSIDE)
Set a single alignment setting. "Intermediate-level": axis and pos are given separately.
Definition AlignSVG.h:155
void confToStream(std::ostream &ostr) const
Definition AlignSVG.cpp:163
bool isAligned() const
Returns true, if any setting is set...
Definition AlignSVG.cpp:235
static const HorzAlign RIGHT
Alias for {HORZ:MAX}.
Definition AlignSVG.h:77
static const HorzAlign HORZ_FILL
Alias for {HORZ:FILL}.
Definition AlignSVG.h:81
void setAlign(const Alignment< AX, A > &align1, const Alignment< AX, A > &align2)
Compiler trap: unimplemented for two of same kind: either HorzAlign or VertAlign twice.
void modifyAlign(const P &owner, const A &axis, const V &value)
Change alignment configuration without updating the alignStr.
Definition AlignSVG.h:304
static const VertAlign VERT_FILL
Alias for {VERT:FILL}.
Definition AlignSVG.h:104
static const VertAlign BOTTOM
Alias for {VERT:MAX}.
Definition AlignSVG.h:100
void setAlign(const Alignment< AX, A > &align, const T... args)
NEW High-level, user friendlier interface for setting INSIDE the alignments for both OBJECT itself an...
Definition AlignSVG.h:173
static const HorzAlign CENTER
Alias for {HORZ:MID}.
Definition AlignSVG.h:73
AlignBase::Pos & getAlignPos(const P &pos, const A &axis)
Return alignment setting of an object along horizontal or vertical axis .
static const VertAlign TOP
Alias for {VERT:MIN}.
Definition AlignSVG.h:92
Container for Axis and Pos.
Definition Alignment.h:126
"Alternative" partial alignment configuration for single object. Partial means that either OBJECT its...
Definition Alignment.h:245