From bd82f1d334a5dfb6945207d14e8b28a739afec85 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lars=20Gullik=20Bj=C3=B8nnes?= Date: Mon, 21 Jan 2002 12:16:56 +0000 Subject: [PATCH] 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 --- src/BufferView_pimpl.C | 38 +++++++++++++---------- src/ChangeLog | 15 +++++++++ src/DepTable.C | 70 +++++++++++++++++++++++++----------------- src/WorkArea.C | 3 +- 4 files changed, 80 insertions(+), 46 deletions(-) diff --git a/src/BufferView_pimpl.C b/src/BufferView_pimpl.C index b0d7bdbdeb..843b8e7241 100644 --- a/src/BufferView_pimpl.C +++ b/src/BufferView_pimpl.C @@ -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()); diff --git a/src/ChangeLog b/src/ChangeLog index ba66194bd0..68896b8623 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,18 @@ +2002-01-21 Lars Gullik Bjønnes + + * 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 * lyx_gui.C (init): give the toolbar tooltips a normal font. diff --git a/src/DepTable.C b/src/DepTable.C index 0e3a74bc79..59ddbd77bf 100644 --- a/src/DepTable.C +++ b/src/DepTable.C @@ -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 << " " diff --git a/src/WorkArea.C b/src/WorkArea.C index ba4c4407df..7dd3b8e3f7 100644 --- a/src/WorkArea.C +++ b/src/WorkArea.C @@ -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 -- 2.39.5