98 lines
4.7 KiB
JavaScript

/*
* SPDX-FileCopyrightText: 2024 Anton Kharuzhy <publicantroids@gmail.com>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
const statePropertiesMap = [
{ active: true, pressed: false, checked: false, hovered: false, disabled: false }, // Active
{ active: true, pressed: false, checked: false, hovered: true, disabled: false }, // ActiveHover
{ active: true, pressed: true, checked: false, hovered: false, disabled: false }, // ActivePressed
{ active: true, pressed: false, checked: true, hovered: false, disabled: false }, // ActiveChecked
{ active: true, pressed: false, checked: true, hovered: true, disabled: false }, // ActiveHoverChecked
{ active: true, pressed: false, checked: true, hovered: false, disabled: true }, // ActiveCheckedDisabled
{ active: true, pressed: false, checked: false, hovered: false, disabled: true }, // ActiveDisabled
{ active: false, pressed: false, checked: false, hovered: false, disabled: false }, // Inactive
{ active: false, pressed: false, checked: false, hovered: true, disabled: false }, // InactiveHover
{ active: false, pressed: true, checked: false, hovered: false, disabled: false }, // InactivePressed
{ active: false, pressed: false, checked: true, hovered: false, disabled: false }, // InactiveChecked
{ active: false, pressed: false, checked: true, hovered: true, disabled: false }, // InactiveHoverChecked
{ active: false, pressed: false, checked: true, hovered: false, disabled: true }, // InactiveCheckedDisabled
{ active: false, pressed: false, checked: false, hovered: false, disabled: true }, // InactiveDisabled
];
function calculateIconState(button) {
if (button.active) {
if (button.pressed)
return WindowControlButton.IconState.ActivePressed;
else if (button.checked && !button.enabled)
return WindowControlButton.IconState.ActiveCheckedDisabled;
else if (button.checked && button.hovered)
return WindowControlButton.IconState.ActiveHoverChecked;
else if (button.checked)
return WindowControlButton.IconState.ActiveChecked;
else if (button.hovered)
return WindowControlButton.IconState.ActiveHover;
else if (!button.enabled)
return WindowControlButton.IconState.ActiveDisabled;
else
return WindowControlButton.IconState.Active;
} else {
if (button.pressed)
return WindowControlButton.IconState.InactivePressed;
else if (button.checked && !button.enabled)
return WindowControlButton.IconState.InactiveCheckedDisabled;
else if (button.checked && button.hovered)
return WindowControlButton.IconState.InactiveHoverChecked;
else if (button.checked)
return WindowControlButton.IconState.InactiveChecked;
else if (button.hovered)
return WindowControlButton.IconState.InactiveHover;
else if (!button.enabled)
return WindowControlButton.IconState.InactiveDisabled;
else
return WindowControlButton.IconState.Inactive;
}
}
function getAction(buttonType) {
switch (buttonType) {
case WindowControlButton.Type.MinimizeButton:
return ActiveWindow.Action.Minimize;
case WindowControlButton.Type.MaximizeButton:
return ActiveWindow.Action.Maximize;
case WindowControlButton.Type.RestoreButton:
return ActiveWindow.Action.Maximize;
case WindowControlButton.Type.CloseButton:
return ActiveWindow.Action.Close;
case WindowControlButton.Type.AllDesktopsButton:
return ActiveWindow.Action.AllDesktops;
case WindowControlButton.Type.KeepAboveButton:
return ActiveWindow.Action.KeepAbove;
case WindowControlButton.Type.KeepBelowButton:
return ActiveWindow.Action.KeepBelow;
case WindowControlButton.Type.ShadeButton:
return ActiveWindow.Action.Shade;
case WindowControlButton.Type.HelpButton:
return ActiveWindow.Action.Help;
case WindowControlButton.Type.MenuButton:
return ActiveWindow.Action.Menu;
case WindowControlButton.Type.AppMenuButton:
return ActiveWindow.Action.AppMenu;
default:
return "";
}
}
function getButtonComponentSourcePath(iconTheme) {
switch (iconTheme) {
case WindowControlButton.IconTheme.Breeze:
return "theme/BreezeWindowControlButton.qml";
case WindowControlButton.IconTheme.Oxygen:
return "theme/OxygenWindowControlButton.qml";
case WindowControlButton.IconTheme.Aurorae:
return "theme/AuroraeWindowControlButton.qml";
default:
return "theme/PlasmaWindowControlButton.qml";
}
}