From 610ce74c39ef7b2a0cbdc654c6457249ea2a2b32 Mon Sep 17 00:00:00 2001 From: Paul Kaplan <pkaplan@media.mit.edu> Date: Wed, 9 Aug 2017 17:17:14 -0400 Subject: [PATCH] Move add sprite and backdrop to their correct containers --- .../icon--sprite.svg | Bin .../sprite-selector/sprite-selector.css | 8 ++++ .../sprite-selector/sprite-selector.jsx | 20 +++++++++ .../icon--backdrop.svg | Bin .../stage-selector/stage-selector.css | 9 ++++ .../stage-selector/stage-selector.jsx | 20 ++++++++- src/components/target-pane/icon--add.svg | Bin 361 -> 0 bytes src/components/target-pane/target-pane.css | 9 ---- src/components/target-pane/target-pane.jsx | 40 +----------------- src/containers/stage-selector.jsx | 11 ++++- src/containers/target-pane.jsx | 5 --- 11 files changed, 66 insertions(+), 56 deletions(-) rename src/components/{target-pane => sprite-selector}/icon--sprite.svg (100%) rename src/components/{target-pane => stage-selector}/icon--backdrop.svg (100%) delete mode 100644 src/components/target-pane/icon--add.svg diff --git a/src/components/target-pane/icon--sprite.svg b/src/components/sprite-selector/icon--sprite.svg similarity index 100% rename from src/components/target-pane/icon--sprite.svg rename to src/components/sprite-selector/icon--sprite.svg diff --git a/src/components/sprite-selector/sprite-selector.css b/src/components/sprite-selector/sprite-selector.css index 4f896df22..496d19588 100644 --- a/src/components/sprite-selector/sprite-selector.css +++ b/src/components/sprite-selector/sprite-selector.css @@ -59,3 +59,11 @@ padding-right: calc($space / 2); padding-bottom: $space; } + +.add-button { + font-size: 0.55rem; + font-weight: bold; + position: absolute; + bottom: 0.5rem; + right: 0.5rem; +} diff --git a/src/components/sprite-selector/sprite-selector.jsx b/src/components/sprite-selector/sprite-selector.jsx index 6fc0a5bbc..399d8062b 100644 --- a/src/components/sprite-selector/sprite-selector.jsx +++ b/src/components/sprite-selector/sprite-selector.jsx @@ -1,10 +1,22 @@ import PropTypes from 'prop-types'; import React from 'react'; +import {FormattedMessage} from 'react-intl'; import Box from '../box/box.jsx'; import SpriteInfo from '../../containers/sprite-info.jsx'; import SpriteSelectorItem from '../../containers/sprite-selector-item.jsx'; +import IconButton from '../icon-button/icon-button.jsx'; + import styles from './sprite-selector.css'; +import spriteIcon from './icon--sprite.svg'; + +const addSpriteMessage = ( + <FormattedMessage + defaultMessage="Add Sprite" + description="Button to add a sprite in the target pane" + id="targetPane.addSprite" + /> +); const SpriteSelectorComponent = function (props) { const { @@ -15,6 +27,7 @@ const SpriteSelectorComponent = function (props) { onChangeSpriteX, onChangeSpriteY, onDeleteSprite, + onNewSpriteClick, onSelectSprite, selectedId, sprites, @@ -69,6 +82,12 @@ const SpriteSelectorComponent = function (props) { } </Box> </Box> + <IconButton + className={styles.addButton} + img={spriteIcon} + title={addSpriteMessage} + onClick={onNewSpriteClick} + /> </Box> ); }; @@ -81,6 +100,7 @@ SpriteSelectorComponent.propTypes = { onChangeSpriteX: PropTypes.func, onChangeSpriteY: PropTypes.func, onDeleteSprite: PropTypes.func, + onNewSpriteClick: PropTypes.func, onSelectSprite: PropTypes.func, selectedId: PropTypes.string, sprites: PropTypes.shape({ diff --git a/src/components/target-pane/icon--backdrop.svg b/src/components/stage-selector/icon--backdrop.svg similarity index 100% rename from src/components/target-pane/icon--backdrop.svg rename to src/components/stage-selector/icon--backdrop.svg diff --git a/src/components/stage-selector/stage-selector.css b/src/components/stage-selector/stage-selector.css index e83601923..f3f01a5eb 100644 --- a/src/components/stage-selector/stage-selector.css +++ b/src/components/stage-selector/stage-selector.css @@ -99,3 +99,12 @@ $border-width: 2px; width: 100%; user-select: none; } + +.add-button { + font-size: 0.55rem; + font-weight: bold; + text-align: center; + position: absolute; + bottom: 0.5rem; + left: 0.25rem; +} diff --git a/src/components/stage-selector/stage-selector.jsx b/src/components/stage-selector/stage-selector.jsx index 09ddb9a23..ec5fbb36d 100644 --- a/src/components/stage-selector/stage-selector.jsx +++ b/src/components/stage-selector/stage-selector.jsx @@ -1,10 +1,21 @@ import classNames from 'classnames'; import PropTypes from 'prop-types'; import React from 'react'; +import {FormattedMessage} from 'react-intl'; import Box from '../box/box.jsx'; +import IconButton from '../icon-button/icon-button.jsx'; import CostumeCanvas from '../costume-canvas/costume-canvas.jsx'; import styles from './stage-selector.css'; +import backdropIcon from './icon--backdrop.svg'; + +const addBackdropMessage = ( + <FormattedMessage + defaultMessage="Add Backdrop" + description="Button to add a backdrop in the target pane" + id="targetPane.addBackdrop" + /> +); const StageSelector = props => { const { @@ -12,6 +23,7 @@ const StageSelector = props => { selected, url, onClick, + onNewBackdropClick, ...componentProps } = props; return ( @@ -41,7 +53,12 @@ const StageSelector = props => { <div className={styles.label}>Backdrops</div> <div className={styles.count}>{backdropCount}</div> </div> - + <IconButton + className={styles.addButton} + img={backdropIcon} + title={addBackdropMessage} + onClick={onNewBackdropClick} + /> </div> </Box> ); @@ -50,6 +67,7 @@ const StageSelector = props => { StageSelector.propTypes = { backdropCount: PropTypes.number.isRequired, onClick: PropTypes.func, + onNewBackdropClick: PropTypes.func, selected: PropTypes.bool.isRequired, url: PropTypes.string }; diff --git a/src/components/target-pane/icon--add.svg b/src/components/target-pane/icon--add.svg deleted file mode 100644 index 9e5509e76a2296c93988ef8138eb61be814fb21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmZ{g!EVDK5JZ0k(KBE>QBx7jq38ZXg$yJ#1S~^?ttkKAbx5oB(93G{q?y@WkuC@1 zbdTTEVy5>NBdxL`L7mNmAz<^_ht%U^&Ld~6ltRmf#_7PirfC>NV03Y&yvDi54QkMi zZeQ*LOQDTTQlz|iBkAB1X|L9K&qEAmpYjw>hCf+rADVa<%%Da-#m}IB!;k2~Us{~b zN8XL|{w7#$5UloPm!Z!MF%Y7(7OVoXrlY~D1n1nBf#cd9Z|H7|(E{ojRtMJoFi<UK W@;@hhXSLOU)m8(R?*MSF50YO1kZ}Y6 diff --git a/src/components/target-pane/target-pane.css b/src/components/target-pane/target-pane.css index 3f1ef0943..380200ff5 100644 --- a/src/components/target-pane/target-pane.css +++ b/src/components/target-pane/target-pane.css @@ -23,12 +23,3 @@ cursor: pointer; user-select: none; } - -.add-button { - font-size: 0.55rem; - font-weight: bold; -} - -/* @todo: This is hacky. Better: move buttons in their corresponding panes, and set values relatively */ -.add-button-wrapper--sprite { right: 7rem; } -.add-button-wrapper--stage { right: 0.8rem; } diff --git a/src/components/target-pane/target-pane.jsx b/src/components/target-pane/target-pane.jsx index ecfc3e4f5..a88a994a0 100644 --- a/src/components/target-pane/target-pane.jsx +++ b/src/components/target-pane/target-pane.jsx @@ -1,7 +1,5 @@ -import classNames from 'classnames'; import PropTypes from 'prop-types'; import React from 'react'; -import {FormattedMessage} from 'react-intl'; import VM from 'scratch-vm'; @@ -12,27 +10,8 @@ import SoundLibrary from '../../containers/sound-library.jsx'; import SpriteLibrary from '../../containers/sprite-library.jsx'; import SpriteSelectorComponent from '../sprite-selector/sprite-selector.jsx'; import StageSelector from '../../containers/stage-selector.jsx'; -import IconButton from '../icon-button/icon-button.jsx'; import styles from './target-pane.css'; -import spriteIcon from './icon--sprite.svg'; -import backdropIcon from './icon--backdrop.svg'; - -const addSpriteMessage = ( - <FormattedMessage - defaultMessage="Add Sprite" - description="Button to add a sprite in the target pane" - id="targetPane.addSprite" - /> -); - -const addBackdropMessage = ( - <FormattedMessage - defaultMessage="Add Backdrop" - description="Button to add a backdrop in the target pane" - id="targetPane.addBackdrop" - /> -); /* * Pane that contains the sprite selector, sprite info, stage selector, @@ -54,7 +33,6 @@ const TargetPane = ({ onChangeSpriteY, onDeleteSprite, onNewSpriteClick, - onNewBackdropClick, onRequestCloseBackdropLibrary, onRequestCloseCostumeLibrary, onRequestCloseSoundLibrary, @@ -80,6 +58,7 @@ const TargetPane = ({ onChangeSpriteX={onChangeSpriteX} onChangeSpriteY={onChangeSpriteY} onDeleteSprite={onDeleteSprite} + onNewSpriteClick={onNewSpriteClick} onSelectSprite={onSelectSprite} /> <Box className={styles.stageSelectorWrapper}> @@ -94,22 +73,6 @@ const TargetPane = ({ onSelect={onSelectSprite} />} <Box> - <Box className={classNames(styles.addButtonWrapper, styles.addButtonWrapperSprite)}> - <IconButton - className={styles.addButton} - img={spriteIcon} - title={addSpriteMessage} - onClick={onNewSpriteClick} - /> - </Box> - <Box className={classNames(styles.addButtonWrapper, styles.addButtonWrapperStage)}> - <IconButton - className={styles.addButton} - img={backdropIcon} - title={addBackdropMessage} - onClick={onNewBackdropClick} - /> - </Box> <SpriteLibrary visible={spriteLibraryVisible} vm={vm} @@ -164,7 +127,6 @@ TargetPane.propTypes = { onChangeSpriteX: PropTypes.func, onChangeSpriteY: PropTypes.func, onDeleteSprite: PropTypes.func, - onNewBackdropClick: PropTypes.func, onNewSpriteClick: PropTypes.func, onRequestCloseBackdropLibrary: PropTypes.func, onRequestCloseCostumeLibrary: PropTypes.func, diff --git a/src/containers/stage-selector.jsx b/src/containers/stage-selector.jsx index 1c2018584..83a5a1bb0 100644 --- a/src/containers/stage-selector.jsx +++ b/src/containers/stage-selector.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import {connect} from 'react-redux'; - +import {openBackdropLibrary} from '../reducers/modals'; import StageSelectorComponent from '../components/stage-selector/stage-selector.jsx'; class StageSelector extends React.Component { @@ -44,7 +44,14 @@ const mapStateToProps = (state, {assetId}) => ({ url: assetId && state.vm.runtime.storage.get(assetId).encodeDataURI() }); +const mapDispatchToProps = dispatch => ({ + onNewBackdropClick: e => { + e.preventDefault(); + dispatch(openBackdropLibrary()); + } +}); + export default connect( mapStateToProps, - () => ({}) // omit dispatch prop + mapDispatchToProps )(StageSelector); diff --git a/src/containers/target-pane.jsx b/src/containers/target-pane.jsx index 3445e49ef..9b70a79d4 100644 --- a/src/containers/target-pane.jsx +++ b/src/containers/target-pane.jsx @@ -4,7 +4,6 @@ import React from 'react'; import {connect} from 'react-redux'; import { - openBackdropLibrary, openSpriteLibrary, closeBackdropLibrary, closeCostumeLibrary, @@ -95,10 +94,6 @@ const mapStateToProps = state => ({ backdropLibraryVisible: state.modals.backdropLibrary }); const mapDispatchToProps = dispatch => ({ - onNewBackdropClick: e => { - e.preventDefault(); - dispatch(openBackdropLibrary()); - }, onNewSpriteClick: e => { e.preventDefault(); dispatch(openSpriteLibrary()); -- GitLab