Files
starruler-linux/scripts/toolkit/elements/GuiOverlay.as
T
2018-07-17 14:15:37 +02:00

98 lines
2.1 KiB
ActionScript

import elements.BaseGuiElement;
export GuiOverlay;
class GuiOverlay : BaseGuiElement {
Color fade(0x00000090);
IGuiElement@ prevFocus;
bool closeSelf = true;
bool pressed = false;
GuiOverlay(IGuiElement@ ParentElement, bool grabHover = true) {
@prevFocus = getGuiFocus();
super(ParentElement, Alignment_Fill());
updateAbsolutePosition();
bringToFront();
if(grabHover)
clearGuiHovered();
setGuiFocus(this);
}
void close() {
remove();
setGuiFocus(prevFocus);
}
bool onGuiEvent(const GuiEvent& event) override {
switch(event.type) {
case GUI_Navigation_Leave:
if(!isAncestorOf(event.other)) {
close();
return false;
}
break;
case GUI_Controller_Down:
if(event.value == GP_B)
return true;
break;
case GUI_Controller_Up:
if(event.value == GP_B) {
close();
return true;
}
break;
}
return BaseGuiElement::onGuiEvent(event);
}
bool onKeyEvent(const KeyboardEvent& event, IGuiElement@ source) override {
switch(event.type) {
case KET_Key_Down:
if(event.key == KEY_ESC)
return true;
break;
case KET_Key_Up:
if(event.key == KEY_ESC) {
close();
return true;
}
break;
}
return BaseGuiElement::onKeyEvent(event, source);
}
IGuiElement@ navigate(NavigationMode mode, const recti& box, const vec2d&in line) override {
float closestDist = FLOAT_INFINITY;
IGuiElement@ closest;
closestToLine(mode, box, line.normalized(), closestDist, closest, getGuiFocus());
return closest;
}
bool onMouseEvent(const MouseEvent& event, IGuiElement@ source) override {
if(event.type == MET_Button_Down) {
pressed = true;
return true;
}
if(event.type == MET_Button_Up) {
if(!pressed)
return false;
pressed = false;
if(event.button != 0 && event.button != 1)
return BaseGuiElement::onMouseEvent(event, source);
if((!closeSelf && event.button == 0) && source !is this && isAncestorOf(source))
return true;
close();
return true;
}
return BaseGuiElement::onMouseEvent(event, source);
}
void draw() override {
if(fade.a != 0)
drawRectangle(AbsolutePosition, fade);
BaseGuiElement::draw();
}
};