1/*
2 * Copyright 2007-2016 Haiku, Inc.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Ryan Leavengood <leavengood@gmail.com>
7 *		John Scipione <jscipione@gmail.com>
8 *		Joseph Groover <looncraz@looncraz.net>
9 *		Brian Hill <supernova@tycho.email>
10 */
11
12
13#include "StripeView.h"
14
15#include <LayoutUtils.h>
16
17
18static const int kIconStripeWidth = 30;
19
20
21BStripeView::BStripeView(BBitmap& icon)
22	:
23	BView("StripeView", B_WILL_DRAW),
24	fIcon(icon),
25	fIconSize(0.0),
26	fPreferredWidth(0.0),
27	fPreferredHeight(0.0)
28{
29	SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
30
31	if (fIcon.IsValid()) {
32		fIconSize = fIcon.Bounds().Width();
33		// Use the same scaling as a BAlert
34		int32 scale = icon_layout_scale();
35		fPreferredWidth = 18 * scale + fIcon.Bounds().Width();
36		fPreferredHeight = 6 * scale + fIcon.Bounds().Height();
37	}
38}
39
40
41void
42BStripeView::Draw(BRect updateRect)
43{
44	if (fIconSize == 0)
45		return;
46
47	SetHighColor(ViewColor());
48	FillRect(updateRect);
49
50	BRect stripeRect = Bounds();
51	int32 iconLayoutScale = icon_layout_scale();
52	stripeRect.right = kIconStripeWidth * iconLayoutScale;
53	SetHighColor(tint_color(ViewColor(), B_DARKEN_1_TINT));
54	FillRect(stripeRect);
55
56	SetDrawingMode(B_OP_ALPHA);
57	SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY);
58	DrawBitmapAsync(&fIcon, BPoint(18 * iconLayoutScale,
59		6 * iconLayoutScale));
60}
61
62
63BSize
64BStripeView::PreferredSize()
65{
66	return BSize(fPreferredWidth, B_SIZE_UNSET);
67}
68
69
70void
71BStripeView::GetPreferredSize(float* _width, float* _height)
72{
73	if (_width != NULL)
74		*_width = fPreferredWidth;
75
76	if (_height != NULL)
77		*_height = fPreferredHeight;
78}
79
80
81BSize
82BStripeView::MaxSize()
83{
84	return BLayoutUtils::ComposeSize(ExplicitMaxSize(),
85		BSize(fPreferredWidth, B_SIZE_UNLIMITED));
86}
87