From: Alfredo Braunstein Date: Wed, 10 Mar 2004 08:50:46 +0000 (+0000) Subject: inlined open submode, in the hope someone will actually test it. Easy take it back... X-Git-Tag: 1.6.10~15469 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=60cbc89f032e9caaadc9a95878554e194ff9bed8;p=features.git inlined open submode, in the hope someone will actually test it. Easy take it back if there are problems. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8483 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/insets/ChangeLog b/src/insets/ChangeLog index 0e41f9c9e7..d5bf35af27 100644 --- a/src/insets/ChangeLog +++ b/src/insets/ChangeLog @@ -1,3 +1,8 @@ +2004-03-09 Alfredo Braunstein + + * insetcollapsable.[Ch] (metrics, draw): implemented an inlined-Open + submode. + 2004-03-07 Jürgen Spitzmüller * insetcite.[Ch]: support jurabib. diff --git a/src/insets/insetcollapsable.C b/src/insets/insetcollapsable.C index 8174217e5d..9ae7b1541a 100644 --- a/src/insets/insetcollapsable.C +++ b/src/insets/insetcollapsable.C @@ -41,7 +41,7 @@ using std::ostream; InsetCollapsable::InsetCollapsable(BufferParams const & bp, CollapseStatus status) - : inset(bp), label("Label"), status_(status) + : inset(bp), label("Label"), status_(status), openinlined_(false) { inset.setOwner(this); inset.setAutoBreakRows(true); @@ -127,14 +127,6 @@ void InsetCollapsable::dimension_collapsed(Dimension & dim) const } -int InsetCollapsable::height_collapsed() const -{ - Dimension dim; - font_metrics::buttonText(label, labelfont_, dim.wid, dim.asc, dim.des); - return dim.asc + dim.des; -} - - void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const { if (status_ == Inlined) { @@ -144,8 +136,16 @@ void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const if (status_ == Open) { Dimension insetdim; inset.metrics(mi, insetdim); - dim.des += insetdim.height() + TEXT_TO_BOTTOM_OFFSET; - dim.wid = max(dim.wid, insetdim.wid); + openinlined_ = (insetdim.wid + dim.wid <= mi.base.textwidth); + if (openinlined_) { + dim.wid += insetdim.wid; + dim.des = max(dim.des, insetdim.des); + dim.asc = max(dim.asc, insetdim.asc); + } else { + dim.des += insetdim.height() + + TEXT_TO_BOTTOM_OFFSET; + dim.wid = max(dim.wid, insetdim.wid); + } } } dim_ = dim; @@ -177,7 +177,11 @@ void InsetCollapsable::draw(PainterInfo & pi, int x, int y) const if (status_ == Open) { if (!owner()) x += scroll(); - inset.draw(pi, x, y - aa + dimc.height() + inset.ascent()); + + if (openinlined_) + inset.draw(pi, x + dimc.width(), y - aa + inset.ascent()); + else + inset.draw(pi, x, y - aa + dimc.height() + inset.ascent()); } } } @@ -324,14 +328,14 @@ void InsetCollapsable::priv_dispatch(LCursor & cur, FuncRequest const & cmd) case LFUN_MOUSE_PRESS: if (status_ == Inlined) inset.dispatch(cur, cmd); - else if (status_ == Open && cmd.y > button_dim.y2) + else if (status_ == Open && !hitButton(cmd)) inset.dispatch(cur, cmd); break; case LFUN_MOUSE_MOTION: if (status_ == Inlined) inset.dispatch(cur, cmd); - else if (status_ == Open && cmd.y > button_dim.y2) + else if (status_ == Open && !hitButton(cmd)) inset.dispatch(cur, cmd); break; diff --git a/src/insets/insetcollapsable.h b/src/insets/insetcollapsable.h index e2911cbc27..2ed7643435 100644 --- a/src/insets/insetcollapsable.h +++ b/src/insets/insetcollapsable.h @@ -127,8 +127,6 @@ protected: /// void dimension_collapsed(Dimension &) const; /// - int height_collapsed() const; - /// void draw_collapsed(PainterInfo & pi, int x, int y) const; /// int getMaxTextWidth(Painter & pain, UpdatableInset const *) const; @@ -160,6 +158,8 @@ protected: private: /// mutable CollapseStatus status_; + /// a substatus of the Open status, determined automatically in metrics + mutable bool openinlined_; }; #endif