Browse Source

feat(draw use sacle): cancel manual devicePixRatio, use context sacle

master
wbfsa 5 years ago
parent
commit
c832283c97
  1. 2
      src/controllers/constant.js
  2. 8
      src/controllers/menuButton.js
  3. 8
      src/controllers/sparkline.js
  4. 3
      src/controllers/updateCell.js
  5. 425
      src/global/draw.js
  6. 4
      src/utils/util.js

2
src/controllers/constant.js

@ -1278,7 +1278,7 @@ const luckysheetdefaultstyle = {
} }
const luckysheetdefaultFont = function(){ const luckysheetdefaultFont = function(){
return 'normal normal normal '+ Math.ceil(10 * Store.devicePixelRatio) +'pt '+ locale().fontarray[0] +', "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "WenQuanYi Micro Hei", sans-serif'; return 'normal normal normal 10pt '+ locale().fontarray[0] +', "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "WenQuanYi Micro Hei", sans-serif';
} }
const luckysheet_CFiconsImg = new Image(); const luckysheet_CFiconsImg = new Image();

8
src/controllers/menuButton.js

@ -3475,8 +3475,6 @@ const menuButton = {
type = borderType[type.toString()]; type = borderType[type.toString()];
canvasborder.save();
try { try {
if(type == "Hair"){ if(type == "Hair"){
canvasborder.setLineDash([1, 2]); canvasborder.setLineDash([1, 2]);
@ -3513,17 +3511,17 @@ const menuButton = {
canvasborder.lineTo(line_st - 0.5, line_ed); canvasborder.lineTo(line_st - 0.5, line_ed);
} }
canvasborder.lineWidth = 2 * Store.devicePixelRatio; canvasborder.lineWidth = 2;
} }
else if(type == "Thick"){ else if(type == "Thick"){
canvasborder.moveTo(m_st, m_ed); canvasborder.moveTo(m_st, m_ed);
canvasborder.lineTo(line_st, line_ed); canvasborder.lineTo(line_st, line_ed);
canvasborder.lineWidth = 3 * Store.devicePixelRatio; canvasborder.lineWidth = 3;
} }
else { else {
canvasborder.moveTo(m_st, m_ed); canvasborder.moveTo(m_st, m_ed);
canvasborder.lineTo(line_st, line_ed); canvasborder.lineTo(line_st, line_ed);
canvasborder.lineWidth = Store.devicePixelRatio; canvasborder.lineWidth = 1;
} }
}, },
moveMergeData: function(d, offset_r, offset_c){ moveMergeData: function(d, offset_r, offset_c){

8
src/controllers/sparkline.js

@ -1285,8 +1285,8 @@ const luckysheetSparkline = {
this.canvasWidth = el.mergedOptions.width; this.canvasWidth = el.mergedOptions.width;
this.canvasHeight = el.mergedOptions.height; this.canvasHeight = el.mergedOptions.height;
let barWidth = parseInt(options.get('barWidth'), 10)*Store.devicePixelRatio, let barWidth = parseInt(options.get('barWidth'), 10),
barSpacing = parseInt(options.get('barSpacing'), 10)*Store.devicePixelRatio; barSpacing = parseInt(options.get('barSpacing'), 10);
//tristate._super.init.call(this, el, values, options, width, height); //tristate._super.init.call(this, el, values, options, width, height);
this.regionShapes = {}; this.regionShapes = {};
@ -1907,8 +1907,8 @@ const luckysheetSparkline = {
_this.lastShapeId = null; _this.lastShapeId = null;
_this.mergedOptions = $.extend({}, base, extendedOptions, userOptions); _this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);
_this.mergedOptions.width = Store.devicePixelRatio * _this.mergedOptions.width; _this.mergedOptions.width = _this.mergedOptions.width;
_this.mergedOptions.height = Store.devicePixelRatio * _this.mergedOptions.height; _this.mergedOptions.height = _this.mergedOptions.height;
_this[_this.mergedOptions.type].render(_this, userValues); _this[_this.mergedOptions.type].render(_this, userValues);
return { shapes:_this.shapes, shapeseq:_this.shapeseq, offsetX:_this.mergedOptions.offsetX, offsetY:_this.mergedOptions.offsetY, pixelWidth:_this.mergedOptions.width, pixelHeight:_this.mergedOptions.height}; return { shapes:_this.shapes, shapeseq:_this.shapeseq, offsetX:_this.mergedOptions.offsetX, offsetY:_this.mergedOptions.offsetY, pixelWidth:_this.mergedOptions.width, pixelHeight:_this.mergedOptions.height};

3
src/controllers/updateCell.js

@ -175,6 +175,9 @@ export function luckysheetupdateCell(row_index1, col_index1, d, cover, isnotfocu
export function setCenterInputPosition(row_index, col_index, d){ export function setCenterInputPosition(row_index, col_index, d){
let cell = d[row_index][col_index]; let cell = d[row_index][col_index];
if(cell==null){
return;
}
let htValue = cell["ht"]; let htValue = cell["ht"];
if(cell!=null && htValue != "0"){//0 center, 1 left, 2 right if(cell!=null && htValue != "0"){//0 center, 1 left, 2 right
return; return;

425
src/global/draw.js

@ -30,11 +30,14 @@ function luckysheetDrawgridRowTitle(scrollHeight, drawHeight, offsetTop) {
} }
let luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d"); let luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d");
luckysheetTableContent.save();
luckysheetTableContent.scale(Store.devicePixelRatio, Store.devicePixelRatio);
luckysheetTableContent.clearRect( luckysheetTableContent.clearRect(
0, 0,
offsetTop * Store.devicePixelRatio, offsetTop ,
(Store.rowHeaderWidth - 1) * Store.devicePixelRatio, (Store.rowHeaderWidth - 1) ,
drawHeight * Store.devicePixelRatio drawHeight
); );
luckysheetTableContent.font = luckysheetdefaultFont(); luckysheetTableContent.font = luckysheetdefaultFont();
@ -55,7 +58,7 @@ function luckysheetDrawgridRowTitle(scrollHeight, drawHeight, offsetTop) {
luckysheetTableContent.save(); luckysheetTableContent.save();
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.rect(0, offsetTop* Store.devicePixelRatio, Store.rowHeaderWidth * Store.devicePixelRatio-1, drawHeight* Store.devicePixelRatio-2); luckysheetTableContent.rect(0, offsetTop, Store.rowHeaderWidth -1, drawHeight-2);
luckysheetTableContent.clip(); luckysheetTableContent.clip();
let end_r, start_r; let end_r, start_r;
@ -82,9 +85,9 @@ function luckysheetDrawgridRowTitle(scrollHeight, drawHeight, offsetTop) {
luckysheetTableContent.fillStyle = "#ffffff"; luckysheetTableContent.fillStyle = "#ffffff";
luckysheetTableContent.fillRect( luckysheetTableContent.fillRect(
0, 0,
(start_r + offsetTop) * Store.devicePixelRatio, (start_r + offsetTop) ,
Store.rowHeaderWidth * Store.devicePixelRatio-1, Store.rowHeaderWidth -1,
(end_r - start_r - 1) * Store.devicePixelRatio (end_r - start_r - 1)
) )
luckysheetTableContent.fillStyle = "#000000"; luckysheetTableContent.fillStyle = "#000000";
@ -92,8 +95,8 @@ function luckysheetDrawgridRowTitle(scrollHeight, drawHeight, offsetTop) {
let textMetrics = getMeasureText(r+1, luckysheetTableContent); let textMetrics = getMeasureText(r+1, luckysheetTableContent);
//luckysheetTableContent.measureText(r + 1); //luckysheetTableContent.measureText(r + 1);
let horizonAlignPos = (Store.rowHeaderWidth * Store.devicePixelRatio - textMetrics.width) / 2; let horizonAlignPos = (Store.rowHeaderWidth - textMetrics.width) / 2;
let verticalAlignPos = (start_r + (end_r - start_r) / 2 + offsetTop) * Store.devicePixelRatio; let verticalAlignPos = (start_r + (end_r - start_r) / 2 + offsetTop) ;
luckysheetTableContent.fillText(r + 1, horizonAlignPos, verticalAlignPos); luckysheetTableContent.fillText(r + 1, horizonAlignPos, verticalAlignPos);
} }
@ -101,14 +104,14 @@ function luckysheetDrawgridRowTitle(scrollHeight, drawHeight, offsetTop) {
//vertical //vertical
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
(Store.rowHeaderWidth - 2 + 0.5) * Store.devicePixelRatio, (Store.rowHeaderWidth - 2 + 0.5) ,
Store.devicePixelRatio * (start_r + offsetTop - 2) (start_r + offsetTop - 2)
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
(Store.rowHeaderWidth - 2 + 0.5) * Store.devicePixelRatio, (Store.rowHeaderWidth - 2 + 0.5) ,
Store.devicePixelRatio * (end_r + offsetTop - 2) (end_r + offsetTop - 2)
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
@ -118,13 +121,13 @@ function luckysheetDrawgridRowTitle(scrollHeight, drawHeight, offsetTop) {
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
-1, -1,
(end_r + offsetTop - 2 + 0.5) * Store.devicePixelRatio (end_r + offsetTop - 2 + 0.5)
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
(Store.rowHeaderWidth - 1) * Store.devicePixelRatio, (Store.rowHeaderWidth - 1) ,
(end_r + offsetTop - 2 + 0.5) * Store.devicePixelRatio (end_r + offsetTop - 2 + 0.5)
); );
// luckysheetTableContent.lineWidth = Store.devicePixelRatio; // luckysheetTableContent.lineWidth = 1;
// luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; // luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
luckysheetTableContent.closePath(); luckysheetTableContent.closePath();
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
@ -133,21 +136,23 @@ function luckysheetDrawgridRowTitle(scrollHeight, drawHeight, offsetTop) {
//行标题栏竖线 //行标题栏竖线
// luckysheetTableContent.beginPath(); // luckysheetTableContent.beginPath();
// luckysheetTableContent.moveTo( // luckysheetTableContent.moveTo(
// (Store.rowHeaderWidth - 2 + 0.5) * Store.devicePixelRatio, // (Store.rowHeaderWidth - 2 + 0.5) ,
// (offsetTop - 1) * Store.devicePixelRatio // (offsetTop - 1)
// ); // );
// luckysheetTableContent.lineTo( // luckysheetTableContent.lineTo(
// (Store.rowHeaderWidth - 2 + 0.5) * Store.devicePixelRatio, // (Store.rowHeaderWidth - 2 + 0.5) ,
// (Store.rh_height + offsetTop) * Store.devicePixelRatio // (Store.rh_height + offsetTop)
// ); // );
// luckysheetTableContent.lineWidth = Store.devicePixelRatio; // luckysheetTableContent.lineWidth = 1;
// luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; // luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
// luckysheetTableContent.closePath(); // luckysheetTableContent.closePath();
// luckysheetTableContent.stroke(); // luckysheetTableContent.stroke();
//清除canvas左上角区域 防止列标题栏序列号溢出显示 //清除canvas左上角区域 防止列标题栏序列号溢出显示
// luckysheetTableContent.clearRect(0, 0, Store.rowHeaderWidth * Store.devicePixelRatio, Store.columeHeaderHeight * Store.devicePixelRatio); // luckysheetTableContent.clearRect(0, 0, Store.rowHeaderWidth , Store.columeHeaderHeight );
luckysheetTableContent.restore();
luckysheetTableContent.restore(); luckysheetTableContent.restore();
} }
@ -166,11 +171,13 @@ function luckysheetDrawgridColumnTitle(scrollWidth, drawWidth, offsetLeft) {
} }
let luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d"); let luckysheetTableContent = $("#luckysheetTableContent").get(0).getContext("2d");
luckysheetTableContent.save();
luckysheetTableContent.scale(Store.devicePixelRatio, Store.devicePixelRatio);
luckysheetTableContent.clearRect( luckysheetTableContent.clearRect(
offsetLeft * Store.devicePixelRatio, offsetLeft ,
-0.5, -0.5,
drawWidth * Store.devicePixelRatio, drawWidth ,
(Store.columeHeaderHeight - 1.5) * Store.devicePixelRatio (Store.columeHeaderHeight - 1.5)
); );
@ -191,10 +198,10 @@ function luckysheetDrawgridColumnTitle(scrollWidth, drawWidth, offsetLeft) {
luckysheetTableContent.save(); luckysheetTableContent.save();
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.rect(offsetLeft* Store.devicePixelRatio, 0, drawWidth* Store.devicePixelRatio, Store.columeHeaderHeight * Store.devicePixelRatio-1); luckysheetTableContent.rect(offsetLeft, 0, drawWidth, Store.columeHeaderHeight -1);
luckysheetTableContent.clip(); luckysheetTableContent.clip();
// console.log(offsetLeft* Store.devicePixelRatio, 0, drawWidth* Store.devicePixelRatio, Store.columeHeaderHeight * Store.devicePixelRatio-1); // console.log(offsetLeft, 0, drawWidth, Store.columeHeaderHeight -1);
let end_c, start_c; let end_c, start_c;
@ -214,10 +221,10 @@ function luckysheetDrawgridColumnTitle(scrollWidth, drawWidth, offsetLeft) {
luckysheetTableContent.fillStyle = "#ffffff"; luckysheetTableContent.fillStyle = "#ffffff";
luckysheetTableContent.fillRect( luckysheetTableContent.fillRect(
(start_c + offsetLeft - 1) * Store.devicePixelRatio, (start_c + offsetLeft - 1) ,
0, 0,
(end_c - start_c) * Store.devicePixelRatio, (end_c - start_c) ,
Store.columeHeaderHeight * Store.devicePixelRatio-1 Store.columeHeaderHeight -1
) )
luckysheetTableContent.fillStyle = "#000000"; luckysheetTableContent.fillStyle = "#000000";
@ -226,22 +233,22 @@ function luckysheetDrawgridColumnTitle(scrollWidth, drawWidth, offsetLeft) {
let textMetrics = getMeasureText(abc, luckysheetTableContent); let textMetrics = getMeasureText(abc, luckysheetTableContent);
//luckysheetTableContent.measureText(abc); //luckysheetTableContent.measureText(abc);
let horizonAlignPos = Math.round((start_c + (end_c - start_c) / 2 + offsetLeft) * Store.devicePixelRatio - textMetrics.width / 2); let horizonAlignPos = Math.round((start_c + (end_c - start_c) / 2 + offsetLeft) - textMetrics.width / 2);
let verticalAlignPos = Math.round(Store.columeHeaderHeight / 2 * Store.devicePixelRatio); let verticalAlignPos = Math.round(Store.columeHeaderHeight / 2 );
luckysheetTableContent.fillText(abc, horizonAlignPos, verticalAlignPos); luckysheetTableContent.fillText(abc, horizonAlignPos, verticalAlignPos);
//列标题栏竖线 vertical //列标题栏竖线 vertical
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
(end_c + offsetLeft - 2 + 0.5) * Store.devicePixelRatio, (end_c + offsetLeft - 2 + 0.5) ,
0.5 0.5
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
(end_c + offsetLeft - 2 + 0.5) * Store.devicePixelRatio, (end_c + offsetLeft - 2 + 0.5) ,
(Store.columeHeaderHeight - 2) * Store.devicePixelRatio (Store.columeHeaderHeight - 2)
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
luckysheetTableContent.closePath(); luckysheetTableContent.closePath();
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
@ -249,14 +256,14 @@ function luckysheetDrawgridColumnTitle(scrollWidth, drawWidth, offsetLeft) {
//horizen //horizen
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
Store.devicePixelRatio * (start_c + offsetLeft - 1), (start_c + offsetLeft - 1),
(Store.columeHeaderHeight - 2 + 0.5) * Store.devicePixelRatio (Store.columeHeaderHeight - 2 + 0.5)
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
Store.devicePixelRatio * (end_c + offsetLeft - 1), (end_c + offsetLeft - 1),
(Store.columeHeaderHeight - 2 + 0.5) * Store.devicePixelRatio (Store.columeHeaderHeight - 2 + 0.5)
); );
// luckysheetTableContent.lineWidth = Store.devicePixelRatio; // luckysheetTableContent.lineWidth = 1;
// luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; // luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
@ -266,22 +273,23 @@ function luckysheetDrawgridColumnTitle(scrollWidth, drawWidth, offsetLeft) {
//列标题栏横线 //列标题栏横线
// luckysheetTableContent.beginPath(); // luckysheetTableContent.beginPath();
// luckysheetTableContent.moveTo( // luckysheetTableContent.moveTo(
// (offsetLeft - 1) * Store.devicePixelRatio, // (offsetLeft - 1) ,
// (Store.columeHeaderHeight - 2 + 0.5) * Store.devicePixelRatio // (Store.columeHeaderHeight - 2 + 0.5)
// ); // );
// luckysheetTableContent.lineTo( // luckysheetTableContent.lineTo(
// (Store.ch_width + offsetLeft - 2) * Store.devicePixelRatio, // (Store.ch_width + offsetLeft - 2) ,
// (Store.columeHeaderHeight - 2 + 0.5) * Store.devicePixelRatio // (Store.columeHeaderHeight - 2 + 0.5)
// ); // );
// luckysheetTableContent.lineWidth = Store.devicePixelRatio; // luckysheetTableContent.lineWidth = 1;
// luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; // luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
// luckysheetTableContent.closePath(); // luckysheetTableContent.closePath();
// luckysheetTableContent.stroke(); // luckysheetTableContent.stroke();
//清除canvas左上角区域 防止列标题栏序列号溢出显示 //清除canvas左上角区域 防止列标题栏序列号溢出显示
// luckysheetTableContent.clearRect(0, 0, Store.rowHeaderWidth * Store.devicePixelRatio, Store.columeHeaderHeight * Store.devicePixelRatio); // luckysheetTableContent.clearRect(0, 0, Store.rowHeaderWidth , Store.columeHeaderHeight );
luckysheetTableContent.restore(); luckysheetTableContent.restore();
luckysheetTableContent.restore();
} }
function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, offsetLeft, offsetTop, columnOffsetCell, rowOffsetCell, mycanvas) { function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, offsetLeft, offsetTop, columnOffsetCell, rowOffsetCell, mycanvas) {
@ -342,11 +350,14 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
} }
} }
luckysheetTableContent.save();
luckysheetTableContent.scale(Store.devicePixelRatio, Store.devicePixelRatio);
luckysheetTableContent.clearRect( luckysheetTableContent.clearRect(
0, 0,
0, 0,
Store.luckysheetTableContentHW[0] * Store.devicePixelRatio, Store.luckysheetTableContentHW[0] ,
Store.luckysheetTableContentHW[1] * Store.devicePixelRatio Store.luckysheetTableContentHW[1]
); );
//表格渲染区域 起止行列下标 //表格渲染区域 起止行列下标
@ -420,10 +431,10 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
//表格canvas 初始化处理 //表格canvas 初始化处理
luckysheetTableContent.fillStyle = "#ffffff"; luckysheetTableContent.fillStyle = "#ffffff";
luckysheetTableContent.fillRect( luckysheetTableContent.fillRect(
(offsetLeft - 1) * Store.devicePixelRatio, (offsetLeft - 1) ,
(offsetTop - 1) * Store.devicePixelRatio, (offsetTop - 1) ,
(fill_col_ed - scrollWidth) * Store.devicePixelRatio, (fill_col_ed - scrollWidth) ,
(fill_row_ed - scrollHeight) * Store.devicePixelRatio (fill_row_ed - scrollHeight)
); );
luckysheetTableContent.font = luckysheetdefaultFont(); luckysheetTableContent.font = luckysheetdefaultFont();
// luckysheetTableContent.textBaseline = "top"; // luckysheetTableContent.textBaseline = "top";
@ -611,10 +622,10 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
//sparklines渲染 //sparklines渲染
let borderfix = menuButton.borderfix(Store.flowdata, r, c); let borderfix = menuButton.borderfix(Store.flowdata, r, c);
let cellsize = [ let cellsize = [
Store.devicePixelRatio * (start_c + offsetLeft + borderfix[0]), (start_c + offsetLeft + borderfix[0]),
Store.devicePixelRatio * (start_r + offsetTop + 0.5 + borderfix[1]), (start_r + offsetTop + 0.5 + borderfix[1]),
Store.devicePixelRatio * (end_c - start_c - 3 + borderfix[2]), (end_c - start_c - 3 + borderfix[2]),
Store.devicePixelRatio * (end_r - start_r - 3 - 0.5 + borderfix[3]) (end_r - start_r - 3 - 0.5 + borderfix[3])
]; ];
sparklinesRender(r, c, cellsize[0], cellsize[1], "luckysheetTableContent", luckysheetTableContent); sparklinesRender(r, c, cellsize[0], cellsize[1], "luckysheetTableContent", luckysheetTableContent);
} }
@ -677,10 +688,10 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
//sparklines渲染 //sparklines渲染
let borderfix = menuButton.borderfix(Store.flowdata, r, c); let borderfix = menuButton.borderfix(Store.flowdata, r, c);
let cellsize = [ let cellsize = [
Store.devicePixelRatio * (start_c + offsetLeft + borderfix[0]), (start_c + offsetLeft + borderfix[0]),
Store.devicePixelRatio * (start_r + offsetTop + 0.5 + borderfix[1]), (start_r + offsetTop + 0.5 + borderfix[1]),
Store.devicePixelRatio * (end_c - start_c - 3 + borderfix[2]), (end_c - start_c - 3 + borderfix[2]),
Store.devicePixelRatio * (end_r - start_r - 3 - 0.5 + borderfix[3]) (end_r - start_r - 3 - 0.5 + borderfix[3])
]; ];
sparklinesRender(r, c, cellsize[0], cellsize[1], "luckysheetTableContent", luckysheetTableContent); sparklinesRender(r, c, cellsize[0], cellsize[1], "luckysheetTableContent", luckysheetTableContent);
} }
@ -721,14 +732,14 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
if ((c == 0 || c == 5) && r <= 11) { if ((c == 0 || c == 5) && r <= 11) {
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
Store.devicePixelRatio * (end_c - 2 + 0.5 + offsetLeft), (end_c - 2 + 0.5 + offsetLeft),
Store.devicePixelRatio * (start_r + offsetTop) (start_r + offsetTop)
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
Store.devicePixelRatio * (end_c - 2 + 0.5 + offsetLeft), (end_c - 2 + 0.5 + offsetLeft),
Store.devicePixelRatio * (end_r - 2 + 0.5 + offsetTop) (end_r - 2 + 0.5 + offsetTop)
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = "#000000"; luckysheetTableContent.strokeStyle = "#000000";
luckysheetTableContent.closePath(); luckysheetTableContent.closePath();
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
@ -737,14 +748,14 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
if ((r == 2 || r == 11) && c <= 5) { if ((r == 2 || r == 11) && c <= 5) {
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
Store.devicePixelRatio * (start_c - 1 + offsetLeft), (start_c - 1 + offsetLeft),
Store.devicePixelRatio * (end_r - 2 + 0.5 + offsetTop) (end_r - 2 + 0.5 + offsetTop)
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
Store.devicePixelRatio * (end_c - 2 + 0.5 + offsetLeft), (end_c - 2 + 0.5 + offsetLeft),
Store.devicePixelRatio * (end_r - 2 + 0.5 + offsetTop) (end_r - 2 + 0.5 + offsetTop)
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = "#000000"; luckysheetTableContent.strokeStyle = "#000000";
luckysheetTableContent.closePath(); luckysheetTableContent.closePath();
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
@ -757,8 +768,8 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
luckysheetTableContent.textAlign="center"; luckysheetTableContent.textAlign="center";
luckysheetTableContent.fillText( luckysheetTableContent.fillText(
locale().pivotTable.title, locale().pivotTable.title,
Store.devicePixelRatio * (start_c + (end_c - start_c) / 2 + 4 + offsetLeft), (start_c + (end_c - start_c) / 2 + 4 + offsetLeft),
Store.devicePixelRatio *(start_r + (end_r - start_r) / 2 - 1 + offsetTop) (start_r + (end_r - start_r) / 2 - 1 + offsetTop)
); );
luckysheetTableContent.restore(); luckysheetTableContent.restore();
} }
@ -767,28 +778,28 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
if (c < pivotTable.pivotTableBoundary[1] && r < pivotTable.pivotTableBoundary[0]) { if (c < pivotTable.pivotTableBoundary[1] && r < pivotTable.pivotTableBoundary[0]) {
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
Store.devicePixelRatio*(end_c - 2 + 0.5 + offsetLeft), (end_c - 2 + 0.5 + offsetLeft),
Store.devicePixelRatio*(start_r + offsetTop) (start_r + offsetTop)
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
Store.devicePixelRatio*(end_c - 2 + 0.5 + offsetLeft), (end_c - 2 + 0.5 + offsetLeft),
Store.devicePixelRatio*(end_r - 2 + 0.5 + offsetTop) (end_r - 2 + 0.5 + offsetTop)
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = "#000000"; luckysheetTableContent.strokeStyle = "#000000";
luckysheetTableContent.closePath(); luckysheetTableContent.closePath();
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
Store.devicePixelRatio*(start_c - 1 + offsetLeft), (start_c - 1 + offsetLeft),
Store.devicePixelRatio*(end_r - 2 + 0.5 + offsetTop) (end_r - 2 + 0.5 + offsetTop)
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
Store.devicePixelRatio*(end_c - 2 + offsetLeft), (end_c - 2 + offsetLeft),
Store.devicePixelRatio*(end_r - 2 + 0.5 + offsetTop) (end_r - 2 + 0.5 + offsetTop)
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = "#000000"; luckysheetTableContent.strokeStyle = "#000000";
luckysheetTableContent.closePath(); luckysheetTableContent.closePath();
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
@ -803,11 +814,11 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
let borderLeftRender = function(style, color, start_r, start_c, end_r, end_c, offsetLeft, offsetTop, canvas){ let borderLeftRender = function(style, color, start_r, start_c, end_r, end_c, offsetLeft, offsetTop, canvas){
let linetype = style; let linetype = style;
let m_st = Store.devicePixelRatio * (start_c - 2 + 0.5 + offsetLeft); let m_st = (start_c - 2 + 0.5 + offsetLeft);
let m_ed = Store.devicePixelRatio * (start_r + offsetTop); let m_ed = (start_r + offsetTop);
let line_st = Store.devicePixelRatio * (start_c - 2 + 0.5 + offsetLeft); let line_st = (start_c - 2 + 0.5 + offsetLeft);
let line_ed = Store.devicePixelRatio * (end_r - 2 + 0.5 + offsetTop); let line_ed = (end_r - 2 + 0.5 + offsetTop);
canvas.save();
menuButton.setLineDash(canvas, linetype, "v", m_st, m_ed, line_st, line_ed); menuButton.setLineDash(canvas, linetype, "v", m_st, m_ed, line_st, line_ed);
canvas.strokeStyle = color; canvas.strokeStyle = color;
@ -820,11 +831,11 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
let borderRightRender = function(style, color, start_r, start_c, end_r, end_c, offsetLeft, offsetTop, canvas){ let borderRightRender = function(style, color, start_r, start_c, end_r, end_c, offsetLeft, offsetTop, canvas){
let linetype = style; let linetype = style;
let m_st = Store.devicePixelRatio * (end_c - 2 + 0.5 + offsetLeft); let m_st = (end_c - 2 + 0.5 + offsetLeft);
let m_ed = Store.devicePixelRatio * (start_r + offsetTop); let m_ed = (start_r + offsetTop);
let line_st = Store.devicePixelRatio * (end_c - 2 + 0.5 + offsetLeft); let line_st = (end_c - 2 + 0.5 + offsetLeft);
let line_ed = Store.devicePixelRatio * (end_r - 2 + 0.5 + offsetTop); let line_ed = (end_r - 2 + 0.5 + offsetTop);
canvas.save();
menuButton.setLineDash(canvas, linetype, "v", m_st, m_ed, line_st, line_ed); menuButton.setLineDash(canvas, linetype, "v", m_st, m_ed, line_st, line_ed);
canvas.strokeStyle = color; canvas.strokeStyle = color;
@ -837,11 +848,11 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
let borderBottomRender = function(style, color, start_r, start_c, end_r, end_c, offsetLeft, offsetTop, canvas){ let borderBottomRender = function(style, color, start_r, start_c, end_r, end_c, offsetLeft, offsetTop, canvas){
let linetype = style; let linetype = style;
let m_st = Store.devicePixelRatio * (start_c - 2 + offsetLeft); let m_st = (start_c - 2 + offsetLeft);
let m_ed = Store.devicePixelRatio * (end_r - 2 + 0.5 + offsetTop); let m_ed = (end_r - 2 + 0.5 + offsetTop);
let line_st = Store.devicePixelRatio * (end_c - 2 + 0.5 + offsetLeft); let line_st = (end_c - 2 + 0.5 + offsetLeft);
let line_ed = Store.devicePixelRatio * (end_r - 2 + 0.5 + offsetTop); let line_ed = (end_r - 2 + 0.5 + offsetTop);
canvas.save();
menuButton.setLineDash(canvas, linetype, "h", m_st, m_ed, line_st, line_ed); menuButton.setLineDash(canvas, linetype, "h", m_st, m_ed, line_st, line_ed);
canvas.strokeStyle = color; canvas.strokeStyle = color;
@ -854,11 +865,11 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
let borderTopRender = function(style, color, start_r, start_c, end_r, end_c, offsetLeft, offsetTop, canvas){ let borderTopRender = function(style, color, start_r, start_c, end_r, end_c, offsetLeft, offsetTop, canvas){
let linetype = style; let linetype = style;
let m_st = Store.devicePixelRatio * (start_c - 2 + offsetLeft); let m_st = (start_c - 2 + offsetLeft);
let m_ed = Store.devicePixelRatio * (start_r - 1 + 0.5 + offsetTop); let m_ed = (start_r - 1 + 0.5 + offsetTop);
let line_st = Store.devicePixelRatio * (end_c - 2 + 0.5 + offsetLeft); let line_st = (end_c - 2 + 0.5 + offsetLeft);
let line_ed = Store.devicePixelRatio * (start_r - 1 + 0.5 + offsetTop); let line_ed = (start_r - 1 + 0.5 + offsetTop);
canvas.save();
menuButton.setLineDash(canvas, linetype, "h", m_st, m_ed, line_st, line_ed); menuButton.setLineDash(canvas, linetype, "h", m_st, m_ed, line_st, line_ed);
canvas.strokeStyle = color; canvas.strokeStyle = color;
@ -908,13 +919,15 @@ function luckysheetDrawMain(scrollWidth, scrollHeight, drawWidth, drawHeight, of
//渲染表格时有尾列时,清除右边灰色区域,防止表格有值溢出 //渲染表格时有尾列时,清除右边灰色区域,防止表格有值溢出
if(dataset_col_ed == Store.visibledatacolumn.length - 1){ if(dataset_col_ed == Store.visibledatacolumn.length - 1){
luckysheetTableContent.clearRect( luckysheetTableContent.clearRect(
(fill_col_ed - scrollWidth + offsetLeft - 1) * Store.devicePixelRatio, (fill_col_ed - scrollWidth + offsetLeft - 1) ,
(offsetTop - 1) * Store.devicePixelRatio, (offsetTop - 1) ,
(Store.ch_width - Store.visibledatacolumn[dataset_col_ed]) * Store.devicePixelRatio, (Store.ch_width - Store.visibledatacolumn[dataset_col_ed]) ,
(fill_row_ed - scrollHeight) * Store.devicePixelRatio (fill_row_ed - scrollHeight)
); );
} }
luckysheetTableContent.restore();
Store.measureTextCacheTimeOut = setTimeout(() => { Store.measureTextCacheTimeOut = setTimeout(() => {
Store.measureTextCache = {}; Store.measureTextCache = {};
}, 2000); }, 2000);
@ -944,8 +957,8 @@ let sparklinesRender = function(r, c, offsetX, offsetY, canvasid, ctx){
temp1.shapes, temp1.shapes,
offsetX + x, offsetX + x,
offsetY + y, offsetY + y,
temp1.pixelWidth*Store.devicePixelRatio, temp1.pixelWidth,
temp1.pixelHeight*Store.devicePixelRatio, temp1.pixelHeight,
canvasid, canvasid,
ctx ctx
); );
@ -995,10 +1008,10 @@ let nullCellRender = function(r, c, start_r, start_c, end_r, end_c,luckysheetTab
} }
let cellsize = [ let cellsize = [
Store.devicePixelRatio * (start_c + offsetLeft + borderfix[0]), (start_c + offsetLeft + borderfix[0]),
Store.devicePixelRatio * (start_r + offsetTop + 1 + borderfix[1]), (start_r + offsetTop + 1 + borderfix[1]),
Store.devicePixelRatio * (end_c - start_c - 3 + borderfix[2]), (end_c - start_c - 3 + borderfix[2]),
Store.devicePixelRatio * (end_r - start_r - 3 - 0.5 + borderfix[3]) (end_r - start_r - 3 - 0.5 + borderfix[3])
]; ];
luckysheetTableContent.fillRect(cellsize[0], cellsize[1], cellsize[2], cellsize[3]); luckysheetTableContent.fillRect(cellsize[0], cellsize[1], cellsize[2], cellsize[3]);
@ -1011,11 +1024,11 @@ let nullCellRender = function(r, c, start_r, start_c, end_r, end_c,luckysheetTab
luckysheetTableContent.font = fontset; luckysheetTableContent.font = fontset;
//水平对齐 (默认为1,左对齐) //水平对齐 (默认为1,左对齐)
let horizonAlignPos = (start_c + 4 + offsetLeft) * Store.devicePixelRatio; let horizonAlignPos = (start_c + 4 + offsetLeft) ;
//垂直对齐 (默认为2,下对齐) //垂直对齐 (默认为2,下对齐)
let verticalFixed = browser.luckysheetrefreshfixed(); let verticalFixed = browser.luckysheetrefreshfixed();
let verticalAlignPos = (end_r + offsetTop - 2) * Store.devicePixelRatio; let verticalAlignPos = (end_r + offsetTop - 2) ;
luckysheetTableContent.textBaseline = 'bottom'; luckysheetTableContent.textBaseline = 'bottom';
luckysheetTableContent.fillText(value == null ? "" : value, horizonAlignPos, verticalAlignPos); luckysheetTableContent.fillText(value == null ? "" : value, horizonAlignPos, verticalAlignPos);
@ -1024,9 +1037,9 @@ let nullCellRender = function(r, c, start_r, start_c, end_r, end_c,luckysheetTab
//若单元格有批注 //若单元格有批注
if(Store.flowdata[r][c] != null && Store.flowdata[r][c].ps != null){ if(Store.flowdata[r][c] != null && Store.flowdata[r][c].ps != null){
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo(Store.devicePixelRatio * (end_c + offsetLeft - 6), Store.devicePixelRatio * (start_r + offsetTop)); luckysheetTableContent.moveTo( (end_c + offsetLeft - 6), (start_r + offsetTop));
luckysheetTableContent.lineTo(Store.devicePixelRatio * (end_c + offsetLeft - 1), Store.devicePixelRatio * (start_r + offsetTop)); luckysheetTableContent.lineTo( (end_c + offsetLeft - 1), (start_r + offsetTop));
luckysheetTableContent.lineTo(Store.devicePixelRatio * (end_c + offsetLeft - 1), Store.devicePixelRatio * (start_r + offsetTop + 5)); luckysheetTableContent.lineTo( (end_c + offsetLeft - 1), (start_r + offsetTop + 5));
luckysheetTableContent.fillStyle = "#FC6666"; luckysheetTableContent.fillStyle = "#FC6666";
luckysheetTableContent.fill(); luckysheetTableContent.fill();
luckysheetTableContent.closePath(); luckysheetTableContent.closePath();
@ -1055,14 +1068,14 @@ let nullCellRender = function(r, c, start_r, start_c, end_r, end_c,luckysheetTab
if(!Store.luckysheetcurrentisPivotTable){ if(!Store.luckysheetcurrentisPivotTable){
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
Store.devicePixelRatio * (end_c + offsetLeft - 2 + 0.5), (end_c + offsetLeft - 2 + 0.5),
Store.devicePixelRatio * (start_r + offsetTop - 2) (start_r + offsetTop - 2)
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
Store.devicePixelRatio * (end_c + offsetLeft - 2 + 0.5), (end_c + offsetLeft - 2 + 0.5),
Store.devicePixelRatio * (end_r + offsetTop - 2) (end_r + offsetTop - 2)
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
@ -1074,14 +1087,14 @@ let nullCellRender = function(r, c, start_r, start_c, end_r, end_c,luckysheetTab
if(!Store.luckysheetcurrentisPivotTable){ if(!Store.luckysheetcurrentisPivotTable){
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
Store.devicePixelRatio * (start_c + offsetLeft - 2), (start_c + offsetLeft - 2),
Store.devicePixelRatio * (end_r + offsetTop - 2 + 0.5) (end_r + offsetTop - 2 + 0.5)
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
Store.devicePixelRatio * (end_c + offsetLeft - 2), (end_c + offsetLeft - 2),
Store.devicePixelRatio * (end_r + offsetTop - 2 + 0.5) (end_r + offsetTop - 2 + 0.5)
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
@ -1125,10 +1138,10 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
luckysheetTableContent.fillStyle = checksCF["cellColor"]; luckysheetTableContent.fillStyle = checksCF["cellColor"];
} }
luckysheetTableContent.fillRect( luckysheetTableContent.fillRect(
(start_c + offsetLeft - 1) * Store.devicePixelRatio, (start_c + offsetLeft - 1) ,
(start_r + offsetTop) * Store.devicePixelRatio, (start_r + offsetTop) ,
(end_c - start_c) * Store.devicePixelRatio, (end_c - start_c) ,
(end_r - start_r - 1) * Store.devicePixelRatio (end_r - start_r - 1)
) )
//若单元格有批注(单元格右上角红色小三角标示) //若单元格有批注(单元格右上角红色小三角标示)
@ -1137,16 +1150,16 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
Store.devicePixelRatio * (end_c + offsetLeft - ps_w), (end_c + offsetLeft - ps_w),
start_r + offsetTop start_r + offsetTop
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
Store.devicePixelRatio * end_c + offsetLeft, end_c + offsetLeft,
start_r + offsetTop start_r + offsetTop
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
Store.devicePixelRatio * end_c + offsetLeft, end_c + offsetLeft,
Store.devicePixelRatio * (start_r + offsetTop + ps_h) (start_r + offsetTop + ps_h)
); );
luckysheetTableContent.fillStyle = "#FC6666"; luckysheetTableContent.fillStyle = "#FC6666";
luckysheetTableContent.fill(); luckysheetTableContent.fill();
@ -1178,10 +1191,10 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
else{ else{
//若单元格有条件格式数据条 //若单元格有条件格式数据条
if(checksCF != null && checksCF["dataBar"] != null){ if(checksCF != null && checksCF["dataBar"] != null){
let x = Store.devicePixelRatio * (start_c + offsetLeft + space_width); let x = (start_c + offsetLeft + space_width);
let y = Store.devicePixelRatio * (start_r + offsetTop + space_height); let y = (start_r + offsetTop + space_height);
let w = Store.devicePixelRatio * (cellWidth - space_width * 2); let w = (cellWidth - space_width * 2);
let h = Store.devicePixelRatio * (cellHeight - space_height * 2); let h = (cellHeight - space_height * 2);
let valueType = checksCF["dataBar"]["valueType"]; let valueType = checksCF["dataBar"]["valueType"];
let valueLen = checksCF["dataBar"]["valueLen"]; let valueLen = checksCF["dataBar"]["valueLen"];
@ -1237,7 +1250,7 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
x + w * minusLen * (1 - valueLen), x + w * minusLen * (1 - valueLen),
y y
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = "#ff0000"; luckysheetTableContent.strokeStyle = "#ff0000";
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
luckysheetTableContent.closePath(); luckysheetTableContent.closePath();
@ -1293,7 +1306,7 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
x, x,
y y
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = format[0]; luckysheetTableContent.strokeStyle = format[0];
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
luckysheetTableContent.closePath(); luckysheetTableContent.closePath();
@ -1347,7 +1360,7 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
x + w * minusLen, x + w * minusLen,
y y
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = format[0]; luckysheetTableContent.strokeStyle = format[0];
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
luckysheetTableContent.closePath(); luckysheetTableContent.closePath();
@ -1360,30 +1373,30 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
luckysheetTableContent.save(); luckysheetTableContent.save();
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.rect(pos_x * Store.devicePixelRatio, pos_y* Store.devicePixelRatio, cellWidth * Store.devicePixelRatio, cellHeight * Store.devicePixelRatio); luckysheetTableContent.rect(pos_x , pos_y, cellWidth , cellHeight );
luckysheetTableContent.clip(); luckysheetTableContent.clip();
let horizonAlignPos = (pos_x + space_width) * Store.devicePixelRatio; //默认为1,左对齐 let horizonAlignPos = (pos_x + space_width) ; //默认为1,左对齐
if(horizonAlign == "0"){ //居中对齐 if(horizonAlign == "0"){ //居中对齐
horizonAlignPos = (pos_x + cellWidth / 2) * Store.devicePixelRatio - (textMetrics / 2); horizonAlignPos = (pos_x + cellWidth / 2) - (textMetrics / 2);
} }
else if(horizonAlign == "2"){ //右对齐 else if(horizonAlign == "2"){ //右对齐
horizonAlignPos = (pos_x + cellWidth - space_width) * Store.devicePixelRatio - textMetrics; horizonAlignPos = (pos_x + cellWidth - space_width) - textMetrics;
} }
let verticalAlignPos = (pos_y + cellHeight - space_height) * Store.devicePixelRatio - oneLineTextHeight; //默认为2,下对齐 let verticalAlignPos = (pos_y + cellHeight - space_height) - oneLineTextHeight; //默认为2,下对齐
let verticalAlignPos_text = (pos_y + cellHeight - space_height) * Store.devicePixelRatio; //文本垂直方向基准线 let verticalAlignPos_text = (pos_y + cellHeight - space_height) ; //文本垂直方向基准线
luckysheetTableContent.textBaseline = "bottom"; luckysheetTableContent.textBaseline = "bottom";
if(verticalAlign == "0"){ //居中对齐 if(verticalAlign == "0"){ //居中对齐
verticalAlignPos = (pos_y + cellHeight / 2) * Store.devicePixelRatio - (oneLineTextHeight / 2); verticalAlignPos = (pos_y + cellHeight / 2) - (oneLineTextHeight / 2);
verticalAlignPos_text = (pos_y + cellHeight / 2) * Store.devicePixelRatio; verticalAlignPos_text = (pos_y + cellHeight / 2) ;
luckysheetTableContent.textBaseline = "middle"; luckysheetTableContent.textBaseline = "middle";
} }
else if(verticalAlign == "1"){ //上对齐 else if(verticalAlign == "1"){ //上对齐
verticalAlignPos = (pos_y + space_height) * Store.devicePixelRatio; verticalAlignPos = (pos_y + space_height) ;
verticalAlignPos_text = (pos_y + space_height) * Store.devicePixelRatio; verticalAlignPos_text = (pos_y + space_height) ;
luckysheetTableContent.textBaseline = "top"; luckysheetTableContent.textBaseline = "top";
} }
@ -1398,7 +1411,7 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
t * 32, t * 32,
32, 32,
32, 32,
pos_x * Store.devicePixelRatio, pos_x ,
verticalAlignPos, verticalAlignPos,
oneLineTextHeight, oneLineTextHeight,
oneLineTextHeight oneLineTextHeight
@ -1440,26 +1453,26 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
//水平对齐计算 //水平对齐计算
if(horizonAlign == "0"){ if(horizonAlign == "0"){
horizonAlignPos = (pos_x + cellWidth / 2) * Store.devicePixelRatio - (strWidth / 2); horizonAlignPos = (pos_x + cellWidth / 2) - (strWidth / 2);
} }
else if(horizonAlign == "2"){ else if(horizonAlign == "2"){
horizonAlignPos = (pos_x + cellWidth - space_width) * Store.devicePixelRatio - strWidth; horizonAlignPos = (pos_x + cellWidth - space_width) - strWidth;
} }
else{ else{
horizonAlignPos = (pos_x + space_width) * Store.devicePixelRatio; horizonAlignPos = (pos_x + space_width) ;
} }
//垂直对齐计算 //垂直对齐计算
let clLine = 0; let clLine = 0;
if(verticalAlign == "0"){ if(verticalAlign == "0"){
verticalAlignPos = (pos_y + cellHeight / 2) * Store.devicePixelRatio - (strHeight+word_space_height) * (strArr.length-1)/2; verticalAlignPos = (pos_y + cellHeight / 2) - (strHeight+word_space_height) * (strArr.length-1)/2;
} }
else if(verticalAlign == "1"){ else if(verticalAlign == "1"){
verticalAlignPos = (pos_y + space_height) * Store.devicePixelRatio; verticalAlignPos = (pos_y + space_height) ;
clLine = strHeight / 2; clLine = strHeight / 2;
} }
else{ else{
verticalAlignPos = (pos_y + cellHeight - space_height) * Store.devicePixelRatio - (strHeight+word_space_height) * (strArr.length-1); verticalAlignPos = (pos_y + cellHeight - space_height) - (strHeight+word_space_height) * (strArr.length-1);
clLine = -strHeight / 2; clLine = -strHeight / 2;
} }
@ -1493,20 +1506,20 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
let textW = 0.707 * (textMetrics + oneLineTextHeight); let textW = 0.707 * (textMetrics + oneLineTextHeight);
let textH = 0.707 * (textMetrics + oneLineTextHeight); let textH = 0.707 * (textMetrics + oneLineTextHeight);
let hAP = (pos_x + space_width) * Store.devicePixelRatio; let hAP = (pos_x + space_width) ;
if(horizonAlign == "0"){ if(horizonAlign == "0"){
hAP = (pos_x + cellWidth / 2) * Store.devicePixelRatio - (textW / 2); hAP = (pos_x + cellWidth / 2) - (textW / 2);
} }
else if(horizonAlign == "2"){ else if(horizonAlign == "2"){
hAP = (pos_x + cellWidth - space_width) * Store.devicePixelRatio - textW; hAP = (pos_x + cellWidth - space_width) - textW;
} }
let vAP = (pos_y + cellHeight - space_height) * Store.devicePixelRatio - textH; let vAP = (pos_y + cellHeight - space_height) - textH;
if(verticalAlign == "0"){ if(verticalAlign == "0"){
vAP = (pos_y + cellHeight / 2) * Store.devicePixelRatio - (textH / 2); vAP = (pos_y + cellHeight / 2) - (textH / 2);
} }
else if(verticalAlign == "1"){ else if(verticalAlign == "1"){
vAP = (pos_y + space_height) * Store.devicePixelRatio; vAP = (pos_y + space_height) ;
} }
//向下倾斜(45 旋转) //向下倾斜(45 旋转)
@ -1590,20 +1603,20 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
textW_all += textW; textW_all += textW;
textH_all += textH; textH_all += textH;
let hAP = (pos_x + space_width) * Store.devicePixelRatio; let hAP = (pos_x + space_width) ;
if(horizonAlign == "0"){ if(horizonAlign == "0"){
hAP = (pos_x + cellWidth / 2) * Store.devicePixelRatio - (textW / 2); hAP = (pos_x + cellWidth / 2) - (textW / 2);
} }
else if(horizonAlign == "2"){ else if(horizonAlign == "2"){
hAP = (pos_x + cellWidth - space_width) * Store.devicePixelRatio - textW; hAP = (pos_x + cellWidth - space_width) - textW;
} }
let vAP = (pos_y + cellHeight - space_height) * Store.devicePixelRatio - textH * vArr.length; let vAP = (pos_y + cellHeight - space_height) - textH * vArr.length;
if(verticalAlign == "0"){ if(verticalAlign == "0"){
vAP = (pos_y + cellHeight / 2) * Store.devicePixelRatio - (textH / 2) * vArr.length; vAP = (pos_y + cellHeight / 2) - (textH / 2) * vArr.length;
} }
else if(verticalAlign == "1"){ else if(verticalAlign == "1"){
vAP = (pos_y + space_height) * Store.devicePixelRatio; vAP = (pos_y + space_height) ;
} }
luckysheetTableContent.fillText(vArr[i], hAP, (vAP + i * textH)); luckysheetTableContent.fillText(vArr[i], hAP, (vAP + i * textH));
@ -1613,20 +1626,20 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
let textW = textW_all / vArr.length; let textW = textW_all / vArr.length;
let textH = textH_all; let textH = textH_all;
let hAP = (pos_x + space_width) * Store.devicePixelRatio; let hAP = (pos_x + space_width) ;
if(horizonAlign == "0"){ if(horizonAlign == "0"){
hAP = (pos_x + cellWidth / 2) * Store.devicePixelRatio - (textW / 2); hAP = (pos_x + cellWidth / 2) - (textW / 2);
} }
else if(horizonAlign == "2"){ else if(horizonAlign == "2"){
hAP = (pos_x + cellWidth - space_width) * Store.devicePixelRatio - textW; hAP = (pos_x + cellWidth - space_width) - textW;
} }
let vAP = (pos_y + cellHeight - space_height) * Store.devicePixelRatio - textH; let vAP = (pos_y + cellHeight - space_height) - textH;
if(verticalAlign == "0"){ if(verticalAlign == "0"){
vAP = (pos_y + cellHeight / 2) * Store.devicePixelRatio - (textH / 2); vAP = (pos_y + cellHeight / 2) - (textH / 2);
} }
else if(verticalAlign == "1"){ else if(verticalAlign == "1"){
vAP = (pos_y + space_height) * Store.devicePixelRatio; vAP = (pos_y + space_height) ;
} }
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
@ -1648,20 +1661,20 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
let textW = oneLineTextHeight; let textW = oneLineTextHeight;
let textH = textMetrics; let textH = textMetrics;
let hAP = (pos_x + space_width) * Store.devicePixelRatio; let hAP = (pos_x + space_width) ;
if(horizonAlign == "0"){ if(horizonAlign == "0"){
hAP = (pos_x + cellWidth / 2) * Store.devicePixelRatio - (textW / 2); hAP = (pos_x + cellWidth / 2) - (textW / 2);
} }
else if(horizonAlign == "2"){ else if(horizonAlign == "2"){
hAP = (pos_x + cellWidth - space_width) * Store.devicePixelRatio - textW; hAP = (pos_x + cellWidth - space_width) - textW;
} }
let vAP = (pos_y + cellHeight - space_height) * Store.devicePixelRatio - textH; let vAP = (pos_y + cellHeight - space_height) - textH;
if(verticalAlign == "0"){ if(verticalAlign == "0"){
vAP = (pos_y + cellHeight / 2) * Store.devicePixelRatio - (textH / 2); vAP = (pos_y + cellHeight / 2) - (textH / 2);
} }
else if(verticalAlign == "1"){ else if(verticalAlign == "1"){
vAP = (pos_y + space_height) * Store.devicePixelRatio; vAP = (pos_y + space_height) ;
} }
//向下90(90 旋转) //向下90(90 旋转)
@ -1739,14 +1752,14 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
if(!Store.luckysheetcurrentisPivotTable){ if(!Store.luckysheetcurrentisPivotTable){
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
Store.devicePixelRatio * (end_c + offsetLeft - 2 + 0.5), (end_c + offsetLeft - 2 + 0.5),
Store.devicePixelRatio * (start_r + offsetTop - 2) (start_r + offsetTop - 2)
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
Store.devicePixelRatio * (end_c + offsetLeft - 2 + 0.5), (end_c + offsetLeft - 2 + 0.5),
Store.devicePixelRatio * (end_r + offsetTop - 2) (end_r + offsetTop - 2)
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
luckysheetTableContent.closePath(); luckysheetTableContent.closePath();
@ -1757,14 +1770,14 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee
if(!Store.luckysheetcurrentisPivotTable){ if(!Store.luckysheetcurrentisPivotTable){
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.moveTo( luckysheetTableContent.moveTo(
Store.devicePixelRatio * (start_c + offsetLeft - 2), (start_c + offsetLeft - 2),
Store.devicePixelRatio * (end_r + offsetTop - 2 + 0.5) (end_r + offsetTop - 2 + 0.5)
); );
luckysheetTableContent.lineTo( luckysheetTableContent.lineTo(
Store.devicePixelRatio * (end_c + offsetLeft - 2), (end_c + offsetLeft - 2),
Store.devicePixelRatio * (end_r + offsetTop - 2 + 0.5) (end_r + offsetTop - 2 + 0.5)
); );
luckysheetTableContent.lineWidth = Store.devicePixelRatio; luckysheetTableContent.lineWidth = 1;
luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle;
luckysheetTableContent.stroke(); luckysheetTableContent.stroke();
luckysheetTableContent.closePath(); luckysheetTableContent.closePath();
@ -1821,34 +1834,34 @@ let cellOverflowRender = function(r, c, stc, edc,luckysheetTableContent,scrollHe
luckysheetTableContent.save(); luckysheetTableContent.save();
luckysheetTableContent.beginPath(); luckysheetTableContent.beginPath();
luckysheetTableContent.rect(pos_x* Store.devicePixelRatio, pos_y* Store.devicePixelRatio, cellWidth* Store.devicePixelRatio, cellHeight* Store.devicePixelRatio); luckysheetTableContent.rect(pos_x, pos_y, cellWidth, cellHeight);
luckysheetTableContent.clip(); luckysheetTableContent.clip();
//溢出单元格 水平对齐 //溢出单元格 水平对齐
let horizonAlign = menuButton.checkstatus(Store.flowdata, r, c, "ht"); let horizonAlign = menuButton.checkstatus(Store.flowdata, r, c, "ht");
let horizonAlignPos = (pos_x + space_width) * Store.devicePixelRatio; //默认为1,左对齐 let horizonAlignPos = (pos_x + space_width) ; //默认为1,左对齐
if(horizonAlign == "0"){ //居中对齐 if(horizonAlign == "0"){ //居中对齐
horizonAlignPos = (pos_x + cellWidth / 2) * Store.devicePixelRatio - (textMetrics / 2); horizonAlignPos = (pos_x + cellWidth / 2) - (textMetrics / 2);
} }
else if(horizonAlign == "2"){ //右对齐 else if(horizonAlign == "2"){ //右对齐
horizonAlignPos = (pos_x + cellWidth - space_width) * Store.devicePixelRatio - textMetrics; horizonAlignPos = (pos_x + cellWidth - space_width) - textMetrics;
} }
//溢出单元格 垂直对齐 //溢出单元格 垂直对齐
let verticalAlign = menuButton.checkstatus(Store.flowdata, r, c, "vt"); let verticalAlign = menuButton.checkstatus(Store.flowdata, r, c, "vt");
let verticalAlignPos = (pos_y + cellHeight - space_height) * Store.devicePixelRatio - oneLineTextHeight; //默认为2,下对齐 let verticalAlignPos = (pos_y + cellHeight - space_height) - oneLineTextHeight; //默认为2,下对齐
let verticalAlignPos_text = (pos_y + cellHeight - space_height) * Store.devicePixelRatio; //文本垂直方向基准线 let verticalAlignPos_text = (pos_y + cellHeight - space_height) ; //文本垂直方向基准线
luckysheetTableContent.textBaseline = "bottom"; luckysheetTableContent.textBaseline = "bottom";
if(verticalAlign == "0"){ //居中对齐 if(verticalAlign == "0"){ //居中对齐
verticalAlignPos = (pos_y + cellHeight / 2) * Store.devicePixelRatio - (oneLineTextHeight / 2); verticalAlignPos = (pos_y + cellHeight / 2) - (oneLineTextHeight / 2);
verticalAlignPos_text = (pos_y + cellHeight / 2) * Store.devicePixelRatio; verticalAlignPos_text = (pos_y + cellHeight / 2) ;
luckysheetTableContent.textBaseline = "middle"; luckysheetTableContent.textBaseline = "middle";
} }
else if(verticalAlign == "1"){ //上对齐 else if(verticalAlign == "1"){ //上对齐
verticalAlignPos = (pos_y + space_height) * Store.devicePixelRatio; verticalAlignPos = (pos_y + space_height) ;
verticalAlignPos_text = (pos_y + space_height) * Store.devicePixelRatio; verticalAlignPos_text = (pos_y + space_height) ;
luckysheetTableContent.textBaseline = "top"; luckysheetTableContent.textBaseline = "top";
} }

4
src/utils/util.js

@ -318,10 +318,10 @@ function luckysheetfontformat(format) {
//font-size/line-height //font-size/line-height
if (!format.fs) { if (!format.fs) {
font += Math.ceil(10 * Store.devicePixelRatio) + "pt "; font += "10pt ";
} }
else { else {
font += Math.ceil(format.fs * Store.devicePixelRatio) + "pt "; font += Math.ceil(format.fs) + "pt ";
} }
if (!format.ff) { if (!format.ff) {

Loading…
Cancel
Save