commit 56e012be83fd4fec1e21d750e961ff936cc8c889
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Mon Feb 19 18:24:29 2018 +0100

    Improve metrics of equations. More work remains to be done.
    
    Use proper value for above/below skip (12pt) instead of the hardcoded
    12 pixels.
    
    Add forgotten skip before display math preview.
    
    Make "too small preview" size dpi-dependent.
    Make gap in front of equation (what is it good for, BTW?) dpi-dependent.
---
 src/mathed/InsetMathHull.cpp |   47 +++++++++++++++++++++++++----------------
 src/mathed/InsetMathHull.h   |    5 ----
 2 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp
index 287c169..8f40d2c 100644
--- a/src/mathed/InsetMathHull.cpp
+++ b/src/mathed/InsetMathHull.cpp
@@ -525,22 +525,37 @@ bool InsetMathHull::previewState(const BufferView *const 
bv) const
 
 
 namespace {
-static const int ERROR_FRAME_WIDTH = 2;
+const int ERROR_FRAME_WIDTH = 2;
+
+bool previewTooSmall(MetricsBase const & mb, Dimension const & dim)
+{
+       // Value was hardcoded to 10 pixels
+       int const minval = mb.bv->zoomedPixels(10);
+       return dim.width() <= minval && dim.height() <= minval;
+}
 }
 
+
 void InsetMathHull::metrics(MetricsInfo & mi, Dimension & dim) const
 {
+       // true value in LaTeX is 12pt plus 3pt minus 9pt
+       // FIXME: even better would be to handle the short skip case.
+       int const display_margin = display() ? mi.base.inPixels(Length(12, 
Length::PT)) : 0;
+
        if (previewState(mi.base.bv)) {
                preview_->metrics(mi, dim);
-               if (previewTooSmall(dim)) {
+               if (previewTooSmall(mi.base, dim)) {
                        // preview image is too small
                        dim.wid += 2 * ERROR_FRAME_WIDTH;
                        dim.asc += 2 * ERROR_FRAME_WIDTH;
                } else {
-                       // insert a one pixel gap in front of the formula
-                       dim.wid += 1;
-                       if (display())
-                               dim.des += displayMargin();
+                       // insert a gap in front of the formula
+                       // value was hardcoded to 1 pixel
+                       dim.wid += mi.base.bv->zoomedPixels(1) ;
+                       if (display()) {
+                               dim.asc += display_margin;
+                               dim.des += display_margin;
+                       }
                }
                return;
        }
@@ -553,8 +568,8 @@ void InsetMathHull::metrics(MetricsInfo & mi, Dimension & 
dim) const
        InsetMathGrid::metrics(mi, dim);
 
        if (display()) {
-               dim.asc += displayMargin();
-               dim.des += displayMargin();
+               dim.asc += display_margin;
+               dim.des += display_margin;
        }
 
        if (numberedType()) {
@@ -580,18 +595,12 @@ void InsetMathHull::metrics(MetricsInfo & mi, Dimension & 
dim) const
 }
 
 
-bool InsetMathHull::previewTooSmall(Dimension const & dim) const
-{
-       return dim.width() <= 10 && dim.height() <= 10;
-}
-
-
 ColorCode InsetMathHull::backgroundColor(PainterInfo const & pi) const
 {
        BufferView const * const bv = pi.base.bv;
        if (previewState(bv)) {
                Dimension const dim = dimension(*pi.base.bv);
-               if (previewTooSmall(dim))
+               if (previewTooSmall(pi.base, dim))
                        return Color_error;
                return graphics::PreviewLoader::backgroundColor();
        }
@@ -621,7 +630,7 @@ void InsetMathHull::drawMarkers(PainterInfo & pi, int x, 
int y) const
 void InsetMathHull::drawBackground(PainterInfo & pi, int x, int y) const
 {
        Dimension const dim = dimension(*pi.base.bv);
-       if (previewTooSmall(dim)) {
+       if (previewTooSmall(pi.base, dim)) {
                pi.pain.fillRectangle(x, y - 2 * ERROR_FRAME_WIDTH,
                    dim.wid, dim.asc + dim.des, backgroundColor(pi));
                return;
@@ -645,12 +654,14 @@ void InsetMathHull::draw(PainterInfo & pi, int x, int y) 
const
                // already.
                Changer dummy = !canPaintChange(*bv) ? make_change(pi.change_, 
Change())
                        : Changer();
-               if (previewTooSmall(dim)) {
+               if (previewTooSmall(pi.base, dim)) {
                        // we have an extra frame
                        preview_->draw(pi, x + ERROR_FRAME_WIDTH, y);
                } else {
                        // one pixel gap in front
-                       preview_->draw(pi, x + 1, y);
+                       // value was hardcoded to 1 pixel
+                       int const gap = pi.base.bv->zoomedPixels(1) ;
+                       preview_->draw(pi, x + gap, y);
                }
                return;
        }
diff --git a/src/mathed/InsetMathHull.h b/src/mathed/InsetMathHull.h
index 2863b72..89c0504 100644
--- a/src/mathed/InsetMathHull.h
+++ b/src/mathed/InsetMathHull.h
@@ -175,9 +175,6 @@ public:
        ///
        void initUnicodeMath() const;
 
-       ///
-       static int displayMargin() { return 12; }
-
        /// Force inset into LTR environment if surroundings are RTL
        virtual bool forceLTR() const { return true; }
        ///
@@ -305,8 +302,6 @@ protected:
        void handleFont2(Cursor & cur, docstring const & arg);
        ///
        bool previewState(BufferView const * const bv) const;
-       ///
-       bool previewTooSmall(Dimension const & dim) const;
 };
 
 

Reply via email to