Added inline functionallity to InsetERT. Fixed cache.clear() problem in

InsetText. Small fixes.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2393 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jürgen Vigna 2001-07-31 09:53:40 +00:00
parent 28f47d9c7e
commit a622bb6efa
12 changed files with 299 additions and 155 deletions

View File

@ -10,8 +10,8 @@ src/CutAndPaste.C
src/debug.C
src/exporter.C
src/ext_l10n.h
src/figureForm.C
src/figure_form.C
src/figureForm.C
src/FontLoader.C
src/frontends/controllers/biblio.C
src/frontends/controllers/ButtonController.h
@ -50,69 +50,71 @@ src/frontends/qt2/paragraphdlgimpl.C
src/frontends/qt2/tabularcreatedlgimpl.C
src/frontends/xforms/combox.C
src/frontends/xforms/FileDialog.C
src/frontends/xforms/FormAboutlyx.C
src/frontends/xforms/form_aboutlyx.C
src/frontends/xforms/FormBibitem.C
src/frontends/xforms/FormAboutlyx.C
src/frontends/xforms/form_bibitem.C
src/frontends/xforms/FormBibtex.C
src/frontends/xforms/FormBibitem.C
src/frontends/xforms/form_bibtex.C
src/frontends/xforms/FormBibtex.C
src/frontends/xforms/form_browser.C
src/frontends/xforms/FormCharacter.C
src/frontends/xforms/form_character.C
src/frontends/xforms/FormCitation.C
src/frontends/xforms/FormCharacter.C
src/frontends/xforms/form_citation.C
src/frontends/xforms/FormDocument.C
src/frontends/xforms/FormCitation.C
src/frontends/xforms/form_document.C
src/frontends/xforms/FormError.C
src/frontends/xforms/FormDocument.C
src/frontends/xforms/form_error.C
src/frontends/xforms/FormExternal.C
src/frontends/xforms/FormError.C
src/frontends/xforms/form_external.C
src/frontends/xforms/FormFiledialog.C
src/frontends/xforms/FormExternal.C
src/frontends/xforms/form_filedialog.C
src/frontends/xforms/FormGraphics.C
src/frontends/xforms/FormFiledialog.C
src/frontends/xforms/form_float.C
src/frontends/xforms/FormFloat.C
src/frontends/xforms/form_graphics.C
src/frontends/xforms/FormInclude.C
src/frontends/xforms/FormGraphics.C
src/frontends/xforms/form_include.C
src/frontends/xforms/FormIndex.C
src/frontends/xforms/FormInclude.C
src/frontends/xforms/form_index.C
src/frontends/xforms/FormIndex.C
src/frontends/xforms/FormLog.C
src/frontends/xforms/FormMathsBitmap.C
src/frontends/xforms/FormMathsDeco.C
src/frontends/xforms/form_maths_deco.C
src/frontends/xforms/FormMathsDelim.C
src/frontends/xforms/FormMathsDeco.C
src/frontends/xforms/form_maths_delim.C
src/frontends/xforms/FormMathsMatrix.C
src/frontends/xforms/FormMathsDelim.C
src/frontends/xforms/form_maths_matrix.C
src/frontends/xforms/FormMathsPanel.C
src/frontends/xforms/FormMathsMatrix.C
src/frontends/xforms/form_maths_panel.C
src/frontends/xforms/FormMathsSpace.C
src/frontends/xforms/FormMathsPanel.C
src/frontends/xforms/form_maths_space.C
src/frontends/xforms/FormMinipage.C
src/frontends/xforms/FormMathsSpace.C
src/frontends/xforms/form_minipage.C
src/frontends/xforms/FormParagraph.C
src/frontends/xforms/FormMinipage.C
src/frontends/xforms/form_paragraph.C
src/frontends/xforms/FormPreamble.C
src/frontends/xforms/FormParagraph.C
src/frontends/xforms/form_preamble.C
src/frontends/xforms/FormPreferences.C
src/frontends/xforms/FormPreamble.C
src/frontends/xforms/form_preferences.C
src/frontends/xforms/FormPrint.C
src/frontends/xforms/FormPreferences.C
src/frontends/xforms/form_print.C
src/frontends/xforms/FormRef.C
src/frontends/xforms/FormPrint.C
src/frontends/xforms/form_ref.C
src/frontends/xforms/FormSearch.C
src/frontends/xforms/FormRef.C
src/frontends/xforms/form_search.C
src/frontends/xforms/FormSpellchecker.C
src/frontends/xforms/FormSearch.C
src/frontends/xforms/form_spellchecker.C
src/frontends/xforms/FormTabular.C
src/frontends/xforms/FormSpellchecker.C
src/frontends/xforms/form_tabular.C
src/frontends/xforms/FormTabularCreate.C
src/frontends/xforms/FormTabular.C
src/frontends/xforms/form_tabular_create.C
src/frontends/xforms/FormThesaurus.C
src/frontends/xforms/FormTabularCreate.C
src/frontends/xforms/form_thesaurus.C
src/frontends/xforms/FormToc.C
src/frontends/xforms/FormThesaurus.C
src/frontends/xforms/form_toc.C
src/frontends/xforms/FormUrl.C
src/frontends/xforms/FormToc.C
src/frontends/xforms/form_url.C
src/frontends/xforms/FormUrl.C
src/frontends/xforms/FormVCLog.C
src/frontends/xforms/input_validators.C
src/frontends/xforms/Menubar_pimpl.C
@ -132,6 +134,7 @@ src/insets/insetfoot.C
src/insets/insetgraphics.C
src/insets/insetinclude.C
src/insets/insetindex.C
src/insets/insetinfo.C
src/insets/insetlabel.C
src/insets/insetlist.C
src/insets/insetmarginal.C

View File

@ -1,3 +1,7 @@
2001-07-31 Juergen Vigna <jug@sad.it>
* text.C (getVisibleRow): minor clear row changes (still not perfect).
2001-07-30 Lars Gullik Bjønnes <larsbj@birdstep.com>
* converter.[hC] + affected fiels: move to (inital-char)lowercase

View File

@ -1,3 +1,28 @@
2001-07-31 Juergen Vigna <jug@sad.it>
* insetcollapsable.h: removed inline variable and moved it over
to the only user InsetERT.
* insetcollapsable.C (insetButtonRelease): fixed uncollpasing the
inset opening immediately therein lying insets dialogs!
* insetert.C (localDispatch): set the font also if we don't have any
chars in this paragraph, otherwise if we delete all of em and start
writing we have the wrong font.
(inlined): added
(draw): implemented for inline support
(insetButtonRelease): ditto.
2001-07-30 Juergen Vigna <jug@sad.it>
* insettext.C (reinitLyXText): new function to reinit the insets
text after lot's of paragraph changes. Use this instead of the
cache.clear() which is VERY dangerous.
* insetfloat.C (insetButtonRelease): we should only show the dialog
if we press on the label otherwise we have problems to open mouse
button 3 dialogs inside this float (f.ex. of a tabular!)
2001-07-30 Lars Gullik Bjønnes <larsbj@birdstep.com>
* insetert.C: change back to "ERT"

View File

@ -37,12 +37,11 @@ using std::max;
InsetCollapsable::InsetCollapsable(bool collapsed)
: UpdatableInset(), collapsed_(collapsed),
button_length(0), button_top_y(0), button_bottom_y(0),
label("Label"),
need_update(FULL), label("Label"),
#if 0
autocollapse(false),
#endif
oldWidth(0), need_update(FULL),
inlined(false)
oldWidth(0)
{
inset.setOwner(this);
inset.setAutoBreakRows(true);
@ -56,12 +55,11 @@ InsetCollapsable::InsetCollapsable(InsetCollapsable const & in, bool same_id)
: UpdatableInset(in, same_id), collapsed_(in.collapsed_),
framecolor(in.framecolor), labelfont(in.labelfont),
button_length(0), button_top_y(0), button_bottom_y(0),
label(in.label),
need_update(FULL), label(in.label),
#if 0
autocollapse(in.autocollapse),
autocollapse(in.autocollapse),
#endif
oldWidth(0), need_update(FULL),
inlined(in.inlined)
oldWidth(0)
{
inset.init(&(in.inset), same_id);
inset.setOwner(this);
@ -189,7 +187,7 @@ void InsetCollapsable::draw(BufferView * bv, LyXFont const & f,
button_bottom_y = -ascent(bv, f) + ascent_collapsed() +
descent_collapsed();
if (collapsed_) {
if (!isOpen()) {
draw_collapsed(pain, baseline, x);
x += TEXT_TO_INSET_OFFSET;
return;
@ -197,49 +195,30 @@ void InsetCollapsable::draw(BufferView * bv, LyXFont const & f,
float old_x = x;
#if 0
UpdatableInset::draw(bv, f, baseline, x, cleared);
#else
if (!owner())
x += static_cast<float>(scroll());
#endif
if (!cleared && (inset.need_update == InsetText::FULL ||
inset.need_update == InsetText::INIT ||
top_x != int(x) ||
top_baseline != baseline))
inset.need_update == InsetText::INIT ||
top_x != int(x) ||
top_baseline != baseline))
{
#if 1
// we don't need anymore to clear here we just have to tell
// the underlying LyXText that it should do the RowClear!
inset.setUpdateStatus(bv, InsetText::FULL);
bv->text->status(bv, LyXText::CHANGED_IN_DRAW);
return;
#else
int w = owner() ? width(bv, f) : pain.paperWidth();
int h = ascent(bv, f) + descent(bv, f);
int const tx = (needFullRow() && !owner()) ? 0 : int(x);
int const ty = max(0, baseline - ascent(bv, f));
if ((ty + h) > pain.paperHeight())
h = pain.paperHeight();
if ((top_x + w) > pain.paperWidth())
w = pain.paperWidth();
if (baseline < 0)
h += (baseline - ascent(bv, f));
pain.fillRectangle(tx, ty - 1, w, h + 2);
cleared = true;
#endif
}
top_x = int(x);
top_baseline = baseline;
int const bl = baseline - ascent(bv, f) + ascent_collapsed();
draw_collapsed(pain, bl, old_x);
inset.draw(bv, f,
bl + descent_collapsed() + inset.ascent(bv, f),
x, cleared);
bl + descent_collapsed() + inset.ascent(bv, f),
x, cleared);
need_update = NONE;
}
@ -253,7 +232,7 @@ void InsetCollapsable::edit(BufferView * bv, int xp, int yp,
collapsed_ = false;
if (!bv->lockInset(this))
return;
bv->updateInset(this, false);
bv->updateInset(this, true);
inset.edit(bv);
} else {
if (!bv->lockInset(this))
@ -281,7 +260,7 @@ void InsetCollapsable::edit(BufferView * bv, bool front)
if (!bv->lockInset(this))
return;
inset.setUpdateStatus(bv, InsetText::FULL);
bv->updateInset(this, false);
bv->updateInset(this, true);
inset.edit(bv, front);
} else {
if (!bv->lockInset(this))
@ -318,8 +297,8 @@ void InsetCollapsable::insetUnlock(BufferView * bv)
}
void InsetCollapsable::insetButtonPress(BufferView * bv, int x, int y,
int button)
void InsetCollapsable::insetButtonPress(BufferView * bv,
int x, int y, int button)
{
if (!collapsed_ && (y > button_bottom_y)) {
LyXFont font(LyXFont::ALL_SANE);
@ -333,19 +312,21 @@ void InsetCollapsable::insetButtonPress(BufferView * bv, int x, int y,
void InsetCollapsable::insetButtonRelease(BufferView * bv,
int x, int y, int button)
int x, int y, int button)
{
if ((x >= 0) && (x < button_length) &&
(y >= button_top_y) && (y <= button_bottom_y)) {
(y >= button_top_y) && (y <= button_bottom_y))
{
if (collapsed_) {
collapsed_ = false;
inset.insetButtonRelease(bv, 0, 0, button);
// should not be called on inset open!
// inset.insetButtonRelease(bv, 0, 0, button);
inset.setUpdateStatus(bv, InsetText::FULL);
bv->updateInset(this, false);
bv->updateInset(this, true);
} else {
collapsed_ = true;
bv->unlockInset(this);
bv->updateInset(this, false);
bv->updateInset(this, true);
}
} else if (!collapsed_ && (y > button_bottom_y)) {
LyXFont font(LyXFont::ALL_SANE);
@ -359,7 +340,7 @@ void InsetCollapsable::insetButtonRelease(BufferView * bv,
void InsetCollapsable::insetMotionNotify(BufferView * bv,
int x, int y, int state)
int x, int y, int state)
{
if (y > button_bottom_y) {
LyXFont font(LyXFont::ALL_SANE);
@ -586,16 +567,17 @@ void InsetCollapsable::open(BufferView * bv)
if (!collapsed_) return;
collapsed_ = false;
bv->updateInset(this, false);
bv->updateInset(this, true);
}
void InsetCollapsable::close(BufferView * bv)
{
if (collapsed_) return;
if (collapsed_)
return;
collapsed_ = true;
bv->updateInset(this, false);
bv->updateInset(this, true);
}

View File

@ -78,7 +78,7 @@ public:
///
void insetUnlock(BufferView *);
///
bool needFullRow() const { return !collapsed_; }
bool needFullRow() const { return isOpen(); }
///
bool lockInsetInInset(BufferView *, UpdatableInset *);
///
@ -223,6 +223,11 @@ protected:
mutable int button_top_y;
///
mutable int button_bottom_y;
///
mutable int topx;
mutable int topbaseline;
mutable UpdateCodes need_update;
private:
///
string label;
@ -232,12 +237,6 @@ private:
#endif
///
mutable int oldWidth;
///
mutable int topx;
mutable int topbaseline;
mutable UpdateCodes need_update;
///
bool inlined;
};
#endif

View File

@ -22,6 +22,7 @@
#include "lyx_gui_misc.h"
#include "BufferView.h"
#include "LyXView.h"
#include "lyxtext.h"
using std::ostream;
@ -114,18 +115,14 @@ void InsetERT::setFont(BufferView *, LyXFont const &, bool, bool selectall)
void InsetERT::edit(BufferView * bv, int x, int y, unsigned int button)
{
InsetCollapsable::edit(bv, x, y, button);
LyXFont font(LyXFont::ALL_INHERIT);
font.setFamily(LyXFont::TYPEWRITER_FAMILY);
font.setColor(LColor::latex);
inset.setFont(bv, font);
set_latex_font(bv);
}
void InsetERT::edit(BufferView * bv, bool)
void InsetERT::edit(BufferView * bv, bool front)
{
edit(bv, 0, 0, 0);
InsetCollapsable::edit(bv, front);
set_latex_font(bv);
}
@ -133,14 +130,35 @@ void InsetERT::insetButtonRelease(BufferView * bv,
int x, int y, int button)
{
if ((x >= 0) && (x < button_length) &&
(y >= button_top_y) && (y <= button_bottom_y)) {
(y >= button_top_y) && (y <= button_bottom_y))
{
if (button == 2) {
inlined(bv, !inlined());
return;
}
if (collapsed_) {
setLabel(_("ERT"));
} else {
setLabel(get_new_label());
}
if (collapsed_) {
collapsed_ = false;
inset.insetButtonRelease(bv, 0, 0, button);
inset.setUpdateStatus(bv, InsetText::FULL);
bv->updateInset(this, true);
} else {
collapsed_ = true;
bv->unlockInset(this);
bv->updateInset(this, true);
}
} else if (!collapsed_ && (y > button_bottom_y)) {
LyXFont font(LyXFont::ALL_SANE);
int yy = ascent(bv, font) + y -
(ascent_collapsed() +
descent_collapsed() +
inset.ascent(bv, font));
inset.insetButtonRelease(bv, x, yy, button);
}
InsetCollapsable::insetButtonRelease(bv, x, y, button);
}
@ -191,7 +209,11 @@ UpdatableInset::RESULT
InsetERT::localDispatch(BufferView * bv, kb_action action, string const & arg)
{
UpdatableInset::RESULT result = DISPATCHED_NOUPDATE;
if (!inset.paragraph()->size()) {
set_latex_font(bv);
}
switch(action) {
case LFUN_LAYOUT:
bv->owner()->setLayout(inset.paragraph()->getLayout());
@ -202,13 +224,8 @@ InsetERT::localDispatch(BufferView * bv, kb_action action, string const & arg)
switch(action) {
case LFUN_BREAKPARAGRAPH:
case LFUN_BREAKPARAGRAPHKEEPLAYOUT:
{
LyXFont font(LyXFont::ALL_INHERIT);
font.setFamily(LyXFont::TYPEWRITER_FAMILY);
font.setColor(LColor::latex);
inset.setFont(bv, font);
}
break;
set_latex_font(bv);
break;
default:
break;
@ -260,3 +277,72 @@ bool InsetERT::checkInsertChar(LyXFont & font)
font.setColor(LColor::latex);
return true;
}
void InsetERT::inlined(BufferView * bv, bool flag)
{
if (flag != inset.getAutoBreakRows())
return;
inset.setAutoBreakRows(!flag);
bv->updateInset(this, true);
}
void InsetERT::draw(BufferView * bv, LyXFont const & f,
int baseline, float & x, bool cleared) const
{
Painter & pain = bv->painter();
button_length = width_collapsed();
button_top_y = -ascent(bv, f);
button_bottom_y = -ascent(bv, f) + ascent_collapsed() +
descent_collapsed();
if (!isOpen()) {
draw_collapsed(pain, baseline, x);
x += TEXT_TO_INSET_OFFSET;
return;
}
float old_x = x;
if (!owner())
x += static_cast<float>(scroll());
if (!cleared && (inset.need_update == InsetText::FULL ||
inset.need_update == InsetText::INIT ||
top_x != int(x) ||
top_baseline != baseline))
{
// we don't need anymore to clear here we just have to tell
// the underlying LyXText that it should do the RowClear!
inset.setUpdateStatus(bv, InsetText::FULL);
bv->text->status(bv, LyXText::CHANGED_IN_DRAW);
return;
}
top_x = int(x);
top_baseline = baseline;
int const bl = baseline - ascent(bv, f) + ascent_collapsed();
if (inlined()) {
inset.draw(bv, f, baseline, x, cleared);
} else {
draw_collapsed(pain, bl, old_x);
inset.draw(bv, f,
bl + descent_collapsed() + inset.ascent(bv, f),
x, cleared);
}
need_update = NONE;
}
void InsetERT::set_latex_font(BufferView * bv)
{
LyXFont font(LyXFont::ALL_INHERIT);
font.setFamily(LyXFont::TYPEWRITER_FAMILY);
font.setColor(LColor::latex);
inset.setFont(bv, font);
}

View File

@ -71,6 +71,18 @@ public:
string const &);
///
bool checkInsertChar(LyXFont &);
///
// this are needed here because of the label/inlined functionallity
///
bool needFullRow() const { return !collapsed_ && !inlined(); }
///
bool isOpen() const { return !collapsed_ || inlined(); }
///
bool inlined() const { return !inset.getAutoBreakRows(); }
///
void inlined(BufferView *, bool flag);
///
void draw(BufferView *, const LyXFont &, int , float &, bool) const;
private:
///
@ -79,6 +91,8 @@ private:
string const get_new_label() const;
///
void setButtonLabel();
///
void set_latex_font(BufferView *);
};
#endif

View File

@ -273,26 +273,21 @@ bool InsetFloat::showInsetDialog(BufferView * bv) const
void InsetFloat::insetButtonRelease(BufferView * bv, int x, int y, int button)
{
#if 0
if (x >= top_x
&& x < button_length
&& y >= button_top_y
&& y < button_bottom_y
&& button == 3) {
// This obviously need to change.
lyxerr << "InsetFloat: Let's edit this floats parameters!"
<< endl;
//bv->owner()->getDialogs()->showFloat(this);
} else {
InsetCollapsable::insetButtonRelease(bv, x, y, button);
#if 1
if ((x >= 0) && (x < button_length) &&
(y >= button_top_y) && (y <= button_bottom_y) &&
(button == 3))
{
showInsetDialog(bv);
return;
}
#else
if (button == 3) {
showInsetDialog(bv);
return;
}
InsetCollapsable::insetButtonRelease(bv, x, y, button);
#endif
InsetCollapsable::insetButtonRelease(bv, x, y, button);
}

View File

@ -190,17 +190,13 @@ InsetText::~InsetText()
void InsetText::clear()
{
cached_bview = 0;
// now also delete all caches this should be safe, hopefully
cache.clear();
while (par) {
Paragraph * tmp = par->next();
delete par;
par = tmp;
}
par = new Paragraph;
reinitLyXText();
}
@ -305,6 +301,8 @@ int InsetText::width(BufferView * bv, LyXFont const &) const
int InsetText::textWidth(BufferView * bv) const
{
if (!autoBreakRows)
return -1;
int const w = getMaxWidth(bv, this);
return w;
}
@ -332,18 +330,8 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
}
xpos = x;
#if 0
UpdatableInset::draw(bv, f, baseline, x, cleared);
#else
if (!owner())
x += static_cast<float>(scroll());
#endif
#if 0
// update insetWidth and insetHeight with dummy calls
(void)ascent(bv, f);
(void)descent(bv, f);
(void)width(bv, f);
#endif
// if top_x differs we have a rule down and we don't have to clear anything
if (!cleared && (top_x == int(x)) &&
@ -464,8 +452,11 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
void InsetText::drawFrame(Painter & pain, bool cleared) const
{
if (!frame_is_visible || cleared) {
pain.rectangle(top_x + 1, top_baseline - insetAscent + 1,
insetWidth - 1, insetAscent + insetDescent - 1,
frame_x = top_x + 1;
frame_y = top_baseline - insetAscent + 1;
frame_w = insetWidth - 1;
frame_h = insetAscent + insetDescent - 1;
pain.rectangle(frame_x, frame_y, frame_w, frame_h,
frame_color);
frame_is_visible = true;
}
@ -476,8 +467,7 @@ void InsetText::clearFrame(Painter & pain, bool cleared) const
{
if (frame_is_visible) {
if (!cleared) {
pain.rectangle(top_x + 1, top_baseline - insetAscent + 1,
insetWidth - 1, insetAscent + insetDescent - 1,
pain.rectangle(frame_x, frame_y, frame_w, frame_h,
backgroundColor());
}
frame_is_visible = false;
@ -1664,11 +1654,6 @@ int InsetText::getMaxWidth(BufferView * bv, UpdatableInset const * inset) const
void InsetText::setParagraphData(Paragraph * p)
{
cached_bview = 0;
// now also delete all caches this should be safe, hopefully
cache.clear();
while (par) {
Paragraph * tmp = par->next();
delete par;
@ -1685,8 +1670,7 @@ void InsetText::setParagraphData(Paragraph * p)
np = np->next();
np->setInsetOwner(this);
}
need_update = INIT;
reinitLyXText();
}
@ -1706,6 +1690,7 @@ void InsetText::setAutoBreakRows(bool flag)
need_update = FULL;
if (!flag)
removeNewlines();
reinitLyXText();
}
}
@ -1885,6 +1870,37 @@ void InsetText::resizeLyXText(BufferView * bv, bool force) const
}
void InsetText::reinitLyXText() const
{
for(Cache::iterator it = cache.begin(); it != cache.end(); ++it) {
lyx::Assert(it->second.text.get());
LyXText * t = it->second.text.get();
BufferView * bv = it->first;
saveLyXTextState(t);
for (Paragraph * p = par; p; p = p->next()) {
p->resizeInsetsLyXText(bv);
}
t->init(bv, true);
restoreLyXTextState(bv, t);
if (the_locking_inset) {
inset_x = cx(bv) - top_x + drawTextXOffset;
inset_y = cy(bv) + drawTextYOffset;
}
if (bv->screen()) {
t->first = bv->screen()->topCursorVisible(t);
}
if (!owner())
updateLocal(bv, FULL, false);
else
need_update = FULL;
// this will scroll the screen such that the cursor becomes visible
bv->updateScrollbar();
}
}
void InsetText::removeNewlines()
{
for (Paragraph * p = par; p; p = p->next()) {

View File

@ -182,6 +182,8 @@ public:
///
void setAutoBreakRows(bool);
///
bool getAutoBreakRows() const { return autoBreakRows; }
///
void setDrawFrame(BufferView *, DrawFrame);
///
void setFrameColor(BufferView *, LColor::color);
@ -293,7 +295,7 @@ private:
bool checkAndActivateInset(BufferView * bv, bool behind);
///
bool checkAndActivateInset(BufferView * bv, int x = 0, int y = 0,
int button = 0);
int button = 0);
///
void removeNewlines();
///
@ -317,6 +319,8 @@ private:
///
void saveLyXTextState(LyXText *) const;
void restoreLyXTextState(BufferView *, LyXText *) const;
///
void reinitLyXText() const;
/* Private structures and variables */
///
@ -383,5 +387,12 @@ private:
// this is needed globally so we know that we're using it actually and
// so the LyXText-Cache is not erased until used!
mutable LyXText * lt;
///
// to remember old painted frame dimensions to clear it on the right spot!
///
mutable int frame_x;
mutable int frame_y;
mutable int frame_w;
mutable int frame_h;
};
#endif

View File

@ -661,25 +661,27 @@ LyXFont const Paragraph::getFont(BufferParams const & bparams,
/// Returns the height of the highest font in range
LyXFont::FONT_SIZE
Paragraph::highestFontInRange(Paragraph::size_type startpos,
Paragraph::size_type endpos) const
Paragraph::size_type endpos) const
{
LyXFont::FONT_SIZE maxsize = LyXFont::SIZE_TINY;
if (pimpl_->fontlist.empty())
return maxsize;
Pimpl::FontTable end_search(endpos, LyXFont());
Pimpl::FontList::const_iterator end_it = lower_bound(pimpl_->fontlist.begin(),
pimpl_->fontlist.end(),
end_search, Pimpl::matchFT());
Pimpl::FontList::const_iterator end_it =
lower_bound(pimpl_->fontlist.begin(),
pimpl_->fontlist.end(),
end_search, Pimpl::matchFT());
if (end_it != pimpl_->fontlist.end())
++end_it;
Pimpl::FontTable start_search(startpos, LyXFont());
for (Pimpl::FontList::const_iterator cit =
lower_bound(pimpl_->fontlist.begin(),
pimpl_->fontlist.end(),
start_search, Pimpl::matchFT());
cit != end_it; ++cit) {
lower_bound(pimpl_->fontlist.begin(),
pimpl_->fontlist.end(),
start_search, Pimpl::matchFT());
cit != end_it; ++cit)
{
LyXFont::FONT_SIZE size = cit->font().size();
if (size > maxsize && size <= LyXFont::SIZE_HUGER)
maxsize = size;

View File

@ -2964,20 +2964,27 @@ void LyXText::getVisibleRow(BufferView * bview, int y_offset, int x_offset,
pain.fillRectangle(x, y, w, h, backgroundColor());
} else if (inset != 0) {
int h = row_ptr->baseline() - inset->ascent(bview, font);
// first clear the whole row above the inset!
if (h > 0) {
#if 0
int const w = (inset_owner ?
inset_owner->width(bview, font) : ww);
pain.fillRectangle(x_offset, y_offset, w, h,
backgroundColor());
#endif
pain.fillRectangle(x_offset, y_offset, ww, h,
backgroundColor());
}
h += inset->ascent(bview, font) + inset->descent(bview, font);
// clear the space below the inset!
if ((row_ptr->height() - h) > 0) {
#if 0
int const w = (inset_owner ?
inset_owner->width(bview, font) : ww);
#endif
pain.fillRectangle(x_offset, y_offset + h,
w, row_ptr->height() - h,
backgroundColor());
ww, row_ptr->height() - h,
backgroundColor());
}
// clear the space behind the inset, if needed
if (!inset_owner && !inset->display() && !inset->needFullRow())
{
int const w = inset->width(bview, font) + int(x);