On 18.10.2016 09:37, Jean-Marc Lasgouttes wrote:
Le 17/10/2016 à 01:28, racoon a écrit :
I just tried to do some fine tuning on the inset offsets (minimalistic
and classic so far).

Hi racoon,

I am glad you are looking at this. I agree that small offsets are better.

Though I have a non-high resolution display. Maybe it does not look as
good on a high-res display. If so, maybe there should be an adjustment
for high-res displays?

I had a go earlier to replace TEXT_TO_INSET_OFFSET with a function that
computes the length according to current zoom and screen resolution. I
abandonned the patch (attached) for now because it created problems for
vertical spacing. You are welcome to borrow parts of it (the margins are
already in).

You would be welcome to have a look at it. Another option would be to
have a length in em, that is relative to the current font. That would
make the inset spacing comparable to normal spacing in the enclosing
space. This is the best solution IMO, but I am not sure that the font
information is available when we need it.

Hi JMarc,

I did have a look and the attached patch is the current result (again only buttons and frames for now). There is also a simple test example. Since I did not touch the vertical spacing, only inner and outer side offsets, that should be fine still. (Though there was something wrong with the vertical spacing to begin with since, for example, the inner text runs over the upper and lower boundaries on higher zoom levels.) For some reason the frames scale a bit different different and maybe nicer than the buttons.

Daniel
From 313b32c0ca5b5619010169097aca6a9a29511276 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Ram=C3=83=3F=3F=3F=3F=3F=C3=83=3F=3F=3F=3F=C3=83?=
 =?UTF-8?q?=3F=3F=3F=C3=83=3F=3F=C3=83=3F=C3=82=C2=B6ller?= <d....@web.de>
Date: Mon, 17 Oct 2016 01:21:01 +0200
Subject: [PATCH] Some inset offset fine tuning: - Make outer inset offset
 independent of inner. - Reduced the outer offset. - Make it scale with the
 zoom.

---
 src/frontends/qt4/GuiFontMetrics.cpp |  4 ++--
 src/frontends/qt4/GuiPainter.cpp     |  6 +++---
 src/insets/Inset.cpp                 | 16 ++++++++++++++++
 src/insets/Inset.h                   |  6 +++++-
 src/insets/InsetText.cpp             | 13 ++++++++-----
 5 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/src/frontends/qt4/GuiFontMetrics.cpp 
b/src/frontends/qt4/GuiFontMetrics.cpp
index eade8cc..2ed3db4 100644
--- a/src/frontends/qt4/GuiFontMetrics.cpp
+++ b/src/frontends/qt4/GuiFontMetrics.cpp
@@ -254,7 +254,7 @@ void GuiFontMetrics::rectText(docstring const & str,
 {
        static int const d = Inset::TEXT_TO_INSET_OFFSET / 2;
 
-       w = width(str) + Inset::TEXT_TO_INSET_OFFSET;
+       w = Inset::textToInsetOffsetInside() + width(str) + 
Inset::textToInsetOffsetInside();
        ascent = metrics_.ascent() + d;
        descent = metrics_.descent() + d;
 }
@@ -265,7 +265,7 @@ void GuiFontMetrics::buttonText(docstring const & str,
        int & w, int & ascent, int & descent) const
 {
        rectText(str, w, ascent, descent);
-       w += Inset::TEXT_TO_INSET_OFFSET;
+       w += Inset::textToInsetOffsetInside() + 2;
 }
 
 
diff --git a/src/frontends/qt4/GuiPainter.cpp b/src/frontends/qt4/GuiPainter.cpp
index e613f3f..10d3dfa 100644
--- a/src/frontends/qt4/GuiPainter.cpp
+++ b/src/frontends/qt4/GuiPainter.cpp
@@ -593,10 +593,10 @@ void GuiPainter::buttonText(int x, int y, docstring const 
& str,
        FontMetrics const & fm = theFontMetrics(font);
        fm.buttonText(str, width, ascent, descent);
 
-       static int const d = Inset::TEXT_TO_INSET_OFFSET / 2;
+       static int const d = Inset::textToInsetOffsetOutside();
 
-       button(x + d, y - ascent, width - Inset::TEXT_TO_INSET_OFFSET, descent 
+ ascent, mouseHover);
-       text(x + Inset::TEXT_TO_INSET_OFFSET, y, str, font);
+       button(x + Inset::textToInsetOffsetOutside(), y - ascent, width - 
2*Inset::textToInsetOffsetOutside(), descent + ascent, mouseHover);
+       text(x + Inset::textToInsetOffsetInside() + 
Inset::textToInsetOffsetOutside() + 1, y, str, font);
 }
 
 
diff --git a/src/insets/Inset.cpp b/src/insets/Inset.cpp
index 6e2e4a0..c9bf77e 100644
--- a/src/insets/Inset.cpp
+++ b/src/insets/Inset.cpp
@@ -27,6 +27,7 @@
 #include "DispatchResult.h"
 #include "FuncRequest.h"
 #include "FuncStatus.h"
+#include "Length.h"
 #include "MetricsInfo.h"
 #include "output_xhtml.h"
 #include "Text.h"
@@ -621,6 +622,21 @@ ColorCode Inset::labelColor() const
 }
 
 
+int Inset::textToInsetOffsetInside()
+{
+       // 2 pixel at 100dpi default resolution is
+       // equivalent to .5 millimeter.
+       return Length(.5, Length::MM).inPixels(0);
+}
+
+int Inset::textToInsetOffsetOutside()
+{
+       // 1 pixel at 100dpi default resolution is
+       // equivalent to .25 millimeter.
+       return Length(.25, Length::MM).inPixels(0);
+}
+
+
 void Inset::setPosCache(PainterInfo const & pi, int x, int y) const
 {
        //LYXERR("Inset: set position cache to " << x << " " << y);
diff --git a/src/insets/Inset.h b/src/insets/Inset.h
index 48ad7be..f131d59 100644
--- a/src/insets/Inset.h
+++ b/src/insets/Inset.h
@@ -574,7 +574,11 @@ public:
        ///
        virtual ColorCode labelColor() const;
        //
-       enum { TEXT_TO_INSET_OFFSET = 4 };
+       enum {
+               TEXT_TO_INSET_OFFSET = 4
+       };
+       static int textToInsetOffsetInside();
+       static int textToInsetOffsetOutside();
 
 protected:
        /// Constructors
diff --git a/src/insets/InsetText.cpp b/src/insets/InsetText.cpp
index df4f6e2..9728b8e 100644
--- a/src/insets/InsetText.cpp
+++ b/src/insets/InsetText.cpp
@@ -208,7 +208,8 @@ void InsetText::metrics(MetricsInfo & mi, Dimension & dim) 
const
        mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET;
        dim.asc += TEXT_TO_INSET_OFFSET;
        dim.des += TEXT_TO_INSET_OFFSET;
-       dim.wid += 2 * TEXT_TO_INSET_OFFSET;
+       // cursor position after inset
+       dim.wid += 2 * (textToInsetOffsetInside() + textToInsetOffsetOutside() 
+ 1);
 }
 
 
@@ -216,10 +217,10 @@ void InsetText::draw(PainterInfo & pi, int x, int y) const
 {
        TextMetrics & tm = pi.base.bv->textMetrics(&text_);
 
-       int const w = tm.width() + TEXT_TO_INSET_OFFSET;
+       int const w = tm.width() + 2 * textToInsetOffsetInside() + 1;
        int const yframe = y - TEXT_TO_INSET_OFFSET - tm.ascent();
        int const h = tm.height() + 2 * TEXT_TO_INSET_OFFSET;
-       int const xframe = x + TEXT_TO_INSET_OFFSET / 2;
+       int const xframe = x + textToInsetOffsetOutside();
        bool change_drawn = false;
        if (drawFrame_ || pi.full_repaint) {
                if (pi.full_repaint)
@@ -251,7 +252,8 @@ void InsetText::draw(PainterInfo & pi, int x, int y) const
                                            pi.backgroundColor(this, false));
                // The change tracking cue must not be inherited
                Changer dummy2 = make_change(pi.change_, Change());
-               tm.draw(pi, x + TEXT_TO_INSET_OFFSET, y);
+               // text position within inset
+               tm.draw(pi, x + textToInsetOffsetInside() + 
textToInsetOffsetOutside() + 1, y);
        }
        if (canPaintChange(*pi.base.bv) && (!change_drawn || 
pi.change_.deleted()))
                // Do not draw the change tracking cue if already done by 
RowPainter and
@@ -680,7 +682,8 @@ void InsetText::getArgs(otexstream & os, OutputParams const 
& runparams_in,
 void InsetText::cursorPos(BufferView const & bv,
                CursorSlice const & sl, bool boundary, int & x, int & y) const
 {
-       x = bv.textMetrics(&text_).cursorX(sl, boundary) + TEXT_TO_INSET_OFFSET;
+       // cursor position within inset
+       x = bv.textMetrics(&text_).cursorX(sl, boundary) + 
textToInsetOffsetInside() + textToInsetOffsetOutside() + 1;
        y = bv.textMetrics(&text_).cursorY(sl, boundary);
 }
 
-- 
2.9.0.windows.1

Attachment: offsets.lyx
Description: application/lyx

Reply via email to