mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
Various fixes look at ChangeLog
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@595 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
132fe5e132
commit
28ed6c5e80
24
ChangeLog
24
ChangeLog
@ -1,3 +1,23 @@
|
||||
2000-03-09 Juergen Vigna <jug@sad.it>
|
||||
|
||||
* src/insets/insettext.C (setPos): fixed various cursor positioning
|
||||
problems (via mouse and cursor-keys)
|
||||
(LocalDispatch): added posibility to add a Ctrl-Enter inside a text
|
||||
inset (still a small display problem but it works ;)
|
||||
|
||||
* src/insets/insetcollapsable.C (draw): added button_top_y and
|
||||
button_bottom_y to have correct values for clicking on the inset.
|
||||
|
||||
* src/support/lyxalgo.h: commented out 'using std::less'
|
||||
|
||||
2000-03-08 Juergen Vigna <jug@sad.it>
|
||||
|
||||
* src/insets/insetcollapsable.C (InsetButtonRelease): Now a
|
||||
Button-Release event closes as it is alos the Release-Event
|
||||
which opens it.
|
||||
|
||||
* src/lyxfunc.C (Dispatch): forgot a break in the LFUN_INSET_ERT
|
||||
|
||||
2000-03-07 Kayvan A. Sylvan <kayvan@camel.internal.sylvan.com>
|
||||
|
||||
* lib/layouts/literate-scrap.inc: Fixed initial comment. Now we
|
||||
@ -123,10 +143,6 @@
|
||||
(search_kw): use lower_bound instead of manually implemented
|
||||
binary search.
|
||||
|
||||
2000-03-08 Juergen Vigna <jug@sad.it>
|
||||
|
||||
* src/lyxfunc.C (Dispatch): forgot a break in the LFUN_INSET_ERT
|
||||
|
||||
2000-03-08 Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
|
||||
|
||||
* src/insets/insetcollapsable.h: fix Clone() declaration.
|
||||
|
@ -995,10 +995,10 @@ Inset * BufferView::checkInsetHit(int & x, int & y)
|
||||
}
|
||||
}
|
||||
|
||||
if (cursor.pos - 1 >= 0
|
||||
&& cursor.par->GetChar(cursor.pos - 1) == LyXParagraph::META_INSET
|
||||
&& cursor.par->GetInset(cursor.pos - 1)
|
||||
&& cursor.par->GetInset(cursor.pos - 1)->Editable()) {
|
||||
if ((cursor.pos - 1 >= 0) &&
|
||||
(cursor.par->GetChar(cursor.pos-1) == LyXParagraph::META_INSET) &&
|
||||
(cursor.par->GetInset(cursor.pos - 1)) &&
|
||||
(cursor.par->GetInset(cursor.pos - 1)->Editable())) {
|
||||
text->CursorLeft();
|
||||
Inset * tmpinset = cursor.par->GetInset(cursor.pos);
|
||||
LyXFont font = text->GetFont(cursor.par, cursor.pos);
|
||||
|
@ -27,7 +27,8 @@ InsetCollapsable::InsetCollapsable(Buffer * bf): InsetText(bf)
|
||||
autocolapse = true;
|
||||
autoBreakRows = true;
|
||||
framecolor = LColor::footnoteframe;
|
||||
widthOffset = 7;
|
||||
widthOffset = 10;
|
||||
button_x = button_top_y = button_bottom_y = top_x = -1;
|
||||
}
|
||||
|
||||
|
||||
@ -87,7 +88,7 @@ int InsetCollapsable::width(Painter & pain, LyXFont const & font) const
|
||||
if (collapsed)
|
||||
return width_collapsed(pain, font);
|
||||
|
||||
return getMaxWidth(pain);
|
||||
return getMaxWidth(pain) - widthOffset + 2;
|
||||
}
|
||||
|
||||
|
||||
@ -111,7 +112,9 @@ void InsetCollapsable::draw(Painter & pain, LyXFont const & f,
|
||||
top_x = int(x);
|
||||
top_baseline = baseline;
|
||||
draw_collapsed(pain, f, baseline, x);
|
||||
button_x = int(x - top_x);
|
||||
button_x = int(x);
|
||||
button_top_y = -ascent_collapsed(pain, f);
|
||||
button_bottom_y = descent_collapsed(pain, f);
|
||||
|
||||
maxWidth = getMaxWidth(pain) - button_x;
|
||||
x += 2;
|
||||
@ -171,12 +174,7 @@ void InsetCollapsable::UpdateLocal(BufferView *bv, bool flag)
|
||||
|
||||
void InsetCollapsable::InsetButtonPress(BufferView *bv,int x,int y,int button)
|
||||
{
|
||||
if ((x < button_x) &&
|
||||
(y < (labelfont.maxDescent()+labelfont.maxAscent()))) {
|
||||
collapsed = true;
|
||||
UpdateLocal(bv, false);
|
||||
bv->unlockInset(this);
|
||||
} else if (x >= button_x) {
|
||||
if ((x >= button_x) && (y >= button_top_y)) {
|
||||
InsetText::InsetButtonPress(bv, x-top_x, y, button);
|
||||
}
|
||||
}
|
||||
@ -184,13 +182,19 @@ void InsetCollapsable::InsetButtonPress(BufferView *bv,int x,int y,int button)
|
||||
|
||||
void InsetCollapsable::InsetButtonRelease(BufferView *bv, int x, int y, int button)
|
||||
{
|
||||
if (x >= button_x)
|
||||
if ((x < button_x) && (y >= button_top_y) && (y <= button_bottom_y)) {
|
||||
collapsed = true;
|
||||
UpdateLocal(bv, false);
|
||||
bv->unlockInset(this);
|
||||
} else if ((x >= button_x) && (y >= button_top_y)) {
|
||||
InsetText::InsetButtonRelease(bv, x-top_x, y, button);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void InsetCollapsable::InsetMotionNotify(BufferView *bv, int x, int y, int button)
|
||||
{
|
||||
if (x >= button_x)
|
||||
if ((x >= button_x) && (y >= button_top_y)) {
|
||||
InsetText::InsetMotionNotify(bv, x-top_x, y, button);
|
||||
}
|
||||
}
|
||||
|
@ -95,7 +95,7 @@ private:
|
||||
///
|
||||
mutable int
|
||||
top_baseline, top_x,
|
||||
button_x;
|
||||
button_x, button_top_y, button_bottom_y;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -271,6 +271,35 @@ void InsetText::drawRowText(Painter & pain, int startpos, int endpos,
|
||||
LyXFont font = GetFont(par,p);
|
||||
if (IsFloatChar(ch)) {
|
||||
// skip for now
|
||||
} else if (par->IsNewline(p)) {
|
||||
// Draw end-of-line marker
|
||||
int wid = font.width('n');
|
||||
int asc = font.maxAscent();
|
||||
int y = baseline;
|
||||
int xp[3], yp[3];
|
||||
|
||||
xp[0] = int(x + wid * 0.375);
|
||||
yp[0] = int(y - 0.875 * asc * 0.75);
|
||||
|
||||
xp[1] = int(x);
|
||||
yp[1] = int(y - 0.500 * asc * 0.75);
|
||||
|
||||
xp[2] = int(x + wid * 0.375);
|
||||
yp[2] = int(y - 0.125 * asc * 0.75);
|
||||
|
||||
pain.lines(xp, yp, 3, LColor::eolmarker);
|
||||
|
||||
xp[0] = int(x);
|
||||
yp[0] = int(y - 0.500 * asc * 0.75);
|
||||
|
||||
xp[1] = int(x + wid);
|
||||
yp[1] = int(y - 0.500 * asc * 0.75);
|
||||
|
||||
xp[2] = int(x + wid);
|
||||
yp[2] = int(y - asc * 0.75);
|
||||
|
||||
pain.lines(xp, yp, 3, LColor::eolmarker);
|
||||
x += wid;
|
||||
} else if (ch == LyXParagraph::META_INSET) {
|
||||
Inset * tmpinset = par->GetInset(p);
|
||||
if (tmpinset)
|
||||
@ -457,36 +486,36 @@ InsetText::LocalDispatch(BufferView * bv,
|
||||
}
|
||||
HideInsetCursor(bv);
|
||||
switch (action) {
|
||||
// Normal chars
|
||||
case -1:
|
||||
par->InsertChar(actpos,arg[0]);
|
||||
par->SetFont(actpos,real_current_font);
|
||||
UpdateLocal(bv, true);
|
||||
++actpos;
|
||||
selection_start = selection_end = actpos;
|
||||
resetPos(bv);
|
||||
break;
|
||||
// Normal chars
|
||||
case -1:
|
||||
par->InsertChar(actpos,arg[0]);
|
||||
par->SetFont(actpos,real_current_font);
|
||||
UpdateLocal(bv, true);
|
||||
++actpos;
|
||||
selection_start = selection_end = actpos;
|
||||
resetPos(bv);
|
||||
break;
|
||||
// --- Cursor Movements ---------------------------------------------
|
||||
case LFUN_RIGHTSEL:
|
||||
moveRight(bv, false);
|
||||
selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
break;
|
||||
case LFUN_RIGHT:
|
||||
result= DISPATCH_RESULT(moveRight(bv));
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
} else {
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
break;
|
||||
case LFUN_LEFTSEL:
|
||||
moveLeft(bv, false);
|
||||
selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
break;
|
||||
case LFUN_LEFT:
|
||||
case LFUN_RIGHTSEL:
|
||||
moveRight(bv, false);
|
||||
selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
break;
|
||||
case LFUN_RIGHT:
|
||||
result= DISPATCH_RESULT(moveRight(bv));
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
} else {
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
break;
|
||||
case LFUN_LEFTSEL:
|
||||
moveLeft(bv, false);
|
||||
selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
break;
|
||||
case LFUN_LEFT:
|
||||
result= DISPATCH_RESULT(moveLeft(bv));
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
@ -495,85 +524,98 @@ InsetText::LocalDispatch(BufferView * bv,
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
break;
|
||||
case LFUN_DOWNSEL:
|
||||
moveDown(bv, false);
|
||||
selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
break;
|
||||
case LFUN_DOWN:
|
||||
result= DISPATCH_RESULT(moveDown(bv));
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
} else {
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
break;
|
||||
case LFUN_UPSEL:
|
||||
moveUp(bv, false);
|
||||
selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
break;
|
||||
case LFUN_UP:
|
||||
result= DISPATCH_RESULT(moveUp(bv));
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
} else {
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
break;
|
||||
case LFUN_BACKSPACE:
|
||||
if (!actpos || par->IsNewline(actpos-1)) {
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
moveLeft(bv);
|
||||
case LFUN_DELETE:
|
||||
if (Delete()) { // we need update
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, true);
|
||||
} else if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
}
|
||||
break;
|
||||
case LFUN_HOME:
|
||||
for(; actpos > rows[actrow].pos; --actpos)
|
||||
cx -= SingleWidth(bv->getPainter(), par, actpos);
|
||||
cx -= SingleWidth(bv->getPainter(), par, actpos);
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
} else {
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
break;
|
||||
case LFUN_END:
|
||||
for(; actpos < rows[actrow + 1].pos; ++actpos)
|
||||
cx += SingleWidth(bv->getPainter(), par, actpos);
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
} else {
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
break;
|
||||
case LFUN_MATH_MODE: // Open or create a math inset
|
||||
InsertInset(bv, new InsetFormula);
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
} else {
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
return DISPATCHED;
|
||||
default:
|
||||
result = UNDISPATCHED;
|
||||
break;
|
||||
case LFUN_DOWNSEL:
|
||||
moveDown(bv, false);
|
||||
selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
break;
|
||||
case LFUN_DOWN:
|
||||
result= DISPATCH_RESULT(moveDown(bv));
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
} else {
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
break;
|
||||
case LFUN_UPSEL:
|
||||
moveUp(bv, false);
|
||||
selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
break;
|
||||
case LFUN_UP:
|
||||
result= DISPATCH_RESULT(moveUp(bv));
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
} else {
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
break;
|
||||
case LFUN_BACKSPACE:
|
||||
if (!actpos || par->IsNewline(actpos-1)) {
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
moveLeft(bv);
|
||||
case LFUN_DELETE:
|
||||
if (Delete()) { // we need update
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, true);
|
||||
} else if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
}
|
||||
break;
|
||||
case LFUN_HOME:
|
||||
for(; actpos > rows[actrow].pos; --actpos)
|
||||
cx -= SingleWidth(bv->getPainter(), par, actpos);
|
||||
cx -= SingleWidth(bv->getPainter(), par, actpos);
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
} else {
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
break;
|
||||
case LFUN_END:
|
||||
{
|
||||
int checkpos = (int)rows[actrow + 1].pos;
|
||||
if ((actrow + 2) < (int)rows.size())
|
||||
--checkpos;
|
||||
for(; actpos < checkpos; ++actpos)
|
||||
cx += SingleWidth(bv->getPainter(), par, actpos);
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
} else {
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case LFUN_MATH_MODE: // Open or create a math inset
|
||||
InsertInset(bv, new InsetFormula);
|
||||
if (hasSelection()) {
|
||||
selection_start = selection_end = actpos;
|
||||
UpdateLocal(bv, false);
|
||||
} else {
|
||||
selection_start = selection_end = actpos;
|
||||
}
|
||||
return DISPATCHED;
|
||||
case LFUN_BREAKLINE:
|
||||
par->InsertChar(actpos,LyXParagraph::META_NEWLINE);
|
||||
par->SetFont(actpos,real_current_font);
|
||||
UpdateLocal(bv, true);
|
||||
++actpos;
|
||||
selection_start = selection_end = actpos;
|
||||
resetPos(bv);
|
||||
break;
|
||||
default:
|
||||
result = UNDISPATCHED;
|
||||
break;
|
||||
}
|
||||
if (result != FINISHED) {
|
||||
if (!the_locking_inset)
|
||||
@ -808,8 +850,8 @@ void InsetText::HideInsetCursor(BufferView * bv)
|
||||
|
||||
void InsetText::setPos(BufferView * bv, int x, int y, bool activate_inset)
|
||||
{
|
||||
int ox = x;
|
||||
int oy = y;
|
||||
int ox = x;
|
||||
int oy = y;
|
||||
|
||||
// search right X-pos x==0 -> top_x
|
||||
actpos = actrow = 0;
|
||||
@ -826,10 +868,16 @@ void InsetText::setPos(BufferView * bv, int x, int y, bool activate_inset)
|
||||
x += top_x;
|
||||
|
||||
int swh;
|
||||
int sw = swh = SingleWidth(bv->getPainter(), par,actpos);
|
||||
int sw;
|
||||
int checkpos;
|
||||
|
||||
sw = swh = SingleWidth(bv->getPainter(), par,actpos);
|
||||
if (par->GetChar(actpos)!=LyXParagraph::META_INSET)
|
||||
swh /= 2;
|
||||
while ((actpos < (rows[actrow + 1].pos - 1)) && ((cx + swh) < x)) {
|
||||
checkpos = rows[actrow + 1].pos;
|
||||
if ((actrow+2) < (int)rows.size())
|
||||
--checkpos;
|
||||
while ((actpos < checkpos) && ((cx + swh) < x)) {
|
||||
cx += sw;
|
||||
++actpos;
|
||||
sw = swh = SingleWidth(bv->getPainter(), par,actpos);
|
||||
@ -914,7 +962,8 @@ void InsetText::resetPos(BufferView * bv)
|
||||
|
||||
cy = top_baseline;
|
||||
actrow = 0;
|
||||
for(int i = 0; rows[i].pos <= actpos; ++i) {
|
||||
for(unsigned int i = 0; (i < (rows.size()-1)) && (rows[i].pos <= actpos);
|
||||
++i) {
|
||||
cy = rows[i].baseline;
|
||||
actrow = i;
|
||||
}
|
||||
@ -1083,7 +1132,7 @@ void InsetText::computeTextRows(Painter & pain, float x) const
|
||||
|
||||
int cw, lastWordWidth = 0;
|
||||
|
||||
maxWidth = UpdatableInset::getMaxWidth(pain) - widthOffset;
|
||||
maxWidth = getMaxWidth(pain) - widthOffset;
|
||||
for(p = 0; p < par->Last(); ++p) {
|
||||
cw = SingleWidth(pain, par, p);
|
||||
width += cw;
|
||||
@ -1091,6 +1140,17 @@ void InsetText::computeTextRows(Painter & pain, float x) const
|
||||
SingleHeight(pain, par, p, asc, desc);
|
||||
wordAscent = max(wordAscent, asc);
|
||||
wordDescent = max(wordDescent, desc);
|
||||
if (par->IsNewline(p)) {
|
||||
rows.back().asc = wordAscent;
|
||||
rows.back().desc = wordDescent;
|
||||
row.pos = p+1;
|
||||
rows.push_back(row);
|
||||
SingleHeight(pain, par, p, oasc, odesc);
|
||||
width = lastWordWidth = 0;
|
||||
is_first_word_in_row = true;
|
||||
wordAscent = wordDescent = 0;
|
||||
continue;
|
||||
}
|
||||
Inset const * inset = 0;
|
||||
if (((p + 1) < par->Last()) &&
|
||||
(par->GetChar(p + 1)==LyXParagraph::META_INSET))
|
||||
@ -1123,7 +1183,6 @@ void InsetText::computeTextRows(Painter & pain, float x) const
|
||||
oasc = odesc = width = lastWordWidth = 0;
|
||||
is_first_word_in_row = true;
|
||||
wordAscent = wordDescent = 0;
|
||||
// x = 0.0;
|
||||
continue;
|
||||
} else if (par->IsSeparator(p)) {
|
||||
if (width >= maxWidth - x) {
|
||||
@ -1145,7 +1204,6 @@ void InsetText::computeTextRows(Painter & pain, float x) const
|
||||
}
|
||||
wordAscent = wordDescent = lastWordWidth = 0;
|
||||
nwp = p + 1;
|
||||
// x = 0.0;
|
||||
continue;
|
||||
}
|
||||
owidth = width;
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
using std::less;
|
||||
// using std::less;
|
||||
|
||||
// Both these functions should ideally be placed into namespace lyx.
|
||||
// Also the using std::less should not be used.
|
||||
|
Loading…
Reference in New Issue
Block a user