* Calculate correct invalidation rect in SetBarThickness()
* Improved ThumbFrame() for B_TRIANGLE_THUMB, too high horizontal slider had the thumb along the bottom and not on the bar. * Improved triangel thumb drawing, the vertical drawing did look so good yet, I also put the triangle on the right side, it looked weird on the left and it reverted the hashmark meaning too. * Small code cleanups. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26458 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
50baef55f2
commit
3cd9fb7518
@ -1242,31 +1242,30 @@ BSlider::ThumbFrame() const
|
|||||||
|
|
||||||
if (fStyle == B_BLOCK_THUMB) {
|
if (fStyle == B_BLOCK_THUMB) {
|
||||||
if (Orientation() == B_HORIZONTAL) {
|
if (Orientation() == B_HORIZONTAL) {
|
||||||
frame.left = (float)floor(Position() * (_MaxPosition() - _MinPosition()) +
|
frame.left = floorf(Position() * (_MaxPosition()
|
||||||
_MinPosition()) - 8.0;
|
- _MinPosition()) + _MinPosition()) - 8;
|
||||||
frame.top = 2.0 + (Label() ? textHeight + 4.0 : 0.0);
|
frame.top = 2 + (Label() ? textHeight + 4 : 0);
|
||||||
frame.right = frame.left + 17.0;
|
frame.right = frame.left + 17;
|
||||||
frame.bottom = frame.top + fBarThickness + 7.0;
|
frame.bottom = frame.top + fBarThickness + 7;
|
||||||
} else {
|
} else {
|
||||||
frame.left = floor((frame.Width() - fBarThickness) / 2.0) - 4;
|
frame.left = floor((frame.Width() - fBarThickness) / 2) - 4;
|
||||||
frame.top = (float)floor(Position() * (_MaxPosition() - _MinPosition()) +
|
frame.top = floorf(Position() * (_MaxPosition()
|
||||||
_MinPosition()) - 8.0;
|
- _MinPosition()) + _MinPosition()) - 8;
|
||||||
frame.right = frame.left + fBarThickness + 7.0;
|
frame.right = frame.left + fBarThickness + 7;
|
||||||
frame.bottom = frame.top + 17.0;
|
frame.bottom = frame.top + 17;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Orientation() == B_HORIZONTAL) {
|
if (Orientation() == B_HORIZONTAL) {
|
||||||
frame.left = (float)floor(Position() * (_MaxPosition() - _MinPosition()) +
|
frame.left = floorf(Position() * (_MaxPosition()
|
||||||
_MinPosition()) - 6;
|
- _MinPosition()) + _MinPosition()) - 6;
|
||||||
frame.right = frame.left + 12.0f;
|
frame.right = frame.left + 12;
|
||||||
frame.bottom = frame.bottom - 2.0f -
|
frame.top = 3 + fBarThickness + (Label() ? textHeight + 4 : 0);
|
||||||
(MinLimitLabel() || MaxLimitLabel() ? textHeight + 4.0f : 0.0f);
|
frame.bottom = frame.top + 8;
|
||||||
frame.top = frame.bottom - 8.0f;
|
|
||||||
} else {
|
} else {
|
||||||
frame.left = floor((frame.Width() - fBarThickness) / 2.0f) - 3;
|
frame.left = floorf((frame.Width() + fBarThickness) / 2) - 3;
|
||||||
frame.top = (float)floor(Position() * (_MaxPosition() - _MinPosition())) +
|
frame.top = floorf(Position() * (_MaxPosition()
|
||||||
_MinPosition() - 6.0f;
|
- _MinPosition())) + _MinPosition() - 6;
|
||||||
frame.right = frame.left + 7;
|
frame.right = frame.left + 8;
|
||||||
frame.bottom = frame.top + 12;
|
frame.bottom = frame.top + 12;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1310,35 +1309,32 @@ BSlider::ResizeToPreferred()
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
BSlider::Invoke(BMessage *msg)
|
BSlider::Invoke(BMessage* message)
|
||||||
{
|
{
|
||||||
return BControl::Invoke(msg);
|
return BControl::Invoke(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BHandler*
|
BHandler*
|
||||||
BSlider::ResolveSpecifier(BMessage *message, int32 index,
|
BSlider::ResolveSpecifier(BMessage* message, int32 index, BMessage* specifier,
|
||||||
BMessage *specifier, int32 command,
|
int32 command, const char *property)
|
||||||
const char *property)
|
|
||||||
{
|
{
|
||||||
return BControl::ResolveSpecifier(message, index, specifier,
|
return BControl::ResolveSpecifier(message, index, specifier, command,
|
||||||
command, property);
|
property);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
BSlider::GetSupportedSuites(BMessage *message)
|
BSlider::GetSupportedSuites(BMessage* message)
|
||||||
{
|
{
|
||||||
return BControl::GetSupportedSuites(message);
|
return BControl::GetSupportedSuites(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BSlider::SetModificationMessage(BMessage *message)
|
BSlider::SetModificationMessage(BMessage* message)
|
||||||
{
|
{
|
||||||
if (fModificationMessage)
|
delete fModificationMessage;
|
||||||
delete fModificationMessage;
|
|
||||||
|
|
||||||
fModificationMessage = message;
|
fModificationMessage = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1370,9 +1366,9 @@ BSlider::SnoozeAmount() const
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BSlider::SetKeyIncrementValue(int32 increment_value)
|
BSlider::SetKeyIncrementValue(int32 incrementValue)
|
||||||
{
|
{
|
||||||
fKeyIncrementValue = increment_value;
|
fKeyIncrementValue = incrementValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1384,9 +1380,9 @@ BSlider::KeyIncrementValue() const
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BSlider::SetHashMarkCount(int32 hash_mark_count)
|
BSlider::SetHashMarkCount(int32 hashMarkCount)
|
||||||
{
|
{
|
||||||
fHashMarkCount = hash_mark_count;
|
fHashMarkCount = hashMarkCount;
|
||||||
Invalidate();
|
Invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1431,10 +1427,10 @@ BSlider::Style() const
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BSlider::SetBarColor(rgb_color bar_color)
|
BSlider::SetBarColor(rgb_color barColor)
|
||||||
{
|
{
|
||||||
fBarColor = bar_color;
|
fBarColor = barColor;
|
||||||
Invalidate();
|
Invalidate(BarFrame());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1446,22 +1442,22 @@ BSlider::BarColor() const
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BSlider::UseFillColor(bool use_fill, const rgb_color *bar_color)
|
BSlider::UseFillColor(bool useFill, const rgb_color* barColor)
|
||||||
{
|
{
|
||||||
fUseFillColor = use_fill;
|
fUseFillColor = useFill;
|
||||||
|
|
||||||
if (use_fill && bar_color)
|
if (useFill && barColor)
|
||||||
fFillColor = *bar_color;
|
fFillColor = *barColor;
|
||||||
|
|
||||||
Invalidate();
|
Invalidate(BarFrame());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
BSlider::FillColor(rgb_color *bar_color) const
|
BSlider::FillColor(rgb_color* barColor) const
|
||||||
{
|
{
|
||||||
if (bar_color && fUseFillColor)
|
if (barColor && fUseFillColor)
|
||||||
*bar_color = fFillColor;
|
*barColor = fFillColor;
|
||||||
|
|
||||||
return fUseFillColor;
|
return fUseFillColor;
|
||||||
}
|
}
|
||||||
@ -1507,7 +1503,20 @@ BSlider::SetBarThickness(float thickness)
|
|||||||
if (thickness < 1.0)
|
if (thickness < 1.0)
|
||||||
thickness = 1.0;
|
thickness = 1.0;
|
||||||
if (thickness != fBarThickness) {
|
if (thickness != fBarThickness) {
|
||||||
|
// calculate invalid barframe and extend by hashmark size
|
||||||
|
float hInset = 0.0;
|
||||||
|
float vInset = 0.0;
|
||||||
|
if (fOrientation == B_HORIZONTAL)
|
||||||
|
vInset = -6.0;
|
||||||
|
else
|
||||||
|
hInset = -6.0;
|
||||||
|
BRect invalid = BarFrame().InsetByCopy(hInset, vInset) | ThumbFrame();
|
||||||
|
|
||||||
fBarThickness = thickness;
|
fBarThickness = thickness;
|
||||||
|
|
||||||
|
invalid = invalid | BarFrame().InsetByCopy(hInset, vInset)
|
||||||
|
| ThumbFrame();
|
||||||
|
Invalidate(invalid);
|
||||||
InvalidateLayout();
|
InvalidateLayout();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1760,62 +1769,78 @@ BSlider::_DrawTriangleThumb()
|
|||||||
} else {
|
} else {
|
||||||
lightenmax = tint_color(no_tint, B_LIGHTEN_2_TINT);
|
lightenmax = tint_color(no_tint, B_LIGHTEN_2_TINT);
|
||||||
lighten1 = tint_color(no_tint, B_LIGHTEN_1_TINT);
|
lighten1 = tint_color(no_tint, B_LIGHTEN_1_TINT);
|
||||||
darken2 = tint_color(no_tint, (B_NO_TINT + B_DARKEN_1_TINT) / 2.0);
|
darken2 = tint_color(no_tint, (B_NO_TINT + B_DARKEN_1_TINT) / 2);
|
||||||
darken3 = tint_color(no_tint, B_DARKEN_1_TINT);
|
darken3 = tint_color(no_tint, B_DARKEN_1_TINT);
|
||||||
darkenmax = tint_color(no_tint, B_DARKEN_3_TINT);
|
darkenmax = tint_color(no_tint, B_DARKEN_3_TINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
view->SetDrawingMode(B_OP_OVER);
|
|
||||||
|
|
||||||
if (Orientation() == B_HORIZONTAL) {
|
if (Orientation() == B_HORIZONTAL) {
|
||||||
view->SetHighColor(lighten1);
|
view->SetHighColor(lighten1);
|
||||||
view->FillTriangle(BPoint(frame.left + 1.0, frame.bottom - 2.0),
|
view->FillTriangle(
|
||||||
BPoint(frame.left + 6.0, frame.top + 1.0),
|
BPoint(frame.left + 1, frame.bottom - 3),
|
||||||
BPoint(frame.right - 1.0, frame.bottom - 2.0));
|
BPoint((frame.left + frame.right) / 2, frame.top + 1),
|
||||||
|
BPoint(frame.right - 1, frame.bottom - 3));
|
||||||
|
|
||||||
view->SetHighColor(no_tint);
|
view->SetHighColor(no_tint);
|
||||||
view->StrokeLine(BPoint(frame.right - 2.0, frame.bottom - 2.0),
|
view->StrokeLine(BPoint(frame.right - 2, frame.bottom - 3),
|
||||||
BPoint(frame.left + 3.0, frame.bottom - 2.0));
|
BPoint(frame.left + 3, frame.bottom - 3));
|
||||||
|
|
||||||
view->SetHighColor(darkenmax);
|
view->SetHighColor(darkenmax);
|
||||||
view->StrokeLine(BPoint(frame.left, frame.bottom),
|
view->StrokeLine(BPoint(frame.left, frame.bottom - 1),
|
||||||
BPoint(frame.right, frame.bottom));
|
BPoint(frame.right, frame.bottom - 1));
|
||||||
view->StrokeLine(BPoint(frame.right, frame.bottom - 1.0),
|
view->StrokeLine(BPoint(frame.right, frame.bottom - 2),
|
||||||
BPoint(frame.left + 6.0, frame.top + 1.0));
|
BPoint((frame.left + frame.right) / 2, frame.top));
|
||||||
|
|
||||||
view->SetHighColor(darken2);
|
view->SetHighColor(darken2);
|
||||||
view->StrokeLine(BPoint(frame.right - 1.0, frame.bottom - 1.0),
|
view->StrokeLine(BPoint(frame.right - 1, frame.bottom - 2),
|
||||||
BPoint(frame.left + 1.0, frame.bottom - 1.0));
|
BPoint(frame.left + 1, frame.bottom - 2));
|
||||||
view->SetHighColor(darken3);
|
view->SetHighColor(darken3);
|
||||||
view->StrokeLine(BPoint(frame.left, frame.bottom - 1.0),
|
view->StrokeLine(BPoint(frame.left, frame.bottom - 2),
|
||||||
BPoint(frame.left + 5.0, frame.top + 2.0));
|
BPoint((frame.left + frame.right) / 2 - 1, frame.top + 1));
|
||||||
|
|
||||||
view->SetHighColor(lightenmax);
|
view->SetHighColor(lightenmax);
|
||||||
view->StrokeLine(BPoint(frame.left + 2.0, frame.bottom - 2.0),
|
view->StrokeLine(BPoint(frame.left + 2, frame.bottom - 3),
|
||||||
BPoint(frame.left + 6.0, frame.top + 2.0));
|
BPoint((frame.left + frame.right) / 2, frame.top + 1));
|
||||||
|
|
||||||
|
// Shadow
|
||||||
|
view->SetHighColor(0, 0, 0, IsEnabled() ? 80 : 40);
|
||||||
|
view->SetDrawingMode(B_OP_ALPHA);
|
||||||
|
view->StrokeLine(BPoint(frame.left + 1, frame.bottom),
|
||||||
|
BPoint(frame.right, frame.bottom));
|
||||||
} else {
|
} else {
|
||||||
view->SetHighColor(lighten1);
|
view->SetHighColor(lighten1);
|
||||||
view->FillTriangle(BPoint(frame.left + 1.0f, frame.top),
|
view->FillTriangle(
|
||||||
BPoint(frame.left + 7.0f, frame.top + 6.0f),
|
BPoint(frame.left, (frame.top + frame.bottom) / 2),
|
||||||
BPoint(frame.left + 1.0f, frame.bottom));
|
BPoint(frame.right - 1, frame.top + 1),
|
||||||
|
BPoint(frame.right - 1, frame.bottom - 1));
|
||||||
|
|
||||||
view->SetHighColor(darkenmax);
|
view->SetHighColor(darkenmax);
|
||||||
view->StrokeLine(BPoint(frame.left, frame.top + 1),
|
view->StrokeLine(BPoint(frame.right - 1, frame.top),
|
||||||
BPoint(frame.left, frame.bottom));
|
BPoint(frame.right - 1, frame.bottom));
|
||||||
view->StrokeLine(BPoint(frame.left + 1.0f, frame.bottom),
|
view->StrokeLine(BPoint(frame.right - 1, frame.bottom),
|
||||||
BPoint(frame.left + 7.0f, frame.top + 6.0f));
|
BPoint(frame.right - 2, frame.bottom));
|
||||||
|
|
||||||
view->SetHighColor(darken2);
|
view->SetHighColor(darken2);
|
||||||
view->StrokeLine(BPoint(frame.left, frame.top),
|
view->StrokeLine(BPoint(frame.right - 2, frame.top + 2),
|
||||||
BPoint(frame.left, frame.bottom - 1));
|
BPoint(frame.right - 2, frame.bottom - 1));
|
||||||
view->StrokeLine(BPoint(frame.left + 1.0f, frame.top),
|
view->StrokeLine(
|
||||||
BPoint(frame.left + 6.0f, frame.top + 5.0f));
|
BPoint(frame.left, (frame.top + frame.bottom) / 2),
|
||||||
|
BPoint(frame.right - 2, frame.top));
|
||||||
|
view->SetHighColor(darken3);
|
||||||
|
view->StrokeLine(
|
||||||
|
BPoint(frame.left + 1, (frame.top + frame.bottom) / 2 + 1),
|
||||||
|
BPoint(frame.right - 3, frame.bottom - 1));
|
||||||
|
|
||||||
view->SetHighColor(no_tint);
|
view->SetHighColor(lightenmax);
|
||||||
view->StrokeLine(BPoint(frame.left + 1.0f, frame.top + 2.0f),
|
view->StrokeLine(
|
||||||
BPoint(frame.left + 1.0f, frame.bottom - 1.0f));
|
BPoint(frame.left + 1, (frame.top + frame.bottom) / 2),
|
||||||
view->StrokeLine(BPoint(frame.left + 2.0f, frame.bottom - 2.0f),
|
BPoint(frame.right - 2, frame.top + 1));
|
||||||
BPoint(frame.left + 6.0f, frame.top + 6.0f));
|
|
||||||
|
// Shadow
|
||||||
|
view->SetHighColor(0, 0, 0, IsEnabled() ? 80 : 40);
|
||||||
|
view->SetDrawingMode(B_OP_ALPHA);
|
||||||
|
view->StrokeLine(BPoint(frame.right, frame.top + 1),
|
||||||
|
BPoint(frame.right, frame.bottom));
|
||||||
}
|
}
|
||||||
|
|
||||||
view->SetDrawingMode(B_OP_COPY);
|
view->SetDrawingMode(B_OP_COPY);
|
||||||
|
Loading…
Reference in New Issue
Block a user