From: Jean-Marc Lasgouttes Date: Wed, 17 Aug 2016 09:21:38 +0000 (+0200) Subject: A more radical approach to inset background painting X-Git-Tag: 2.3.0alpha1~1125 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=e194c9ce279cc226962ab8f1ccb253893efd6d3c;p=features.git 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. --- diff --git a/src/insets/Inset.cpp b/src/insets/Inset.cpp index c7d3f9654f..6e2e4a0ae2 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 bb6323a454..48ad7be9a5 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 35f6e8b530..c7b6d65c3a 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 39b1cbbef3..8260ab3ed6 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 c4affc1515..1a6c925bf7 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 ba3ed994dd..fec7fbca23 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 6554cce16e..3d32f406ea 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 c37e49880b..ebdfb1a6e4 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 5b2a016c63..31250e29df 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 dbcce5d410..b0c3018977 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; }