X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fpreviewholder.cpp;h=1717e5053c0cc2b5f1d5fe2e6254a7abc24b7433;hb=8c1f342e17b69f0cc6fa0b13638b6df0c2c67256;hp=c2bc133270f5e5e20664f4ac096a096a5a34eb62;hpb=58b0fdbb47df7c2b1bae121cca7add1ca916f952;p=inkscape.git diff --git a/src/ui/previewholder.cpp b/src/ui/previewholder.cpp index c2bc13327..1717e5053 100644 --- a/src/ui/previewholder.cpp +++ b/src/ui/previewholder.cpp @@ -35,8 +35,9 @@ PreviewHolder::PreviewHolder() : _prefCols(0), _updatesFrozen(false), _anchor(Gtk::ANCHOR_CENTER), - _baseSize(Gtk::ICON_SIZE_MENU), - _view(VIEW_TYPE_LIST) + _baseSize(Inkscape::ICON_SIZE_MENU), + _view(VIEW_TYPE_LIST), + _wrap(false) { _scroller = manage(new Gtk::ScrolledWindow()); _insides = manage(new Gtk::Table( 1, 2 )); @@ -123,7 +124,7 @@ void PreviewHolder::thawUpdates() rebuildUI(); } -void PreviewHolder::setStyle(Gtk::BuiltinIconSize size, ViewType view) +void PreviewHolder::setStyle( Inkscape::IconSize size, ViewType view ) { if ( size != _baseSize || view != _view ) { _baseSize = size; @@ -142,7 +143,7 @@ void PreviewHolder::setOrientation( Gtk::AnchorType how ) case Gtk::ANCHOR_NORTH: case Gtk::ANCHOR_SOUTH: { - dynamic_cast(_scroller)->set_policy( Gtk::POLICY_ALWAYS, Gtk::POLICY_AUTOMATIC ); + dynamic_cast(_scroller)->set_policy( Gtk::POLICY_AUTOMATIC, _wrap ? Gtk::POLICY_AUTOMATIC : Gtk::POLICY_NEVER ); } break; @@ -162,6 +163,28 @@ void PreviewHolder::setOrientation( Gtk::AnchorType how ) } } +void PreviewHolder::setWrap( bool b ) +{ + if ( b != _wrap ) { + _wrap = b; + switch ( _anchor ) + { + case Gtk::ANCHOR_NORTH: + case Gtk::ANCHOR_SOUTH: + { + dynamic_cast(_scroller)->set_policy( Gtk::POLICY_AUTOMATIC, _wrap ? Gtk::POLICY_AUTOMATIC : Gtk::POLICY_NEVER ); + } + break; + default: + { + (void)0; + // do nothing; + } + } + rebuildUI(); + } +} + void PreviewHolder::setColumnPref( int cols ) { _prefCols = cols; @@ -189,7 +212,8 @@ void PreviewHolder::calcGridSize( const Gtk::Widget* thing, int itemCount, int& height = 1; if ( _anchor == Gtk::ANCHOR_SOUTH || _anchor == Gtk::ANCHOR_NORTH ) { - Gtk::Requisition req = _scroller->size_request(); + Gtk::Requisition req; + _scroller->size_request(req); int currW = _scroller->get_width(); if ( currW > req.width ) { req.width = currW; @@ -197,22 +221,24 @@ void PreviewHolder::calcGridSize( const Gtk::Widget* thing, int itemCount, int& Gtk::HScrollbar* hs = dynamic_cast(_scroller)->get_hscrollbar(); if ( hs ) { - Gtk::Requisition scrollReq = hs->size_request(); + Gtk::Requisition scrollReq; + hs->size_request(scrollReq); // the +8 is a temporary hack req.height -= scrollReq.height + 8; } - Gtk::Requisition req2 = thing->size_request(); + Gtk::Requisition req2; + const_cast(thing)->size_request(req2); - int h2 = req.height / req2.height; - int w2 = req.width / req2.width; + int h2 = ((req2.height > 0) && (req.height > req2.height)) ? (req.height / req2.height) : 1; + int w2 = ((req2.width > 0) && (req.width > req2.width)) ? (req.width / req2.width) : 1; width = (itemCount + (h2 - 1)) / h2; if ( width < w2 ) { width = w2; } } else { - width = _baseSize == Gtk::ICON_SIZE_MENU ? COLUMNS_FOR_SMALL : COLUMNS_FOR_LARGE; + width = (_baseSize == Inkscape::ICON_SIZE_MENU || _baseSize == Inkscape::ICON_SIZE_DECORATION) ? COLUMNS_FOR_SMALL : COLUMNS_FOR_LARGE; if ( _prefCols > 0 ) { width = _prefCols; }