13004f55cSJanus/*
23004f55cSJanus * Copyright 2007-2016 Haiku, Inc.
33004f55cSJanus * Distributed under the terms of the MIT License.
43004f55cSJanus *
53004f55cSJanus * Authors:
63004f55cSJanus *		Ryan Leavengood <leavengood@gmail.com>
73004f55cSJanus *		John Scipione <jscipione@gmail.com>
83004f55cSJanus *		Joseph Groover <looncraz@looncraz.net>
93004f55cSJanus *		Brian Hill <supernova@tycho.email>
103004f55cSJanus */
113004f55cSJanus
123004f55cSJanus
133004f55cSJanus#include "StripeView.h"
143004f55cSJanus
153004f55cSJanus#include <LayoutUtils.h>
163004f55cSJanus
173004f55cSJanus
183004f55cSJanusstatic const int kIconStripeWidth = 30;
193004f55cSJanus
203004f55cSJanus
2166cb2efaSAdrien DestuguesBStripeView::BStripeView(BBitmap& icon)
223004f55cSJanus	:
233004f55cSJanus	BView("StripeView", B_WILL_DRAW),
243004f55cSJanus	fIcon(icon),
253004f55cSJanus	fIconSize(0.0),
263004f55cSJanus	fPreferredWidth(0.0),
273004f55cSJanus	fPreferredHeight(0.0)
283004f55cSJanus{
293004f55cSJanus	SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
303004f55cSJanus
313004f55cSJanus	if (fIcon.IsValid()) {
323004f55cSJanus		fIconSize = fIcon.Bounds().Width();
333004f55cSJanus		// Use the same scaling as a BAlert
343004f55cSJanus		int32 scale = icon_layout_scale();
353004f55cSJanus		fPreferredWidth = 18 * scale + fIcon.Bounds().Width();
363004f55cSJanus		fPreferredHeight = 6 * scale + fIcon.Bounds().Height();
373004f55cSJanus	}
383004f55cSJanus}
393004f55cSJanus
403004f55cSJanus
413004f55cSJanusvoid
4266cb2efaSAdrien DestuguesBStripeView::Draw(BRect updateRect)
433004f55cSJanus{
443004f55cSJanus	if (fIconSize == 0)
453004f55cSJanus		return;
463004f55cSJanus
473004f55cSJanus	SetHighColor(ViewColor());
483004f55cSJanus	FillRect(updateRect);
493004f55cSJanus
503004f55cSJanus	BRect stripeRect = Bounds();
513004f55cSJanus	int32 iconLayoutScale = icon_layout_scale();
523004f55cSJanus	stripeRect.right = kIconStripeWidth * iconLayoutScale;
533004f55cSJanus	SetHighColor(tint_color(ViewColor(), B_DARKEN_1_TINT));
543004f55cSJanus	FillRect(stripeRect);
553004f55cSJanus
563004f55cSJanus	SetDrawingMode(B_OP_ALPHA);
573004f55cSJanus	SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY);
58b4e2eff2SAdrien Destugues	DrawBitmapAsync(&fIcon, BPoint(18 * iconLayoutScale,
593004f55cSJanus		6 * iconLayoutScale));
603004f55cSJanus}
613004f55cSJanus
623004f55cSJanus
633004f55cSJanusBSize
6466cb2efaSAdrien DestuguesBStripeView::PreferredSize()
653004f55cSJanus{
663004f55cSJanus	return BSize(fPreferredWidth, B_SIZE_UNSET);
673004f55cSJanus}
683004f55cSJanus
693004f55cSJanus
703004f55cSJanusvoid
7166cb2efaSAdrien DestuguesBStripeView::GetPreferredSize(float* _width, float* _height)
723004f55cSJanus{
733004f55cSJanus	if (_width != NULL)
743004f55cSJanus		*_width = fPreferredWidth;
753004f55cSJanus
763004f55cSJanus	if (_height != NULL)
773004f55cSJanus		*_height = fPreferredHeight;
783004f55cSJanus}
793004f55cSJanus
803004f55cSJanus
813004f55cSJanusBSize
8266cb2efaSAdrien DestuguesBStripeView::MaxSize()
833004f55cSJanus{
843004f55cSJanus	return BLayoutUtils::ComposeSize(ExplicitMaxSize(),
853004f55cSJanus		BSize(fPreferredWidth, B_SIZE_UNLIMITED));
863004f55cSJanus}
87