define("dojox/treemap/ScaledLabel", ["dojo/_base/declare", "dojo/dom-geometry", "dojo/dom-construct", "dojo/dom-style"], function(declare, domGeom, domConstruct, domStyle) { return declare("dojox.treemap.ScaledLabel", null, { // summary: // Specializes TreeMap to display scaled leaf labels instead of constant size labels. onRendererUpdated: function(evt){ if(evt.kind == "leaf"){ var renderer = evt.renderer; // start back with default size var oldSize = domStyle.get(renderer, "fontSize"); domStyle.set(renderer.firstChild, "fontSize", oldSize); oldSize = parseInt(oldSize); var hRatio = 0.75 * domGeom.getContentBox(renderer).w / domGeom.getMarginBox(renderer.firstChild).w; var vRatio = domGeom.getContentBox(renderer).h / domGeom.getMarginBox(renderer.firstChild).h; var hDiff = domGeom.getContentBox(renderer).w - domGeom.getMarginBox(renderer.firstChild).w; var vDiff = domGeom.getContentBox(renderer).h - domGeom.getMarginBox(renderer.firstChild).h; var newSize = Math.floor(oldSize * Math.min(hRatio, vRatio)); while(vDiff > 0 && hDiff > 0){ domStyle.set(renderer.firstChild, "fontSize", newSize + "px"); hDiff = domGeom.getContentBox(renderer).w - domGeom.getMarginBox(renderer.firstChild).w; vDiff = domGeom.getContentBox(renderer).h - domGeom.getMarginBox(renderer.firstChild).h; oldSize = newSize; newSize += 1; } if(vDiff < 0 || hDiff < 0){ // back track domStyle.set(renderer.firstChild, "fontSize", oldSize + "px"); } } }, createRenderer: function(item, level, kind){ var renderer = this.inherited(arguments); if(kind == "leaf"){ var p = domConstruct.create("div"); domStyle.set(p, { "position": "absolute", "width": "auto" }); domConstruct.place(p, renderer); } return renderer; }, styleRenderer: function(renderer, item, level, kind){ if (kind != "leaf"){ this.inherited(arguments); }else{ domStyle.set(renderer, "background", this.getColorForItem(item).toHex()); renderer.firstChild.innerHTML = this.getLabelForItem(item); } } }); });