layout_attributes.hppGo to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ADOBE_LAYOUT_ATTRIBUTES_HPP
00010 #define ADOBE_LAYOUT_ATTRIBUTES_HPP
00011
00012 #include <adobe/config.hpp>
00013 #include <adobe/extents.hpp>
00014
00021 namespace adobe {
00022
00023
00024
00028 struct layout_attributes_alignment_t {
00029 enum alignment_t
00030 {
00031 align_forward = 0,
00032 align_reverse = 1,
00033 align_center,
00034 align_proportional,
00035 align_forward_fill,
00036 align_reverse_fill,
00037
00038 align_default,
00039
00040 align_fill = align_forward_fill,
00041 align_left_fill = align_forward_fill,
00042 align_right_fill = align_reverse_fill,
00043 align_top_fill = align_forward_fill,
00044 align_bottom_fill = align_reverse_fill,
00045 align_left = align_forward,
00046 align_right = align_reverse,
00047 align_top = align_forward,
00048 align_bottom = align_reverse
00049 };
00050 };
00051
00055 struct layout_attributes_placement_t {
00056 enum placement_t
00057 {
00058 place_leaf,
00059 place_column,
00060 place_row,
00061 place_overlay
00062 };
00063 };
00064
00068 struct layout_attributes_t
00069 #if !defined(ADOBE_NO_DOCUMENTATION)
00070 : public extents_slices_t,
00071 public layout_attributes_alignment_t,
00072 public layout_attributes_placement_t
00073 #endif
00074 {
00075 layout_attributes_t() :
00076 indent_m(0),
00077 create_m(true),
00078 spacing_m(2, 0),
00079 placement_m(place_leaf)
00080 {
00081 spacing_m[1] = 10;
00082 }
00083
00084 typedef std::vector<long> spacing_t;
00085 struct slice_t
00086 {
00087 slice_t() : alignment_m(align_default),
00088 suppress_m(false),
00089 balance_m(false),
00090 child_alignment_m(align_forward) {}
00091
00092 alignment_t alignment_m;
00093 bool suppress_m;
00094 bool balance_m;
00095
00096
00097 pair_long_t margin_m;
00098 alignment_t child_alignment_m;
00099 };
00100
00101 extents_t extents_m;
00102 long indent_m;
00103 bool create_m;
00104 spacing_t spacing_m;
00105 boost::array<slice_t, 2> slice_m;
00106
00107
00108 placement_t placement_m;
00109
00110 slice_t& vertical() { return slice_m[extents_slices_t::vertical]; }
00111 slice_t& horizontal() { return slice_m[extents_slices_t::horizontal]; }
00112
00113 const slice_t& vertical() const { return slice_m[extents_slices_t::vertical]; }
00114 const slice_t& horizontal() const { return slice_m[extents_slices_t::horizontal]; }
00115
00116
00117 long& height() { return extents_m.height(); }
00118 long& width() { return extents_m.width(); }
00119
00120 const long& height() const { return extents_m.height(); }
00121 const long& width() const { return extents_m.width(); }
00122 };
00123
00124
00125
00129 struct place_data_t
00130 #if !defined(ADOBE_NO_DOCUMENTATION)
00131 : extents_slices_t
00132 #endif
00133 {
00134 struct slice_t
00135 {
00136 #if !defined(ADOBE_NO_DOCUMENTATION)
00137 slice_t();
00138 #endif
00139
00140 long length_m;
00141 long position_m;
00142 pair_long_t outset_m;
00143 guide_set_t guide_set_m;
00144 };
00145
00146 boost::array<slice_t, 2> slice_m;
00147
00148 slice_t& vertical() { return slice_m[extents_slices_t::vertical]; }
00149 slice_t& horizontal() { return slice_m[extents_slices_t::horizontal]; }
00150
00151 const slice_t& vertical() const { return slice_m[extents_slices_t::vertical]; }
00152 const slice_t& horizontal() const { return slice_m[extents_slices_t::horizontal]; }
00153 };
00154
00155
00159 inline long top(const place_data_t& place_data) { return place_data.vertical().position_m; }
00160
00164 inline long left(const place_data_t& place_data) { return place_data.horizontal().position_m; }
00165
00169 inline long& top(place_data_t& place_data) { return place_data.vertical().position_m; }
00170
00174 inline long& left(place_data_t& place_data) { return place_data.horizontal().position_m; }
00175
00179 inline long height(const place_data_t& place_data) { return place_data.vertical().length_m; }
00180
00184 inline long width(const place_data_t& place_data) { return place_data.horizontal().length_m; }
00185
00189 inline long& height(place_data_t& place_data) { return place_data.vertical().length_m; }
00190
00194 inline long& width(place_data_t& place_data) { return place_data.horizontal().length_m; }
00195
00199 inline long bottom(const place_data_t& place_data) { return top(place_data) + height(place_data); }
00200
00204 inline long right(const place_data_t& place_data) { return left(place_data) + width(place_data); }
00205
00206
00207 }
00208
00209
00210 #endif
|