_base.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. define("dojox/geo/charting/_base", ["dojo/_base/lang","dojo/_base/array","../../main", "dojo/_base/html","dojo/dom-geometry",
  2. "dojox/gfx/matrix","dijit/Tooltip","dojo/_base/NodeList","dojo/NodeList-traverse"],
  3. function(lang, arr, dojox, html, domGeom, matrix, Tooltip, NodeList, NodeListTraverse) {
  4. var dgc = lang.getObject("geo.charting", true, dojox);
  5. dgc.showTooltip = function(/*String*/innerHTML, /*dojox.gfx.shape*/ gfxObject, /*String[]?*/ positions){
  6. var arroundNode = dgc._normalizeArround(gfxObject);
  7. return Tooltip.show(innerHTML, arroundNode, positions);
  8. };
  9. dgc.hideTooltip = function( /*dojox.gfx.shape*/gfxObject){
  10. return Tooltip.hide(gfxObject);
  11. };
  12. dgc._normalizeArround = function(gfxObject){
  13. var bbox = dgc._getRealBBox(gfxObject);
  14. //var bbox = gfxObject.getBoundingBox();
  15. //get the real screen coords for gfx object
  16. var realMatrix = gfxObject._getRealMatrix() || {xx:1,xy:0,yx:0,yy:1,dx:0,dy:0};
  17. var point = matrix.multiplyPoint(realMatrix, bbox.x, bbox.y);
  18. var gfxDomContainer = dgc._getGfxContainer(gfxObject);
  19. gfxObject.x = domGeom.position(gfxDomContainer,true).x + point.x,
  20. gfxObject.y = domGeom.position(gfxDomContainer,true).y + point.y,
  21. gfxObject.w = bbox.width * realMatrix.xx,
  22. gfxObject.h = bbox.height * realMatrix.yy
  23. return gfxObject;
  24. };
  25. dgc._getGfxContainer = function(gfxObject){
  26. if (gfxObject.surface) {
  27. return (new NodeList(gfxObject.surface.rawNode)).parents("div")[0];
  28. } else {
  29. return (new NodeList(gfxObject.rawNode)).parents("div")[0];
  30. }
  31. };
  32. dgc._getRealBBox = function(gfxObject){
  33. var bboxObject = gfxObject.getBoundingBox();
  34. if(!bboxObject){//the gfx object is group
  35. var shapes = gfxObject.children;
  36. bboxObject = lang.clone(dgc._getRealBBox(shapes[0]));
  37. arr.forEach(shapes, function(item){
  38. var nextBBox = dgc._getRealBBox(item);
  39. bboxObject.x = Math.min(bboxObject.x, nextBBox.x);
  40. bboxObject.y = Math.min(bboxObject.y, nextBBox.y);
  41. bboxObject.endX = Math.max(bboxObject.x + bboxObject.width, nextBBox.x + nextBBox.width);
  42. bboxObject.endY = Math.max(bboxObject.y + bboxObject.height, nextBBox.y + nextBBox.height);
  43. });
  44. bboxObject.width = bboxObject.endX - bboxObject.x;
  45. bboxObject.height = bboxObject.endY - bboxObject.y;
  46. }
  47. return bboxObject;
  48. };
  49. });