@deephaven/grid 0.6.1-markdownnotebooks.4 → 0.6.3-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CellInputField.js +1 -1
- package/dist/CellInputField.js.map +1 -1
- package/dist/Grid.d.ts +3 -13
- package/dist/Grid.d.ts.map +1 -1
- package/dist/Grid.js +2 -2
- package/dist/GridMetricCalculator.d.ts +448 -165
- package/dist/GridMetricCalculator.d.ts.map +1 -1
- package/dist/GridMetricCalculator.js +526 -122
- package/dist/GridMetricCalculator.js.map +1 -1
- package/dist/GridMetrics.d.ts +97 -0
- package/dist/GridMetrics.d.ts.map +1 -0
- package/dist/GridMetrics.js +2 -0
- package/dist/GridMetrics.js.map +1 -0
- package/dist/GridRange.d.ts +186 -111
- package/dist/GridRange.d.ts.map +1 -1
- package/dist/GridRange.js +185 -87
- package/dist/GridRange.js.map +1 -1
- package/dist/GridRenderer.d.ts +2 -1
- package/dist/GridRenderer.d.ts.map +1 -1
- package/dist/GridRenderer.js +138 -76
- package/dist/GridRenderer.js.map +1 -1
- package/dist/GridTheme.d.ts +49 -37
- package/dist/GridTheme.d.ts.map +1 -1
- package/dist/GridTheme.js +8 -0
- package/dist/GridTheme.js.map +1 -1
- package/dist/GridUtils.d.ts +238 -91
- package/dist/GridUtils.d.ts.map +1 -1
- package/dist/GridUtils.js +282 -68
- package/dist/GridUtils.js.map +1 -1
- package/dist/memoizeClear.js +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.js +4 -4
- package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
package/dist/GridRenderer.js
CHANGED
|
@@ -78,7 +78,7 @@ class GridRenderer {
|
|
|
78
78
|
var hi = Math.min(str.length - 1, end);
|
|
79
79
|
var result = str;
|
|
80
80
|
|
|
81
|
-
while (hi
|
|
81
|
+
while (hi >= lo) {
|
|
82
82
|
var mid = Math.ceil((hi + lo) / 2);
|
|
83
83
|
var truncatedStr = GridRenderer.truncate(str, mid);
|
|
84
84
|
|
|
@@ -90,6 +90,10 @@ class GridRenderer {
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
lo = mid;
|
|
93
|
+
} else if (mid === 0) {
|
|
94
|
+
// We already truncated to zero chars and it still doesn't fit, no need to keep looking
|
|
95
|
+
result = truncatedStr;
|
|
96
|
+
break;
|
|
93
97
|
} else {
|
|
94
98
|
hi = mid - 1;
|
|
95
99
|
}
|
|
@@ -105,6 +109,7 @@ class GridRenderer {
|
|
|
105
109
|
* @param {string} str The string to calculate max length for
|
|
106
110
|
* @param {number} width The width to truncate within
|
|
107
111
|
* @param {number} fontWidth The estimated width of each character
|
|
112
|
+
* @returns {string} The truncated string that fits within the width provided
|
|
108
113
|
*/
|
|
109
114
|
|
|
110
115
|
|
|
@@ -112,10 +117,13 @@ class GridRenderer {
|
|
|
112
117
|
var fontWidth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : GridRenderer.DEFAULT_FONT_WIDTH;
|
|
113
118
|
|
|
114
119
|
if (width <= 0 || str.length <= 0) {
|
|
115
|
-
return
|
|
116
|
-
}
|
|
120
|
+
return '';
|
|
121
|
+
} // Estimate the possible low and high boundaries for truncating the text
|
|
122
|
+
// Use the width of the space divided by the estimated width of each character,
|
|
123
|
+
// and take half that as the low (minus 5 just to be extra safe), and double that as the high.
|
|
124
|
+
|
|
117
125
|
|
|
118
|
-
var lo = Math.min(Math.floor(width / fontWidth / 2), str.length);
|
|
126
|
+
var lo = Math.min(Math.max(0, Math.floor(width / fontWidth / 2) - 5), str.length);
|
|
119
127
|
var hi = Math.min(Math.ceil(width / fontWidth * 2), str.length);
|
|
120
128
|
return GridRenderer.binaryTruncateToWidth(context, str, width, lo, hi);
|
|
121
129
|
}
|
|
@@ -262,7 +270,8 @@ class GridRenderer {
|
|
|
262
270
|
visibleRows,
|
|
263
271
|
visibleColumnXs,
|
|
264
272
|
visibleColumnWidths,
|
|
265
|
-
width
|
|
273
|
+
width,
|
|
274
|
+
height
|
|
266
275
|
} = metrics;
|
|
267
276
|
|
|
268
277
|
if (floatingColumns.length === 0) {
|
|
@@ -276,16 +285,21 @@ class GridRenderer {
|
|
|
276
285
|
|
|
277
286
|
if (draggingRow == null && draggingColumn == null) {
|
|
278
287
|
this.drawFloatingMouseRowHover(context, state);
|
|
279
|
-
}
|
|
288
|
+
} // Clip floated column grid lines.
|
|
280
289
|
|
|
290
|
+
|
|
291
|
+
context.save();
|
|
292
|
+
context.beginPath();
|
|
293
|
+
context.rect(0, 0, floatingLeftWidth, height);
|
|
294
|
+
context.clip();
|
|
281
295
|
this.drawGridLinesForItems(context, state, floatingColumns, visibleRows, theme.floatingGridColumnColor, theme.floatingGridRowColor);
|
|
296
|
+
context.restore();
|
|
282
297
|
this.drawCellBackgroundsForItems(context, state, floatingColumns, visibleRows);
|
|
283
298
|
this.drawFloatingBorders(context, state); // Draw the floating column selection...
|
|
284
299
|
|
|
285
300
|
if (floatingLeftColumnCount > 0) {
|
|
286
301
|
this.drawSelectedRanges(context, state, {
|
|
287
302
|
left: 0,
|
|
288
|
-
right: floatingLeftColumnCount,
|
|
289
303
|
maxX: visibleColumnXs.get(floatingLeftColumnCount - 1) + visibleColumnWidths.get(floatingLeftColumnCount - 1)
|
|
290
304
|
}, true);
|
|
291
305
|
}
|
|
@@ -738,8 +752,9 @@ class GridRenderer {
|
|
|
738
752
|
} = state;
|
|
739
753
|
var {
|
|
740
754
|
visibleRowYs,
|
|
741
|
-
maxX
|
|
742
|
-
} = metrics;
|
|
755
|
+
maxX: metricsMaxX
|
|
756
|
+
} = metrics;
|
|
757
|
+
var maxX = metricsMaxX; // Draw row lines
|
|
743
758
|
|
|
744
759
|
for (var i = 0; i < rows.length; i += 1) {
|
|
745
760
|
var row = rows[i];
|
|
@@ -913,7 +928,7 @@ class GridRenderer {
|
|
|
913
928
|
var fontWidth = fontWidths.get(context.font);
|
|
914
929
|
var truncatedText = this.getCachedTruncatedString(context, text, textWidth - cellHorizontalPadding * 2, fontWidth);
|
|
915
930
|
|
|
916
|
-
if (truncatedText
|
|
931
|
+
if (truncatedText) {
|
|
917
932
|
context.fillText(truncatedText, textX, textY);
|
|
918
933
|
}
|
|
919
934
|
}
|
|
@@ -960,7 +975,12 @@ class GridRenderer {
|
|
|
960
975
|
}
|
|
961
976
|
|
|
962
977
|
drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {
|
|
963
|
-
var
|
|
978
|
+
var {
|
|
979
|
+
x1,
|
|
980
|
+
y1,
|
|
981
|
+
x2,
|
|
982
|
+
y2
|
|
983
|
+
} = treeBox;
|
|
964
984
|
var markerText = isExpanded ? '⊟' : '⊞';
|
|
965
985
|
var textX = columnX + (x1 + x2) * 0.5 + 0.5;
|
|
966
986
|
var textY = rowY + (y1 + y2) * 0.5 + 0.5;
|
|
@@ -1054,11 +1074,13 @@ class GridRenderer {
|
|
|
1054
1074
|
} = state;
|
|
1055
1075
|
var {
|
|
1056
1076
|
columnHeaderHeight,
|
|
1077
|
+
floatingColumns,
|
|
1057
1078
|
gridX,
|
|
1058
1079
|
width,
|
|
1059
1080
|
visibleColumns,
|
|
1060
1081
|
visibleColumnWidths,
|
|
1061
|
-
visibleColumnXs
|
|
1082
|
+
visibleColumnXs,
|
|
1083
|
+
floatingLeftColumnCount
|
|
1062
1084
|
} = metrics;
|
|
1063
1085
|
|
|
1064
1086
|
if (columnHeaderHeight <= 0) {
|
|
@@ -1075,31 +1097,88 @@ class GridRenderer {
|
|
|
1075
1097
|
} = theme;
|
|
1076
1098
|
var hiddenSeparatorHeight = columnHeaderHeight * 0.5;
|
|
1077
1099
|
var hiddenY = columnHeaderHeight * 0.5 - hiddenSeparatorHeight * 0.5;
|
|
1100
|
+
var containsFrozenColumns = floatingLeftColumnCount > 0;
|
|
1101
|
+
var floatingLeftColumnsWidth = 0;
|
|
1078
1102
|
context.save();
|
|
1079
1103
|
context.beginPath(); // Fill in the background
|
|
1080
1104
|
|
|
1081
1105
|
context.fillStyle = headerBackgroundColor;
|
|
1082
|
-
context.fillRect(0, 0, width, columnHeaderHeight);
|
|
1106
|
+
context.fillRect(0, 0, width, columnHeaderHeight);
|
|
1107
|
+
context.fillStyle = headerColor; // Visible columns.
|
|
1108
|
+
|
|
1109
|
+
for (var i = 0; i < visibleColumns.length; i += 1) {
|
|
1110
|
+
var column = visibleColumns[i];
|
|
1111
|
+
var columnWidth = visibleColumnWidths.get(column);
|
|
1112
|
+
var x = visibleColumnXs.get(column) + gridX;
|
|
1113
|
+
this.drawColumnHeader(context, state, column, x, columnWidth);
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
if (containsFrozenColumns) {
|
|
1117
|
+
floatingLeftColumnsWidth = visibleColumnXs.get(floatingLeftColumnCount - 1) + visibleColumnWidths.get(floatingLeftColumnCount - 1); // Frozen columns' background
|
|
1118
|
+
|
|
1119
|
+
context.fillStyle = headerBackgroundColor;
|
|
1120
|
+
context.fillRect(gridX, 0, floatingLeftColumnsWidth, columnHeaderHeight); // Frozen columns.
|
|
1121
|
+
|
|
1122
|
+
context.fillStyle = headerColor;
|
|
1123
|
+
|
|
1124
|
+
for (var _i5 = 0; _i5 < floatingColumns.length; _i5 += 1) {
|
|
1125
|
+
var _column = floatingColumns[_i5];
|
|
1126
|
+
|
|
1127
|
+
var _columnWidth = visibleColumnWidths.get(_column);
|
|
1128
|
+
|
|
1129
|
+
var _x4 = visibleColumnXs.get(_column) + gridX;
|
|
1130
|
+
|
|
1131
|
+
this.drawColumnHeader(context, state, _column, _x4, _columnWidth);
|
|
1132
|
+
}
|
|
1133
|
+
} // Draw the separators, visible columns then floating columns.
|
|
1134
|
+
|
|
1083
1135
|
|
|
1084
1136
|
if (headerSeparatorColor) {
|
|
1085
1137
|
context.strokeStyle = headerSeparatorColor;
|
|
1086
1138
|
context.beginPath();
|
|
1087
|
-
var hiddenColumns = [];
|
|
1139
|
+
var hiddenColumns = []; // Draw visible column separators.
|
|
1140
|
+
|
|
1088
1141
|
var isPreviousColumnHidden = false;
|
|
1089
1142
|
|
|
1090
|
-
for (var
|
|
1091
|
-
var
|
|
1092
|
-
var columnX = visibleColumnXs.get(
|
|
1093
|
-
|
|
1143
|
+
for (var _i6 = 0; _i6 < visibleColumns.length; _i6 += 1) {
|
|
1144
|
+
var _column2 = visibleColumns[_i6];
|
|
1145
|
+
var columnX = visibleColumnXs.get(_column2);
|
|
1146
|
+
|
|
1147
|
+
var _columnWidth2 = visibleColumnWidths.get(_column2);
|
|
1148
|
+
|
|
1149
|
+
if (!(columnX < floatingLeftColumnsWidth - _columnWidth2)) {
|
|
1150
|
+
if (_columnWidth2 > 0) {
|
|
1151
|
+
var _x5 = gridX + columnX + _columnWidth2 + 0.5;
|
|
1152
|
+
|
|
1153
|
+
context.moveTo(_x5, 0);
|
|
1154
|
+
context.lineTo(_x5, columnHeaderHeight - 0.5);
|
|
1155
|
+
isPreviousColumnHidden = false;
|
|
1156
|
+
} else if (!isPreviousColumnHidden) {
|
|
1157
|
+
isPreviousColumnHidden = true;
|
|
1158
|
+
hiddenColumns.push(_column2);
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
} // Draw floating column separators.
|
|
1162
|
+
|
|
1094
1163
|
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1164
|
+
isPreviousColumnHidden = false;
|
|
1165
|
+
|
|
1166
|
+
for (var _i7 = 0; _i7 < floatingColumns.length; _i7 += 1) {
|
|
1167
|
+
var _column3 = floatingColumns[_i7];
|
|
1168
|
+
|
|
1169
|
+
var _columnX = visibleColumnXs.get(_column3);
|
|
1170
|
+
|
|
1171
|
+
var _columnWidth3 = visibleColumnWidths.get(_column3);
|
|
1172
|
+
|
|
1173
|
+
if (_columnWidth3 > 0) {
|
|
1174
|
+
var _x6 = gridX + _columnX + _columnWidth3 + 0.5;
|
|
1175
|
+
|
|
1176
|
+
context.moveTo(_x6, 0);
|
|
1177
|
+
context.lineTo(_x6, columnHeaderHeight - 0.5);
|
|
1099
1178
|
isPreviousColumnHidden = false;
|
|
1100
1179
|
} else if (!isPreviousColumnHidden) {
|
|
1101
1180
|
isPreviousColumnHidden = true;
|
|
1102
|
-
hiddenColumns.push(
|
|
1181
|
+
hiddenColumns.push(_column3);
|
|
1103
1182
|
}
|
|
1104
1183
|
} // Bottom Border, should be interior to the header height
|
|
1105
1184
|
|
|
@@ -1111,14 +1190,14 @@ class GridRenderer {
|
|
|
1111
1190
|
context.beginPath();
|
|
1112
1191
|
context.fillStyle = headerSeparatorColor;
|
|
1113
1192
|
|
|
1114
|
-
for (var
|
|
1115
|
-
var
|
|
1193
|
+
for (var _i8 = 0; _i8 < hiddenColumns.length; _i8 += 1) {
|
|
1194
|
+
var _column4 = hiddenColumns[_i8];
|
|
1116
1195
|
|
|
1117
|
-
var
|
|
1196
|
+
var _columnX2 = visibleColumnXs.get(_column4);
|
|
1118
1197
|
|
|
1119
|
-
var
|
|
1198
|
+
var _columnWidth4 = visibleColumnWidths.get(_column4);
|
|
1120
1199
|
|
|
1121
|
-
var minX = gridX +
|
|
1200
|
+
var minX = gridX + _columnX2 + _columnWidth4 + 0.5 - headerHiddenSeparatorSize * 0.5;
|
|
1122
1201
|
context.rect(minX, hiddenY, headerHiddenSeparatorSize, hiddenSeparatorHeight);
|
|
1123
1202
|
}
|
|
1124
1203
|
|
|
@@ -1135,47 +1214,35 @@ class GridRenderer {
|
|
|
1135
1214
|
if (highlightedSeparator != null && (!isDragging || draggingColumnSeparator != null)) {
|
|
1136
1215
|
context.strokeStyle = headerSeparatorHoverColor;
|
|
1137
1216
|
|
|
1138
|
-
var
|
|
1217
|
+
var _columnX3 = visibleColumnXs.get(highlightedSeparator);
|
|
1139
1218
|
|
|
1140
|
-
var
|
|
1219
|
+
var _columnWidth5 = visibleColumnWidths.get(highlightedSeparator);
|
|
1141
1220
|
|
|
1142
|
-
var
|
|
1221
|
+
var _x7 = gridX + _columnX3 + _columnWidth5 + 0.5;
|
|
1143
1222
|
|
|
1144
1223
|
var visibleColumnIndex = visibleColumns.indexOf(highlightedSeparator);
|
|
1145
1224
|
var nextColumn = visibleColumnIndex < visibleColumns.length - 1 ? visibleColumns[visibleColumnIndex + 1] : null;
|
|
1146
1225
|
var nextColumnWidth = nextColumn != null ? visibleColumnWidths.get(nextColumn) : null;
|
|
1147
|
-
var isColumnHidden =
|
|
1226
|
+
var isColumnHidden = _columnWidth5 === 0;
|
|
1148
1227
|
var isNextColumnHidden = nextColumnWidth != null && nextColumnWidth === 0;
|
|
1149
1228
|
|
|
1150
1229
|
if (isColumnHidden) {
|
|
1151
1230
|
context.strokeStyle = headerHiddenSeparatorHoverColor;
|
|
1152
1231
|
context.fillStyle = headerHiddenSeparatorHoverColor;
|
|
1153
|
-
context.fillRect(
|
|
1232
|
+
context.fillRect(_x7, hiddenY, headerHiddenSeparatorSize * 0.5, hiddenSeparatorHeight);
|
|
1154
1233
|
} else if (isNextColumnHidden) {
|
|
1155
1234
|
context.fillStyle = headerSeparatorHoverColor;
|
|
1156
|
-
context.fillRect(
|
|
1235
|
+
context.fillRect(_x7 - headerHiddenSeparatorSize * 0.5, hiddenY, headerHiddenSeparatorSize * 0.5, hiddenSeparatorHeight);
|
|
1157
1236
|
} // column seperator hover line
|
|
1158
1237
|
|
|
1159
1238
|
|
|
1160
1239
|
context.beginPath();
|
|
1161
|
-
context.moveTo(
|
|
1162
|
-
context.lineTo(
|
|
1240
|
+
context.moveTo(_x7, 0);
|
|
1241
|
+
context.lineTo(_x7, columnHeaderHeight - 1);
|
|
1163
1242
|
context.stroke();
|
|
1164
1243
|
}
|
|
1165
1244
|
}
|
|
1166
1245
|
|
|
1167
|
-
context.fillStyle = headerColor;
|
|
1168
|
-
|
|
1169
|
-
for (var _i6 = 0; _i6 < visibleColumns.length; _i6 += 1) {
|
|
1170
|
-
var _column2 = visibleColumns[_i6];
|
|
1171
|
-
|
|
1172
|
-
var _columnWidth3 = visibleColumnWidths.get(_column2);
|
|
1173
|
-
|
|
1174
|
-
var _x5 = visibleColumnXs.get(_column2) + gridX;
|
|
1175
|
-
|
|
1176
|
-
this.drawColumnHeader(context, state, _column2, _x5, _columnWidth3);
|
|
1177
|
-
}
|
|
1178
|
-
|
|
1179
1246
|
context.restore();
|
|
1180
1247
|
}
|
|
1181
1248
|
|
|
@@ -1194,11 +1261,6 @@ class GridRenderer {
|
|
|
1194
1261
|
} = metrics;
|
|
1195
1262
|
var modelColumn = modelColumns.get(column);
|
|
1196
1263
|
var text = model.textForColumnHeader(modelColumn);
|
|
1197
|
-
|
|
1198
|
-
if (!text) {
|
|
1199
|
-
return;
|
|
1200
|
-
}
|
|
1201
|
-
|
|
1202
1264
|
var {
|
|
1203
1265
|
headerHorizontalPadding
|
|
1204
1266
|
} = theme;
|
|
@@ -1225,12 +1287,12 @@ class GridRenderer {
|
|
|
1225
1287
|
context.textAlign = 'left';
|
|
1226
1288
|
context.fillText(text, x, y);
|
|
1227
1289
|
} else {
|
|
1228
|
-
var
|
|
1290
|
+
var _x8 = columnX + columnWidth * 0.5;
|
|
1229
1291
|
|
|
1230
1292
|
var _y5 = columnHeaderHeight * 0.5;
|
|
1231
1293
|
|
|
1232
1294
|
context.textAlign = 'center';
|
|
1233
|
-
context.fillText(text,
|
|
1295
|
+
context.fillText(text, _x8, _y5);
|
|
1234
1296
|
}
|
|
1235
1297
|
|
|
1236
1298
|
context.restore();
|
|
@@ -1305,8 +1367,8 @@ class GridRenderer {
|
|
|
1305
1367
|
context.beginPath();
|
|
1306
1368
|
context.fillStyle = headerSeparatorColor;
|
|
1307
1369
|
|
|
1308
|
-
for (var
|
|
1309
|
-
var _row4 = hiddenRows[
|
|
1370
|
+
for (var _i9 = 0; _i9 < hiddenRows.length; _i9 += 1) {
|
|
1371
|
+
var _row4 = hiddenRows[_i9];
|
|
1310
1372
|
|
|
1311
1373
|
var _rowY = visibleRowYs.get(_row4);
|
|
1312
1374
|
|
|
@@ -1364,8 +1426,8 @@ class GridRenderer {
|
|
|
1364
1426
|
context.fillStyle = headerColor;
|
|
1365
1427
|
context.textAlign = 'right';
|
|
1366
1428
|
|
|
1367
|
-
for (var
|
|
1368
|
-
var _row5 = visibleRows[
|
|
1429
|
+
for (var _i10 = 0; _i10 < visibleRows.length; _i10 += 1) {
|
|
1430
|
+
var _row5 = visibleRows[_i10];
|
|
1369
1431
|
|
|
1370
1432
|
var _rowHeight3 = visibleRowHeights.get(_row5);
|
|
1371
1433
|
|
|
@@ -1474,8 +1536,8 @@ class GridRenderer {
|
|
|
1474
1536
|
context.beginPath();
|
|
1475
1537
|
context.fillStyle = headerSeparatorColor;
|
|
1476
1538
|
|
|
1477
|
-
for (var
|
|
1478
|
-
var _row6 = hiddenRows[
|
|
1539
|
+
for (var _i11 = 0; _i11 < hiddenRows.length; _i11 += 1) {
|
|
1540
|
+
var _row6 = hiddenRows[_i11];
|
|
1479
1541
|
|
|
1480
1542
|
var _rowY3 = visibleRowYs.get(_row6);
|
|
1481
1543
|
|
|
@@ -1534,8 +1596,8 @@ class GridRenderer {
|
|
|
1534
1596
|
context.textAlign = 'left';
|
|
1535
1597
|
var textX = x + cellHorizontalPadding;
|
|
1536
1598
|
|
|
1537
|
-
for (var
|
|
1538
|
-
var _row7 = visibleRows[
|
|
1599
|
+
for (var _i12 = 0; _i12 < visibleRows.length; _i12 += 1) {
|
|
1600
|
+
var _row7 = visibleRows[_i12];
|
|
1539
1601
|
|
|
1540
1602
|
var _rowHeight6 = visibleRowHeights.get(_row7);
|
|
1541
1603
|
|
|
@@ -1614,25 +1676,25 @@ class GridRenderer {
|
|
|
1614
1676
|
|
|
1615
1677
|
if (endRow >= top && bottom >= startRow && endColumn >= left && right >= startColumn) {
|
|
1616
1678
|
// Need to offset the x/y coordinates so that the line draws nice and crisp
|
|
1617
|
-
var
|
|
1679
|
+
var _x9 = startColumn >= left && visibleColumnXs.has(startColumn) ? Math.round(visibleColumnXs.get(startColumn)) + 0.5 : minX;
|
|
1618
1680
|
|
|
1619
1681
|
var _y9 = startRow >= top && visibleRowYs.has(startRow) ? Math.max(Math.round(visibleRowYs.get(startRow)) + 0.5, 0.5) : minY;
|
|
1620
1682
|
|
|
1621
1683
|
var endX = endColumn <= right && visibleColumnXs.has(endColumn) ? Math.round(visibleColumnXs.get(endColumn) + visibleColumnWidths.get(endColumn)) - 0.5 : maxX;
|
|
1622
1684
|
var endY = endRow <= bottom && visibleRowYs.has(endRow) ? Math.round(visibleRowYs.get(endRow) + visibleRowHeights.get(endRow)) - 0.5 : maxY;
|
|
1623
|
-
context.rect(
|
|
1685
|
+
context.rect(_x9, _y9, endX - _x9, endY - _y9);
|
|
1624
1686
|
} // draw the inner transparent fill
|
|
1625
1687
|
|
|
1626
1688
|
|
|
1627
1689
|
context.fillStyle = theme.selectionColor;
|
|
1628
1690
|
context.fill();
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1691
|
+
/**
|
|
1692
|
+
* draw an "inner stroke" that's clipped to just inside of the rects
|
|
1693
|
+
* to act as a casing to the outer stroke. 3px width because 1px is outside
|
|
1694
|
+
* the rect (but clipped), 1px is "on" the rect (technically this pixel is
|
|
1695
|
+
* a half pixel clip as well due to rects offset, but we are immediately painting
|
|
1696
|
+
* over it), and then the 1px inside (which is the desired pixel).
|
|
1697
|
+
*/
|
|
1636
1698
|
|
|
1637
1699
|
context.save();
|
|
1638
1700
|
context.clip();
|
|
@@ -1914,15 +1976,15 @@ class GridRenderer {
|
|
|
1914
1976
|
}
|
|
1915
1977
|
|
|
1916
1978
|
if (hasVerticalBar) {
|
|
1917
|
-
var
|
|
1979
|
+
var _x10 = width - rowHeaderWidth - vScrollBarSize;
|
|
1918
1980
|
|
|
1919
1981
|
var _y10 = scrollY; // scrollbar casing
|
|
1920
1982
|
|
|
1921
1983
|
context.fillStyle = scrollBarCasingColor;
|
|
1922
|
-
context.fillRect(
|
|
1984
|
+
context.fillRect(_x10, 0, vScrollBarSize - scrollBarCasingWidth, barHeight); // scrollbar track
|
|
1923
1985
|
|
|
1924
1986
|
context.fillStyle = isVerticalBarHover ? scrollBarHoverBackgroundColor : scrollBarBackgroundColor;
|
|
1925
|
-
context.fillRect(
|
|
1987
|
+
context.fillRect(_x10 + scrollBarCasingWidth, 0, vScrollBarSize - scrollBarCasingWidth, barHeight); // scrollbar thumb
|
|
1926
1988
|
|
|
1927
1989
|
if (isDraggingVerticalScrollBar) {
|
|
1928
1990
|
context.fillStyle = scrollBarActiveColor;
|
|
@@ -1932,7 +1994,7 @@ class GridRenderer {
|
|
|
1932
1994
|
context.fillStyle = scrollBarColor;
|
|
1933
1995
|
}
|
|
1934
1996
|
|
|
1935
|
-
context.fillRect(
|
|
1997
|
+
context.fillRect(_x10 + scrollBarCasingWidth, _y10, vScrollBarSize - scrollBarCasingWidth, handleHeight);
|
|
1936
1998
|
}
|
|
1937
1999
|
|
|
1938
2000
|
context.translate(-rowHeaderWidth, -columnHeaderHeight);
|