Commit 9ee4703d authored by Igor.Zotov's avatar Igor.Zotov Committed by Alexander.Trofimov

корректировка отрисовки текста внутри диаграммы

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@47499 954022d7-b5bf-4e40-9824-e11837661b57
parent 0daa352e
...@@ -380,63 +380,6 @@ function calcGutter(axis,min,max,ymin,ymax,isSkip,isFormatCell) { ...@@ -380,63 +380,6 @@ function calcGutter(axis,min,max,ymin,ymax,isSkip,isFormatCell) {
if ('scatter' == bar.type) { if ('scatter' == bar.type) {
bar.scale = OfficeExcel.getScale(false, bar,min,max,ymin,ymax); bar.scale = OfficeExcel.getScale(false, bar,min,max,ymin,ymax);
bar.xScale = OfficeExcel.getScale(true, bar,min,max,ymin,ymax); bar.xScale = OfficeExcel.getScale(true, bar,min,max,ymin,ymax);
if (bar._otherProps._ymax > 0 && bar._otherProps._ymin < 0) {
bar._chartGutter._bottom = 14;
bar._chartGutter._top = 14;
}
else if (bar._otherProps._ymax <= 0 && bar._otherProps._ymin < 0) {
bar._chartGutter._bottom = 14;
bar._chartGutter._top = 14;
}
else {
bar._chartGutter._bottom = 14 + 20;
bar._chartGutter._top = 14;
}
if (bar._otherProps._xmax > 0 && bar._otherProps._xmin < 0) {
bar._chartGutter._left = 22;
bar._chartGutter._right = 93;
}
else if (bar._otherProps._xmax <= 0 && bar._otherProps._xmin < 0) {
bar._chartGutter._left = 22;
bar._chartGutter._right = 93;
}
else {
bar._chartGutter._left = bar.context.measureText(Math.max.apply(null, bar.scale)).width + 22;
bar._chartGutter._right = 93;
}
}
else if ('hbar' == bar.type || 'bar' == bar.type) {
if ('hbar' == bar.type)
bar._chartGutter._left = bar.context.measureText(Math.max.apply(null, [bar.data.length])).width + 20;
else
bar._chartGutter._left = bar.context.measureText(Math.max.apply(null, scale)).width + 20;
bar._chartGutter._right = 72;
bar._chartGutter._bottom = 35;
bar._chartGutter._top = 14;
}
else {
if (axis == undefined) {
bar._chartGutter._left = bar.context.measureText(Math.max.apply(null, scale)).width + 18;
if (bar._otherProps._filled == true)
bar._chartGutter._right = 76;
else
bar._chartGutter._right = 90;
if (min < 0 && max < 0 || min < 0 && max > 0)
bar._chartGutter._bottom = 13;
else
bar._chartGutter._bottom = 34;
bar._chartGutter._top = 13;
}
else if (axis == 'OX') {
if (min < 0 && max < 0 || min < 0 && max > 0)
bar._chartGutter._bottom = 13;
else
bar._chartGutter._bottom = 34;
}
else if (axis == 'OY') {
bar._chartGutter._left = bar.context.measureText(Math.max.apply(null, scale)).width + 18;
}
} }
} }
//ширины самих линий графика //ширины самих линий графика
...@@ -498,6 +441,11 @@ function calcWidthGraph() { ...@@ -498,6 +441,11 @@ function calcWidthGraph() {
} }
function calcAllMargin(isFormatCell,isformatCellScOy,minX,maxX,minY,maxY, chart) { function calcAllMargin(isFormatCell,isformatCellScOy,minX,maxX,minY,maxY, chart) {
var scale = 1;
if(OfficeExcel && OfficeExcel.drawingCtxCharts)
scale = OfficeExcel.drawingCtxCharts.scaleFactor;
var context = OfficeExcel.drawingCtxCharts;
if (typeof (bar.data[0]) == 'object') { if (typeof (bar.data[0]) == 'object') {
var arrMin = []; var arrMin = [];
var arrMax = []; var arrMax = [];
...@@ -584,61 +532,82 @@ function calcAllMargin(isFormatCell,isformatCellScOy,minX,maxX,minY,maxY, chart) ...@@ -584,61 +532,82 @@ function calcAllMargin(isFormatCell,isformatCellScOy,minX,maxX,minY,maxY, chart)
var bottom = 0; var bottom = 0;
var right = 0; var right = 0;
var top = 0; var top = 0;
if (bar._otherProps._key_halign == 'left')
left += 76;
else if (bar._otherProps._key_halign == 'right')
right += 76;
else if (bar._otherProps._key_halign == 'top')
top +=32;
else if (bar._otherProps._key_halign == 'bottom')
bottom +=32;
if (bar._chartTitle._text != null && bar._chartTitle._text != '')
top += 42;
} }
else else
{ {
if (bar._otherProps._key_halign == 'left')
left += 76;
if (bar._yAxisTitle._align == 'rev') if (bar._yAxisTitle._align == 'rev')
left += 28; {
var font = getFontProperties("yTitle");
var axisTitleProp = getMaxPropertiesText(context,font, bar._yAxisTitle._text);
var heigthText = (context.getHeightText()/0.75);
//прибавляем высоту текста названия + стандартный маргин
left += heigthText + 12;
}
else if (bar._yAxisTitle._align == 'hor') else if (bar._yAxisTitle._align == 'hor')
left += 95; left += 95;
else if (bar._yAxisTitle._align == 'ver') else if (bar._yAxisTitle._align == 'ver')
left += 0; left += 0;
var right = 0; var right = 0;
if (bar._otherProps._key_halign == 'right')
right += 76;
var top = 0; var top = 0;
if (bar._otherProps._key_halign == 'top')
top += 32;
if (bar._chartTitle._text != null && bar._chartTitle._text != '')
top += 42;
var bottom = 0; var bottom = 0;
if (bar._otherProps._key_halign == 'bottom')
bottom += 32;
if (bar._xAxisTitle._text != '') if (bar._xAxisTitle._text != '')
{ {
bottom += 20; var font = getFontProperties("xTitle");
var axisTitleProp = getMaxPropertiesText(context,font, bar._xAxisTitle._text);
var heigthText = (context.getHeightText()/0.75);
//прибавляем высоту текста названия + стандартный маргин
bottom += heigthText + 14;
} }
if ((min >= 0 || bar.type == 'hbar') && bar._otherProps._xlabels) if ((min >= 0 || bar.type == 'hbar') && bar._otherProps._xlabels)
{ {
bottom +=20; bottom +=20;
} }
if(bar._xAxisTitle._text != '' && (min >= 0 || bar.type == 'hbar') && bar._otherProps._xlabels) if(bar._xAxisTitle._text == '' && (min >= 0 || bar.type == 'hbar') && bar._otherProps._xlabels)
bottom += 7; bottom += 7;
} }
var scale = 1;
if(OfficeExcel && OfficeExcel.drawingCtxCharts) //+высота названия диаграммы
scale = OfficeExcel.drawingCtxCharts.scaleFactor; if (bar._chartTitle._text != null && bar._chartTitle._text != '')
bar._chartGutter._left = (standartMargin + left)*scale; {
var font = getFontProperties("title");
var axisTitleProp = getMaxPropertiesText(context,font, bar._chartTitle._text);
var heigthText = (context.getHeightText()/0.75);
//прибавляем высоту текста названия + стандартный маргин
top += heigthText + 7;
}
//+ высота легенды
if(bar._otherProps._key_halign == 'top' || bar._otherProps._key_halign == 'bottom')
{
var font = getFontProperties("key");
var props = getMaxPropertiesText(context,font,bar._otherProps._key);
var heigthTextKey = (context.getHeightText()/0.75);
if(bar._otherProps._key_halign == 'top')
top += heigthTextKey + 7;
else
bottom += heigthTextKey + 7;
}
//+ ширина легенды
if (bar._otherProps._key_halign == 'left' || bar._otherProps._key_halign == 'right')
{
var widthLine = 28;
//находим ширину текста легенды(то есть её максимального элемента), в дальнейшем будем возвращать ширину автофигуры
var font = getFontProperties("key");
var widthText = getMaxPropertiesText(context,font,bar._otherProps._key);
var widthKey = widthText.width/scale + 2 + widthLine;
//в MSExcel справа от легенды всегда остаётся такой маргин
if(bar._otherProps._key_halign == 'left')
left += widthKey + 7;
else
right += widthKey + 7;
}
if(bottom == 0)
bottom = standartMargin;
bar._chartGutter._left = (left)*scale + standartMargin;
bar._chartGutter._right = (standartMargin + right)*scale; bar._chartGutter._right = (standartMargin + right)*scale;
bar._chartGutter._top = (standartMargin + top)*scale; bar._chartGutter._top = (standartMargin + top)*scale;
bar._chartGutter._bottom = (bottom + standartMargin)*scale; bar._chartGutter._bottom = (bottom)*scale;
} }
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
...@@ -1511,8 +1480,6 @@ function drawChart(chart, arrValues, width, height) { ...@@ -1511,8 +1480,6 @@ function drawChart(chart, arrValues, width, height) {
var axis; var axis;
calcGutter(axis,chart.min,chart.max,chart.ymin,chart.ymax,chart.isSkip,chart.isFormatCell); calcGutter(axis,chart.min,chart.max,chart.ymin,chart.ymax,chart.isSkip,chart.isFormatCell);
calcAllMargin(chart.isFormatCell,chart.isformatCellScOy,chart.min,chart.max,chart.ymin,chart.ymax, chart);
calcWidthGraph();
if (chart.xAxis.title) if (chart.xAxis.title)
{ {
...@@ -1526,7 +1493,9 @@ function drawChart(chart, arrValues, width, height) { ...@@ -1526,7 +1493,9 @@ function drawChart(chart, arrValues, width, height) {
bar._yAxisTitle._hpos = 23 + keyLeft; bar._yAxisTitle._hpos = 23 + keyLeft;
} }
//выставляем параметры текса //выставляем параметры текса
setFontChart(chart); setFontChart(chart);
calcAllMargin(chart.isFormatCell,chart.isformatCellScOy,chart.min,chart.max,chart.ymin,chart.ymax, chart);
calcWidthGraph();
bar.Draw(chart.min,chart.max,chart.ymin,chart.ymax,chart.isSkip,chart.isFormatCell,chart.isformatCellScOy); bar.Draw(chart.min,chart.max,chart.ymin,chart.ymax,chart.isSkip,chart.isFormatCell,chart.isformatCellScOy);
} }
...@@ -1656,8 +1625,6 @@ function DrawScatterChart(chartCanvas, chartSubType, data, chart) { ...@@ -1656,8 +1625,6 @@ function DrawScatterChart(chartCanvas, chartSubType, data, chart) {
bar._otherProps._xmax = countGraph.length; bar._otherProps._xmax = countGraph.length;
bar._otherProps._key_colors = keyColors; bar._otherProps._key_colors = keyColors;
} }
calcGutter(undefined,chart.min,chart.max,chart.ymin,chart.ymax,chart.isSkip,chart.isFormatCell);
//для того, чтобы не строить рамку вокруг легенды //для того, чтобы не строить рамку вокруг легенды
bar._otherProps._key_rounded = null; bar._otherProps._key_rounded = null;
if (bar._otherProps._filled != true) if (bar._otherProps._filled != true)
...@@ -1972,7 +1939,7 @@ function setFontChart(chart) ...@@ -1972,7 +1939,7 @@ function setFontChart(chart)
bar._xAxisTitle._bold = chart.xAxis.titleFont.bold ? chart.xAxis.titleFont.bold : true; bar._xAxisTitle._bold = chart.xAxis.titleFont.bold ? chart.xAxis.titleFont.bold : true;
bar._xAxisTitle._color = chart.xAxis.titleFont.color ? chart.xAxis.titleFont.color : defaultColor; bar._xAxisTitle._color = chart.xAxis.titleFont.color ? chart.xAxis.titleFont.color : defaultColor;
bar._xAxisTitle._font = chart.xAxis.titleFont.name ? chart.xAxis.titleFont.name : defaultFont; bar._xAxisTitle._font = chart.xAxis.titleFont.name ? chart.xAxis.titleFont.name : defaultFont;
bar._xAxisTitle._size = chart.xAxis.titleFont.size ? chart.xAxis.titleFont.size : defaultSize; bar._xAxisTitle._size = chart.xAxis.titleFont.size ? chart.xAxis.titleFont.size : defaultFont;
bar._xAxisTitle._italic = chart.xAxis.titleFont.italic ? chart.xAxis.titleFont.italic : false; bar._xAxisTitle._italic = chart.xAxis.titleFont.italic ? chart.xAxis.titleFont.italic : false;
bar._xAxisTitle._underline = chart.xAxis.titleFont.underline ? chart.xAxis.titleFont.underline : false; bar._xAxisTitle._underline = chart.xAxis.titleFont.underline ? chart.xAxis.titleFont.underline : false;
} }
...@@ -1982,7 +1949,7 @@ function setFontChart(chart) ...@@ -1982,7 +1949,7 @@ function setFontChart(chart)
bar._yAxisTitle._bold = chart.yAxis.titleFont.bold ? chart.yAxis.titleFont.bold : true; bar._yAxisTitle._bold = chart.yAxis.titleFont.bold ? chart.yAxis.titleFont.bold : true;
bar._yAxisTitle._color = chart.yAxis.titleFont.color ? chart.yAxis.titleFont.color : defaultColor; bar._yAxisTitle._color = chart.yAxis.titleFont.color ? chart.yAxis.titleFont.color : defaultColor;
bar._yAxisTitle._font = chart.yAxis.titleFont.name ? chart.yAxis.titleFont.name : defaultFont; bar._yAxisTitle._font = chart.yAxis.titleFont.name ? chart.yAxis.titleFont.name : defaultFont;
bar._yAxisTitle._size = chart.yAxis.titleFont.size ? chart.yAxis.titleFont.size : defaultSize; bar._yAxisTitle._size = chart.yAxis.titleFont.size ? chart.yAxis.titleFont.size : defaultFont;
bar._yAxisTitle._italic = chart.yAxis.titleFont.italic ? chart.yAxis.titleFont.italic : false; bar._yAxisTitle._italic = chart.yAxis.titleFont.italic ? chart.yAxis.titleFont.italic : false;
bar._yAxisTitle._underline = chart.yAxis.titleFont.underline ? chart.yAxis.titleFont.underline : false; bar._yAxisTitle._underline = chart.yAxis.titleFont.underline ? chart.yAxis.titleFont.underline : false;
} }
...@@ -1992,7 +1959,7 @@ function setFontChart(chart) ...@@ -1992,7 +1959,7 @@ function setFontChart(chart)
bar._otherProps._key_text_bold = chart.legend.font.bold ? chart.legend.font.bold : false; bar._otherProps._key_text_bold = chart.legend.font.bold ? chart.legend.font.bold : false;
bar._otherProps._key_text_color = chart.legend.font.color ? chart.legend.font.color : defaultColor; bar._otherProps._key_text_color = chart.legend.font.color ? chart.legend.font.color : defaultColor;
bar._otherProps._key_text_font = chart.legend.font.name ? chart.legend.font.name : defaultFont; bar._otherProps._key_text_font = chart.legend.font.name ? chart.legend.font.name : defaultFont;
bar._otherProps._key_text_size = chart.legend.font.size ? chart.legend.font.size : 10; bar._otherProps._key_text_size = chart.legend.font.size ? chart.legend.font.size : defaultFont;
bar._otherProps._key_text_italic = chart.legend.font.italic ? chart.legend.font.italic : false; bar._otherProps._key_text_italic = chart.legend.font.italic ? chart.legend.font.italic : false;
bar._otherProps._key_text_underline = chart.legend.font.underline ? chart.legend.font.underline : false; bar._otherProps._key_text_underline = chart.legend.font.underline ? chart.legend.font.underline : false;
} }
...@@ -2037,3 +2004,230 @@ function setFontChart(chart) ...@@ -2037,3 +2004,230 @@ function setFontChart(chart)
bar._otherProps._text_size = defaultSize; bar._otherProps._text_size = defaultSize;
} }
} }
function getFontProperties(type)
{
var props = bar._otherProps;
var xAxisTitle = bar._xAxisTitle;
var yAxisTitle = bar._yAxisTitle;
var chartTitle = bar._chartTitle;
switch (type) {
case "xLabels":
{
return new Asc.FontProperties(props._xlabels_font,props._xlabels_size,props._xlabels_bold, props._xlabels_italic, props._xlabels_underline);
}
case "yLabels":
{
return new Asc.FontProperties(props._ylabels_font, props._ylabels_size, props._ylabels_bold, props._ylabels_italic, props._ylabels_underline);
}
case "xTitle":
{
return new Asc.FontProperties(xAxisTitle._font, xAxisTitle._size, xAxisTitle._bold, xAxisTitle._italic, xAxisTitle._underline);
}
case "yTitle":
{
return new Asc.FontProperties(yAxisTitle._font, yAxisTitle._size, yAxisTitle._bold, yAxisTitle._italic, yAxisTitle._underline);
}
case "key":
{
return new Asc.FontProperties(props._key_text_font,props._key_text_size,props._key_text_bold, props._key_text_italic, props._key_text_underline);
}
case "title":
{
return new Asc.FontProperties(chartTitle._font, chartTitle._size, chartTitle._bold, chartTitle._italic, chartTitle._underline);
}
case "labelsAbove":
{
return new Asc.FontProperties(props._ylabels_labels_above_labels_above_font, props._labels_above_size, props._labels_above_bold, props._labels_above_italic, props._labels_above_underline);
}
}
}
function calculatePosiitionObjects(type)
{
var context = OfficeExcel.drawingCtxCharts;
if(!context || !context.scaleFactor)
return false;
var scale = context.scaleFactor;
switch (type) {
case "xLabels":
{
//возвращаем только координату y, поскольку она зависит от величины маргина
var marginBottom = bar._chartGutter._bottom;
var ascFontXLabels = getFontProperties("xLabels");
context.setFont(ascFontXLabels);
var heigthTextLabelsOx = context.measureText((bar._otherProps._labels[0]).toString(),1);
//если имеется название оси
var heigthTextNameAxisOx = 0;
if(bar._xAxisTitle._vpos)
{
var ascFontXTitle = getFontProperties("xTitle");
context.setFont(ascFontXTitle);
//в дальнейшем коэффициэнт нужно убрать и вместо него должна быть высота автофигуры с текстом
var koff = 12*scale;
heigthTextNameAxisOx = 10 + context.measureText((bar._xAxisTitle._text).toString(),1).height + koff;
}
//отступ от оси до подписи значений
marginOx = (marginBottom - (heigthTextLabelsOx.height + heigthTextNameAxisOx))/2;
return marginOx;
}
case "yLabels":
{
//возвращаем только координату x
var marginLeft = bar._chartGutter._left;
var ascFontXLabels = getFontProperties("xLabels");
context.setFont(ascFontXLabels);
var propsTextLabelsOy = getMaxPropertiesText(context,ascFontXLabels,bar._otherProps._labels);
var marginOy = bar._chartGutter._left - (12*scale);
return marginOy;
}
case "key_hpos":
{
if(bar._otherProps._key_halign == 'right')
{
if(bar._otherProps._key_color_shape == 'line')
{
var widthLine = 28;
//находим ширину текста легенды(то есть её максимального элемента), в дальнейшем будем возвращать ширину автофигуры
var font = getFontProperties("key");
var widthText = getMaxPropertiesText(context,font,bar._otherProps._key);
var widthKey = widthText.width + 2*scale + widthLine*scale;
//в MSExcel справа от легенды всегда остаётся такой маргин
var marginRightFromKey = 12*scale;
var hpos = bar.canvas.width - widthKey - marginRightFromKey;
return hpos;
}
else
{
var widthLine = 8;
//находим ширину текста легенды(то есть её максимального элемента), в дальнейшем будем возвращать ширину автофигуры
var font = getFontProperties("key");
var widthText = getMaxPropertiesText(context,font,bar._otherProps._key);
var widthKey = widthText.width + 5 + widthLine;
//в MSExcel справа от легенды всегда остаётся такой маргин
var marginRightFromKey = 12*scale;
var hpos = bar.canvas.width - widthKey - marginRightFromKey;
return hpos;
}
}
else if(bar._otherProps._key_halign == 'left')
{
//слева от легенды всегда расстояние 12px
return 12*scale;
}
else if(bar._otherProps._key_halign == 'bottom')
{
return bar.canvas.height - 7*scale;
}
else if(bar._otherProps._key_halign == 'top')
{
var font = getFontProperties("key");
var props = getMaxPropertiesText(context,font,bar._otherProps._key);
var heigthTextKey = (context.getHeightText()/0.75)*scale;
if(typeof(bar._chartTitle._text) == 'string' && bar._chartTitle._text != '')
{
var font = getFontProperties("title");
var axisTitleProp = getMaxPropertiesText(context,font, bar._chartTitle._text);
var hpos = (bar.canvas.width)/2 - axisTitleProp.width/2;
var heigthText = (context.getHeightText()/0.75)*scale;
return 7*scale + heigthTextKey + 7*scale + heigthText;
}
else
{
return 7*scale + heigthTextKey;
}
}
}
case "yAxisTitle":
{
// ***по дефолту в ms office отступ от левого края(или от легенды) 12px
var hpos;
var font = getFontProperties("yTitle");
var axisTitleProp = getMaxPropertiesText(context,font, bar._yAxisTitle._text);
var vpos = (bar.canvas.height - bar._chartGutter._bottom - bar._chartGutter._top)/2 + axisTitleProp.width/2 + bar._chartGutter._top;
var heigthText = (context.getHeightText()/0.75)*scale;
if(bar._otherProps._key_halign == 'left')
{
var widthLine = 8;
var diff = 5;
if(bar._otherProps._key_color_shape == 'line')
{
widthLine = 28;
diff = 2;
}
//находим ширину текста легенды(то есть её максимального элемента), в дальнейшем будем возвращать ширину автофигуры
var font = getFontProperties("key");
var widthText = getMaxPropertiesText(context,font,bar._otherProps._key);
var widthKey = widthText.width + diff*scale + widthLine*scale;
//складываем стандартный маргин от легенды + маргин от названия + ширину легенды + высоту текста названия
hpos = heigthText + widthKey + 6*scale + 12*scale;
return {x: hpos,y: vpos}
}
else
{
hpos = heigthText + 12*scale;
return {x: hpos,y: vpos}
}
}
case "xAxisTitle":
{
// ***по дефолту в ms office отступ от нижнего края(или от легенды) 14px
var hpos;
var font = getFontProperties("xTitle");
var axisTitleProp = getMaxPropertiesText(context,font, bar._xAxisTitle._text);
var hpos = (bar.canvas.width - bar._chartGutter._left - bar._chartGutter._right)/2 - axisTitleProp.width/2 + bar._chartGutter._left;
var heigthText = (context.getHeightText()/0.75)*scale;
var ascenderText = (context.getAscenderText()/0.75)*scale;
if(bar._otherProps._key_halign == 'bottom')
{
var font = getFontProperties("key");
var heightText = getMaxPropertiesText(context,font,bar._otherProps._key);
var heightKey = (context.getHeightText()/0.75)*scale;
//складываем стандартный маргин от легенды + маргин от названия + ширину легенды + высоту текста названия
vpos = bar.canvas.height - 14*scale - 7*scale - heightKey;
return {x: hpos,y: vpos}
}
else
{
vpos = bar.canvas.height - 14*scale;
return {x: hpos,y: vpos}
}
}
case "title":
{
// ***по дефолту в ms office отступ от верхнего края(или от легенды) 7px
var hpos;
var font = getFontProperties("title");
var axisTitleProp = getMaxPropertiesText(context,font, bar._chartTitle._text);
var hpos = (bar.canvas.width)/2 - axisTitleProp.width/2;
var heigthText = (context.getHeightText()/0.75)*scale;
vpos = 7*scale + heigthText;
return {x: hpos,y: vpos}
}
}
}
function getMaxPropertiesText(context, font, text)
{
context.setFont(font);
var result;
if(typeof text == "object")
{
// в данном случае ищем максимальную ширину текста
var maxLength = 0;
var maxWord;
for(var i = 0; i < text.length; i++)
{
var lengthText = text[i].toString().length;
if(lengthText > maxLength)
{
maxLength = lengthText;
maxWord = text[i].toString();
}
}
result = context.measureText(maxWord,0);
}
else
{
result = context.measureText((text).toString(),0);
}
return result;
}
...@@ -1743,10 +1743,10 @@ ...@@ -1743,10 +1743,10 @@
OfficeExcel.drawTurnedText = function(drawingCtx,textOptions, text, angle) OfficeExcel.drawTurnedText = function(drawingCtx,textOptions, text, angle)
{ {
var cx = textOptions.x; // center offset x var cx = textOptions.x;
var cy = textOptions.y; // center offset y var cy = textOptions.y;
var textWidth = textOptions.width; // NOTE: measure text (width * 0.5) var textWidth = 0;
var textHeight = textOptions.height; // NOTE: measure text (height * 0.5) var textHeight = 0;
var font = textOptions.font; var font = textOptions.font;
var size = textOptions.size; var size = textOptions.size;
var asc = Asc; var asc = Asc;
...@@ -1966,7 +1966,10 @@ ...@@ -1966,7 +1966,10 @@
*/ */
OfficeExcel.DrawTitle = function (canvas, text, gutterTop) OfficeExcel.DrawTitle = function (canvas, text, gutterTop)
{ {
var obj = canvas.__object__;
var obj = canvas.__object__;
if(obj._chartTitle._text == '')
return;
var context = canvas.getContext('2d'); var context = canvas.getContext('2d');
var gutterLeft = obj._chartGutter._left; var gutterLeft = obj._chartGutter._left;
var gutterRight = obj._chartGutter._right; var gutterRight = obj._chartGutter._right;
...@@ -2050,7 +2053,13 @@ ...@@ -2050,7 +2053,13 @@
vpos = obj._chartTitle._vpos; vpos = obj._chartTitle._vpos;
vCenter = 'bottom'; vCenter = 'bottom';
} }
OfficeExcel.Text(context, font, size, centerx, vpos, text, vCenter, 'center', bgcolor != null, null, bgcolor, bold, null, textOptions); var props = calculatePosiitionObjects("title");
if(props)
{
centerx = props.x;
vpos = props.y;
}
OfficeExcel.Text(context, font, size, centerx, vpos, text, null, null, bgcolor != null, null, bgcolor, bold, null, textOptions);
// Reset the fill colour // Reset the fill colour
context.fillStyle = oldColor; context.fillStyle = oldColor;
...@@ -2302,6 +2311,9 @@ ...@@ -2302,6 +2311,9 @@
vpos = obj._xAxisTitle._vpos vpos = obj._xAxisTitle._vpos
if (obj._xAxisTitle._hpos != 'null') if (obj._xAxisTitle._hpos != 'null')
hpos = obj._xAxisTitle._hpos hpos = obj._xAxisTitle._hpos
var props = calculatePosiitionObjects("xAxisTitle");
hpos = props.x;
vpos = props.y;
context.beginPath(); context.beginPath();
OfficeExcel.Text(context, OfficeExcel.Text(context,
font, font,
...@@ -2309,8 +2321,8 @@ ...@@ -2309,8 +2321,8 @@
hpos, hpos,
vpos, vpos,
obj._xAxisTitle._text, obj._xAxisTitle._text,
'center', null,
'center', null,
false, false,
false, false,
false, false,
...@@ -2355,13 +2367,18 @@ ...@@ -2355,13 +2367,18 @@
obj.canvas.width - obj._chartGutter._right + obj._otherProps._text_size + 5; obj.canvas.width - obj._chartGutter._right + obj._otherProps._text_size + 5;
} else } else
hpos = hpos; hpos = hpos;
if(obj._yAxisTitle._angle != 'null' && obj._yAxisTitle._angle != undefined) if(obj._yAxisTitle._angle != 'null' && obj._yAxisTitle._angle != undefined)
angle = obj._yAxisTitle._angle; angle = obj._yAxisTitle._angle;
if (obj._yAxisTitle._vpos != 'null') if (obj._yAxisTitle._vpos != 'null')
vpos = obj._yAxisTitle._vpos; vpos = obj._yAxisTitle._vpos;
if (obj._yAxisTitle._hpos != 'null') if (obj._yAxisTitle._hpos != 'null')
hpos = obj._yAxisTitle._hpos; hpos = obj._yAxisTitle._hpos;
var props = calculatePosiitionObjects("yAxisTitle");
hpos = props.x;
vpos = props.y;
context.beginPath(); context.beginPath();
OfficeExcel.Text(context, OfficeExcel.Text(context,
font, font,
...@@ -2370,7 +2387,7 @@ ...@@ -2370,7 +2387,7 @@
vpos, vpos,
obj._yAxisTitle._text, obj._yAxisTitle._text,
'center', 'center',
'right',//change with center null,//change with center
false, false,
angle, angle,
false, false,
...@@ -2509,7 +2526,7 @@ ...@@ -2509,7 +2526,7 @@
} }
// Draw the title if one is set // Draw the title if one is set
if ( typeof(obj._chartTitle._text) == 'string') { if ( typeof(obj._chartTitle._text) == 'string' && obj._chartTitle._text != '') {
if (obj.type == 'gantt') { if (obj.type == 'gantt') {
gutterTop -= 10; gutterTop -= 10;
......
...@@ -79,8 +79,13 @@ ...@@ -79,8 +79,13 @@
var strokestyle = '#333'; var strokestyle = '#333';
var height = 0; var height = 0;
var width = 0; var width = 0;
var scale = 1;
if(OfficeExcel.drawingCtxCharts && OfficeExcel.drawingCtxCharts.scaleFactor)
scale = OfficeExcel.drawingCtxCharts.scaleFactor;
var sizeLine = 26*scale;
if(bar._otherProps._key_color_shape != 'line')
sizeLine = 8*scale;
obj.coordsKey = []; obj.coordsKey = [];
...@@ -120,19 +125,12 @@ ...@@ -120,19 +125,12 @@
/** /**
* Horizontal alignment * Horizontal alignment
*/ */
/*if (typeof(obj._otherProps._key_halign) == 'string') {
if (obj._otherProps._key_halign == 'left') {
hpos = gutterLeft + 10;
} else if (obj._otherProps._key_halign == 'right') {
hpos = OfficeExcel.GetWidth(obj) - gutterRight - width;
}
}*/
var scale = 1;
if(OfficeExcel.drawingCtxCharts && OfficeExcel.drawingCtxCharts.scaleFactor)
scale = OfficeExcel.drawingCtxCharts.scaleFactor;
var widthAllKey = 70*(key.length); var widthAllKey = 70*(key.length);
if((obj._otherProps._key_halign == 'top' || obj._otherProps._key_halign == 'bottom' )) /*if((obj._otherProps._key_halign == 'top' || obj._otherProps._key_halign == 'bottom' ))
{ {
if(widthAllKey > obj.canvas.width - 50) if(widthAllKey > obj.canvas.width - 50)
{ {
...@@ -143,33 +141,52 @@ ...@@ -143,33 +141,52 @@
key = obj._otherProps._key; key = obj._otherProps._key;
} }
widthAllKey = 70*(key.length); widthAllKey = 70*(key.length);
}*/
var drwContext = OfficeExcel.drawingCtxCharts;
var font = getFontProperties("key");
if(obj._otherProps._key_halign == 'top' || obj._otherProps._key_halign == 'bottom' && key.length != 0)
{
widthAllKey = 0;
var widthEveryElemKey = [];
for(var l = 0; l < key.length; l++)
{
var props1 = getMaxPropertiesText(drwContext,font,key[l]);
widthAllKey += props1.width + (3)*scale + sizeLine;
widthEveryElemKey[l] = props1.width + (3)*scale + sizeLine;
}
} }
var heightKeyVer = key.length*24; heigthTextKey = 24;
if(key && key.length != 0)
{
var props = getMaxPropertiesText(drwContext,font,bar._otherProps._key);
heigthTextKey = (drwContext.getHeightText()/0.75)*scale;
}
var heightKeyVer = key.length*heigthTextKey;
var heightKey = 24; var heightKey = 24;
var widthKey = textWidth*key.length + key.length*30 + 11*(key.length-1); var widthKey = textWidth*key.length + key.length*30 + 11*(key.length-1);
//var widthKeyVer = textWidth + 30; //var widthKeyVer = textWidth + 30;
var widthKeyVer = 31 + 30; var widthKeyVer = 61;
//var margin = obj._chartGutter._top - 14; //var margin = obj._chartGutter._top - 14;
if (typeof(obj._otherProps._key_halign) == 'string') { if (typeof(obj._otherProps._key_halign) == 'string') {
if (obj._otherProps._key_halign == 'left') { if (obj._otherProps._key_halign == 'left') {
hpos = 20; hpos = calculatePosiitionObjects("key_hpos");
vpos = canvas.height/2 - heightKeyVer/2; vpos = canvas.height/2 - heightKeyVer/2;
} else if (obj._otherProps._key_halign == 'right') { } else if (obj._otherProps._key_halign == 'right') {
hpos = canvas.width - widthKeyVer - 10; hpos = calculatePosiitionObjects("key_hpos");
vpos = canvas.height/2 - heightKeyVer/2; vpos = canvas.height/2 - heightKeyVer/2;
} }
else if (obj._otherProps._key_halign == 'top') { else if (obj._otherProps._key_halign == 'top') {
hpos = canvas.width/2 - widthAllKey/2; hpos = canvas.width/2 - widthAllKey/2;
if(obj._chartTitle._text != null && obj._chartTitle._text != '') vpos = calculatePosiitionObjects("key_hpos");
vpos = text_size + 20 + obj._chartTitle._size + 20;
else
vpos = text_size + 20;
} }
else if (obj._otherProps._key_halign == 'bottom') { else if (obj._otherProps._key_halign == 'bottom') {
hpos = canvas.width/2 - widthAllKey/2; hpos = canvas.width/2 - widthAllKey/2;
vpos = canvas.height - 10; vpos = calculatePosiitionObjects("key_hpos");
} }
} }
...@@ -245,19 +262,17 @@ ...@@ -245,19 +262,17 @@
if('hbar' != obj.type) if('hbar' != obj.type)
key = OfficeExcel.array_reverse(key) key = OfficeExcel.array_reverse(key)
} }
var horPos = false;
if(obj._otherProps._key_halign == 'bottom' || obj._otherProps._key_halign == 'top')
{
horPos = true;
//colors = OfficeExcel.array_reverse(colors)
//key = OfficeExcel.array_reverse(key)
}
if(horPos) if(obj._otherProps._key_halign == 'bottom' || obj._otherProps._key_halign == 'top')
{ {
for (var i=0; i<key.length; i++) { for (var i=0; i<key.length; i++) {
// Draw the blob of color // Draw the blob of color
var leftDiff = 0;
for(var n = 0 ; n < i; n++)
{
leftDiff += widthEveryElemKey[n];
}
if (obj._otherProps._key_color_shape == 'circle') { if (obj._otherProps._key_color_shape == 'circle') {
context.beginPath(); context.beginPath();
...@@ -271,14 +286,14 @@ ...@@ -271,14 +286,14 @@
context.strokeStyle = colors[i]; context.strokeStyle = colors[i];
context.lineWidth = '2.7' context.lineWidth = '2.7'
context.moveTo(hpos + (65 * i) + (text_size * i) ,vpos - text_size); context.moveTo(hpos + leftDiff + 2*scale,vpos - props.height/2);
context.lineTo(hpos + blob_size + (65 * i) + (text_size * i) + 16, vpos - text_size); context.lineTo(hpos + leftDiff + sizeLine + 2*scale, vpos - props.height/2);
context.stroke(); context.stroke();
} else { } else {
context.fillStyle = colors[i]; context.fillStyle = colors[i];
context.fillRect(hpos + blob_size + (65 * i) + (text_size * i), vpos - text_size - 10, text_size - 2, text_size + 1 - 2); context.fillRect(hpos + leftDiff + 2*scale, vpos - 7*scale, 7*scale, 7*scale);
//context.fillRect(hpos, vpos + (10 * j) + (text_size * j) - text_size, 22, obj._otherProps._linewidth); //context.fillRect(hpos, vpos + (10 * j) + (text_size * j) - text_size, 22, obj._otherProps._linewidth);
} }
...@@ -288,8 +303,8 @@ ...@@ -288,8 +303,8 @@
OfficeExcel.Text(context, OfficeExcel.Text(context,
text_font, text_font,
text_size, text_size,
hpos + blob_size + (65 * i) + (text_size * i) + 19, hpos + leftDiff + sizeLine + 3*scale,
vpos-text_size, vpos,
key[i]); key[i]);
} }
} }
...@@ -301,7 +316,7 @@ ...@@ -301,7 +316,7 @@
// Draw the blob of color // Draw the blob of color
var diffKeyAndLine = 3*scale;
if (obj._otherProps._key_color_shape == 'circle') { if (obj._otherProps._key_color_shape == 'circle') {
context.beginPath(); context.beginPath();
context.strokeStyle = 'rgba(0,0,0,0)'; context.strokeStyle = 'rgba(0,0,0,0)';
...@@ -314,16 +329,16 @@ ...@@ -314,16 +329,16 @@
context.strokeStyle = colors[i]; context.strokeStyle = colors[i];
context.lineWidth = '2.7' context.lineWidth = '2.7'
context.moveTo(hpos - 8, vpos + (15 * j) + (text_size * j) - text_size + (blob_size / 2)); context.moveTo(hpos, vpos + heigthTextKey*j - heigthTextKey + (heigthTextKey / 2));
context.lineTo(hpos + blob_size + 8, vpos + (15 * j) + (text_size * j) - text_size + (blob_size / 2)); context.lineTo(hpos + sizeLine, vpos + heigthTextKey*j - heigthTextKey + (heigthTextKey / 2));
//context.moveTo(hpos + 5, vpos + (5 * j) + (text_size * j) - text_size + (blob_size / 2)); //context.moveTo(hpos + 5, vpos + (5 * j) + (text_size * j) - text_size + (blob_size / 2));
//context.lineTo(hpos + blob_size + 5, vpos + (5 * j) + (text_size * j) - text_size + (blob_size / 2)); //context.lineTo(hpos + blob_size + 5, vpos + (5 * j) + (text_size * j) - text_size + (blob_size / 2));
context.stroke(); context.stroke();
} else { } else {
context.fillStyle = colors[i]; context.fillStyle = colors[i];
context.fillRect(hpos + 5 + 2, vpos + (15 * j) + (text_size * j) - text_size, text_size - 2, text_size + 1 - 2); context.fillRect(hpos, vpos + heigthTextKey*j - props.height/2 - 7*scale, 7*scale, 7*scale);
//context.fillRect(hpos, vpos + (10 * j) + (text_size * j) - text_size, 22, obj._otherProps._linewidth); diffKeyAndLine = 5;
} }
context.beginPath(); context.beginPath();
...@@ -333,8 +348,8 @@ ...@@ -333,8 +348,8 @@
OfficeExcel.Text(context, OfficeExcel.Text(context,
text_font, text_font,
text_size, text_size,
hpos + blob_size + 5 + 5, hpos + sizeLine + diffKeyAndLine,
vpos + (15 * j) + (text_size * j), vpos + heigthTextKey*j - props.height/2,
key[i]); key[i]);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment