Bug 1372745 - Add a pref for max rows/columns for grid outline to render. r?gl
MozReview-Commit-ID: 4Fz094D3iAY
--- a/devtools/client/inspector/grids/components/Grid.js
+++ b/devtools/client/inspector/grids/components/Grid.js
@@ -16,16 +16,17 @@ const { getStr } = require("../utils/l10
module.exports = createClass({
displayName: "Grid",
propTypes: {
getSwatchColorPickerTooltip: PropTypes.func.isRequired,
grids: PropTypes.arrayOf(PropTypes.shape(Types.grid)).isRequired,
+ gridOutlineMaxSize: PropTypes.number.isRequired,
highlighterSettings: PropTypes.shape(Types.highlighterSettings).isRequired,
setSelectedNode: PropTypes.func.isRequired,
showGridOutline: PropTypes.bool.isRequired,
onHideBoxModelHighlighter: PropTypes.func.isRequired,
onSetGridOverlayColor: PropTypes.func.isRequired,
onShowBoxModelHighlighterForNode: PropTypes.func.isRequired,
onShowGridAreaHighlight: PropTypes.func.isRequired,
onShowGridCellHighlight: PropTypes.func.isRequired,
@@ -37,16 +38,17 @@ module.exports = createClass({
},
mixins: [ addons.PureRenderMixin ],
render() {
let {
getSwatchColorPickerTooltip,
grids,
+ gridOutlineMaxSize,
highlighterSettings,
setSelectedNode,
showGridOutline,
onHideBoxModelHighlighter,
onSetGridOverlayColor,
onShowBoxModelHighlighterForNode,
onShowGridAreaHighlight,
onShowGridCellHighlight,
@@ -79,16 +81,17 @@ module.exports = createClass({
onToggleShowGridAreas,
onToggleShowGridLineNumbers,
onToggleShowInfiniteLines,
})
),
showGridOutline ?
GridOutline({
grids,
+ gridOutlineMaxSize,
onShowGridAreaHighlight,
onShowGridCellHighlight,
})
:
null
)
:
dom.div(
--- a/devtools/client/inspector/grids/components/GridOutline.js
+++ b/devtools/client/inspector/grids/components/GridOutline.js
@@ -8,20 +8,16 @@ const { addons, createClass, DOM: dom, P
require("devtools/client/shared/vendor/react");
const Types = require("../types");
const { getStr } = require("../utils/l10n");
// The delay prior to executing the grid cell highlighting.
const GRID_HIGHLIGHTING_DEBOUNCE = 50;
-// Minimum height/width a grid cell can be
-const MIN_CELL_HEIGHT = 5;
-const MIN_CELL_WIDTH = 5;
-
// Move SVG grid to the right 100 units, so that it is not flushed against the edge of
// layout border
const TRANSLATE_X = 0;
const TRANSLATE_Y = 0;
const GRID_CELL_SCALE_FACTOR = 50;
const VIEWPORT_MIN_HEIGHT = 100;
@@ -43,27 +39,34 @@ module.exports = createClass({
return {
height: 0,
selectedGrid: null,
showOutline: true,
width: 0,
};
},
- componentWillReceiveProps({ grids }) {
+ componentWillReceiveProps({ grids, gridOutlineMaxSize }) {
let selectedGrid = grids.find(grid => grid.highlighted);
// Store the height of the grid container in the component state to prevent overflow
// issues. We want to store the width of the grid container as well so that the
// viewbox is only the calculated width of the grid outline.
let { width, height } = selectedGrid
? this.getTotalWidthAndHeight(selectedGrid)
: { width: 0, height: 0 };
+ let showOutline;
- this.setState({ height, width, selectedGrid, showOutline: true });
+ if (selectedGrid) {
+ const { cols, rows } = selectedGrid.gridFragments[0];
+
+ showOutline = (cols.lines.length - 1) * (rows.lines.length - 1) <= gridOutlineMaxSize;
+ }
+
+ this.setState({ height, width, selectedGrid, showOutline });
},
/**
* Get the width and height of a given grid.
*
* @param {Object} grid
* A single grid container in the document.
* @return {Object} An object like { width, height }
@@ -214,24 +217,16 @@ module.exports = createClass({
// Draw the cells contained within the grid outline border.
for (let rowNumber = 1; rowNumber <= numberOfRows; rowNumber++) {
height = GRID_CELL_SCALE_FACTOR * (rows.tracks[rowNumber - 1].breadth / 100);
for (let columnNumber = 1; columnNumber <= numberOfColumns; columnNumber++) {
width = GRID_CELL_SCALE_FACTOR * (cols.tracks[columnNumber - 1].breadth / 100);
- // If a grid cell is less than the minimum pixels in width or height,
- // do not render the outline at all.
- if (width < MIN_CELL_WIDTH || height < MIN_CELL_HEIGHT) {
- this.setState({ showOutline: false });
-
- return [];
- }
-
const gridAreaName = this.getGridAreaName(columnNumber, rowNumber, areas);
const gridCell = this.renderGridCell(id, gridFragmentIndex, x, y,
rowNumber, columnNumber, color, gridAreaName,
width, height);
rectangles.push(gridCell);
x += width;
}
--- a/devtools/client/inspector/layout/layout.js
+++ b/devtools/client/inspector/layout/layout.js
@@ -10,16 +10,17 @@ const { createFactory, createElement } =
const { Provider } = require("devtools/client/shared/vendor/react-redux");
const App = createFactory(require("./components/App"));
const { LocalizationHelper } = require("devtools/shared/l10n");
const INSPECTOR_L10N =
new LocalizationHelper("devtools/client/locales/inspector.properties");
+const GRID_OUTLINE_MAX_SIZE_PREF = "devtools.gridinspector.gridOutlineMaxSize";
const SHOW_GRID_OUTLINE_PREF = "devtools.gridinspector.showGridOutline";
function LayoutView(inspector, window) {
this.document = window.document;
this.inspector = inspector;
this.store = inspector.store;
this.init();
@@ -52,16 +53,21 @@ LayoutView.prototype = {
onShowGridLineNamesHighlight,
onToggleGridHighlighter,
onToggleShowGridAreas,
onToggleShowGridLineNumbers,
onToggleShowInfiniteLines,
} = this.inspector.gridInspector.getComponentProps();
let app = App({
+ /**
+ * The max number of cells a CSS Grid can contain for the grid outline to render.
+ */
+ gridOutlineMaxSize: Services.prefs.getIntPref(GRID_OUTLINE_MAX_SIZE_PREF),
+
getSwatchColorPickerTooltip,
setSelectedNode,
/**
* Shows the box model properties under the box model if true, otherwise, hidden by
* default.
*/
showBoxModelProperties: true,
--- a/devtools/client/preferences/devtools.js
+++ b/devtools/client/preferences/devtools.js
@@ -67,16 +67,19 @@ pref("devtools.inspector.colorWidget.ena
// Enable the Font Inspector
pref("devtools.fontinspector.enabled", true);
// Enable the Layout View
pref("devtools.layoutview.enabled", false);
// Grid highlighter preferences
+
+// Display grid outline if CSS grid is 50x50 grid cells.
+pref("devtools.gridinspector.gridOutlineMaxSize", 2500);
pref("devtools.gridinspector.showGridAreas", false);
pref("devtools.gridinspector.showGridLineNumbers", false);
pref("devtools.gridinspector.showGridOutline", false);
pref("devtools.gridinspector.showInfiniteLines", false);
// Whether or not the box model panel is opened in the computed view
pref("devtools.computed.boxmodel.opened", true);
// Whether or not the box model panel is opened in the layout view