mirror of
https://github.com/scratchfoundation/scratch-paint.git
synced 2025-01-25 05:39:52 -05:00
131 lines
4.3 KiB
JavaScript
131 lines
4.3 KiB
JavaScript
import PropTypes from 'prop-types';
|
|
import React from 'react';
|
|
import {connect} from 'react-redux';
|
|
|
|
import FixedToolsComponent from '../components/fixed-tools/fixed-tools.jsx';
|
|
|
|
import {changeMode} from '../reducers/modes';
|
|
import {changeFormat} from '../reducers/format';
|
|
import {clearSelectedItems, setSelectedItems} from '../reducers/selected-items';
|
|
import {deactivateEyeDropper} from '../reducers/eye-dropper';
|
|
import {setTextEditTarget} from '../reducers/text-edit-target';
|
|
import {setLayout} from '../reducers/layout';
|
|
|
|
import {getSelectedLeafItems} from '../helper/selection';
|
|
import {bringToFront, sendBackward, sendToBack, bringForward} from '../helper/order';
|
|
import {groupSelection, ungroupSelection} from '../helper/group';
|
|
|
|
import Formats from '../lib/format';
|
|
import {isBitmap} from '../lib/format';
|
|
import bindAll from 'lodash.bindall';
|
|
|
|
class FixedTools extends React.Component {
|
|
constructor (props) {
|
|
super(props);
|
|
bindAll(this, [
|
|
'handleSendBackward',
|
|
'handleSendForward',
|
|
'handleSendToBack',
|
|
'handleSendToFront',
|
|
'handleSetSelectedItems',
|
|
'handleGroup',
|
|
'handleUngroup'
|
|
]);
|
|
}
|
|
handleGroup () {
|
|
groupSelection(this.props.clearSelectedItems, this.handleSetSelectedItems, this.props.onUpdateImage);
|
|
}
|
|
handleUngroup () {
|
|
ungroupSelection(this.props.clearSelectedItems, this.handleSetSelectedItems, this.props.onUpdateImage);
|
|
}
|
|
handleSendBackward () {
|
|
sendBackward(this.props.onUpdateImage);
|
|
}
|
|
handleSendForward () {
|
|
bringForward(this.props.onUpdateImage);
|
|
}
|
|
handleSendToBack () {
|
|
sendToBack(this.props.onUpdateImage);
|
|
}
|
|
handleSendToFront () {
|
|
bringToFront(this.props.onUpdateImage);
|
|
}
|
|
handleSetSelectedItems () {
|
|
this.props.setSelectedItems(this.props.format);
|
|
}
|
|
render () {
|
|
return (
|
|
<FixedToolsComponent
|
|
canRedo={this.props.canRedo}
|
|
canUndo={this.props.canUndo}
|
|
name={this.props.name}
|
|
onGroup={this.handleGroup}
|
|
onRedo={this.props.onRedo}
|
|
onSendBackward={this.handleSendBackward}
|
|
onSendForward={this.handleSendForward}
|
|
onSendToBack={this.handleSendToBack}
|
|
onSendToFront={this.handleSendToFront}
|
|
onUndo={this.props.onUndo}
|
|
onUngroup={this.handleUngroup}
|
|
onUpdateImage={this.props.onUpdateImage}
|
|
onUpdateName={this.props.onUpdateName}
|
|
/>
|
|
);
|
|
}
|
|
}
|
|
|
|
FixedTools.propTypes = {
|
|
canRedo: PropTypes.func.isRequired,
|
|
canUndo: PropTypes.func.isRequired,
|
|
clearSelectedItems: PropTypes.func.isRequired,
|
|
format: PropTypes.oneOf(Object.keys(Formats)),
|
|
name: PropTypes.string,
|
|
onRedo: PropTypes.func.isRequired,
|
|
onUndo: PropTypes.func.isRequired,
|
|
onUpdateImage: PropTypes.func.isRequired,
|
|
onUpdateName: PropTypes.func.isRequired,
|
|
setSelectedItems: PropTypes.func.isRequired
|
|
};
|
|
|
|
const mapStateToProps = state => ({
|
|
changeColorToEyeDropper: state.scratchPaint.color.eyeDropper.callback,
|
|
format: state.scratchPaint.format,
|
|
isEyeDropping: state.scratchPaint.color.eyeDropper.active,
|
|
mode: state.scratchPaint.mode,
|
|
pasteOffset: state.scratchPaint.clipboard.pasteOffset,
|
|
previousTool: state.scratchPaint.color.eyeDropper.previousTool,
|
|
selectedItems: state.scratchPaint.selectedItems,
|
|
viewBounds: state.scratchPaint.viewBounds
|
|
});
|
|
const mapDispatchToProps = dispatch => ({
|
|
changeMode: mode => {
|
|
dispatch(changeMode(mode));
|
|
},
|
|
clearSelectedItems: () => {
|
|
dispatch(clearSelectedItems());
|
|
},
|
|
handleSwitchToBitmap: () => {
|
|
dispatch(changeFormat(Formats.BITMAP));
|
|
},
|
|
handleSwitchToVector: () => {
|
|
dispatch(changeFormat(Formats.VECTOR));
|
|
},
|
|
removeTextEditTarget: () => {
|
|
dispatch(setTextEditTarget());
|
|
},
|
|
setLayout: layout => {
|
|
dispatch(setLayout(layout));
|
|
},
|
|
setSelectedItems: format => {
|
|
dispatch(setSelectedItems(getSelectedLeafItems(), isBitmap(format)));
|
|
},
|
|
onDeactivateEyeDropper: () => {
|
|
// set redux values to default for eye dropper reducer
|
|
dispatch(deactivateEyeDropper());
|
|
}
|
|
});
|
|
|
|
export default connect(
|
|
mapStateToProps,
|
|
mapDispatchToProps
|
|
)(FixedTools);
|