[483] | 1 | define(["dojo/_base/declare", "dojo/dom-geometry", "dojo/dom-construct", "dojo/dom-style"], |
---|
| 2 | function(declare, domGeom, domConstruct, domStyle) { |
---|
| 3 | |
---|
| 4 | return declare("dojox.treemap.ScaledLabel", null, { |
---|
| 5 | // summary: |
---|
| 6 | // Specializes TreeMap to display scaled leaf labels instead of constant size labels. |
---|
| 7 | |
---|
| 8 | onRendererUpdated: function(evt){ |
---|
| 9 | if(evt.kind == "leaf"){ |
---|
| 10 | var renderer = evt.renderer; |
---|
| 11 | // start back with default size |
---|
| 12 | var oldSize = domStyle.get(renderer, "fontSize"); |
---|
| 13 | domStyle.set(renderer.firstChild, "fontSize", oldSize); |
---|
| 14 | oldSize = parseInt(oldSize); |
---|
| 15 | var hRatio = 0.75 * domGeom.getContentBox(renderer).w / domGeom.getMarginBox(renderer.firstChild).w; |
---|
| 16 | var vRatio = domGeom.getContentBox(renderer).h / domGeom.getMarginBox(renderer.firstChild).h; |
---|
| 17 | var hDiff = domGeom.getContentBox(renderer).w - domGeom.getMarginBox(renderer.firstChild).w; |
---|
| 18 | var vDiff = domGeom.getContentBox(renderer).h - domGeom.getMarginBox(renderer.firstChild).h; |
---|
| 19 | var newSize = Math.floor(oldSize * Math.min(hRatio, vRatio)); |
---|
| 20 | while(vDiff > 0 && hDiff > 0){ |
---|
| 21 | domStyle.set(renderer.firstChild, "fontSize", newSize + "px"); |
---|
| 22 | hDiff = domGeom.getContentBox(renderer).w - domGeom.getMarginBox(renderer.firstChild).w; |
---|
| 23 | vDiff = domGeom.getContentBox(renderer).h - domGeom.getMarginBox(renderer.firstChild).h; |
---|
| 24 | oldSize = newSize; |
---|
| 25 | newSize += 1; |
---|
| 26 | } |
---|
| 27 | if(vDiff < 0 || hDiff < 0){ |
---|
| 28 | // back track |
---|
| 29 | domStyle.set(renderer.firstChild, "fontSize", oldSize + "px"); |
---|
| 30 | } |
---|
| 31 | } |
---|
| 32 | }, |
---|
| 33 | |
---|
| 34 | createRenderer: function(item, level, kind){ |
---|
| 35 | var renderer = this.inherited(arguments); |
---|
| 36 | if(kind == "leaf"){ |
---|
| 37 | var p = domConstruct.create("div"); |
---|
| 38 | domStyle.set(p, { |
---|
| 39 | "position": "absolute", |
---|
| 40 | "width": "auto" |
---|
| 41 | }); |
---|
| 42 | domConstruct.place(p, renderer); |
---|
| 43 | } |
---|
| 44 | return renderer; |
---|
| 45 | }, |
---|
| 46 | |
---|
| 47 | styleRenderer: function(renderer, item, level, kind){ |
---|
| 48 | if (kind != "leaf"){ |
---|
| 49 | this.inherited(arguments); |
---|
| 50 | }else{ |
---|
| 51 | domStyle.set(renderer, "background", this.getColorForItem(item).toHex()); |
---|
| 52 | renderer.firstChild.innerHTML = this.getLabelForItem(item); |
---|
| 53 | } |
---|
| 54 | } |
---|
| 55 | }); |
---|
| 56 | }); |
---|