Jean-Marc Lasgouttes wrote:
Pavel Sanda <[EMAIL PROTECTED]> writes:

hello,

i'm trying to derive new kind of inset, which would be similar to
InsetBox, but i need it to be fixed-width (i mean really fixed, not
that after reaching .width the inset is magnified to wider text).

Isn't it already supposed to work like that?

This is now working like that.

Abdel.

Author: younes
Date: Tue Sep 18 10:52:38 2007
New Revision: 20334

URL: http://www.lyx.org/trac/changeset/20334
Log:
Fix InsetBox drawing and remove remnant of the wide() hack.

Modified:
    lyx-devel/trunk/src/TextMetrics.cpp
    lyx-devel/trunk/src/TextMetrics.h
    lyx-devel/trunk/src/insets/InsetBox.cpp
    lyx-devel/trunk/src/insets/InsetCollapsable.cpp
    lyx-devel/trunk/src/insets/InsetText.cpp

Modified: lyx-devel/trunk/src/TextMetrics.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/TextMetrics.cpp?rev=20334
==============================================================================
--- lyx-devel/trunk/src/TextMetrics.cpp (original)
+++ lyx-devel/trunk/src/TextMetrics.cpp Tue Sep 18 10:52:38 2007
@@ -182,7 +182,7 @@
 }


-bool TextMetrics::metrics(MetricsInfo & mi, Dimension & dim)
+bool TextMetrics::metrics(MetricsInfo & mi, Dimension & dim, int min_width)
 {
        BOOST_ASSERT(mi.base.textwidth);
        max_width_ = mi.base.textwidth;
@@ -190,6 +190,7 @@
        Dimension const old_dim = dim_;
        // reset dimension.
        dim_ = Dimension();
+       dim_.wid = min_width;
        pit_type const npar = text_->paragraphs().size();
        if (npar > 1)
                // If there is more than one row, expand the text to

Modified: lyx-devel/trunk/src/TextMetrics.h
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/TextMetrics.h?rev=20334
==============================================================================
--- lyx-devel/trunk/src/TextMetrics.h (original)
+++ lyx-devel/trunk/src/TextMetrics.h Tue Sep 18 10:52:38 2007
@@ -64,7 +64,7 @@


        /// compute text metrics.
-       bool metrics(MetricsInfo & mi, Dimension & dim);
+       bool metrics(MetricsInfo & mi, Dimension & dim, int min_width = 0);

        ///
        void newParMetricsDown();

Modified: lyx-devel/trunk/src/insets/InsetBox.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetBox.cpp?rev=20334
==============================================================================
--- lyx-devel/trunk/src/insets/InsetBox.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetBox.cpp Tue Sep 18 10:52:38 2007
@@ -174,13 +174,13 @@

 bool InsetBox::metrics(MetricsInfo & m, Dimension & dim) const
 {
-       MetricsInfo mi = m;
-       // first round in order to know the minimum size.
-       InsetCollapsable::metrics(mi, dim);
+       // back up textwidth.
+       int textwidth_backup = m.base.textwidth;
        if (hasFixedWidth())
-               mi.base.textwidth =     std::max(dim.width(),
-                       params_.width.inPixels(m.base.textwidth));
-       InsetCollapsable::metrics(mi, dim);
+               m.base.textwidth = params_.width.inPixels(m.base.textwidth);
+       InsetCollapsable::metrics(m, dim);
+       // retore textwidth.
+       m.base.textwidth = textwidth_backup;
        bool const changed = dim_ != dim;
        dim_ = dim;
        return changed;

Modified: lyx-devel/trunk/src/insets/InsetCollapsable.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetCollapsable.cpp?rev=20334
==============================================================================
--- lyx-devel/trunk/src/insets/InsetCollapsable.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetCollapsable.cpp Tue Sep 18 10:52:38 2007
@@ -216,8 +216,6 @@
                        } else {
                                dim.des += textdim.height() + 
TEXT_TO_BOTTOM_OFFSET;
                                dim.wid = max(dim.wid, textdim.wid);
-                               if (hasFixedWidth())
-                                       dim.wid = max(dim.wid, 
mi.base.textwidth);
                        }
                }
                break;

Modified: lyx-devel/trunk/src/insets/InsetText.cpp
URL: http://www.lyx.org/trac/file/lyx-devel/trunk/src/insets/InsetText.cpp?rev=20334
==============================================================================
--- lyx-devel/trunk/src/insets/InsetText.cpp (original)
+++ lyx-devel/trunk/src/insets/InsetText.cpp Tue Sep 18 10:52:38 2007
@@ -175,7 +175,10 @@
        // Hand font through to contained lyxtext:
        tm.font_ = mi.base.font;
        mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET;
-       tm.metrics(mi, dim);
+       if (hasFixedWidth())
+               tm.metrics(mi, dim, mi.base.textwidth);
+       else
+               tm.metrics(mi, dim);
        mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET;
        dim.asc += TEXT_TO_INSET_OFFSET;
        dim.des += TEXT_TO_INSET_OFFSET;
@@ -191,8 +194,7 @@
        TextMetrics & tm = pi.base.bv->textMetrics(&text_);

        if (drawFrame_ || pi.full_repaint) {
-               int const w = hasFixedWidth() ?
-                       tm.maxWidth() : tm.width() + 2 * TEXT_TO_INSET_OFFSET;
+               int const w = tm.width() + 2 * TEXT_TO_INSET_OFFSET;
                int const yframe = y - TEXT_TO_INSET_OFFSET - tm.ascent();
                int const h = tm.height() + 2 * TEXT_TO_INSET_OFFSET;
                if (pi.full_repaint)



Reply via email to