onGetBoxModel method
Implementation
void onGetBoxModel(int? id, Map<String, dynamic> params) {
if (DebugFlags.enableDevToolsLogs) {
devToolsLogger.finer('[DevTools] DOM.getBoxModel nodeId=${params['nodeId']}');
}
int? nodeId = params['nodeId'];
final ctx = dbgContext;
if (nodeId == null || ctx == null) {
sendToFrontend(id, null);
return;
}
final targetId = ctx.getTargetIdByNodeId(nodeId);
Node? node;
if (targetId != null) {
node = ctx.getBindingObject(Pointer.fromAddress(targetId)) as Node?;
}
Element? element = null;
if (node is Element) element = node;
// BoxModel design to BorderBox in kraken.
if (element != null &&
element.renderStyle.hasRenderBox() &&
element.renderStyle.isBoxModelHaveSize()) {
ui.Offset contentBoxOffset = element.renderStyle.localToGlobal(
ui.Offset.zero,
ancestor: element.ownerDocument.viewport);
int widthWithinBorder = element.renderStyle.boxSize()!.width.toInt();
int heightWithinBorder = element.renderStyle.boxSize()!.height.toInt();
List<double> border = [
contentBoxOffset.dx,
contentBoxOffset.dy,
contentBoxOffset.dx + widthWithinBorder,
contentBoxOffset.dy,
contentBoxOffset.dx + widthWithinBorder,
contentBoxOffset.dy + heightWithinBorder,
contentBoxOffset.dx,
contentBoxOffset.dy + heightWithinBorder,
];
List<double> padding = [
border[0] + (element.renderStyle.borderLeftWidth?.computedValue ?? 0),
border[1] + (element.renderStyle.borderTopWidth?.computedValue ?? 0),
border[2] - (element.renderStyle.borderRightWidth?.computedValue ?? 0),
border[3] + (element.renderStyle.borderTopWidth?.computedValue ?? 0),
border[4] - (element.renderStyle.borderRightWidth?.computedValue ?? 0),
border[5] - (element.renderStyle.borderBottomWidth?.computedValue ?? 0),
border[6] + (element.renderStyle.borderLeftWidth?.computedValue ?? 0),
border[7] - (element.renderStyle.borderBottomWidth?.computedValue ?? 0),
];
List<double> content = [
padding[0] + element.renderStyle.paddingLeft.computedValue,
padding[1] + element.renderStyle.paddingTop.computedValue,
padding[2] - element.renderStyle.paddingRight.computedValue,
padding[3] + element.renderStyle.paddingTop.computedValue,
padding[4] - element.renderStyle.paddingRight.computedValue,
padding[5] - element.renderStyle.paddingBottom.computedValue,
padding[6] + element.renderStyle.paddingLeft.computedValue,
padding[7] - element.renderStyle.paddingBottom.computedValue,
];
List<double> margin = [
border[0] - element.renderStyle.marginLeft.computedValue,
border[1] - element.renderStyle.marginTop.computedValue,
border[2] + element.renderStyle.marginRight.computedValue,
border[3] - element.renderStyle.marginTop.computedValue,
border[4] + element.renderStyle.marginRight.computedValue,
border[5] + element.renderStyle.marginBottom.computedValue,
border[6] - element.renderStyle.marginLeft.computedValue,
border[7] + element.renderStyle.marginBottom.computedValue,
];
BoxModel boxModel = BoxModel(
content: content,
padding: padding,
border: border,
margin: margin,
width: widthWithinBorder,
height: heightWithinBorder,
);
sendToFrontend(
id,
JSONEncodableMap({
'model': boxModel,
}));
} else {
sendToFrontend(id, null);
}
}