diff --git a/src/apps/powerstatus/PowerStatusView.cpp b/src/apps/powerstatus/PowerStatusView.cpp index a8b34133fa..d3bdf4cfcd 100644 --- a/src/apps/powerstatus/PowerStatusView.cpp +++ b/src/apps/powerstatus/PowerStatusView.cpp @@ -22,13 +22,13 @@ #include #include #include -#include #include #include #include #include #include #include +#include #include #include #include @@ -187,7 +187,8 @@ PowerStatusView::_DrawBattery(BView* view, BRect rect) gap = ceilf((rect.left - left) / 2); // left - view->FillRect(BRect(rect.left, rect.top, rect.left + gap - 1, rect.bottom)); + view->FillRect(BRect(rect.left, rect.top, rect.left + gap - 1, + rect.bottom)); // right view->FillRect(BRect(rect.right - gap + 1, rect.top, rect.right, rect.bottom)); @@ -209,41 +210,69 @@ PowerStatusView::_DrawBattery(BView* view, BRect rect) else if (percent < 0 || !fHasBattery) percent = 0; - if (percent > 0) { - rect.InsetBy(gap, gap); - rgb_color base = (rgb_color){84, 84, 84, 255}; - if (view->LowColor().Brightness() < 128) - base = (rgb_color){172, 172, 172, 255}; + rect.InsetBy(gap, gap); - if (be_control_look != NULL) { - BRect empty = rect; - if (fHasBattery && percent > 0) - empty.left += empty.Width() * percent / 100.0; - - be_control_look->DrawButtonBackground(view, empty, empty, base, - fHasBattery - ? BControlLook::B_ACTIVATED : BControlLook::B_DISABLED, - fHasBattery && percent > 0 - ? (BControlLook::B_ALL_BORDERS - & ~BControlLook::B_LEFT_BORDER) - : BControlLook::B_ALL_BORDERS); + if (fHasBattery) { + // draw unfilled area + rgb_color unfilledColor = make_color(0x4c, 0x4c, 0x4c); + if (view->LowColor().Brightness() < 128) { + unfilledColor.red = 256 - unfilledColor.red; + unfilledColor.green = 256 - unfilledColor.green; + unfilledColor.blue = 256 - unfilledColor.blue; } - if (fHasBattery) { + BRect unfilled = rect; + if (percent > 0) + unfilled.left += unfilled.Width() * percent / 100.0; + + view->SetHighColor(unfilledColor); + view->FillRect(unfilled); + + if (percent > 0) { + // draw filled area + rgb_color fillColor; if (percent <= kLowBatteryPercentage) - base.set_to(180, 0, 0); + fillColor.set_to(180, 0, 0); else if (percent <= kNoteBatteryPercentage) - base.set_to(200, 140, 0); + fillColor.set_to(200, 140, 0); else - base.set_to(20, 180, 0); + fillColor.set_to(20, 180, 0); - rect.right = rect.left + rect.Width() * percent / 100.0; + BRect fill = rect; + fill.right = fill.left + fill.Width() * percent / 100.0; - if (be_control_look != NULL) { - be_control_look->DrawButtonBackground(view, rect, rect, base, - fHasBattery ? 0 : BControlLook::B_DISABLED); - } else - view->FillRect(rect); + // draw bevel + rgb_color bevelLightColor = tint_color(fillColor, 0.2); + rgb_color bevelShadowColor = tint_color(fillColor, 1.08); + + view->BeginLineArray(4); + view->AddLine(BPoint(fill.left, fill.bottom), + BPoint(fill.left, fill.top), bevelLightColor); + view->AddLine(BPoint(fill.left, fill.top), + BPoint(fill.right, fill.top), bevelLightColor); + view->AddLine(BPoint(fill.right, fill.top), + BPoint(fill.right, fill.bottom), bevelShadowColor); + view->AddLine(BPoint(fill.left, fill.bottom), + BPoint(fill.right, fill.bottom), bevelShadowColor); + view->EndLineArray(); + + fill.InsetBy(1, 1); + + // draw gradient + float topTint = 0.49; + float middleTint1 = 0.62; + float middleTint2 = 0.76; + float bottomTint = 0.90; + + BGradientLinear gradient; + gradient.AddColor(tint_color(fillColor, topTint), 0); + gradient.AddColor(tint_color(fillColor, middleTint1), 132); + gradient.AddColor(tint_color(fillColor, middleTint2), 136); + gradient.AddColor(tint_color(fillColor, bottomTint), 255); + gradient.SetStart(fill.LeftTop()); + gradient.SetEnd(fill.LeftBottom()); + + view->FillRect(fill, gradient); } }