fix for something similar to bug132, pluss some small stuff

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3429 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Lars Gullik Bjønnes 2002-01-21 12:16:56 +00:00
parent d6dd467219
commit bd82f1d334
4 changed files with 80 additions and 46 deletions

View File

@ -405,17 +405,26 @@ void BufferView::Pimpl::updateScrollbar()
}
long const text_height = bv_->text->height;
long const work_height = workarea_.height();
if (text_height <= work_height) {
workarea_.setScrollbarBounds(0.0, 0.0);
current_scrollbar_value = bv_->text->first;
workarea_.setScrollbar(current_scrollbar_value, 1.0);
return;
}
double const lineh = bv_->text->defaultHeight();
double const slider_size =
(text_height == 0) ? 1.0 : 1.0 / double(text_height);
static long old_text_height = 0;
static double old_lineh = 0;
static double old_slider_size = 0;
static long old_text_height;
static double old_lineh;
static double old_slider_size;
if (text_height != old_text_height) {
workarea_.setScrollbarBounds(0, text_height - workarea_.height());
workarea_.setScrollbarBounds(0.0,
text_height - work_height);
old_text_height = text_height;
}
if (lineh != old_lineh) {
@ -437,6 +446,7 @@ void BufferView::Pimpl::scrollCB(double value)
if (!buffer_) return;
current_scrollbar_value = long(value);
if (current_scrollbar_value < 0)
current_scrollbar_value = 0;
@ -570,11 +580,7 @@ void BufferView::Pimpl::workAreaMotionNotify(int x, int y, unsigned int state)
bv_->text->setSelection(bv_);
screen_->toggleToggle(bv_->text, bv_);
fitCursor();
#if 0
screen_->showCursor(bv_->text, bv_);
#else
showCursor();
#endif
}
@ -630,11 +636,7 @@ void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos,
screen_->toggleSelection(bv_->text, bv_);
bv_->text->clearSelection();
bv_->text->fullRebreak(bv_);
#if 0
screen_->update(bv_->text, bv_);
#else
update();
#endif
updateScrollbar();
// Single left click in math inset?
@ -740,7 +742,8 @@ void BufferView::Pimpl::tripleClick(int /*x*/, int /*y*/, unsigned int button)
void BufferView::Pimpl::selectionRequested()
{
string const sel(bv_->getLyXText()->selectionAsString(bv_->buffer(), false));
string const sel(bv_->getLyXText()->selectionAsString(bv_->buffer(),
false));
if (!sel.empty()) {
workarea_.putClipboard(sel);
}
@ -864,7 +867,8 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y,
}
Box BufferView::Pimpl::insetDimensions(LyXText const & text, LyXCursor const & cursor) const
Box BufferView::Pimpl::insetDimensions(LyXText const & text,
LyXCursor const & cursor) const
{
Paragraph /*const*/ & par = *cursor.par();
pos_type const pos = cursor.pos();
@ -887,7 +891,9 @@ Box BufferView::Pimpl::insetDimensions(LyXText const & text, LyXCursor const & c
}
Inset * BufferView::Pimpl::checkInset(LyXText const & text, LyXCursor const & cursor, int & x, int & y) const
Inset * BufferView::Pimpl::checkInset(LyXText const & text,
LyXCursor const & cursor,
int & x, int & y) const
{
pos_type const pos(cursor.pos());
Paragraph /*const*/ & par(*cursor.par());

View File

@ -1,3 +1,18 @@
2002-01-21 Lars Gullik Bjønnes <larsbj@birdstep.com>
* WorkArea.C (WorkArea): initialize the scrollbar bounds.
* DepTable.C (sumchange): do not evaluate end() on every iteratrion.
(extchanged): ditto
(ext_exist): ditto
(remove_files_with_extension): ditto
(remove_file): ditto
(write): ditto
* BufferView_pimpl.C (updateScrollbar): do the right thing if the
document is smaller than the work area height. Do not initialize
static variables to 0.
2002-01-20 Jean-Marc Lasgouttes <lasgouttes@freesurf.fr>
* lyx_gui.C (init): give the toolbar tooltips a normal font.

View File

@ -34,23 +34,26 @@
using std::make_pair;
using std::ofstream;
using std::ifstream;
using std::flush;
using std::endl;
inline bool DepTable::dep_info::changed() const
inline
bool DepTable::dep_info::changed() const
{
return crc_prev != crc_cur && crc_cur != 0;
}
void DepTable::insert(string const & fi,
bool upd)
void DepTable::insert(string const & fi, bool upd)
{
// not quite sure if this is the correct place for MakeAbsPath
string f = MakeAbsPath(fi);
string const f = MakeAbsPath(fi);
if (deplist.find(f) == deplist.end()) {
dep_info di;
di.crc_prev = 0;
if (upd) {
lyxerr[Debug::DEPEND] << " CRC..." << std::flush;
lyxerr[Debug::DEPEND] << " CRC..." << flush;
di.crc_cur = lyx::sum(f);
lyxerr[Debug::DEPEND] << "done." << endl;
struct stat f_info;
@ -77,7 +80,7 @@ void DepTable::update()
dep_info &di = itr->second;
struct stat f_info;
if (0 == stat(itr->first.c_str(), &f_info) ) {
if (stat(itr->first.c_str(), &f_info) == 0) {
if (di.mtime_cur == f_info.st_mtime) {
di.crc_prev = di.crc_cur;
lyxerr[Debug::DEPEND] << itr->first << " same mtime";
@ -113,10 +116,10 @@ void DepTable::update()
bool DepTable::sumchange() const
{
for (DepList::const_iterator cit = deplist.begin();
cit != deplist.end();
++cit) {
if ((*cit).second.changed()) return true;
DepList::const_iterator cit = deplist.begin();
DepList::const_iterator end = deplist.end();
for (; cit != end; ++cit) {
if (cit->second.changed()) return true;
}
return false;
}
@ -125,7 +128,7 @@ bool DepTable::sumchange() const
bool DepTable::haschanged(string const & f) const
{
// not quite sure if this is the correct place for MakeAbsPath
string fil = MakeAbsPath(f);
string const fil = MakeAbsPath(f);
DepList::const_iterator cit = deplist.find(fil);
if (cit != deplist.end()) {
if (cit->second.changed())
@ -137,9 +140,9 @@ bool DepTable::haschanged(string const & f) const
bool DepTable::extchanged(string const & ext) const
{
for (DepList::const_iterator cit = deplist.begin();
cit != deplist.end();
++cit) {
DepList::const_iterator cit = deplist.begin();
DepList::const_iterator end = deplist.end();
for (; cit != end; ++cit) {
if (suffixIs(cit->first, ext)) {
if (cit->second.changed())
return true;
@ -151,16 +154,17 @@ bool DepTable::extchanged(string const & ext) const
bool DepTable::ext_exist(const string& ext ) const
{
for (DepList::const_iterator cit = deplist.begin();
cit != deplist.end(); ++cit ) {
if ( suffixIs(cit->first, ext) ) {
DepList::const_iterator cit = deplist.begin();
DepList::const_iterator end = deplist.end();
for (; cit != end; ++cit ) {
if (suffixIs(cit->first, ext)) {
return true;
}
}
return false;
}
bool DepTable::exist(string const & fil) const
{
return deplist.find(fil) != deplist.end();
@ -170,15 +174,18 @@ bool DepTable::exist(string const & fil) const
void DepTable::remove_files_with_extension(string const & suf)
{
DepList::iterator cit = deplist.begin();
while (cit != deplist.end()) {
DepList::iterator end = deplist.end();
while (cit != end) {
if (suffixIs(cit->first, suf)) {
// Can't erase the current iterator, but we can increment and then erase.
// deplist is a map so only the erased iterator is invalidated.
// Can't erase the current iterator, but we
// can increment and then erase.
// Deplist is a map so only the erased
// iterator is invalidated.
DepList::iterator doomed = cit++;
deplist.erase(doomed);
continue;
}
cit++;
++cit;
}
}
@ -186,15 +193,18 @@ void DepTable::remove_files_with_extension(string const & suf)
void DepTable::remove_file(string const & filename)
{
DepList::iterator cit = deplist.begin();
while (cit != deplist.end()) {
DepList::iterator end = deplist.end();
while (cit != end) {
if (OnlyFilename(cit->first) == filename) {
// Can't erase the current iterator, but we can increment and then erase.
// deplist is a map so only the erased iterator is invalidated.
// Can't erase the current iterator, but we
// can increment and then erase.
// deplist is a map so only the erased
// iterator is invalidated.
DepList::iterator doomed = cit++;
deplist.erase(doomed);
continue;
}
cit++;
++cit;
}
}
@ -202,10 +212,12 @@ void DepTable::remove_file(string const & filename)
void DepTable::write(string const & f) const
{
ofstream ofs(f.c_str());
for (DepList::const_iterator cit = deplist.begin();
cit != deplist.end(); ++cit) {
DepList::const_iterator cit = deplist.begin();
DepList::const_iterator end = deplist.end();
for (; cit != end; ++cit) {
if (lyxerr.debugging(Debug::DEPEND)) {
// Store the second (most recently calculated) CRC value.
// Store the second (most recently calculated)
// CRC value.
// The older one is effectively set to 0 upon re-load.
lyxerr << "Write dep: "
<< cit->first << " "

View File

@ -156,7 +156,8 @@ WorkArea::WorkArea(int xpos, int ypos, int width, int height)
fl_set_object_gravity(obj, NorthEastGravity, SouthEastGravity);
obj->u_vdata = this;
fl_set_object_callback(obj, C_WorkArea_scroll_cb, 0);
setScrollbarBounds(0.0, 0.0);
///
/// The free object