* @function Label.prototype.getLabelInfo * @description 根据当前位置获取绘制后的标签信息,包括标签的宽,高和行数等。 * @returns {Object} 绘制后的标签信息。
(location, style)
| 629 | * @returns {Object} 绘制后的标签信息。 |
| 630 | */ |
| 631 | getLabelInfo(location, style) { |
| 632 | var LABEL_ALIGN = { |
| 633 | "l": "left", |
| 634 | "r": "right", |
| 635 | "t": "top", |
| 636 | "b": "bottom" |
| 637 | }, |
| 638 | LABEL_FACTOR = { |
| 639 | "l": 0, |
| 640 | "r": -1, |
| 641 | "t": 0, |
| 642 | "b": -1 |
| 643 | }; |
| 644 | |
| 645 | style = CommonUtil.extend({ |
| 646 | fontColor: "#000000", |
| 647 | labelAlign: "cm" |
| 648 | }, style); |
| 649 | var pt = this.getLocalXY(location); |
| 650 | var labelWidth = 0; |
| 651 | |
| 652 | if (style.labelXOffset || style.labelYOffset) { |
| 653 | var xOffset = isNaN(style.labelXOffset) ? 0 : style.labelXOffset; |
| 654 | var yOffset = isNaN(style.labelYOffset) ? 0 : style.labelYOffset; |
| 655 | pt[0] += xOffset; |
| 656 | pt[1] -= yOffset; |
| 657 | } |
| 658 | |
| 659 | var canvas = document.createElement('canvas'); |
| 660 | canvas.globalAlpha = 0; |
| 661 | canvas.lineWidth = 1; |
| 662 | |
| 663 | var ctx = canvas.getContext("2d"); |
| 664 | |
| 665 | ctx.fillStyle = style.fontColor; |
| 666 | ctx.globalAlpha = style.fontOpacity || 1.0; |
| 667 | var fontStyle = [style.fontStyle ? style.fontStyle : "normal", |
| 668 | "normal", |
| 669 | style.fontWeight ? style.fontWeight : "normal", |
| 670 | style.fontSize ? style.fontSize : "1em", |
| 671 | style.fontFamily ? style.fontFamily : "sans-serif" |
| 672 | ].join(" "); |
| 673 | var labelRows = style.label.split('\n'); |
| 674 | var numRows = labelRows.length; |
| 675 | var vfactor, lineHeight, labelWidthTmp; |
| 676 | if (ctx.fillText) { |
| 677 | // HTML5 |
| 678 | ctx.font = fontStyle; |
| 679 | ctx.textAlign = LABEL_ALIGN[style.labelAlign[0]] || |
| 680 | "center"; |
| 681 | ctx.textBaseline = LABEL_ALIGN[style.labelAlign[1]] || |
| 682 | "middle"; |
| 683 | vfactor = LABEL_FACTOR[style.labelAlign[1]]; |
| 684 | if (vfactor == null) { |
| 685 | vfactor = -.5; |
| 686 | } |
| 687 | lineHeight = ctx.measureText('Mg').height || |
| 688 | ctx.measureText('xx').width; |
no test coverage detected