⛏️ index : haiku.git

/*
 * Copyright 2020, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */

#include "InputIcons.h"

#include <Application.h>
#include <ControlLook.h>
#include <File.h>
#include <IconUtils.h>
#include <Resources.h>
#include <Roster.h>

#include "IconHandles.h"


const BRect InputIcons::sBounds;


InputIcons::InputIcons()
	:
	mouseIcon(NULL, false),
	touchpadIcon(NULL, false),
	keyboardIcon(NULL, false)
{
	if (!sBounds.IsValid()) {
		*const_cast<BRect*>(&sBounds) = BRect(BPoint(0, 0),
			be_control_look->ComposeIconSize(B_MINI_ICON));
	}

	app_info info;
	be_app->GetAppInfo(&info);
	BFile executableFile(&info.ref, B_READ_ONLY);
	BResources resources(&executableFile);
	resources.PreloadResourceType(B_VECTOR_ICON_TYPE);

	_LoadBitmap(&resources);
}


void
InputIcons::_LoadBitmap(BResources* resources)
{
	const uint8* mouse;
	const uint8* touchpad;
	const uint8* keyboard;

	size_t size;

	mouse = (const uint8*)resources->LoadResource(
		B_VECTOR_ICON_TYPE, "mouse_icon", &size);
	if (mouse) {
		mouseIcon = new BBitmap(sBounds, 0, B_RGBA32);
		BIconUtils::GetVectorIcon(mouse, size, &mouseIcon);
	}

	touchpad = (const uint8*)resources->LoadResource(
		B_VECTOR_ICON_TYPE, "touchpad_icon", &size);
	if (touchpad) {
		touchpadIcon = new BBitmap(sBounds, 0, B_RGBA32);
		BIconUtils::GetVectorIcon(touchpad, size, &touchpadIcon);
	}

	keyboard = (const uint8*)resources->LoadResource(
		B_VECTOR_ICON_TYPE, "keyboard_icon", &size);
	if (keyboard) {
		keyboardIcon = new BBitmap(sBounds, 0, B_RGBA32);
		BIconUtils::GetVectorIcon(keyboard, size, &keyboardIcon);
	}
}


BRect
InputIcons::IconRectAt(const BPoint& topLeft)
{
	return BRect(sBounds).OffsetToSelf(topLeft);
}