stlab.adobe.com Adobe Systems Incorporated

layout_attributes.hpp

Go to the documentation of this file.
00001 /*
00002     Copyright 2006-2007 Adobe Systems Incorporated
00003     Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt
00004     or a copy at http://stlab.adobe.com/licenses.html)
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, // Used as index for guide array.
00032         align_reverse = 1, // Used as index for guide array.
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; /* REVISIT FIXED VALUE container_spacing */
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         // containers only
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     // containers only
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

Copyright © 2006-2007 Adobe Systems Incorporated.

Use of this website signifies your agreement to the Terms of Use and Online Privacy Policy.

Search powered by Google