Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Resolve relative size rendering error in inspector #23804

Closed
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions Libraries/Inspector/ElementBox.js
Expand Up @@ -17,6 +17,7 @@ const View = require('View');

const flattenStyle = require('flattenStyle');
const resolveBoxStyle = require('resolveBoxStyle');
const resolveRelativeSizes = require('resolveRelativeSizes');

class ElementBox extends React.Component<$FlowFixMeProps> {
render() {
Expand All @@ -31,6 +32,8 @@ class ElementBox extends React.Component<$FlowFixMeProps> {
};

if (margin != null) {
resolveRelativeSizes(margin);
gandreadis marked this conversation as resolved.
Show resolved Hide resolved

frameStyle.top -= margin.top;
frameStyle.left -= margin.left;
frameStyle.height += margin.top + margin.bottom;
Expand All @@ -51,6 +54,8 @@ class ElementBox extends React.Component<$FlowFixMeProps> {
}

if (padding != null) {
resolveRelativeSizes(padding);

contentStyle.width -= padding.left + padding.right;
contentStyle.height -= padding.top + padding.bottom;
}
Expand Down
39 changes: 39 additions & 0 deletions Libraries/Inspector/resolveRelativeSizes.js
@@ -0,0 +1,39 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
*/

'use strict';

const Dimensions = require('Dimensions');

/**
* Resolves relative sizes (percentages and auto) in a style object.
*/
function resolveRelativeSizes(style: Object) {
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
resolveSize(style, 'top', 'height');
resolveSize(style, 'right', 'width');
resolveSize(style, 'bottom', 'height');
resolveSize(style, 'left', 'width');
}

gandreadis marked this conversation as resolved.
Show resolved Hide resolved
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
function resolveSize(style, direction, dimension) {
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
if (style[direction] !== null && typeof style[direction] === 'string') {
if (style[direction].indexOf('%') !== -1) {
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
style[direction] =
(parseFloat(style[direction]) / 100.0) *
Dimensions.get('window')[dimension];
}
if (style[direction] === 'auto') {
// Ignore auto sizing in frame drawing due to complexity of correctly rendering this
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
style[direction] = 0;
}
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
}
}
gandreadis marked this conversation as resolved.
Show resolved Hide resolved
gandreadis marked this conversation as resolved.
Show resolved Hide resolved

module.exports = resolveRelativeSizes;