Files
001code-html--cocos/scratch-gui/src/containers/watermark.jsx
刘宇飞 6e0a1fbcbb Initial commit of 001code-html Scratch frontend project.
Includes scratch-gui, scratch-vm, scratch-blocks, scratch-render, scratch-l10n, and deployment config.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-16 15:37:45 +08:00

72 lines
1.8 KiB
JavaScript

import bindAll from 'lodash.bindall';
import omit from 'lodash.omit';
import PropTypes from 'prop-types';
import React from 'react';
import {connect} from 'react-redux';
import ThrottledPropertyHOC from '../lib/throttled-property-hoc.jsx';
import VM from 'scratch-vm';
import storage from '../lib/storage';
import getCostumeUrl from '../lib/get-costume-url';
import WatermarkComponent from '../components/watermark/watermark.jsx';
class Watermark extends React.Component {
constructor (props) {
super(props);
bindAll(this, [
'getCostumeData'
]);
}
getCostumeData () {
if (!this.props.asset) return null;
return getCostumeUrl(this.props.asset);
}
render () {
const componentProps = omit(this.props, ['asset', 'vm']);
return (
<WatermarkComponent
costumeURL={this.getCostumeData()}
{...componentProps}
/>
);
}
}
Watermark.propTypes = {
asset: PropTypes.instanceOf(storage.Asset),
vm: PropTypes.instanceOf(VM).isRequired
};
const mapStateToProps = state => {
const targets = state.scratchGui.targets;
const currentTargetId = targets.editingTarget;
let asset;
if (currentTargetId) {
if (targets.stage.id === currentTargetId) {
asset = targets.stage.costume.asset;
} else if (Object.prototype.hasOwnProperty.call(targets.sprites, currentTargetId)) {
const currentSprite = targets.sprites[currentTargetId];
asset = currentSprite.costume.asset;
}
}
return {
vm: state.scratchGui.vm,
asset: asset
};
};
const ConnectedComponent = connect(
mapStateToProps
)(
ThrottledPropertyHOC('asset', 500)(Watermark)
);
export default ConnectedComponent;