scratch-gui
Version:
GraphicaL User Interface for creating and running Scratch 3.0 projects
85 lines (78 loc) • 2.57 kB
JSX
import PropTypes from 'prop-types';
import React from 'react';
import bindAll from 'lodash.bindall';
import VM from 'scratch-vm';
import PaintEditor from 'scratch-paint';
import analytics from '../lib/analytics';
import {connect} from 'react-redux';
class PaintEditorWrapper extends React.Component {
constructor (props) {
super(props);
bindAll(this, [
'handleUpdateImage',
'handleUpdateName'
]);
}
componentDidMount () {
analytics.pageview('/editors/paint');
}
handleUpdateName (name) {
this.props.vm.renameCostume(this.props.selectedCostumeIndex, name);
}
handleUpdateImage (isVector, image, rotationCenterX, rotationCenterY) {
if (isVector) {
this.props.vm.updateSvg(
this.props.selectedCostumeIndex,
image,
rotationCenterX,
rotationCenterY);
} else {
this.props.vm.updateBitmap(
this.props.selectedCostumeIndex,
image,
rotationCenterX,
rotationCenterY,
2 /* bitmapResolution */);
}
}
render () {
if (!this.props.imageId) return null;
return (
<PaintEditor
{...this.props}
image={this.props.vm.getCostume(this.props.selectedCostumeIndex)}
onUpdateImage={this.handleUpdateImage}
onUpdateName={this.handleUpdateName}
/>
);
}
}
PaintEditorWrapper.propTypes = {
imageFormat: PropTypes.string.isRequired,
imageId: PropTypes.string.isRequired,
name: PropTypes.string,
rotationCenterX: PropTypes.number,
rotationCenterY: PropTypes.number,
selectedCostumeIndex: PropTypes.number.isRequired,
vm: PropTypes.instanceOf(VM)
};
const mapStateToProps = (state, {selectedCostumeIndex}) => {
const {
editingTarget,
sprites,
stage
} = state.targets;
const target = editingTarget && sprites[editingTarget] ? sprites[editingTarget] : stage;
const costume = target && target.costumes[selectedCostumeIndex];
return {
name: costume && costume.name,
rotationCenterX: costume && costume.rotationCenterX,
rotationCenterY: costume && costume.rotationCenterY,
imageFormat: costume && costume.dataFormat,
imageId: editingTarget && `${editingTarget}${costume.skinId}`,
vm: state.vm
};
};
export default connect(
mapStateToProps
)(PaintEditorWrapper);