1
|
{"uid":"C36C2E79K2769A40AES994EE16EAD26D7EC9","isLoaded":true,"lastModificationTime":0,"items":{"name":"Component_FreeLayoutBehavior","type":"game_script","order":4,"content":"# ===================================================================\n#\n# Script: Component_FreeLayoutBehavior\n#\n# $$COPYRIGHT$$\n#\n# ===================================================================\nclass Component_FreeLayoutBehavior extends gs.Component_LayoutBehavior\n ###*\n * Turns a game object into a free-layout and layouts all sub-objects\n * at their specified positions. So that kind of layout allows each sub-object\n * to be freely positioned.\n * <br>\n * In addition, each sub-object can have different alignment options.\n *\n * @module gs\n * @class Component_FreeLayoutBehavior\n * @extends gs.Component_LayoutBehavior\n * @memberof gs\n * @constructor\n ###\n constructor: -> \n super\n\n ###*\n * Sizes the layout to fit its content.\n *\n * @method sizeToFit\n ### \n sizeToFit: ->\n rect = @object.dstRect\n if @object.sizeToFit\n for control in @object.subObjects\n if !control.alignmentX\n rect.width = Math.max(control.margin.left + control.dstRect.width + control.margin.right, rect.width || 1)\n if !control.alignmentY\n rect.height = Math.max(control.margin.top + control.dstRect.height + control.margin.bottom, rect.height || 1)\n \n ###*\n * Updates a specified control.\n *\n * @method updateControl\n * @protected\n * @param {gs.Object_Base} control The control to update\n ### \n updateControl: (control) ->\n super\n \n rect = @object.dstRect\n margin = control.margin\n\n if control.alignmentX == 1\n control.dstRect.x = (rect.width - (control.dstRect.width+margin.right+margin.left)) / 2\n else if control.alignmentX == 2\n control.dstRect.x = rect.width*@object.zoom.x - (control.dstRect.width + control.margin.right)*control.zoom.x \n \n if control.alignmentY == 1\n control.dstRect.y = (rect.height*@object.zoom.y - (control.dstRect.height+margin.bottom+margin.top)*control.zoom.y) / 2\n else if control.alignmentY == 2\n control.dstRect.y = rect.height - (control.dstRect.height + control.margin.bottom)\n \n \n \n ###*\n * Layouts the sub-objects.\n *\n * @method update\n ###\n update: ->\n super\n \n for control, i in @object.subObjects\n @updateControl(control)\n \n @sizeToFit()\n \n \n return null \n \ngs.Component_FreeLayoutBehavior = Component_FreeLayoutBehavior","parentId":"01A95DA3K01E8A4CB4SBE17E790BCE1FC035","folder":false,"compiledContent":"var Component_FreeLayoutBehavior,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\nComponent_FreeLayoutBehavior = (function(superClass) {\n extend(Component_FreeLayoutBehavior, superClass);\n\n\n /**\n * Turns a game object into a free-layout and layouts all sub-objects\n * at their specified positions. So that kind of layout allows each sub-object\n * to be freely positioned.\n * <br>\n * In addition, each sub-object can have different alignment options.\n *\n * @module gs\n * @class Component_FreeLayoutBehavior\n * @extends gs.Component_LayoutBehavior\n * @memberof gs\n * @constructor\n */\n\n function Component_FreeLayoutBehavior() {\n Component_FreeLayoutBehavior.__super__.constructor.apply(this, arguments);\n }\n\n\n /**\n * Sizes the layout to fit its content.\n *\n * @method sizeToFit\n */\n\n Component_FreeLayoutBehavior.prototype.sizeToFit = function() {\n var control, j, len, rect, ref, results;\n rect = this.object.dstRect;\n if (this.object.sizeToFit) {\n ref = this.object.subObjects;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n control = ref[j];\n if (!control.alignmentX) {\n rect.width = Math.max(control.margin.left + control.dstRect.width + control.margin.right, rect.width || 1);\n }\n if (!control.alignmentY) {\n results.push(rect.height = Math.max(control.margin.top + control.dstRect.height + control.margin.bottom, rect.height || 1));\n } else {\n results.push(void 0);\n }\n }\n return results;\n }\n };\n\n\n /**\n * Updates a specified control.\n *\n * @method updateControl\n * @protected\n * @param {gs.Object_Base} control The control to update\n */\n\n Component_FreeLayoutBehavior.prototype.updateControl = function(control) {\n var margin, rect;\n Component_FreeLayoutBehavior.__super__.updateControl.apply(this, arguments);\n rect = this.object.dstRect;\n margin = control.margin;\n if (control.alignmentX === 1) {\n control.dstRect.x = (rect.width - (control.dstRect.width + margin.right + margin.left)) / 2;\n } else if (control.alignmentX === 2) {\n control.dstRect.x = rect.width * this.object.zoom.x - (control.dstRect.width + control.margin.right) * control.zoom.x;\n }\n if (control.alignmentY === 1) {\n return control.dstRect.y = (rect.height * this.object.zoom.y - (control.dstRect.height + margin.bottom + margin.top) * control.zoom.y) / 2;\n } else if (control.alignmentY === 2) {\n return control.dstRect.y = rect.height - (control.dstRect.height + control.margin.bottom);\n }\n };\n\n\n /**\n * Layouts the sub-objects.\n *\n * @method update\n */\n\n Component_FreeLayoutBehavior.prototype.update = function() {\n var control, i, j, len, ref;\n Component_FreeLayoutBehavior.__super__.update.apply(this, arguments);\n ref = this.object.subObjects;\n for (i = j = 0, len = ref.length; j < len; i = ++j) {\n control = ref[i];\n this.updateControl(control);\n }\n this.sizeToFit();\n return null;\n };\n\n return Component_FreeLayoutBehavior;\n\n})(gs.Component_LayoutBehavior);\n\ngs.Component_FreeLayoutBehavior = Component_FreeLayoutBehavior;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUEsNEJBQUE7RUFBQTs7O0FBQU07Ozs7QUFDRjs7Ozs7Ozs7Ozs7Ozs7RUFhYSxzQ0FBQTtJQUNULCtEQUFBLFNBQUE7RUFEUzs7O0FBR2I7Ozs7Ozt5Q0FLQSxTQUFBLEdBQVcsU0FBQTtBQUNQLFFBQUE7SUFBQSxJQUFBLEdBQU8sSUFBQyxDQUFBLE1BQU0sQ0FBQztJQUNmLElBQUcsSUFBQyxDQUFBLE1BQU0sQ0FBQyxTQUFYO0FBQ0k7QUFBQTtXQUFBLHFDQUFBOztRQUNJLElBQUcsQ0FBQyxPQUFPLENBQUMsVUFBWjtVQUNJLElBQUksQ0FBQyxLQUFMLEdBQWEsSUFBSSxDQUFDLEdBQUwsQ0FBUyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQWYsR0FBc0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUF0QyxHQUE4QyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQXRFLEVBQTZFLElBQUksQ0FBQyxLQUFMLElBQWMsQ0FBM0YsRUFEakI7O1FBRUEsSUFBRyxDQUFDLE9BQU8sQ0FBQyxVQUFaO3VCQUNJLElBQUksQ0FBQyxNQUFMLEdBQWMsSUFBSSxDQUFDLEdBQUwsQ0FBUyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQWYsR0FBcUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFyQyxHQUE4QyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQXRFLEVBQThFLElBQUksQ0FBQyxNQUFMLElBQWUsQ0FBN0YsR0FEbEI7U0FBQSxNQUFBOytCQUFBOztBQUhKO3FCQURKOztFQUZPOzs7QUFTWDs7Ozs7Ozs7eUNBT0EsYUFBQSxHQUFlLFNBQUMsT0FBRDtBQUNYLFFBQUE7SUFBQSxpRUFBQSxTQUFBO0lBRUEsSUFBQSxHQUFPLElBQUMsQ0FBQSxNQUFNLENBQUM7SUFDZixNQUFBLEdBQVMsT0FBTyxDQUFDO0lBRWpCLElBQUcsT0FBTyxDQUFDLFVBQVIsS0FBc0IsQ0FBekI7TUFDSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQWhCLEdBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUwsR0FBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBaEIsR0FBc0IsTUFBTSxDQUFDLEtBQTdCLEdBQW1DLE1BQU0sQ0FBQyxJQUEzQyxDQUFkLENBQUEsR0FBa0UsRUFEMUY7S0FBQSxNQUVLLElBQUcsT0FBTyxDQUFDLFVBQVIsS0FBc0IsQ0FBekI7TUFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQWhCLEdBQW9CLElBQUksQ0FBQyxLQUFMLEdBQVcsSUFBQyxDQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBeEIsR0FBNEIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQWhCLEdBQXdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBeEMsQ0FBQSxHQUErQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBRDNHOztJQUdMLElBQUcsT0FBTyxDQUFDLFVBQVIsS0FBc0IsQ0FBekI7YUFDSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQWhCLEdBQW9CLENBQUMsSUFBSSxDQUFDLE1BQUwsR0FBWSxJQUFDLENBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUF6QixHQUE2QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBaEIsR0FBdUIsTUFBTSxDQUFDLE1BQTlCLEdBQXFDLE1BQU0sQ0FBQyxHQUE3QyxDQUFBLEdBQWtELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBN0YsQ0FBQSxHQUFrRyxFQUQxSDtLQUFBLE1BRUssSUFBRyxPQUFPLENBQUMsVUFBUixLQUFzQixDQUF6QjthQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBaEIsR0FBb0IsSUFBSSxDQUFDLE1BQUwsR0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBaEIsR0FBeUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUF6QyxFQURqQzs7RUFiTTs7O0FBa0JmOzs7Ozs7eUNBS0EsTUFBQSxHQUFRLFNBQUE7QUFDSixRQUFBO0lBQUEsMERBQUEsU0FBQTtBQUVBO0FBQUEsU0FBQSw2Q0FBQTs7TUFDSSxJQUFDLENBQUEsYUFBRCxDQUFlLE9BQWY7QUFESjtJQUdBLElBQUMsQ0FBQSxTQUFELENBQUE7QUFHQSxXQUFPO0VBVEg7Ozs7R0E3RCtCLEVBQUUsQ0FBQzs7QUF3RTlDLEVBQUUsQ0FBQyw0QkFBSCxHQUFrQyIsInNvdXJjZXNDb250ZW50IjpbIiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuI1xuIyAgIFNjcmlwdDogQ29tcG9uZW50X0ZyZWVMYXlvdXRCZWhhdmlvclxuI1xuIyAgICQkQ09QWVJJR0hUJCRcbiNcbiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuY2xhc3MgQ29tcG9uZW50X0ZyZWVMYXlvdXRCZWhhdmlvciBleHRlbmRzIGdzLkNvbXBvbmVudF9MYXlvdXRCZWhhdmlvclxuICAgICMjIypcbiAgICAqIFR1cm5zIGEgZ2FtZSBvYmplY3QgaW50byBhIGZyZWUtbGF5b3V0IGFuZCBsYXlvdXRzIGFsbCBzdWItb2JqZWN0c1xuICAgICogYXQgdGhlaXIgc3BlY2lmaWVkIHBvc2l0aW9ucy4gU28gdGhhdCBraW5kIG9mIGxheW91dCBhbGxvd3MgZWFjaCBzdWItb2JqZWN0XG4gICAgKiB0byBiZSBmcmVlbHkgcG9zaXRpb25lZC5cbiAgICAqIDxicj5cbiAgICAqIEluIGFkZGl0aW9uLCBlYWNoIHN1Yi1vYmplY3QgY2FuIGhhdmUgZGlmZmVyZW50IGFsaWdubWVudCBvcHRpb25zLlxuICAgICpcbiAgICAqIEBtb2R1bGUgZ3NcbiAgICAqIEBjbGFzcyBDb21wb25lbnRfRnJlZUxheW91dEJlaGF2aW9yXG4gICAgKiBAZXh0ZW5kcyBncy5Db21wb25lbnRfTGF5b3V0QmVoYXZpb3JcbiAgICAqIEBtZW1iZXJvZiBnc1xuICAgICogQGNvbnN0cnVjdG9yXG4gICAgIyMjXG4gICAgY29uc3RydWN0b3I6IC0+IFxuICAgICAgICBzdXBlclxuXG4gICAgIyMjKlxuICAgICogU2l6ZXMgdGhlIGxheW91dCB0byBmaXQgaXRzIGNvbnRlbnQuXG4gICAgKlxuICAgICogQG1ldGhvZCBzaXplVG9GaXRcbiAgICAjIyMgXG4gICAgc2l6ZVRvRml0OiAtPlxuICAgICAgICByZWN0ID0gQG9iamVjdC5kc3RSZWN0XG4gICAgICAgIGlmIEBvYmplY3Quc2l6ZVRvRml0XG4gICAgICAgICAgICBmb3IgY29udHJvbCBpbiBAb2JqZWN0LnN1Yk9iamVjdHNcbiAgICAgICAgICAgICAgICBpZiAhY29udHJvbC5hbGlnbm1lbnRYXG4gICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGggPSBNYXRoLm1heChjb250cm9sLm1hcmdpbi5sZWZ0ICsgY29udHJvbC5kc3RSZWN0LndpZHRoICsgY29udHJvbC5tYXJnaW4ucmlnaHQsIHJlY3Qud2lkdGggfHwgMSlcbiAgICAgICAgICAgICAgICBpZiAhY29udHJvbC5hbGlnbm1lbnRZXG4gICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0ID0gTWF0aC5tYXgoY29udHJvbC5tYXJnaW4udG9wICsgY29udHJvbC5kc3RSZWN0LmhlaWdodCArIGNvbnRyb2wubWFyZ2luLmJvdHRvbSwgcmVjdC5oZWlnaHQgfHwgMSlcbiAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIGEgc3BlY2lmaWVkIGNvbnRyb2wuXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVDb250cm9sXG4gICAgKiBAcHJvdGVjdGVkXG4gICAgKiBAcGFyYW0ge2dzLk9iamVjdF9CYXNlfSBjb250cm9sIFRoZSBjb250cm9sIHRvIHVwZGF0ZVxuICAgICMjIyAgICAgICAgIFxuICAgIHVwZGF0ZUNvbnRyb2w6IChjb250cm9sKSAtPlxuICAgICAgICBzdXBlclxuICAgICAgICBcbiAgICAgICAgcmVjdCA9IEBvYmplY3QuZHN0UmVjdFxuICAgICAgICBtYXJnaW4gPSBjb250cm9sLm1hcmdpblxuXG4gICAgICAgIGlmIGNvbnRyb2wuYWxpZ25tZW50WCA9PSAxXG4gICAgICAgICAgICBjb250cm9sLmRzdFJlY3QueCA9IChyZWN0LndpZHRoIC0gKGNvbnRyb2wuZHN0UmVjdC53aWR0aCttYXJnaW4ucmlnaHQrbWFyZ2luLmxlZnQpKSAvIDJcbiAgICAgICAgZWxzZSBpZiBjb250cm9sLmFsaWdubWVudFggPT0gMlxuICAgICAgICAgICAgY29udHJvbC5kc3RSZWN0LnggPSByZWN0LndpZHRoKkBvYmplY3Quem9vbS54IC0gKGNvbnRyb2wuZHN0UmVjdC53aWR0aCArIGNvbnRyb2wubWFyZ2luLnJpZ2h0KSpjb250cm9sLnpvb20ueCBcbiAgICAgXG4gICAgICAgIGlmIGNvbnRyb2wuYWxpZ25tZW50WSA9PSAxXG4gICAgICAgICAgICBjb250cm9sLmRzdFJlY3QueSA9IChyZWN0LmhlaWdodCpAb2JqZWN0Lnpvb20ueSAtIChjb250cm9sLmRzdFJlY3QuaGVpZ2h0K21hcmdpbi5ib3R0b20rbWFyZ2luLnRvcCkqY29udHJvbC56b29tLnkpIC8gMlxuICAgICAgICBlbHNlIGlmIGNvbnRyb2wuYWxpZ25tZW50WSA9PSAyXG4gICAgICAgICAgICBjb250cm9sLmRzdFJlY3QueSA9IHJlY3QuaGVpZ2h0IC0gKGNvbnRyb2wuZHN0UmVjdC5oZWlnaHQgKyBjb250cm9sLm1hcmdpbi5ib3R0b20pXG4gICAgICAgXG4gICAgICAgIFxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBMYXlvdXRzIHRoZSBzdWItb2JqZWN0cy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHVwZGF0ZVxuICAgICMjI1xuICAgIHVwZGF0ZTogLT5cbiAgICAgICAgc3VwZXJcbiAgICAgICAgXG4gICAgICAgIGZvciBjb250cm9sLCBpIGluIEBvYmplY3Quc3ViT2JqZWN0c1xuICAgICAgICAgICAgQHVwZGF0ZUNvbnRyb2woY29udHJvbClcbiAgICAgICAgICAgIFxuICAgICAgICBAc2l6ZVRvRml0KClcbiBcbiAgICAgICAgICAgIFxuICAgICAgICByZXR1cm4gbnVsbCAgICBcbiAgICAgICAgXG5ncy5Db21wb25lbnRfRnJlZUxheW91dEJlaGF2aW9yID0gQ29tcG9uZW50X0ZyZWVMYXlvdXRCZWhhdmlvciJdfQ==\n//# sourceURL=Component_FreeLayoutBehavior_58.js"},"summary":["name","type","order"]}
|