| 1 |
Index: src/kits/interface/TextView.cpp |
|---|
| 2 |
=================================================================== |
|---|
| 3 |
--- src/kits/interface/TextView.cpp (リビジョン 25319) |
|---|
| 4 |
+++ src/kits/interface/TextView.cpp (作業コピー) |
|---|
| 5 |
@@ -3509,8 +3509,8 @@ |
|---|
| 6 |
|
|---|
| 7 |
|
|---|
| 8 |
void |
|---|
| 9 |
-BTextView::_DrawLine(BView *view, const int32 &lineNum, const int32 &startOffset, |
|---|
| 10 |
- const bool &erase, BRect &eraseRect, BRegion &inputRegion) |
|---|
| 11 |
+BTextView::_DrawLine(BView* view, const int32& lineNum, const int32& startOffset, |
|---|
| 12 |
+ const bool& erase, BRect& eraseRect, BRegion& inputRegion) |
|---|
| 13 |
{ |
|---|
| 14 |
STELine *line = (*fLines)[lineNum]; |
|---|
| 15 |
float startLeft = fTextRect.left; |
|---|
| 16 |
@@ -3576,36 +3576,54 @@ |
|---|
| 17 |
} while ((tabChars + numTabs) < numBytes); |
|---|
| 18 |
} |
|---|
| 19 |
|
|---|
| 20 |
- if (inputRegion.CountRects() > 0) { |
|---|
| 21 |
+ if (inputRegion.CountRects() > 0 && offset == fInline->Offset()) { |
|---|
| 22 |
+ rgb_color viewColor = ViewColor(); |
|---|
| 23 |
+ |
|---|
| 24 |
BRegion textRegion; |
|---|
| 25 |
- GetTextRegion(offset, offset + length, &textRegion); |
|---|
| 26 |
|
|---|
| 27 |
- textRegion.IntersectWith(&inputRegion); |
|---|
| 28 |
- view->PushState(); |
|---|
| 29 |
+ // Highlight in blue the inputted text before the selected part |
|---|
| 30 |
+ if (fInline->SelectionOffset() != fInline->Offset()) { |
|---|
| 31 |
+ GetTextRegion(fInline->Offset(), fInline->Offset() + fInline->SelectionOffset(), |
|---|
| 32 |
+ &textRegion); |
|---|
| 33 |
+ textRegion.IntersectWith(&inputRegion); |
|---|
| 34 |
+ _DrawInputtedText(view, fInline->Offset(), fInline->SelectionOffset(), *color, |
|---|
| 35 |
+ kBlueInputColor, textRegion); |
|---|
| 36 |
+ } |
|---|
| 37 |
|
|---|
| 38 |
- // Highlight in blue the inputted text |
|---|
| 39 |
- view->SetHighColor(kBlueInputColor); |
|---|
| 40 |
- view->FillRect(textRegion.Frame()); |
|---|
| 41 |
- |
|---|
| 42 |
// Highlight in red the selected part |
|---|
| 43 |
if (fInline->SelectionLength() > 0) { |
|---|
| 44 |
- BRegion selectedRegion; |
|---|
| 45 |
GetTextRegion(fInline->Offset() |
|---|
| 46 |
+ fInline->SelectionOffset(), fInline->Offset() |
|---|
| 47 |
+ fInline->SelectionOffset() |
|---|
| 48 |
- + fInline->SelectionLength(), &selectedRegion); |
|---|
| 49 |
+ + fInline->SelectionLength(), &textRegion); |
|---|
| 50 |
+ textRegion.IntersectWith(&inputRegion); |
|---|
| 51 |
+ _DrawInputtedText(view, fInline->Offset() + fInline->SelectionOffset(), |
|---|
| 52 |
+ fInline->SelectionLength(), *color, kRedInputColor, textRegion); |
|---|
| 53 |
+ } |
|---|
| 54 |
|
|---|
| 55 |
- textRegion.IntersectWith(&selectedRegion); |
|---|
| 56 |
- |
|---|
| 57 |
- view->SetHighColor(kRedInputColor); |
|---|
| 58 |
- view->FillRect(textRegion.Frame()); |
|---|
| 59 |
+ // Highlight in blue the inputted text after the selected part |
|---|
| 60 |
+ int32 afterSelectionOffset = fInline->Offset() + fInline->SelectionOffset() |
|---|
| 61 |
+ + fInline->SelectionLength(); |
|---|
| 62 |
+ if (afterSelectionOffset != fInline->Offset() + fInline->Length()) { |
|---|
| 63 |
+ GetTextRegion(afterSelectionOffset, fInline->Offset() + fInline->Length(), |
|---|
| 64 |
+ &textRegion); |
|---|
| 65 |
+ textRegion.IntersectWith(&inputRegion); |
|---|
| 66 |
+ _DrawInputtedText(view, afterSelectionOffset, |
|---|
| 67 |
+ fInline->Offset() + fInline->Length() - afterSelectionOffset, *color, |
|---|
| 68 |
+ kBlueInputColor, textRegion); |
|---|
| 69 |
} |
|---|
| 70 |
|
|---|
| 71 |
- view->PopState(); |
|---|
| 72 |
+ offset += fInline->Length(); |
|---|
| 73 |
+ length -= fInline->Length(); |
|---|
| 74 |
+ numBytes -= fInline->Length(); |
|---|
| 75 |
+ tabChars -= fInline->Length(); |
|---|
| 76 |
+ |
|---|
| 77 |
+ SetViewColor(viewColor); |
|---|
| 78 |
+ SetLowColor(viewColor); |
|---|
| 79 |
} |
|---|
| 80 |
|
|---|
| 81 |
int32 returnedBytes = tabChars; |
|---|
| 82 |
- const char *stringToDraw = fText->GetString(offset, |
|---|
| 83 |
+ const char* stringToDraw = fText->GetString(offset, |
|---|
| 84 |
&returnedBytes); |
|---|
| 85 |
|
|---|
| 86 |
view->DrawString(stringToDraw, returnedBytes); |
|---|
| 87 |
@@ -3629,6 +3647,20 @@ |
|---|
| 88 |
} |
|---|
| 89 |
|
|---|
| 90 |
|
|---|
| 91 |
+void BTextView::_DrawInputtedText(BView* view, int32 offset, int32 length, |
|---|
| 92 |
+ const rgb_color& highColor, const rgb_color& bgColor, const BRegion& region) |
|---|
| 93 |
+{ |
|---|
| 94 |
+ view->SetHighColor(bgColor); |
|---|
| 95 |
+ view->FillRect(region.Frame()); |
|---|
| 96 |
+ |
|---|
| 97 |
+ SetHighColor(highColor); |
|---|
| 98 |
+ SetLowColor(bgColor); |
|---|
| 99 |
+ SetViewColor(bgColor); |
|---|
| 100 |
+ const char* stringToDraw = fText->GetString(offset, &length); |
|---|
| 101 |
+ view->DrawString(stringToDraw, length); |
|---|
| 102 |
+} |
|---|
| 103 |
+ |
|---|
| 104 |
+ |
|---|
| 105 |
void |
|---|
| 106 |
BTextView::_DrawLines(int32 startLine, int32 endLine, int32 startOffset, |
|---|
| 107 |
bool erase) |
|---|
| 108 |
Index: headers/os/interface/TextView.h |
|---|
| 109 |
=================================================================== |
|---|
| 110 |
--- headers/os/interface/TextView.h (リビジョン 25300) |
|---|
| 111 |
+++ headers/os/interface/TextView.h (作業コピー) |
|---|
| 112 |
@@ -251,9 +251,11 @@ |
|---|
| 113 |
void _DoDeleteText(int32 fromOffset, int32 toOffset, |
|---|
| 114 |
_BTextChangeResult_* outResult); |
|---|
| 115 |
|
|---|
| 116 |
- void _DrawLine(BView* view, const int32 &startLine, |
|---|
| 117 |
+ void _DrawLine(BView* view, const int32& startLine, |
|---|
| 118 |
const int32& startOffset, const bool& erase, BRect& eraseRect, |
|---|
| 119 |
BRegion& inputRegion); |
|---|
| 120 |
+ void _DrawInputtedText(BView* view, int32 offset, int32 length, |
|---|
| 121 |
+ const rgb_color& highColor, const rgb_color& bgColor, const BRegion& region); |
|---|
| 122 |
|
|---|
| 123 |
void _DrawLines(int32 startLine, int32 endLine, int32 startOffset = -1, |
|---|
| 124 |
bool erase = false); |
|---|