135 lines
3.4 KiB
JavaScript
135 lines
3.4 KiB
JavaScript
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)
|
|
{
|
|
if(e.button == 0)
|
|
{
|
|
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;
|
|
};
|
|
|