Browse Source

refactor(inlinestring feature coding): coding

master
liuyang 5 years ago
parent
commit
1aef369dec
  1. 344
      src/global/draw.js

344
src/global/draw.js

@ -1175,6 +1175,345 @@ let nullCellRender = function(r, c, start_r, start_c, end_r, end_c,luckysheetTab
}
}
let cellRender1 = function(r, c, start_r, start_c, end_r, end_c, value, luckysheetTableContent,af_compute, cf_compute,offsetLeft,offsetTop,dynamicArray_compute,cellOverflowMap, dataset_col_st, dataset_col_ed,scrollHeight,scrollWidth,bodrder05,isMerge){
let cell = Store.flowdata[r][c];
let cellWidth = end_c - start_c - 2;
let cellHeight = end_r - start_r - 2;
let space_width = 2, space_height = 2; //宽高方向 间隙
//水平对齐
let horizonAlign = menuButton.checkstatus(Store.flowdata, r, c, "ht");
//垂直对齐
let verticalAlign = menuButton.checkstatus(Store.flowdata, r, c, "vt");
//交替颜色
let checksAF = alternateformat.checksAF(r, c, af_compute);
//条件格式
let checksCF = conditionformat.checksCF(r, c, cf_compute);
//单元格 背景颜色
let fillStyle = menuButton.checkstatus(Store.flowdata, r, c, "bg");
if(checksAF != null && checksAF[1] != null){ //若单元格有交替颜色 背景颜色
fillStyle = checksAF[1];
}
if(checksCF != null && checksCF["cellColor"] != null){ //若单元格有条件格式 背景颜色
fillStyle = checksCF["cellColor"];
}
if(fillStyle==null){
luckysheetTableContent.fillStyle = "#FFFFFF";
}
else{
luckysheetTableContent.fillStyle = fillStyle;
}
let borderfix = menuButton.borderfix(Store.flowdata, r, c);
// console.log(value, fillStyle,borderfix);
let cellsize = [
(start_c + offsetLeft + borderfix[0]),
(start_r + offsetTop + borderfix[1]),
(end_c - start_c + borderfix[2]-(!!isMerge?1:0)),
(end_r - start_r + borderfix[3])
];
luckysheetTableContent.fillRect(cellsize[0], cellsize[1], cellsize[2], cellsize[3]);
//若单元格有批注(单元格右上角红色小三角标示)
if(cell.ps != null){
let ps_w = 8*Store.zoomRatio, ps_h = 8*Store.zoomRatio; //红色小三角宽高
luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo(
(end_c + offsetLeft - ps_w),
(start_r + offsetTop)
);
luckysheetTableContent.lineTo(
(end_c + offsetLeft),
(start_r + offsetTop)
);
luckysheetTableContent.lineTo(
(end_c + offsetLeft),
(start_r + offsetTop + ps_h)
);
luckysheetTableContent.fillStyle = "#FC6666";
luckysheetTableContent.fill();
luckysheetTableContent.closePath();
}
//若单元格强制为字符串,则显示绿色小三角
if(cell.qp==1 && isRealNum(cell.v)){
let ps_w = 6*Store.zoomRatio, ps_h = 6*Store.zoomRatio; //红色小三角宽高
luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo(
(start_c + offsetLeft + ps_w-1),
(start_r + offsetTop)
);
luckysheetTableContent.lineTo(
(start_c + offsetLeft-1),
(start_r + offsetTop)
);
luckysheetTableContent.lineTo(
(start_c + offsetLeft-1),
(start_r + offsetTop + ps_h)
);
luckysheetTableContent.fillStyle = "#487f1e";
luckysheetTableContent.fill();
luckysheetTableContent.closePath();
}
//溢出单元格
let cellOverflow_bd_r_render = true; //溢出单元格右边框是否需要绘制
let cellOverflow_colInObj = cellOverflow_colIn(cellOverflowMap, r, c, dataset_col_st, dataset_col_ed);
if(cell.tb == '1' && cellOverflow_colInObj.colIn){
//此单元格 为 溢出单元格渲染范围最后一列,绘制溢出单元格内容
if(cellOverflow_colInObj.colLast){
cellTextRender(
cellOverflow_colInObj.rowIndex,
cellOverflow_colInObj.colIndex,
cellOverflow_colInObj.stc,
cellOverflow_colInObj.edc,
luckysheetTableContent,
scrollHeight,
scrollWidth,offsetLeft,offsetTop,af_compute, cf_compute
);
}
else{
cellOverflow_bd_r_render = false;
}
}
else{
//若单元格有条件格式数据条
if(checksCF != null && checksCF["dataBar"] != null){
let x = (start_c + offsetLeft + space_width);
let y = (start_r + offsetTop + space_height);
let w = (cellWidth - space_width * 2);
let h = (cellHeight - space_height * 2);
let valueType = checksCF["dataBar"]["valueType"];
let valueLen = checksCF["dataBar"]["valueLen"];
let format = checksCF["dataBar"]["format"];
if(valueType == 'minus'){
//负数
let minusLen = checksCF["dataBar"]["minusLen"];
if(format.length > 1){
//渐变
let my_gradient = luckysheetTableContent.createLinearGradient(
x + w * minusLen * (1 - valueLen),
y,
x + w * minusLen,
y
);
my_gradient.addColorStop(0, "#ffffff");
my_gradient.addColorStop(1, "#ff0000");
luckysheetTableContent.fillStyle = my_gradient;
}
else{
//单色
luckysheetTableContent.fillStyle = "#ff0000";
}
luckysheetTableContent.fillRect(
x + w * minusLen * (1 - valueLen),
y,
w * minusLen * valueLen,
h
);
luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo(
x + w * minusLen * (1 - valueLen),
y
);
luckysheetTableContent.lineTo(
x + w * minusLen * (1 - valueLen),
y + h
);
luckysheetTableContent.lineTo(
x + w * minusLen,
y + h
);
luckysheetTableContent.lineTo(
x + w * minusLen,
y
);
luckysheetTableContent.lineTo(
x + w * minusLen * (1 - valueLen),
y
);
luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = "#ff0000";
luckysheetTableContent.stroke();
luckysheetTableContent.closePath();
}
else if(valueType == 'plus'){
//正数
let plusLen = checksCF["dataBar"]["plusLen"];
if(plusLen == 1){
if(format.length > 1){
//渐变
let my_gradient = luckysheetTableContent.createLinearGradient(
x,
y,
x + w * valueLen,
y
);
my_gradient.addColorStop(0, format[0]);
my_gradient.addColorStop(1, format[1]);
luckysheetTableContent.fillStyle = my_gradient;
}
else{
//单色
luckysheetTableContent.fillStyle = format[0];
}
luckysheetTableContent.fillRect(
x,
y,
w * valueLen,
h
);
luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo(
x,
y
);
luckysheetTableContent.lineTo(
x,
y + h
);
luckysheetTableContent.lineTo(
x + w * valueLen,
y + h
);
luckysheetTableContent.lineTo(
x + w * valueLen,
y
);
luckysheetTableContent.lineTo(
x,
y
);
luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = format[0];
luckysheetTableContent.stroke();
luckysheetTableContent.closePath();
}
else{
let minusLen = checksCF["dataBar"]["minusLen"];
if(format.length > 1){
//渐变
let my_gradient = luckysheetTableContent.createLinearGradient(
x + w * minusLen,
y,
x + w * minusLen + w * plusLen * valueLen,
y
);
my_gradient.addColorStop(0, format[0]);
my_gradient.addColorStop(1, format[1]);
luckysheetTableContent.fillStyle = my_gradient;
}
else{
//单色
luckysheetTableContent.fillStyle = format[0];
}
luckysheetTableContent.fillRect(
x + w * minusLen,
y,
w * plusLen * valueLen,
h
);
luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo(
x + w * minusLen,
y
);
luckysheetTableContent.lineTo(
x + w * minusLen,
y + h
);
luckysheetTableContent.lineTo(
x + w * minusLen + w * plusLen * valueLen,
y + h
);
luckysheetTableContent.lineTo(
x + w * minusLen + w * plusLen * valueLen,
y
);
luckysheetTableContent.lineTo(
x + w * minusLen,
y
);
luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = format[0];
luckysheetTableContent.stroke();
luckysheetTableContent.closePath();
}
}
}
cellOverflowRender(
cellOverflow_colInObj.rowIndex,
cellOverflow_colInObj.colIndex,
cellOverflow_colInObj.stc,
cellOverflow_colInObj.edc,
luckysheetTableContent,
scrollHeight,
scrollWidth,offsetLeft,offsetTop,af_compute, cf_compute
);
}
if(cellOverflow_bd_r_render){
//右边框
if(!Store.luckysheetcurrentisPivotTable && !fillStyle && Store.showGridLines){
luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo(
(end_c + offsetLeft - 2 + bodrder05),
(start_r + offsetTop)
);
luckysheetTableContent.lineTo(
(end_c + offsetLeft - 2 + bodrder05),
(end_r + offsetTop)
);
luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
luckysheetTableContent.stroke();
luckysheetTableContent.closePath();
}
}
//下边框
if(!Store.luckysheetcurrentisPivotTable && !fillStyle && Store.showGridLines){
luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo(
(start_c + offsetLeft - 1),
(end_r + offsetTop - 2 + bodrder05)
);
luckysheetTableContent.lineTo(
(end_c + offsetLeft - 1),
(end_r + offsetTop - 2 + bodrder05)
);
luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
luckysheetTableContent.stroke();
luckysheetTableContent.closePath();
}
}
//非空白单元格渲染
let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckysheetTableContent,af_compute, cf_compute,offsetLeft,offsetTop,dynamicArray_compute,cellOverflowMap, dataset_col_st, dataset_col_ed,scrollHeight,scrollWidth,bodrder05,isMerge){
@ -1567,13 +1906,14 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
if(cell.tb == '2'){
//自动换行
// luckysheetTableContent.textBaseline = 'top'; //textBaseline以top计算
//Text rotation,0: 0、1: 45 、2: -45、3 Vertical text、4: 90 、5: -90,
if(cell.ct!=null && cell.ct.t=="inlineStr" && cell.ct.sharedStrings!=null && cell.ct.sharedStrings.length>0){
let strArr = [],lineMaxHeight=[];
let sharedStrings = cell.ct.sharedStrings;
for(let i=0;i<cell.ct.sharedStrings.length;i++){
}
}
else{
let strArr = [];

Loading…
Cancel
Save