Debugger: SourceView: Fix several drawing bugs.
- MarkerView: If the view was resized, and the newly revealed region was after the last source line, it wouldn't be redrawn properly. - TextView: Reset low color for painting the region after the source. Otherwise, if either the instruction pointer or a breakpoint were at the last line of the current source, the empty space after would be filled in that color rather than the background color.
This commit is contained in:
@@ -902,43 +902,42 @@ SourceView::MarkerView::Draw(BRect updateRect)
|
|||||||
// get the lines intersecting with the update rect
|
// get the lines intersecting with the update rect
|
||||||
int32 minLine, maxLine;
|
int32 minLine, maxLine;
|
||||||
GetLineRange(updateRect, minLine, maxLine);
|
GetLineRange(updateRect, minLine, maxLine);
|
||||||
if (minLine > maxLine)
|
if (minLine <= maxLine) {
|
||||||
return;
|
// get the markers in that range
|
||||||
|
SourceView::MarkerManager::MarkerList markers;
|
||||||
|
fMarkerManager->GetMarkers(minLine, maxLine, markers);
|
||||||
|
|
||||||
// get the markers in that range
|
float width = Bounds().Width();
|
||||||
SourceView::MarkerManager::MarkerList markers;
|
|
||||||
fMarkerManager->GetMarkers(minLine, maxLine, markers);
|
|
||||||
|
|
||||||
float width = Bounds().Width();
|
AutoLocker<SourceCode> sourceLocker(fSourceCode);
|
||||||
|
|
||||||
AutoLocker<SourceCode> sourceLocker(fSourceCode);
|
int32 markerIndex = 0;
|
||||||
|
for (int32 line = minLine; line <= maxLine; line++) {
|
||||||
|
bool drawBreakpointOptionMarker = true;
|
||||||
|
|
||||||
int32 markerIndex = 0;
|
SourceView::MarkerManager::Marker* marker;
|
||||||
for (int32 line = minLine; line <= maxLine; line++) {
|
FillRect(LineRect(line), B_SOLID_LOW);
|
||||||
bool drawBreakpointOptionMarker = true;
|
while ((marker = markers.ItemAt(markerIndex)) != NULL
|
||||||
|
&& marker->Line() == (uint32)line) {
|
||||||
|
marker->Draw(this, LineRect(line));
|
||||||
|
drawBreakpointOptionMarker = false;
|
||||||
|
markerIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
SourceView::MarkerManager::Marker* marker;
|
if (!drawBreakpointOptionMarker)
|
||||||
FillRect(LineRect(line), B_SOLID_LOW);
|
continue;
|
||||||
while ((marker = markers.ItemAt(markerIndex)) != NULL
|
|
||||||
&& marker->Line() == (uint32)line) {
|
SourceLocation statementStart, statementEnd;
|
||||||
marker->Draw(this, LineRect(line));
|
if (!fSourceCode->GetStatementLocationRange(SourceLocation(line),
|
||||||
drawBreakpointOptionMarker = false;
|
statementStart, statementEnd)
|
||||||
markerIndex++;
|
|| statementStart.Line() != line) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
float y = ((float)line + 0.5f) * fFontInfo->lineHeight;
|
||||||
|
SetHighColor(fBreakpointOptionMarker);
|
||||||
|
FillEllipse(BPoint(width - 8, y), 2, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!drawBreakpointOptionMarker)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
SourceLocation statementStart, statementEnd;
|
|
||||||
if (!fSourceCode->GetStatementLocationRange(SourceLocation(line),
|
|
||||||
statementStart, statementEnd)
|
|
||||||
|| statementStart.Line() != line) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
float y = ((float)line + 0.5f) * fFontInfo->lineHeight;
|
|
||||||
SetHighColor(fBreakpointOptionMarker);
|
|
||||||
FillEllipse(BPoint(width - 8, y), 2, 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float y = (maxLine + 1) * fFontInfo->lineHeight;
|
float y = (maxLine + 1) * fFontInfo->lineHeight;
|
||||||
@@ -1154,6 +1153,7 @@ SourceView::TextView::Draw(BRect updateRect)
|
|||||||
|
|
||||||
y = (maxLine + 1) * fFontInfo->lineHeight;
|
y = (maxLine + 1) * fFontInfo->lineHeight;
|
||||||
if (y < updateRect.bottom) {
|
if (y < updateRect.bottom) {
|
||||||
|
SetLowColor(ui_color(B_DOCUMENT_BACKGROUND_COLOR));
|
||||||
FillRect(BRect(0.0, y, Bounds().right, updateRect.bottom),
|
FillRect(BRect(0.0, y, Bounds().right, updateRect.bottom),
|
||||||
B_SOLID_LOW);
|
B_SOLID_LOW);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user