Browse Source

fix(bug): bug

bug
master
wpxp123456 5 years ago
parent
commit
6236e5e8d6
  1. 217
      src/controllers/menuButton.js
  2. 3
      src/global/draw.js
  3. 14
      src/global/formula.js
  4. 123
      src/global/getRowlen.js

217
src/controllers/menuButton.js

@ -24,7 +24,7 @@ import { sortSelection } from '../global/sort';
import luckysheetformula from '../global/formula';
import { rowLocationByIndex, colLocationByIndex } from '../global/location';
import { isdatatypemulti } from '../global/datecontroll';
import { getCellTextSplitArr } from '../global/getRowlen';
import { rowlenByRange, getCellTextSplitArr } from '../global/getRowlen';
import { setcellvalue } from '../global/setdata';
import { countfunc } from '../global/count';
import { getSheetIndex, getRangetxt, getluckysheetfile } from '../methods/get';
@ -848,6 +848,25 @@ const menuButton = {
}
mouseclickposition($menuButton, menuleft, $(this).offset().top + 25, "lefttop");
})
.find("input.luckysheet-toolbar-textinput").keyup(function(e){
if(e.keyCode != 13){//Enter
return;
}
let $this = $(this);
let itemvalue = parseInt($this.val());
let $menuButton = $("#luckysheet-icon-font-size-menuButton");
_this.focus($menuButton, itemvalue);
let d = editor.deepCopyFlowData(Store.flowdata);
_this.updateFormat(d, "fs", itemvalue);
luckysheet_fs_setTimeout = setTimeout(function(){
$menuButton.hide();
$this.blur();
}, 200);
});
//边框设置
$("#luckysheet-icon-border-all").click(function(){
@ -2924,202 +2943,10 @@ const menuButton = {
}
}
if(attr == "tb" && foucsStatus == "2"){
//自动换行
for (let r = row_st; r <= row_ed; r++) {
if (Store.config["rowhidden"] != null && Store.config["rowhidden"][r] != null) {
continue;
}
let currentRowLen = Store.defaultrowlen;
if(cfg["rowlen"][r] != null){
currentRowLen = cfg["rowlen"][r];
}
for (let c = col_st; c <= col_ed; c++) {
let cell = d[r][c];
if(cell != null && !isRealNull(cell.v)){
let fontset = luckysheetfontformat(cell);
let oneLineTextHeight = _this.getTextSize("田", fontset)[1];
canvas.font = fontset;
let strValue = cell.m.toString();
let tbWidth = canvas.measureText(strValue).width;
let cellWidth = colLocationByIndex(c)[1] - colLocationByIndex(c)[0] - 8;
if(tbWidth > cellWidth){
let strArr = [];//文本截断数组
strArr = getCellTextSplitArr(strValue, strArr, cellWidth, canvas);
let computeRowlen = oneLineTextHeight * strArr.length;
//比较计算高度和当前高度取最大高度
if(computeRowlen > currentRowLen){
currentRowLen = computeRowlen;
}
}
}
}
if(currentRowLen != Store.defaultrowlen){
cfg["rowlen"][r] = currentRowLen;
}
}
}
else if(attr == "tr"){
//文本旋转
for (let r = row_st; r <= row_ed; r++) {
if (Store.config["rowhidden"] != null && Store.config["rowhidden"][r] != null) {
continue;
}
let currentRowLen = Store.defaultrowlen;
if(cfg["rowlen"][r] != null){
currentRowLen = cfg["rowlen"][r];
}
for (let c = col_st; c <= col_ed; c++) {
let cell = d[r][c];
if(cell != null && !isRealNull(cell.v)){
let fontset = luckysheetfontformat(cell);
let oneLineTextHeight = _this.getTextSize("田", fontset)[1];
canvas.font = fontset;
let value = cell.m.toString();
let textMetrics = canvas.measureText(value).width;
let computeRowlen; //计算高度
if(foucsStatus == "0"){
//无旋转
computeRowlen = oneLineTextHeight;
}
else if(foucsStatus == "1" || foucsStatus == "2"){
//向下倾斜(45 旋转)----向上倾斜(-45 旋转)
computeRowlen = 0.707 * (textMetrics + oneLineTextHeight) + 4;
}
else if(foucsStatus == "3"){
//竖排文字
computeRowlen = value.length * oneLineTextHeight + 4;
}
else if(foucsStatus == "4" || foucsStatus == "5"){
//向下90(90 旋转)----向上90(-90 旋转)
computeRowlen = textMetrics + 4;
}
computeRowlen = Math.round(computeRowlen);
//比较计算高度和当前高度取最大高度
if(computeRowlen > currentRowLen){
currentRowLen = computeRowlen;
}
}
}
if(currentRowLen != Store.defaultrowlen){
cfg["rowlen"][r] = currentRowLen;
}
}
}
else if(attr == "fs"){
//字体大小
for (let r = row_st; r <= row_ed; r++) {
if (Store.config["rowhidden"] != null && Store.config["rowhidden"][r] != null) {
continue;
}
let currentRowLen = Store.defaultrowlen;
if(cfg["rowlen"][r] != null){
currentRowLen = cfg["rowlen"][r];
}
for (let c = col_st; c <= col_ed; c++) {
let cell = d[r][c];
if(cell == null){
continue;
}
let fontset = luckysheetfontformat(cell);
let oneLineTextHeight = _this.getTextSize("田", fontset)[1];
canvas.font = fontset;
//计算高度
let computeRowlen;
if(isRealNull(cell.v)){
computeRowlen = oneLineTextHeight;
}
else{
if(cell.tb == "2"){
//单元格有自动换行标示
let strValue = cell.m.toString();
let tbWidth = canvas.measureText(strValue).width;
let cellWidth = colLocationByIndex(c)[1] - colLocationByIndex(c)[0] - 8;
if(tbWidth > cellWidth){
let strArr = [];//文本截断数组
for(let strI = 1; strI <= strValue.length; strI++){
let strV = strValue.substring(strArr.join("").length, strI);
let strtextMetrics = canvas.measureText(strV).width;
if(strtextMetrics > cellWidth){
strArr.push(strValue.substring(strArr.join("").length, strI-1));
strI = strI - 2;
}
else if(strtextMetrics <= cellWidth && strI == strValue.length){
strArr.push(strV);
}
}
computeRowlen = oneLineTextHeight * strArr.length;
}
else{
computeRowlen = oneLineTextHeight;
}
}
else if(cell.tr != null){
//单元格有旋转标示
let tr = cell.tr;
let value = cell.m.toString();
let textMetrics = canvas.measureText(value).width;
if(tr == "0"){
//无旋转
computeRowlen = oneLineTextHeight;
}
else if(tr == "1" || tr == "2"){
//向下倾斜(45 旋转)----向上倾斜(-45 旋转)
computeRowlen = 0.707 * (textMetrics + oneLineTextHeight) + 4;
}
else if(tr == "3"){
//竖排文字
computeRowlen = value.length * oneLineTextHeight + 4;
}
else if(tr == "4" || tr == "5"){
//向下90(90 旋转)----向上90(-90 旋转)
computeRowlen = textMetrics + 4;
}
computeRowlen = Math.round(computeRowlen);
}
else{
computeRowlen = oneLineTextHeight;
}
}
//比较计算高度和当前高度取最大高度
if(computeRowlen > currentRowLen){
currentRowLen = computeRowlen;
}
}
if(currentRowLen != Store.defaultrowlen){
cfg["rowlen"][r] = currentRowLen;
}
}
}
cfg = rowlenByRange(d, row_st, row_ed, cfg);
}
if((attr == "tb" && foucsStatus == "2") || attr == "tr" || attr == "fs"){
if(attr == "tb" || attr == "tr" || attr == "fs"){
jfrefreshgrid(d, Store.luckysheet_select_save, cfg, null, true);
}
else{

3
src/global/draw.js

@ -955,9 +955,6 @@ let nullCellRender = function(r, c, start_r, start_c, end_r, end_c,luckysheetTab
let fontset = luckysheetdefaultFont();
luckysheetTableContent.font = fontset;
// let textMetrics = luckysheetTableContent.measureText(value).width;
// let oneLineTextHeight = menuButton.getTextSize("田", fontset)[1];
//水平对齐 (默认为1,左对齐)
let horizonAlignPos = (start_c + 4 + offsetLeft) * Store.devicePixelRatio;

14
src/global/formula.js

@ -1312,6 +1312,8 @@ const luckysheetformula = {
let defaultrowlen = 19;
let offlinecanvas = $("#luckysheetTableContentF").get(0).getContext("2d");
offlinecanvas.textBaseline = 'top'; //textBaseline以top计算
let fontset = luckysheetfontformat(d[r][c]);
offlinecanvas.font = fontset;
@ -1321,15 +1323,17 @@ const luckysheetformula = {
}
let strValue = getcellvalue(r, c, d).toString();
let tbWidth = offlinecanvas.measureText(strValue).width;
let cellWidth = colLocationByIndex(c)[1] - colLocationByIndex(c)[0] - 8;
let measureText = offlinecanvas.measureText(strValue);
let textMetrics = measureText.width;
let cellWidth = colLocationByIndex(c)[1] - colLocationByIndex(c)[0] - 4;
let oneLineTextHeight = measureText.actualBoundingBoxDescent - measureText.actualBoundingBoxAscent;
if(tbWidth > cellWidth){
if(textMetrics > cellWidth){
let strArr = [];//文本截断数组
strArr = getCellTextSplitArr(strValue, strArr, cellWidth, offlinecanvas);
let oneLineTextHeight = menuButton.getTextSize("田", fontset)[1];
let computeRowlen = oneLineTextHeight * strArr.length;
let computeRowlen = oneLineTextHeight * strArr.length + 4;
//比较计算高度和当前高度取最大高度
if(computeRowlen > currentRowLen){
currentRowLen = computeRowlen;

123
src/global/getRowlen.js

@ -11,7 +11,8 @@ function rowlenByRange(d, r1, r2, cfg) {
cfg_clone["rowlen"] = {};
}
let ctcanvas = $("#luckysheetTableContent").get(0).getContext("2d");
let canvas = $("#luckysheetTableContent").get(0).getContext("2d");
canvas.textBaseline = 'top'; //textBaseline以top计算
for(let r = r1; r <= r2; r++){
if (cfg_clone["rowhidden"] != null && cfg_clone["rowhidden"][r] != null) {
@ -19,91 +20,77 @@ function rowlenByRange(d, r1, r2, cfg) {
}
let currentRowLen = Store.defaultrowlen;
if(cfg_clone["rowlen"][r] != null){
currentRowLen = cfg_clone["rowlen"][r];
}
// if(cfg_clone["rowlen"][r] != null){
// currentRowLen = cfg_clone["rowlen"][r];
// }
delete cfg_clone["rowlen"][r];
for(let c = 0; c < d[r].length; c++){
if(d[r][c] != null && d[r][c]["v"] != null && d[r][c]["tb"] != null && d[r][c]["tb"] == "2"){
//自动换行
let fontset = luckysheetfontformat(d[r][c]);
ctcanvas.font = fontset;
let oneLineTextHeight = menuButton.getTextSize("田", fontset)[1];
let cell = d[r][c];
if(cell == null){
continue;
}
let cellText = getcellvalue(r, c, d).toString(); //单元格文本
let textWidth = ctcanvas.measureText(cellText).width; //文本宽度
let cellWidth = colLocationByIndex(c)[1] - colLocationByIndex(c)[0] - 8; //单元格宽度
if(cell != null && cell.v != null){
let fontset = luckysheetfontformat(cell);
canvas.font = fontset;
let value = getcellvalue(r, c, d).toString(); //单元格文本
let measureText = canvas.measureText(value);
let textMetrics = measureText.width; //文本宽度
let oneLineTextHeight = measureText.actualBoundingBoxDescent - measureText.actualBoundingBoxAscent;
let computeRowlen; //计算行高
if(textWidth > cellWidth){
let strArr = []; //文本截断数组
for(let strI = 1; strI <= cellText.length; strI++){
let strV = cellText.substring(strArr.join("").length, strI);
let strtextMetrics = ctcanvas.measureText(strV).width;
if(strtextMetrics > cellWidth){
strArr.push(cellText.substring(strArr.join("").length, strI-1));
strI = strI-2;
}
else if(strtextMetrics <= cellWidth && strI == cellText.length){
strArr.push(strV);
}
}
computeRowlen = oneLineTextHeight * strArr.length;
}
else{
computeRowlen = oneLineTextHeight;
}
if(cell.tb == "2"){
//自动换行
let cellWidth = colLocationByIndex(c)[1] - colLocationByIndex(c)[0] - 4; //单元格宽度
//比较计算行高和当前行高取最大高度
if(computeRowlen > currentRowLen){
currentRowLen = computeRowlen;
if(textMetrics > cellWidth){
let strArr = []; //文本截断数组
strArr = getCellTextSplitArr(value, strArr, cellWidth, canvas);
computeRowlen = oneLineTextHeight * strArr.length + 4;
}
else{
computeRowlen = oneLineTextHeight + 4;
}
}
}
else if(d[r][c] != null && d[r][c]["v"] != null && d[r][c]["tr"] != null){
//文本旋转
let fontset = luckysheetfontformat(d[r][c]);
ctcanvas.font = fontset;
let oneLineTextHeight = menuButton.getTextSize("田", fontset)[1];
else if(cell.tr != null){
//单元格有旋转标示
let tr = cell.tr;
let cellText = getcellvalue(r,c,d).toString(); //单元格文本
let textWidth = ctcanvas.measureText(cellText).width; //文本宽度
if(tr == "0"){
//无旋转
computeRowlen = oneLineTextHeight + 4;
}
else if(tr == "1" || tr == "2"){
//向下倾斜(45 旋转)----向上倾斜(-45 旋转)
computeRowlen = 0.707 * (textMetrics + oneLineTextHeight) + 4;
}
else if(tr == "3"){
//竖排文字
computeRowlen = value.length * oneLineTextHeight + 4;
}
else if(tr == "4" || tr == "5"){
//向下90(90 旋转)----向上90(-90 旋转)
computeRowlen = textMetrics + 4;
}
let computeRowlen; //计算行高
if(d[r][c]["tr"] == "0"){
//无旋转
computeRowlen = oneLineTextHeight;
}
else if(d[r][c]["tr"] == "1" || d[r][c]["tr"] == "2"){
//向下倾斜(45 旋转)----向上倾斜(-45 旋转)
computeRowlen = 0.707 * (textWidth + oneLineTextHeight) + 4;
computeRowlen = Math.round(computeRowlen);
}
else if(d[r][c]["tr"] == "3"){
//竖排文字
computeRowlen = cellText.length * oneLineTextHeight + 4;
}
else if(d[r][c]["tr"] == "4" || d[r][c]["tr"] == "5"){
//向下90(90 旋转)----向上90(-90 旋转)
computeRowlen = textWidth + 4;
else{
computeRowlen = oneLineTextHeight + 4;
}
computeRowlen = Math.round(computeRowlen);
//比较计算高度和当前高度取最大高度
if(computeRowlen > currentRowLen){
currentRowLen = computeRowlen;
}
}
else{
let fontset = luckysheetfontformat(d[r][c]);
let oneLineTextHeight = menuButton.getTextSize("田", fontset)[1];
//比较计算高度和当前高度取最大高度
if(oneLineTextHeight > currentRowLen){
currentRowLen = oneLineTextHeight;
}
}
}
if(currentRowLen != Store.defaultrowlen){

Loading…
Cancel
Save