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<int> spacing_t;
00085
00086 struct slice_t
00087 {
00088 slice_t() : alignment_m(align_default),
00089 suppress_m(false),
00090 balance_m(false),
00091 child_alignment_m(align_forward) {}
00092
00093 alignment_t alignment_m;
00094 bool suppress_m;
00095 bool balance_m;
00096
00097
00098 pair_long_t margin_m;
00099 alignment_t child_alignment_m;
00100 };
00101
00102 extents_t extents_m;
00103 int indent_m;
00104 bool create_m;
00105 spacing_t spacing_m;
00106 boost::array<slice_t, 2> slice_m;
00107
00108
00109 placement_t placement_m;
00110
00111 slice_t& vertical() { return slice_m[extents_slices_t::vertical]; }
00112 slice_t& horizontal() { return slice_m[extents_slices_t::horizontal]; }
00113
00114 const slice_t& vertical() const { return slice_m[extents_slices_t::vertical]; }
00115 const slice_t& horizontal() const { return slice_m[extents_slices_t::horizontal]; }
00116
00117
00118 int& height() { return extents_m.height(); }
00119 int& width() { return extents_m.width(); }
00120
00121 const int& height() const { return extents_m.height(); }
00122 const int& width() const { return extents_m.width(); }
00123 };
00124
00125
00126
00130 struct place_data_t
00131 #if !defined(ADOBE_NO_DOCUMENTATION)
00132 : extents_slices_t
00133 #endif
00134 {
00135 struct slice_t
00136 {
00137 #if !defined(ADOBE_NO_DOCUMENTATION)
00138 slice_t();
00139 #endif
00140
00141 int length_m;
00142 int position_m;
00143 pair_long_t outset_m;
00144 guide_set_t guide_set_m;
00145 };
00146
00147 boost::array<slice_t, 2> slice_m;
00148
00149 slice_t& vertical() { return slice_m[extents_slices_t::vertical]; }
00150 slice_t& horizontal() { return slice_m[extents_slices_t::horizontal]; }
00151
00152 const slice_t& vertical() const { return slice_m[extents_slices_t::vertical]; }
00153 const slice_t& horizontal() const { return slice_m[extents_slices_t::horizontal]; }
00154 };
00155
00156
00160 inline int top(const place_data_t& place_data) { return place_data.vertical().position_m; }
00161
00165 inline int left(const place_data_t& place_data) { return place_data.horizontal().position_m; }
00166
00170 inline int& top(place_data_t& place_data) { return place_data.vertical().position_m; }
00171
00175 inline int& left(place_data_t& place_data) { return place_data.horizontal().position_m; }
00176
00180 inline int height(const place_data_t& place_data) { return place_data.vertical().length_m; }
00181
00185 inline int width(const place_data_t& place_data) { return place_data.horizontal().length_m; }
00186
00190 inline int& height(place_data_t& place_data) { return place_data.vertical().length_m; }
00191
00195 inline int& width(place_data_t& place_data) { return place_data.horizontal().length_m; }
00196
00200 inline int bottom(const place_data_t& place_data) { return top(place_data) + height(place_data); }
00201
00205 inline int right(const place_data_t& place_data) { return left(place_data) + width(place_data); }
00206
00207
00208 }
00209
00210
00211 #endif
|