Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import elements.BaseGuiElement;
|
||||
|
||||
export GuiResizeHandle;
|
||||
|
||||
class GuiResizeHandle : BaseGuiElement {
|
||||
IGuiElement@ element;
|
||||
bool dragging = false;
|
||||
vec2i startPos;
|
||||
vec2i startSize;
|
||||
vec2i minSize(0, 0);
|
||||
vec2i maxSize(INT_MAX, INT_MAX);
|
||||
SkinStyle style = SS_ResizeHandle;
|
||||
|
||||
GuiResizeHandle(IGuiElement@ ParentElement, Alignment@ Align, IGuiElement@ drag = null) {
|
||||
super(ParentElement, Align);
|
||||
if(drag !is null)
|
||||
@element = drag;
|
||||
else
|
||||
@element = ParentElement;
|
||||
updateAbsolutePosition();
|
||||
}
|
||||
|
||||
bool onMouseEvent(const MouseEvent& event, IGuiElement@ source) override {
|
||||
switch(event.type) {
|
||||
case MET_Button_Down:
|
||||
if(event.button == 0) {
|
||||
dragging = true;
|
||||
startPos = mousePos;
|
||||
startSize = element.size;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case MET_Button_Up:
|
||||
if(event.button == 0) {
|
||||
dragging = false;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case MET_Moved:
|
||||
if(dragging) {
|
||||
vec2i diff = mousePos - startPos;
|
||||
vec2i newSize = startSize + diff;
|
||||
newSize.x = clamp(newSize.x, minSize.x, maxSize.x);
|
||||
newSize.y = clamp(newSize.y, minSize.y, maxSize.y);
|
||||
element.size = newSize;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return BaseGuiElement::onMouseEvent(event, source);
|
||||
}
|
||||
|
||||
void draw() {
|
||||
uint flags = SF_Normal;
|
||||
if(dragging)
|
||||
flags |= SF_Active;
|
||||
skin.draw(style, flags, AbsolutePosition);
|
||||
BaseGuiElement::draw();
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user