Summary: | scrolling behavior in diff view | ||
---|---|---|---|
Product: | [Applications] cervisia | Reporter: | Richard Tango-Lowy <richtl> |
Component: | general | Assignee: | Stephan Binner <binner> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | NOR | ||
Version: | 1.5rich1 | ||
Target Milestone: | --- | ||
Platform: | Mandrake RPMs | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: | |||
Attachments: |
Current proposed patch (11/29/02)
Current proposed patch (12/01/02) |
Description
Richard Tango-Lowy
2002-04-18 23:54:36 UTC
--=-zQDlIxUgzqO7ETfJiQrl Content-Type: multipart/alternative; boundary="=-omyd6FoqDlshJzF/asAv" --=-omyd6FoqDlshJzF/asAv Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Dumb user error. Today I noticed I can (1) change the tabwidth from 8 to 4 (2) switch to a smaller (and fixed) font. I was using a proportional font before and it seemed to screw up the tabs. You do have a hard limit on how far to the right the user can horizontally scroll in the diff windows though. It would be best if I could scroll as far to the right as I have code to scroll to. Rich Tango-Lowy --=20 ars Cognita The Art of Knowledge --------------------- Richard Tango-Lowy richtl@arscognita.com 603 424-6555 --=-omyd6FoqDlshJzF/asAv Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> <HTML> <HEAD> <META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; CHARSET=3DUTF-8"> <META NAME=3D"GENERATOR" CONTENT=3D"GtkHTML/1.0.1"> </HEAD> <BODY> Dumb user error. <BR> <BR> Today I noticed I can (1) change the tabwidth from 8 to 4 (2) switch to a = smaller (and fixed) font. I was using a proportional font before and it se= emed to screw up the tabs. <BR> <BR> You do have a hard limit on how far to the right the user can horizontally = scroll in the diff windows though. It would be best if I could scroll as f= ar to the right as I have code to scroll to. <BR> <BR> Rich Tango-Lowy <TABLE CELLSPACING=3D"0" CELLPADDING=3D"0" WIDTH=3D"100%"> <TR> <TD> <PRE>--=20 ars Cognita The Art of Knowledge --------------------- Richard Tango-Lowy richtl@arscognita.com 603 424-6555</PRE> </TD> </TR> </TABLE> </BODY> </HTML> --=-omyd6FoqDlshJzF/asAv-- --=-zQDlIxUgzqO7ETfJiQrl Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.6 (GNU/Linux) Comment: For info see http://www.gnupg.org iD8DBQA8wFoAD6UgN81JgeMRAibFAKCS75Cn35pHnSKh4vuxN6xx0/cClgCgwNUH o/Fvo2m5+7KtOqduB1KaeRs= =IWae -----END PGP SIGNATURE----- --=-zQDlIxUgzqO7ETfJiQrl-- Subject: kdesdk/cervisia CVS commit by binner: Changed handling of tabulators in to be diffed lines. CCMAIL: 41268-done@bugs.kde.org M +11 -9 diffview.cpp 1.14 Reopening because assumed fix was reverted. Created attachment 550 [details]
Current proposed patch (11/29/02)
Created attachment 585 [details]
Current proposed patch (12/01/02)
Subject: KDE_3_1_BRANCH: kdesdk/cervisia CVS commit by cloose: backport from HEAD: Fix the too small scroll area of diff view when tabs in source code. CCMAIL: 41268-done@bugs.kde.org M +5 -0 ChangeLog 1.22.2.3 M +21 -6 diffview.cpp 1.15.2.1 M +2 -0 diffview.h 1.4.2.1 --- kdesdk/cervisia/ChangeLog #1.22.2.2:1.22.2.3 @@ -1,2 +1,7 @@ +2002-12-12 Christian Loose <christian.loose@hamburg.de> + + * Fix the too small scroll area of diff view when + tabs in source code + 2002-12-05 Christian Loose <christian.loose@hamburg.de> --- kdesdk/cervisia/diffview.cpp #1.15:1.15.2.1 @@ -18,4 +18,5 @@ #include <qscrollbar.h> #include <qpixmap.h> +#include <qregexp.h> #include <qstyle.h> @@ -70,4 +71,7 @@ DiffView::DiffView( bool withlinenos, bo textwidth = 0; + config->setGroup("General"); + m_tabWidth = config->readUnsignedNumEntry("TabWidth", 8); + items.setAutoDelete(true); linenos = withlinenos; @@ -157,6 +161,20 @@ void DiffView::addLine(const QString &li QFont f(font()); f.setBold(true); - QFontMetrics fm(f); - textwidth = QMAX(textwidth, fm.width(line)); + QFontMetrics fmbold(f); + QFontMetrics fm(font()); + + + // calculate textwidth based on 'line' where tabs are expanded + // + // *Please note* + // For some fonts, e.g. "Clean", is fm.maxWidth() greater than + // fmbold.maxWidth(). + QString copy(line); + int numTabs = copy.contains('\t', false); + copy.replace( QRegExp("\t"), ""); + + uint tabSize = m_tabWidth * QMAX(fm.maxWidth(), fmbold.maxWidth()); + uint copyWidth = QMAX(fm.width(copy), fmbold.width(copy)); + textwidth = QMAX(textwidth, copyWidth + numTabs * tabSize); DiffViewItem *item = new DiffViewItem; @@ -282,9 +300,6 @@ QSize DiffView::sizeHint() const void DiffView::paintCell(QPainter *p, int row, int col) { - KConfig *config = CervisiaPart::config(); - config->setGroup("General"); - uint tabWidth = config->readUnsignedNumEntry("TabWidth", 8); QFontMetrics fm(font()); - p->setTabStops(tabWidth * fm.maxWidth()); + p->setTabStops(m_tabWidth * fm.maxWidth()); DiffViewItem *item = items.at(row); --- kdesdk/cervisia/diffview.h #1.4:1.4.2.1 @@ -86,4 +86,6 @@ private: QColor diffInsertColor; QColor diffDeleteColor; + + unsigned int m_tabWidth; }; |