haiku/src/kits/shared/StripeView.cpp

87 lines
1.7 KiB
C++

/*
* Copyright 2007-2016 Haiku, Inc.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ryan Leavengood <leavengood@gmail.com>
* John Scipione <jscipione@gmail.com>
* Joseph Groover <looncraz@looncraz.net>
* Brian Hill <supernova@tycho.email>
*/
#include "StripeView.h"
#include <LayoutUtils.h>
static const int kIconStripeWidth = 30;
BStripeView::BStripeView(BBitmap& icon)
:
BView("StripeView", B_WILL_DRAW),
fIcon(icon),
fIconSize(0.0),
fPreferredWidth(0.0),
fPreferredHeight(0.0)
{
SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
if (fIcon.IsValid()) {
fIconSize = fIcon.Bounds().Width();
// Use the same scaling as a BAlert
int32 scale = icon_layout_scale();
fPreferredWidth = 18 * scale + fIcon.Bounds().Width();
fPreferredHeight = 6 * scale + fIcon.Bounds().Height();
}
}
void
BStripeView::Draw(BRect updateRect)
{
if (fIconSize == 0)
return;
SetHighColor(ViewColor());
FillRect(updateRect);
BRect stripeRect = Bounds();
int32 iconLayoutScale = icon_layout_scale();
stripeRect.right = kIconStripeWidth * iconLayoutScale;
SetHighColor(tint_color(ViewColor(), B_DARKEN_1_TINT));
FillRect(stripeRect);
SetDrawingMode(B_OP_ALPHA);
SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY);
DrawBitmapAsync(&fIcon, BPoint(18 * iconLayoutScale,
6 * iconLayoutScale));
}
BSize
BStripeView::PreferredSize()
{
return BSize(fPreferredWidth, B_SIZE_UNSET);
}
void
BStripeView::GetPreferredSize(float* _width, float* _height)
{
if (_width != NULL)
*_width = fPreferredWidth;
if (_height != NULL)
*_height = fPreferredHeight;
}
BSize
BStripeView::MaxSize()
{
return BLayoutUtils::ComposeSize(ExplicitMaxSize(),
BSize(fPreferredWidth, B_SIZE_UNLIMITED));
}