UNPKG

scratch-gui

Version:

GraphicaL User Interface for creating and running Scratch 3.0 projects

72 lines (66 loc) 2.52 kB
import React from 'react'; import classNames from 'classnames'; import Box from '../box/box.jsx'; import Monitor from '../../containers/monitor.jsx'; import PropTypes from 'prop-types'; import {OrderedMap} from 'immutable'; import styles from './monitor-list.css'; const stageSizeToTransform = ({width, height, widthDefault, heightDefault}) => { const scaleX = width / widthDefault; const scaleY = height / heightDefault; if (scaleX === 1 && scaleY === 1) { // Do not set a transform if the scale is 1 because // it messes up `position: fixed` elements like the context menu. return; } return {transform: `scale(${scaleX},${scaleY})`}; }; const MonitorList = props => ( <Box // Use static `monitor-overlay` class for bounds of draggables className={classNames(styles.monitorList, 'monitor-overlay')} style={{ width: props.stageSize.width, height: props.stageSize.height }} > <Box className={styles.monitorListScaler} style={stageSizeToTransform(props.stageSize)} > {props.monitors.valueSeq().filter(m => m.visible) .map(monitorData => ( <Monitor draggable={props.draggable} height={monitorData.height} id={monitorData.id} key={monitorData.id} max={monitorData.sliderMax} min={monitorData.sliderMin} mode={monitorData.mode} opcode={monitorData.opcode} params={monitorData.params} spriteName={monitorData.spriteName} targetId={monitorData.targetId} value={monitorData.value} width={monitorData.width} x={monitorData.x} y={monitorData.y} onDragEnd={props.onMonitorChange} /> ))} </Box> </Box> ); MonitorList.propTypes = { draggable: PropTypes.bool.isRequired, monitors: PropTypes.instanceOf(OrderedMap), onMonitorChange: PropTypes.func.isRequired, stageSize: PropTypes.shape({ width: PropTypes.number, height: PropTypes.number, widthDefault: PropTypes.number, heightDefault: PropTypes.number }).isRequired }; export default MonitorList;