Tracker: Adjusted highlight boxes to better fit the icon label
* also fixes a glitch where label outline was sometimes cropped on some files Change-Id: I24ab4808ac97a6ad7e24d605d1d892d5ce1c0080 Reviewed-on: https://review.haiku-os.org/c/haiku/+/11248 Tested-by: Commit checker robot <[email protected]> Reviewed-by: Máximo Castañeda <[email protected]> Haiku-Format: Haiku-format Bot <[email protected]>
This commit is contained in:
committed by
Máximo Castañeda
parent
d259e3e162
commit
c807e52c53
@@ -941,7 +941,7 @@ BPose::CalcRect(const BPoseView* poseView) const
|
|||||||
BTextWidget* widget = WidgetFor(poseView->FirstColumn()->AttrHash());
|
BTextWidget* widget = WidgetFor(poseView->FirstColumn()->AttrHash());
|
||||||
BPoint location = Location(poseView);
|
BPoint location = Location(poseView);
|
||||||
BRect rect(_IconRect(poseView, location));
|
BRect rect(_IconRect(poseView, location));
|
||||||
float textWidth = (widget != NULL ? widget->TextWidth(poseView) : 0);
|
float textWidth = (widget != NULL ? widget->TextWidth(poseView) + 4 : 0);
|
||||||
|
|
||||||
if (poseView->ViewMode() == kIconMode) {
|
if (poseView->ViewMode() == kIconMode) {
|
||||||
// icon mode
|
// icon mode
|
||||||
@@ -949,14 +949,13 @@ BPose::CalcRect(const BPoseView* poseView) const
|
|||||||
rect.left += roundf((rect.Width() - textWidth) / 2.f);
|
rect.left += roundf((rect.Width() - textWidth) / 2.f);
|
||||||
rect.right = rect.left + ceilf(textWidth);
|
rect.right = rect.left + ceilf(textWidth);
|
||||||
}
|
}
|
||||||
|
rect.bottom = rect.top + ceilf(poseView->IconPoseHeight()) + 3;
|
||||||
} else {
|
} else {
|
||||||
// mini icon mode
|
// mini icon mode
|
||||||
if (widget != NULL)
|
if (widget != NULL)
|
||||||
rect.right += kMiniIconSeparator + ceilf(textWidth);
|
rect.right += kMiniIconSeparator + ceilf(textWidth);
|
||||||
|
rect.bottom = rect.top + ceilf(poseView->IconPoseHeight()) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
rect.bottom = rect.top + ceilf(poseView->IconPoseHeight());
|
|
||||||
|
|
||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1049,12 +1049,12 @@ BPoseView::SetIconPoseHeight()
|
|||||||
switch (ViewMode()) {
|
switch (ViewMode()) {
|
||||||
case kIconMode:
|
case kIconMode:
|
||||||
// IconSize should already be set in MessageReceived()
|
// IconSize should already be set in MessageReceived()
|
||||||
fIconPoseHeight = IconSizeInt() + sFontHeight + 1;
|
fIconPoseHeight = IconSizeInt() + sFontHeight;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kMiniIconMode:
|
case kMiniIconMode:
|
||||||
fViewState->SetIconSize(B_MINI_ICON);
|
fViewState->SetIconSize(B_MINI_ICON);
|
||||||
fIconPoseHeight = std::max((float)IconSizeInt(), sFontHeight + 1);
|
fIconPoseHeight = std::max((float)IconSizeInt(), sFontHeight);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kListMode:
|
case kListMode:
|
||||||
|
|||||||
@@ -150,15 +150,18 @@ BTextWidget::CalcRectCommon(BPoint poseLoc, const BColumn* column,
|
|||||||
BRect rect;
|
BRect rect;
|
||||||
float viewWidth;
|
float viewWidth;
|
||||||
|
|
||||||
|
poseLoc.x = roundf(poseLoc.x);
|
||||||
|
poseLoc.y = roundf(poseLoc.y);
|
||||||
|
|
||||||
if (view->ViewMode() == kListMode) {
|
if (view->ViewMode() == kListMode) {
|
||||||
viewWidth = ceilf(std::min(column->Width(), textWidth));
|
viewWidth = roundf(std::min(column->Width(), textWidth));
|
||||||
|
|
||||||
poseLoc.x += column->Offset();
|
poseLoc.x += column->Offset();
|
||||||
|
|
||||||
switch (fAlignment) {
|
switch (fAlignment) {
|
||||||
case B_ALIGN_LEFT:
|
case B_ALIGN_LEFT:
|
||||||
rect.left = poseLoc.x;
|
rect.left = poseLoc.x;
|
||||||
rect.right = rect.left + viewWidth;
|
rect.right = rect.left + viewWidth - 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case B_ALIGN_CENTER:
|
case B_ALIGN_CENTER:
|
||||||
@@ -166,12 +169,12 @@ BTextWidget::CalcRectCommon(BPoint poseLoc, const BColumn* column,
|
|||||||
if (rect.left < 0)
|
if (rect.left < 0)
|
||||||
rect.left = 0;
|
rect.left = 0;
|
||||||
|
|
||||||
rect.right = rect.left + viewWidth;
|
rect.right = rect.left + viewWidth - 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case B_ALIGN_RIGHT:
|
case B_ALIGN_RIGHT:
|
||||||
rect.right = poseLoc.x + column->Width();
|
rect.right = poseLoc.x + column->Width();
|
||||||
rect.left = rect.right - viewWidth;
|
rect.left = rect.right - viewWidth + 1;
|
||||||
if (rect.left < 0)
|
if (rect.left < 0)
|
||||||
rect.left = 0;
|
rect.left = 0;
|
||||||
break;
|
break;
|
||||||
@@ -182,29 +185,25 @@ BTextWidget::CalcRectCommon(BPoint poseLoc, const BColumn* column,
|
|||||||
}
|
}
|
||||||
|
|
||||||
rect.bottom = poseLoc.y + roundf((view->ListElemHeight() + view->FontHeight()) / 2.f);
|
rect.bottom = poseLoc.y + roundf((view->ListElemHeight() + view->FontHeight()) / 2.f);
|
||||||
rect.top = rect.bottom - view->FontHeight();
|
rect.top = rect.bottom - view->FontHeight() + 1;
|
||||||
} else {
|
} else {
|
||||||
float iconSize = (float)view->IconSizeInt();
|
float iconSize = (float)view->IconSizeInt();
|
||||||
textWidth = floorf(textWidth);
|
|
||||||
// prevent drawing artifacts from selection rect drawing an extra pixel
|
|
||||||
|
|
||||||
if (view->ViewMode() == kIconMode) {
|
if (view->ViewMode() == kIconMode) {
|
||||||
// icon mode
|
// icon mode
|
||||||
viewWidth = ceilf(std::min(view->StringWidth("M") * 30, textWidth));
|
viewWidth = roundf(std::min(view->StringWidth("M") * 30, textWidth));
|
||||||
|
|
||||||
rect.left = poseLoc.x + roundf((iconSize - viewWidth) / 2.f);
|
rect.left = poseLoc.x + roundf((iconSize - viewWidth) / 2.f);
|
||||||
rect.bottom = poseLoc.y + ceilf(view->IconPoseHeight());
|
rect.bottom = poseLoc.y + ceilf(view->IconPoseHeight());
|
||||||
rect.top = rect.bottom - view->FontHeight();
|
|
||||||
} else {
|
} else {
|
||||||
// mini icon mode
|
// mini icon mode
|
||||||
viewWidth = ceilf(textWidth);
|
viewWidth = roundf(textWidth);
|
||||||
|
|
||||||
rect.left = poseLoc.x + iconSize + kMiniIconSeparator;
|
rect.left = poseLoc.x + iconSize + kMiniIconSeparator;
|
||||||
rect.bottom = poseLoc.y + roundf((iconSize + view->FontHeight()) / 2.f);
|
rect.bottom = poseLoc.y + roundf((iconSize + view->FontHeight()) / 2.f);
|
||||||
rect.top = poseLoc.y;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rect.right = rect.left + viewWidth;
|
rect.top = rect.bottom - view->FontHeight() + 1;
|
||||||
|
rect.right = rect.left + viewWidth - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return rect;
|
return rect;
|
||||||
@@ -667,12 +666,7 @@ BTextWidget::Draw(BRect eraseRect, BRect textRect, BPoseView* view, BView* drawV
|
|||||||
drawView->SetDrawingMode(B_OP_COPY);
|
drawView->SetDrawingMode(B_OP_COPY);
|
||||||
}
|
}
|
||||||
|
|
||||||
BRect invertRect(textRect);
|
drawView->FillRect(textRect, B_SOLID_LOW);
|
||||||
invertRect.left = ceilf(invertRect.left);
|
|
||||||
invertRect.top = ceilf(invertRect.top);
|
|
||||||
invertRect.right = floorf(invertRect.right);
|
|
||||||
invertRect.bottom = floorf(invertRect.bottom);
|
|
||||||
drawView->FillRect(invertRect, B_SOLID_LOW);
|
|
||||||
|
|
||||||
// High color is set to inverted low, then the whole thing is
|
// High color is set to inverted low, then the whole thing is
|
||||||
// inverted again so that the background color "shines through".
|
// inverted again so that the background color "shines through".
|
||||||
|
|||||||
Reference in New Issue
Block a user