Initial commit
This commit is contained in:
131
third-party/mexui/Core/Component/Control.js
vendored
Normal file
131
third-party/mexui/Core/Component/Control.js
vendored
Normal file
@@ -0,0 +1,131 @@
|
||||
mexui.Component.Control = function(window, x, y, w, h, styles, callback)
|
||||
{
|
||||
mexui.Entity.Component.call(this, false);
|
||||
mexui.Entity.StyleableEntity.call(this, this.linkComponentStyles('Control', styles));
|
||||
|
||||
this.window = window;
|
||||
this.position = new Vec2(x, y);
|
||||
this.size = new Vec2(w, h);
|
||||
this.callback = callback;
|
||||
|
||||
this.boundTo = null;
|
||||
};
|
||||
mexui.util.extend(mexui.Component.Control, mexui.Entity.Component);
|
||||
|
||||
// default styles
|
||||
//mexui.Component.Control.defaultStyles = {};
|
||||
//mexui.Component.Control.defaultStyles.__proto__ = mexui.Entity.StyleableEntity.defaultStyles;
|
||||
|
||||
mexui.Component.Control.defaultStyles = mexui.util.linkStyles(mexui.Entity.StyleableEntity.defaultStyles, {});
|
||||
|
||||
// input
|
||||
mexui.Component.Control.prototype.onMouseDown = function(e)
|
||||
{
|
||||
var hit = this.isCursorOverControl();
|
||||
if(hit)
|
||||
{
|
||||
e.used = true;
|
||||
e.clickedAControl = true;
|
||||
mexui.focusedControl = this;
|
||||
}
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.onMouseUp = function(e)
|
||||
{
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.onMouseMove = function(e, offset)
|
||||
{
|
||||
if(this.isCursorOverControl())
|
||||
{
|
||||
if(!this.isHovered())
|
||||
{
|
||||
mexui.setHoveredComponent(this);
|
||||
this.onMouseEnter();
|
||||
}
|
||||
e.used = true;
|
||||
}
|
||||
else if(e.wasHovered)
|
||||
{
|
||||
mexui.clearHoveredComponent();
|
||||
this.onMouseExit();
|
||||
}
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.onMouseWheel = function(e, data)
|
||||
{
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.onKeyDown = function(e, key, mods)
|
||||
{
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.onCharacter = function(e, character)
|
||||
{
|
||||
};
|
||||
|
||||
// render
|
||||
mexui.Component.Control.prototype.render = function()
|
||||
{
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.renderAfter = function()
|
||||
{
|
||||
};
|
||||
|
||||
// model
|
||||
mexui.Component.Control.prototype.checkToCallCallback = function()
|
||||
{
|
||||
if(this.callback)
|
||||
this.callback.call(this);
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.getScreenPosition = function()
|
||||
{
|
||||
var pos = mexui.util.addVec2(this.window.position, this.position);
|
||||
if(this.boundTo)
|
||||
pos = mexui.util.addVec2(pos, new Vec2(-this.boundTo.axis.x.getScrolledOffsetFixedStart(), -this.boundTo.axis.y.getScrolledOffsetFixedStart()));
|
||||
return pos;
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.isCursorOverControl = function()
|
||||
{
|
||||
return mexui.util.isCursorInRectangle(this.getScreenPosition(), this.getSizeForInput ? this.getSizeForInput() : this.size);
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.isCursorOverItem = function()
|
||||
{
|
||||
return this.isCursorOverControl();
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.isInsideBoundControl = function()
|
||||
{
|
||||
if(this.boundTo instanceof mexui.Entity.ControlWithEntries)
|
||||
return this.isInsideBoundControlEntries();
|
||||
else
|
||||
return mexui.util.isRectangleInsideRectangle(this.getScreenPosition(), this.size, this.boundTo.getScreenPosition(), this.boundTo.size);
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.isInsideBoundControlEntries = function()
|
||||
{
|
||||
var boundToControlPosition = mexui.util.addVec2(this.boundTo.getScreenPosition(), this.boundTo.entriesPositionOffset);
|
||||
var boundToControlSize = new Vec2(this.boundTo.size.x, this.boundTo.axis.y.getDisplayedEntriesLength());
|
||||
return mexui.util.isRectangleInsideRectangle(this.getScreenPosition(), this.size, boundToControlPosition, boundToControlSize);
|
||||
};
|
||||
|
||||
// api
|
||||
mexui.Component.Control.prototype.remove = function()
|
||||
{
|
||||
this.window.controls.splice(this.window.controls.indexOf(this), 1);
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.bindTo = function(control)
|
||||
{
|
||||
this.boundTo = control;
|
||||
};
|
||||
|
||||
mexui.Component.Control.prototype.unbind = function()
|
||||
{
|
||||
this.boundTo = null;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user