diff options
Diffstat (limited to 'js/controllers')
-rwxr-xr-x | js/controllers/elements/shapes-controller.js | 79 | ||||
-rwxr-xr-x | js/controllers/styles-controller.js | 11 |
2 files changed, 69 insertions, 21 deletions
diff --git a/js/controllers/elements/shapes-controller.js b/js/controllers/elements/shapes-controller.js index 74353454..c3099459 100755 --- a/js/controllers/elements/shapes-controller.js +++ b/js/controllers/elements/shapes-controller.js | |||
@@ -138,6 +138,10 @@ exports.ShapesController = Montage.create(CanvasController, { | |||
138 | this.application.ninja.elementMediator.replaceElement(canvas, el); | 138 | this.application.ninja.elementMediator.replaceElement(canvas, el); |
139 | break; | 139 | break; |
140 | case "strokeMaterial": | 140 | case "strokeMaterial": |
141 | // skip shape types that don't support WebGL | ||
142 | if(!el.elementModel.shapeModel.useWebGl) { | ||
143 | return; | ||
144 | } | ||
141 | m = Object.create(MaterialsModel.getMaterial(value)); | 145 | m = Object.create(MaterialsModel.getMaterial(value)); |
142 | if(m) | 146 | if(m) |
143 | { | 147 | { |
@@ -152,6 +156,10 @@ exports.ShapesController = Montage.create(CanvasController, { | |||
152 | } | 156 | } |
153 | break; | 157 | break; |
154 | case "fillMaterial": | 158 | case "fillMaterial": |
159 | // skip shape types that don't support WebGL or fill color | ||
160 | if(!el.elementModel.shapeModel.GLGeomObj.canFill || !el.elementModel.shapeModel.useWebGl) { | ||
161 | return; | ||
162 | } | ||
155 | m = Object.create(MaterialsModel.getMaterial(value)); | 163 | m = Object.create(MaterialsModel.getMaterial(value)); |
156 | if(m) | 164 | if(m) |
157 | { | 165 | { |
@@ -445,17 +453,17 @@ exports.ShapesController = Montage.create(CanvasController, { | |||
445 | 453 | ||
446 | if(gradientM) | 454 | if(gradientM) |
447 | { | 455 | { |
448 | if(isFill) | 456 | if(isFill) |
449 | { | 457 | { |
450 | el.elementModel.shapeModel.GLGeomObj.setFillMaterial(gradientM); | 458 | el.elementModel.shapeModel.GLGeomObj.setFillMaterial(gradientM); |
451 | } | 459 | } |
452 | else | 460 | else |
453 | { | 461 | { |
454 | el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(gradientM); | 462 | el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(gradientM); |
455 | } | 463 | } |
456 | el.elementModel.shapeModel.GLGeomObj.buildBuffers(); | 464 | el.elementModel.shapeModel.GLGeomObj.buildBuffers(); |
457 | } | 465 | } |
458 | } | 466 | } |
459 | }, | 467 | }, |
460 | 468 | ||
461 | _setFlatMaterial: { | 469 | _setFlatMaterial: { |
@@ -472,10 +480,13 @@ exports.ShapesController = Montage.create(CanvasController, { | |||
472 | } | 480 | } |
473 | 481 | ||
474 | if(!m || ((m.getName() === "Linear Gradient") || m.getName() === "Radial Gradient") ) | 482 | if(!m || ((m.getName() === "Linear Gradient") || m.getName() === "Radial Gradient") ) |
475 | { | 483 | { |
484 | // Uber Material also supports solid colors, so don't change from Uber to Flat Material | ||
485 | if(m && (m.getName() === "Uber")) { return; } | ||
486 | |||
476 | flatM = Object.create(MaterialsModel.getMaterial("Flat")); | 487 | flatM = Object.create(MaterialsModel.getMaterial("Flat")); |
477 | if(flatM) | 488 | if(flatM) |
478 | { | 489 | { |
479 | if(isFill) | 490 | if(isFill) |
480 | { | 491 | { |
481 | el.elementModel.shapeModel.GLGeomObj.setFillMaterial(flatM); | 492 | el.elementModel.shapeModel.GLGeomObj.setFillMaterial(flatM); |
@@ -484,10 +495,10 @@ exports.ShapesController = Montage.create(CanvasController, { | |||
484 | { | 495 | { |
485 | el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(flatM); | 496 | el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(flatM); |
486 | } | 497 | } |
487 | el.elementModel.shapeModel.GLGeomObj.buildBuffers(); | 498 | el.elementModel.shapeModel.GLGeomObj.buildBuffers(); |
488 | } | ||
489 | } | 499 | } |
490 | } | 500 | } |
501 | } | ||
491 | }, | 502 | }, |
492 | 503 | ||
493 | setColor: { | 504 | setColor: { |
@@ -597,14 +608,31 @@ exports.ShapesController = Montage.create(CanvasController, { | |||
597 | 608 | ||
598 | setStroke: { | 609 | setStroke: { |
599 | value: function(el, stroke, eventType, source) { | 610 | value: function(el, stroke, eventType, source) { |
600 | if(stroke.colorInfo) { | ||
601 | this.setColor(el, stroke.colorInfo, false); | ||
602 | } | ||
603 | if(stroke.shapeInfo) { | 611 | if(stroke.shapeInfo) { |
604 | this.setProperty(el, "strokeSize", stroke.shapeInfo.strokeSize + " " + stroke.shapeInfo.strokeUnits, eventType, source); | 612 | this.setProperty(el, "strokeSize", stroke.shapeInfo.strokeSize + " " + stroke.shapeInfo.strokeUnits, eventType, source); |
605 | } | 613 | } |
614 | var m; | ||
606 | if(stroke.webGLInfo) { | 615 | if(stroke.webGLInfo) { |
607 | this.setProperty(el, "strokeMaterial", stroke.webGLInfo.material); | 616 | m = stroke.webGLInfo.material; |
617 | this.setProperty(el, "strokeMaterial", m); | ||
618 | if((m === "Linear Gradient") || (m === "Radial Gradient")) { | ||
619 | // Just use the default gradient material values | ||
620 | return; | ||
621 | } | ||
622 | } | ||
623 | if(stroke.colorInfo) { | ||
624 | if(el.elementModel.shapeModel.useWebGl) { | ||
625 | m = el.elementModel.shapeModel.GLGeomObj.getStrokeMaterial().getName(); | ||
626 | if( ((stroke.colorInfo.mode === "gradient") && (m !== "Linear Gradient") && (m !== "Radial Gradient")) || | ||
627 | ((stroke.colorInfo.mode !== "gradient") && ((m === "Linear Gradient") || (m === "Radial Gradient")))) | ||
628 | { | ||
629 | return; | ||
630 | } else { | ||
631 | this.setColor(el, stroke.colorInfo, false); | ||
632 | } | ||
633 | } else { | ||
634 | this.setColor(el, stroke.colorInfo, false); | ||
635 | } | ||
608 | } | 636 | } |
609 | } | 637 | } |
610 | }, | 638 | }, |
@@ -638,11 +666,28 @@ exports.ShapesController = Montage.create(CanvasController, { | |||
638 | 666 | ||
639 | setFill: { | 667 | setFill: { |
640 | value: function(el, fill) { | 668 | value: function(el, fill) { |
641 | if(fill.colorInfo) { | 669 | var m; |
642 | this.setColor(el, fill.colorInfo, true); | ||
643 | } | ||
644 | if(fill.webGLInfo) { | 670 | if(fill.webGLInfo) { |
645 | this.setProperty(el, "fillMaterial", fill.webGLInfo.material); | 671 | m = fill.webGLInfo.material; |
672 | this.setProperty(el, "fillMaterial", m); | ||
673 | if((m === "Linear Gradient") || (m === "Radial Gradient")) { | ||
674 | // Just use the default gradient material values | ||
675 | return; | ||
676 | } | ||
677 | } | ||
678 | if(fill.colorInfo) { | ||
679 | if(el.elementModel.shapeModel.useWebGl) { | ||
680 | m = el.elementModel.shapeModel.GLGeomObj.getFillMaterial().getName(); | ||
681 | if( ((fill.colorInfo.mode === "gradient") && (m !== "Linear Gradient") && (m !== "Radial Gradient")) || | ||
682 | ((fill.colorInfo.mode !== "gradient") && ((m === "Linear Gradient") || (m === "Radial Gradient")))) | ||
683 | { | ||
684 | return; | ||
685 | } else { | ||
686 | this.setColor(el, fill.colorInfo, true); | ||
687 | } | ||
688 | } else { | ||
689 | this.setColor(el, fill.colorInfo, true); | ||
690 | } | ||
646 | } | 691 | } |
647 | } | 692 | } |
648 | }, | 693 | }, |
diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js index b50f43cc..6e363798 100755 --- a/js/controllers/styles-controller.js +++ b/js/controllers/styles-controller.js | |||
@@ -213,6 +213,9 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
213 | 213 | ||
214 | stylesheet.insertRule(ruleText, index); | 214 | stylesheet.insertRule(ruleText, index); |
215 | 215 | ||
216 | ///// Invalidate cache because rule dominance is affected | ||
217 | this._clearCache(); | ||
218 | |||
216 | this.styleSheetModified(stylesheet); | 219 | this.styleSheetModified(stylesheet); |
217 | 220 | ||
218 | rule = stylesheet.rules[index]; | 221 | rule = stylesheet.rules[index]; |
@@ -791,7 +794,7 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
791 | var a = this._getMostSpecificSelectorForElement(element, rule1[this.CONST.SPECIFICITY_KEY]), | 794 | var a = this._getMostSpecificSelectorForElement(element, rule1[this.CONST.SPECIFICITY_KEY]), |
792 | b = this._getMostSpecificSelectorForElement(element, rule2[this.CONST.SPECIFICITY_KEY]), | 795 | b = this._getMostSpecificSelectorForElement(element, rule2[this.CONST.SPECIFICITY_KEY]), |
793 | win = element.ownerDocument.defaultView, | 796 | win = element.ownerDocument.defaultView, |
794 | order; | 797 | order, sheetAIndex, sheetBIndex, ruleAIndex, ruleBIndex; |
795 | 798 | ||
796 | order = this.compareSpecificity(a.specificity, b.specificity); | 799 | order = this.compareSpecificity(a.specificity, b.specificity); |
797 | 800 | ||
@@ -802,9 +805,9 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
802 | /// If tied again (same sheet), determine which is further down in the sheet | 805 | /// If tied again (same sheet), determine which is further down in the sheet |
803 | if(sheetAIndex === sheetBIndex) { | 806 | if(sheetAIndex === sheetBIndex) { |
804 | ruleAIndex = this.getRuleIndex(rule1); ruleBIndex = this.getRuleIndex(rule2); | 807 | ruleAIndex = this.getRuleIndex(rule1); ruleBIndex = this.getRuleIndex(rule2); |
805 | return ruleAIndex < ruleBIndex ? 1 : (ruleAIndex > ruleBIndex) ? -1 : 0; | 808 | return ruleAIndex < ruleBIndex ? false : (ruleAIndex > ruleBIndex) ? true : false; |
806 | } else { | 809 | } else { |
807 | return sheetAIndex < sheetBIndex ? 1 : (sheetAIndex > sheetBIndex) ? -1 : 0; | 810 | return sheetAIndex < sheetBIndex ? false : (sheetAIndex > sheetBIndex) ? true : false; |
808 | } | 811 | } |
809 | } | 812 | } |
810 | 813 | ||
@@ -1453,11 +1456,11 @@ var stylesController = exports.StylesController = Montage.create(Component, { | |||
1453 | 1456 | ||
1454 | ///// Dispatch modified event | 1457 | ///// Dispatch modified event |
1455 | NJevent('styleSheetModified', eventData); | 1458 | NJevent('styleSheetModified', eventData); |
1459 | this.currentDocument.model.needsSave = true; | ||
1456 | 1460 | ||
1457 | ///// If the sheet doesn't already exist in the list of modified |