Display tabs correctly (hardcoded as 4 spaces ATM).

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31381 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2009-07-03 00:34:48 +00:00
parent 64af5c7164
commit 92194962f6

View File

@ -28,6 +28,8 @@
static const int32 kLeftTextMargin = 3; static const int32 kLeftTextMargin = 3;
static const float kMinViewHeight = 80.0f; static const float kMinViewHeight = 80.0f;
static const int32 kSpacesPerTab = 4;
// TODO: Should be settable!
class SourceView::BaseView : public BView { class SourceView::BaseView : public BView {
@ -204,6 +206,8 @@ public:
private: private:
float _MaxLineWidth(); float _MaxLineWidth();
void _FormatLine(const char* line,
BString& formattedLine);
private: private:
float fMaxLineWidth; float fMaxLineWidth;
@ -811,7 +815,9 @@ SourceView::TextView::Draw(BRect updateRect)
for (int32 i = minLine; i <= maxLine; i++) { for (int32 i = minLine; i <= maxLine; i++) {
float y = (float)(i + 1) * fFontInfo->lineHeight float y = (float)(i + 1) * fFontInfo->lineHeight
- fFontInfo->fontHeight.descent; - fFontInfo->fontHeight.descent;
DrawString(fSourceCode->LineAt(i), BPoint(kLeftTextMargin, y)); BString lineString;
_FormatLine(fSourceCode->LineAt(i), lineString);
DrawString(lineString, BPoint(kLeftTextMargin, y));
} }
} }
@ -834,6 +840,24 @@ SourceView::TextView::_MaxLineWidth()
} }
void
SourceView::TextView::_FormatLine(const char* line, BString& formattedLine)
{
int32 column = 0;
for (; *line != '\0'; line++) {
// TODO: That's probably not very efficient!
if (*line == '\t') {
int32 nextTabStop = (column / kSpacesPerTab + 1) * kSpacesPerTab;
for (; column < nextTabStop; column++)
formattedLine << ' ';
} else {
formattedLine << *line;
column++;
}
}
}
// #pragma mark - SourceView // #pragma mark - SourceView