@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.
Files changed (38) hide show
  1. package/dist/CellInputField.js +1 -1
  2. package/dist/CellInputField.js.map +1 -1
  3. package/dist/Grid.d.ts +3 -13
  4. package/dist/Grid.d.ts.map +1 -1
  5. package/dist/Grid.js +2 -2
  6. package/dist/GridMetricCalculator.d.ts +448 -165
  7. package/dist/GridMetricCalculator.d.ts.map +1 -1
  8. package/dist/GridMetricCalculator.js +526 -122
  9. package/dist/GridMetricCalculator.js.map +1 -1
  10. package/dist/GridMetrics.d.ts +97 -0
  11. package/dist/GridMetrics.d.ts.map +1 -0
  12. package/dist/GridMetrics.js +2 -0
  13. package/dist/GridMetrics.js.map +1 -0
  14. package/dist/GridRange.d.ts +186 -111
  15. package/dist/GridRange.d.ts.map +1 -1
  16. package/dist/GridRange.js +185 -87
  17. package/dist/GridRange.js.map +1 -1
  18. package/dist/GridRenderer.d.ts +2 -1
  19. package/dist/GridRenderer.d.ts.map +1 -1
  20. package/dist/GridRenderer.js +138 -76
  21. package/dist/GridRenderer.js.map +1 -1
  22. package/dist/GridTheme.d.ts +49 -37
  23. package/dist/GridTheme.d.ts.map +1 -1
  24. package/dist/GridTheme.js +8 -0
  25. package/dist/GridTheme.js.map +1 -1
  26. package/dist/GridUtils.d.ts +238 -91
  27. package/dist/GridUtils.d.ts.map +1 -1
  28. package/dist/GridUtils.js +282 -68
  29. package/dist/GridUtils.js.map +1 -1
  30. package/dist/memoizeClear.js +1 -1
  31. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts +1 -1
  32. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts.map +1 -1
  33. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts +1 -1
  34. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts.map +1 -1
  35. package/dist/mouse-handlers/GridSelectionMouseHandler.js +4 -4
  36. package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
  37. package/dist/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +4 -4
@@ -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 > lo) {
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 null;
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; // Draw row lines
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 != null) {
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 [x1, y1, x2, y2] = treeBox;
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); // Draw the separators
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 i = 0; i < visibleColumns.length; i += 1) {
1091
- var column = visibleColumns[i];
1092
- var columnX = visibleColumnXs.get(column);
1093
- var columnWidth = visibleColumnWidths.get(column);
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
- if (columnWidth > 0) {
1096
- var x = gridX + columnX + columnWidth + 0.5;
1097
- context.moveTo(x, 0);
1098
- context.lineTo(x, columnHeaderHeight - 0.5);
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(column);
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 _i5 = 0; _i5 < hiddenColumns.length; _i5 += 1) {
1115
- var _column = hiddenColumns[_i5];
1193
+ for (var _i8 = 0; _i8 < hiddenColumns.length; _i8 += 1) {
1194
+ var _column4 = hiddenColumns[_i8];
1116
1195
 
1117
- var _columnX = visibleColumnXs.get(_column);
1196
+ var _columnX2 = visibleColumnXs.get(_column4);
1118
1197
 
1119
- var _columnWidth = visibleColumnWidths.get(_column);
1198
+ var _columnWidth4 = visibleColumnWidths.get(_column4);
1120
1199
 
1121
- var minX = gridX + _columnX + _columnWidth + 0.5 - headerHiddenSeparatorSize * 0.5;
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 _columnX2 = visibleColumnXs.get(highlightedSeparator);
1217
+ var _columnX3 = visibleColumnXs.get(highlightedSeparator);
1139
1218
 
1140
- var _columnWidth2 = visibleColumnWidths.get(highlightedSeparator);
1219
+ var _columnWidth5 = visibleColumnWidths.get(highlightedSeparator);
1141
1220
 
1142
- var _x4 = gridX + _columnX2 + _columnWidth2 + 0.5;
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 = _columnWidth2 === 0;
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(_x4, hiddenY, headerHiddenSeparatorSize * 0.5, hiddenSeparatorHeight);
1232
+ context.fillRect(_x7, hiddenY, headerHiddenSeparatorSize * 0.5, hiddenSeparatorHeight);
1154
1233
  } else if (isNextColumnHidden) {
1155
1234
  context.fillStyle = headerSeparatorHoverColor;
1156
- context.fillRect(_x4 - headerHiddenSeparatorSize * 0.5, hiddenY, headerHiddenSeparatorSize * 0.5, hiddenSeparatorHeight);
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(_x4, 0);
1162
- context.lineTo(_x4, columnHeaderHeight - 1);
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 _x6 = columnX + columnWidth * 0.5;
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, _x6, _y5);
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 _i7 = 0; _i7 < hiddenRows.length; _i7 += 1) {
1309
- var _row4 = hiddenRows[_i7];
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 _i8 = 0; _i8 < visibleRows.length; _i8 += 1) {
1368
- var _row5 = visibleRows[_i8];
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 _i9 = 0; _i9 < hiddenRows.length; _i9 += 1) {
1478
- var _row6 = hiddenRows[_i9];
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 _i10 = 0; _i10 < visibleRows.length; _i10 += 1) {
1538
- var _row7 = visibleRows[_i10];
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 _x7 = startColumn >= left && visibleColumnXs.has(startColumn) ? Math.round(visibleColumnXs.get(startColumn)) + 0.5 : minX;
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(_x7, _y9, endX - _x7, endY - _y9);
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
- draw an "inner stroke" that's clipped to just inside of the rects
1631
- to act as a casing to the outer stroke. 3px width because 1px is outside
1632
- the rect (but clipped), 1px is "on" the rect (technically this pixel is
1633
- a half pixel clip as well due to rects offset, but we are immediately painting
1634
- over it), and then the 1px inside (which is the desired pixel).
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 _x8 = width - rowHeaderWidth - vScrollBarSize;
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(_x8, 0, vScrollBarSize - scrollBarCasingWidth, barHeight); // scrollbar track
1984
+ context.fillRect(_x10, 0, vScrollBarSize - scrollBarCasingWidth, barHeight); // scrollbar track
1923
1985
 
1924
1986
  context.fillStyle = isVerticalBarHover ? scrollBarHoverBackgroundColor : scrollBarBackgroundColor;
1925
- context.fillRect(_x8 + scrollBarCasingWidth, 0, vScrollBarSize - scrollBarCasingWidth, barHeight); // scrollbar thumb
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(_x8 + scrollBarCasingWidth, _y10, vScrollBarSize - scrollBarCasingWidth, handleHeight);
1997
+ context.fillRect(_x10 + scrollBarCasingWidth, _y10, vScrollBarSize - scrollBarCasingWidth, handleHeight);
1936
1998
  }
1937
1999
 
1938
2000
  context.translate(-rowHeaderWidth, -columnHeaderHeight);