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

поворотный текст для случая, если подписи по оси OX задевают друг друга(area,line,bar)

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@49435 954022d7-b5bf-4e40-9824-e11837661b57
parent 216b4d3c
......@@ -723,6 +723,7 @@ function calcAllMargin(isFormatCell,isformatCellScOy,minX,maxX,minY,maxY, chart)
var widthText = getMaxPropertiesText(context,font,bar._otherProps._key);
var widthKey = widthText.width/scale + 2 + widthLine;
//в MSExcel справа от легенды всегда остаётся такой маргин
//TODO - легенду нужно сделать как автофигуру
var maxWidthLegendLeftOrRight = chartCanvas.width/3;//максимальный размер легенды - временно!
if(widthKey > maxWidthLegendLeftOrRight)//в данном случае легенду рисуем поверх
{
......@@ -864,6 +865,15 @@ function calcAllMargin(isFormatCell,isformatCellScOy,minX,maxX,minY,maxY, chart)
bar._chartGutter._right = (standartMargin + right)*scale;
bar._chartGutter._top = (standartMarginTop + top)*scale;
bar._chartGutter._bottom = (bottom)*scale;
if(bar._otherProps._xlabels)
var angleText = calculateAngleText(bar._otherProps._labels);
if(angleText && (min >= 0) && bar.type != 'Hbar' && bar.type != 'Pie' && bar.type != 'Scatter')
{
bar._chartGutter._bottom += (angleText.bottom - 25)*scale;
bar._otherProps._axisOxAngleOptions = angleText;
}
else if(angleText)
bar._otherProps._axisOxAngleOptions = angleText;
}
//-----------------------------------------------------------------------------------
......@@ -2931,3 +2941,49 @@ function getHexColor(r,g,b)
if (b.length == 1) b = '0' + b;
return '#' + r + g + b;
}
function calculateAngleText(labels)
{
var result = false;
var context = OfficeExcel.drawingCtxCharts;
if(context && labels && labels.length)
{
//если размер хотя бы одной подписи оси больше дефолтового - возвращаем наклонный текст, для этого измеряем каждую подпись
var widthChart = bar.canvas.width - bar._chartGutter._left - bar._chartGutter._right;
var maxWidthOneTitle = widthChart/labels.length;
var ascFontXLabels = getFontProperties("xLabels");
context.setFont(ascFontXLabels);
var propsTextLabelsOy = getMaxPropertiesText(context, ascFontXLabels, labels);
//максимум длины каждой из подписей оси
var maxWidthAxisLabels = (bar.canvas.height - bar._chartGutter._bottom - bar._chartGutter._top)/2;
if(maxWidthOneTitle <= propsTextLabelsOy.width)
{
result = [];
var optionText;
for(var i = 0; i < labels.length; i++)
{
//если больше максимума - обрезаем и ставим ...
if(maxWidthAxisLabels && context.measureText(labels[i],0).width > maxWidthAxisLabels)
{
var newLabel = labels[i];
while(context.measureText(newLabel,0).width >= maxWidthAxisLabels && newLabel.length > 1)
{
newLabel = newLabel.substr(0,newLabel.length - 1);
}
newLabel = newLabel + "...";
labels[i] = newLabel;
}
optionText = context.measureText(labels[i],0);
result[i] = optionText.width;
}
//угол в дефолте
result.angle = 45;
//изменяем нижний отступ
if(maxWidthAxisLabels < propsTextLabelsOy.width)
result.bottom = maxWidthAxisLabels;
else
result.bottom = propsTextLabelsOy.width;
}
}
return result;
}
\ No newline at end of file
......@@ -1489,13 +1489,25 @@
if('auto' == this._otherProps._ylabels_count)
yOffset =+ 23;
var countLabels = 0;
var axisOxAngleOptions;
if(this._otherProps._axisOxAngleOptions && this._otherProps._axisOxAngleOptions.angle)
{
axisOxAngleOptions = this._otherProps._axisOxAngleOptions;
angle = this._otherProps._axisOxAngleOptions.angle;
}
var diffWidth;
var diffHeight;
for (x=this._chartGutter._left + (xTickGap / 2); x<=OfficeExcel.GetWidth(this) - this._chartGutter._right; x+=xTickGap) {
if('auto' == this._otherProps._ylabels_count)
{
diffWidth = axisOxAngleOptions ? (axisOxAngleOptions[countLabels]*Math.sin(angle*Math.PI/180))/(4) : 0;
diffHeight = axisOxAngleOptions ? (axisOxAngleOptions[countLabels]*Math.cos(angle*Math.PI/180)) : 0;
OfficeExcel.Text(context, font,
text_size,
x + (this._otherProps._text_angle == 90 ? 0 : 0),
this.nullPositionOX + yOffset*scaleFactor,
x + (this._otherProps._text_angle == 90 ? 0 : 0) - diffWidth,
this.nullPositionOX + yOffset*scaleFactor + diffHeight,
String(labels[i++]),
(this._otherProps._text_angle == 90 ? 'center' : null),
halign,
......@@ -1522,7 +1534,7 @@
null,
textOptions);
}
countLabels++;
}
}
}
......
......@@ -1589,7 +1589,7 @@
x: x*0.75,
y: y*0.75
};
OfficeExcel.drawTurnedText(context,textOptions, text, 90);
OfficeExcel.drawTurnedText(context,textOptions, text, arguments[9]);
}
if(!arguments[9])
......
......@@ -1136,6 +1136,13 @@
this.context.fillStyle = this._otherProps._text_color;
var numLabels = this._otherProps._labels.length;
if(this._otherProps._axisOxAngleOptions && this._otherProps._axisOxAngleOptions.angle)
{
axisOxAngleOptions = this._otherProps._axisOxAngleOptions;
angle = this._otherProps._axisOxAngleOptions.angle;
}
var diffWidth;
var diffHeight;
for (i=0; i<numLabels; ++i) {
// Changed 8th Nov 2010 to be not reliant on the coords
......@@ -1163,12 +1170,14 @@
}
if('auto' == this._otherProps._ylabels_count)
{
diffWidth = axisOxAngleOptions ? (axisOxAngleOptions[i]*Math.sin(angle*Math.PI/180))/(4) : 0;
diffHeight = axisOxAngleOptions ? (axisOxAngleOptions[i]*Math.cos(angle*Math.PI/180)) : 0;
OfficeExcel.Text(context,
font,
text_size,
labelX,
labelX - diffWidth,
//(this._otherProps._xaxispos == 'top') ? this._chartGutter._top - yOffset - (this._otherProps._xlabels_inside ? -22 : 0) : (this.canvas.height - this._chartGutter._bottom) + yOffset,
this.nullPositionOX + yOffset*scaleFactor,
this.nullPositionOX + yOffset*scaleFactor + diffHeight,
String(this._otherProps._labels[i]),
valign,
halign,
......
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