commit e194c9ce279cc226962ab8f1ccb253893efd6d3c
Author: Jean-Marc Lasgouttes <[email protected]>
Date: Wed Aug 17 11:21:38 2016 +0200
A more radical approach to inset background painting
Now by default all insets paint their own background when needed. This
means that 63cf3297 and part of 9940acc5 can be reverted.
To avoid extra painting, background drawing is disabled for
InsetCommand and InsetCollapsable. These insets draw background as
part of their normal drawing activity.
This will avoid drawing artifacts with InsetNewpage, InsetVSpace and
probably some others.
---
src/insets/Inset.cpp | 10 ++++++++++
src/insets/Inset.h | 2 +-
src/insets/InsetCollapsable.h | 2 ++
src/insets/InsetCommand.h | 2 ++
src/insets/InsetQuotes.cpp | 10 ----------
src/insets/InsetQuotes.h | 2 --
src/insets/InsetSpecialChar.cpp | 10 ----------
src/insets/InsetSpecialChar.h | 2 --
src/mathed/MathMacroTemplate.cpp | 11 -----------
src/mathed/MathMacroTemplate.h | 2 --
10 files changed, 15 insertions(+), 38 deletions(-)
diff --git a/src/insets/Inset.cpp b/src/insets/Inset.cpp
index c7d3f96..6e2e4a0 100644
--- a/src/insets/Inset.cpp
+++ b/src/insets/Inset.cpp
@@ -520,6 +520,16 @@ void Inset::metricsMarkers2(Dimension & dim, int
framesize) const
}
+void Inset::drawBackground(PainterInfo & pi, int x, int y) const
+{
+ if (pi.full_repaint && backgroundColor(pi) == Color_none)
+ return;
+ Dimension const dim = dimension(*pi.base.bv);
+ pi.pain.fillRectangle(x, y - dim.asc, dim.wid, dim.asc + dim.des,
+ pi.backgroundColor(this));
+}
+
+
void Inset::drawMarkers(PainterInfo & pi, int x, int y) const
{
ColorCode pen_color = mouseHovered(pi.base.bv) || editing(pi.base.bv)?
diff --git a/src/insets/Inset.h b/src/insets/Inset.h
index bb6323a..48ad7be 100644
--- a/src/insets/Inset.h
+++ b/src/insets/Inset.h
@@ -190,7 +190,7 @@ public:
virtual void drawSelection(PainterInfo &, int, int) const {}
/// draw inset background if the inset has an own background and a
/// selection is drawn by drawSelection.
- virtual void drawBackground(PainterInfo &, int, int) const {}
+ virtual void drawBackground(PainterInfo &, int, int) const;
///
virtual bool editing(BufferView const * bv) const;
///
diff --git a/src/insets/InsetCollapsable.h b/src/insets/InsetCollapsable.h
index 35f6e8b..c7b6d65 100644
--- a/src/insets/InsetCollapsable.h
+++ b/src/insets/InsetCollapsable.h
@@ -54,6 +54,8 @@ public:
void metrics(MetricsInfo &, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
+ ///
+ virtual void drawBackground(PainterInfo &, int, int) const {}
/// return x,y of given position relative to the inset's baseline
void cursorPos(BufferView const & bv, CursorSlice const & sl,
diff --git a/src/insets/InsetCommand.h b/src/insets/InsetCommand.h
index 39b1cbb..8260ab3 100644
--- a/src/insets/InsetCommand.h
+++ b/src/insets/InsetCommand.h
@@ -78,6 +78,8 @@ public:
///
void draw(PainterInfo & pi, int x, int y) const;
///
+ virtual void drawBackground(PainterInfo &, int, int) const {}
+ ///
void latex(otexstream &, OutputParams const &) const;
///
int plaintext(odocstringstream & ods, OutputParams const & op,
diff --git a/src/insets/InsetQuotes.cpp b/src/insets/InsetQuotes.cpp
index c4affc1..1a6c925 100644
--- a/src/insets/InsetQuotes.cpp
+++ b/src/insets/InsetQuotes.cpp
@@ -211,16 +211,6 @@ void InsetQuotes::metrics(MetricsInfo & mi, Dimension &
dim) const
}
-void InsetQuotes::drawBackground(PainterInfo & pi, int x, int y) const
-{
- if (pi.full_repaint)
- return;
- Dimension const dim = dimension(*pi.base.bv);
- pi.pain.fillRectangle(x, y - dim.asc, dim.wid, dim.asc + dim.des,
- pi.backgroundColor(this));
-}
-
-
void InsetQuotes::draw(PainterInfo & pi, int x, int y) const
{
FontInfo font = pi.base.font;
diff --git a/src/insets/InsetQuotes.h b/src/insets/InsetQuotes.h
index ba3ed99..fec7fbc 100644
--- a/src/insets/InsetQuotes.h
+++ b/src/insets/InsetQuotes.h
@@ -70,8 +70,6 @@ public:
///
void metrics(MetricsInfo &, Dimension &) const;
///
- void drawBackground(PainterInfo & pi, int x, int y) const;
- ///
void draw(PainterInfo & pi, int x, int y) const;
///
void write(std::ostream &) const;
diff --git a/src/insets/InsetSpecialChar.cpp b/src/insets/InsetSpecialChar.cpp
index 6554cce..3d32f40 100644
--- a/src/insets/InsetSpecialChar.cpp
+++ b/src/insets/InsetSpecialChar.cpp
@@ -134,16 +134,6 @@ void InsetSpecialChar::metrics(MetricsInfo & mi, Dimension
& dim) const
}
-void InsetSpecialChar::drawBackground(PainterInfo & pi, int x, int y) const
-{
- if (pi.full_repaint)
- return;
- Dimension const dim = dimension(*pi.base.bv);
- pi.pain.fillRectangle(x, y - dim.asc, dim.wid, dim.asc + dim.des,
- pi.backgroundColor(this));
-}
-
-
namespace {
// helper function: draw text and update x.
diff --git a/src/insets/InsetSpecialChar.h b/src/insets/InsetSpecialChar.h
index c37e498..ebdfb1a 100644
--- a/src/insets/InsetSpecialChar.h
+++ b/src/insets/InsetSpecialChar.h
@@ -61,8 +61,6 @@ public:
///
void metrics(MetricsInfo &, Dimension &) const;
///
- void drawBackground(PainterInfo & pi, int x, int y) const;
- ///
void draw(PainterInfo & pi, int x, int y) const;
///
void write(std::ostream &) const;
diff --git a/src/mathed/MathMacroTemplate.cpp b/src/mathed/MathMacroTemplate.cpp
index 5b2a016..31250e2 100644
--- a/src/mathed/MathMacroTemplate.cpp
+++ b/src/mathed/MathMacroTemplate.cpp
@@ -583,17 +583,6 @@ void MathMacroTemplate::metrics(MetricsInfo & mi,
Dimension & dim) const
}
-void MathMacroTemplate::drawBackground(PainterInfo & pi, int x, int y) const
-{
- if (pi.full_repaint)
- return;
- Dimension const dim = dimension(*pi.base.bv);
- pi.pain.fillRectangle(x, y - dim.asc, dim.wid, dim.asc + dim.des,
- pi.backgroundColor(this));
-}
-
-
-
void MathMacroTemplate::draw(PainterInfo & pi, int x, int y) const
{
// FIXME: Calling Changer on the same object repeatedly is inefficient.
diff --git a/src/mathed/MathMacroTemplate.h b/src/mathed/MathMacroTemplate.h
index dbcce5d..b0c3018 100644
--- a/src/mathed/MathMacroTemplate.h
+++ b/src/mathed/MathMacroTemplate.h
@@ -92,8 +92,6 @@ public:
///
void draw(PainterInfo & pi, int x, int y) const;
///
- void drawBackground(PainterInfo & pi, int x, int y) const;
- ///
void metrics(MetricsInfo & mi, Dimension & dim) const;
/// identifies macro templates
MathMacroTemplate * asMacroTemplate() { return this; }