1/*
2 * Copyright 2020, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5
6#include "InputIcons.h"
7
8#include <Application.h>
9#include <ControlLook.h>
10#include <File.h>
11#include <IconUtils.h>
12#include <Resources.h>
13#include <Roster.h>
14
15#include "IconHandles.h"
16
17
18const BRect InputIcons::sBounds;
19
20
21InputIcons::InputIcons()
22	:
23	mouseIcon(NULL, false),
24	touchpadIcon(NULL, false),
25	keyboardIcon(NULL, false)
26{
27	if (!sBounds.IsValid()) {
28		*const_cast<BRect*>(&sBounds) = BRect(BPoint(0, 0),
29			be_control_look->ComposeIconSize(B_MINI_ICON));
30	}
31
32	app_info info;
33	be_app->GetAppInfo(&info);
34	BFile executableFile(&info.ref, B_READ_ONLY);
35	BResources resources(&executableFile);
36	resources.PreloadResourceType(B_VECTOR_ICON_TYPE);
37
38	_LoadBitmap(&resources);
39}
40
41
42void
43InputIcons::_LoadBitmap(BResources* resources)
44{
45	const uint8* mouse;
46	const uint8* touchpad;
47	const uint8* keyboard;
48
49	size_t size;
50
51	mouse = (const uint8*)resources->LoadResource(
52		B_VECTOR_ICON_TYPE, "mouse_icon", &size);
53	if (mouse) {
54		mouseIcon = new BBitmap(sBounds, 0, B_RGBA32);
55		BIconUtils::GetVectorIcon(mouse, size, &mouseIcon);
56	}
57
58	touchpad = (const uint8*)resources->LoadResource(
59		B_VECTOR_ICON_TYPE, "touchpad_icon", &size);
60	if (touchpad) {
61		touchpadIcon = new BBitmap(sBounds, 0, B_RGBA32);
62		BIconUtils::GetVectorIcon(touchpad, size, &touchpadIcon);
63	}
64
65	keyboard = (const uint8*)resources->LoadResource(
66		B_VECTOR_ICON_TYPE, "keyboard_icon", &size);
67	if (keyboard) {
68		keyboardIcon = new BBitmap(sBounds, 0, B_RGBA32);
69		BIconUtils::GetVectorIcon(keyboard, size, &keyboardIcon);
70	}
71}
72
73
74BRect
75InputIcons::IconRectAt(const BPoint& topLeft)
76{
77	return BRect(sBounds).OffsetToSelf(topLeft);
78}
79