mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00
Compare commits
7 Commits
v5.0.0-bet
...
v5.0.0-bet
Author | SHA1 | Date | |
---|---|---|---|
![]() |
e8ce83b162 | ||
![]() |
9b91f06011 | ||
![]() |
17247cbbf1 | ||
![]() |
10b81dd232 | ||
![]() |
3f3a5dbd3b | ||
![]() |
6ff8ee749d | ||
![]() |
db5f146818 |
@@ -87,11 +87,20 @@ export default class InstructionParametersEditor extends Component {
|
||||
<div key={type} style={styles.parametersContainer}>
|
||||
{mapFor(0, instructionMetadata.getParametersCount(), i => {
|
||||
const parameterMetadata = instructionMetadata.getParameter(i);
|
||||
const parameterMetadataType = parameterMetadata.getType();
|
||||
const ParameterComponent = ParameterRenderingService.getParameterComponent(
|
||||
parameterMetadata.getType()
|
||||
parameterMetadataType
|
||||
);
|
||||
|
||||
if (parameterMetadata.isCodeOnly()) return null;
|
||||
if (!ParameterComponent) {
|
||||
console.warn(
|
||||
'Missing parameter component for',
|
||||
parameterMetadataType
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<ParameterComponent
|
||||
parameterMetadata={parameterMetadata}
|
||||
|
@@ -1,6 +1,4 @@
|
||||
// @flow
|
||||
import ParameterRenderingService from '../ParameterRenderingService';
|
||||
|
||||
export type ParameterFieldProps = {|
|
||||
parameterMetadata?: gdParameterMetadata,
|
||||
project: gdProject,
|
||||
@@ -8,5 +6,8 @@ export type ParameterFieldProps = {|
|
||||
onChange: string => void,
|
||||
value: string,
|
||||
isInline?: boolean,
|
||||
parameterRenderingService?: typeof ParameterRenderingService,
|
||||
parameterRenderingService?: {
|
||||
components: any,
|
||||
getParameterComponent: (type: string) => any,
|
||||
},
|
||||
|};
|
||||
|
@@ -12,7 +12,7 @@ export default class InstancesResizer {
|
||||
}
|
||||
|
||||
_roundXPosition(x) {
|
||||
if (!this.options.snap || !this.options.grid) return x;
|
||||
if (!this.options.snap || !this.options.grid) return Math.round(x);
|
||||
|
||||
return (
|
||||
Math.round((x - this.options.gridOffsetX) / this.options.gridWidth) *
|
||||
@@ -22,7 +22,7 @@ export default class InstancesResizer {
|
||||
}
|
||||
|
||||
_roundYPosition(y) {
|
||||
if (!this.options.snap || !this.options.grid) return y;
|
||||
if (!this.options.snap || !this.options.grid) return Math.round(y);
|
||||
|
||||
return (
|
||||
Math.round((y - this.options.gridOffsetY) / this.options.gridHeight) *
|
||||
|
@@ -8,7 +8,7 @@ export default class BaseEditor extends React.Component<*,*> {
|
||||
setToolbar: () => {},
|
||||
};
|
||||
|
||||
getProject(): gdProject {
|
||||
getProject(): ?gdProject {
|
||||
return this.props.project;
|
||||
}
|
||||
|
||||
|
16
newIDE/app/src/MainFrame/Editors/StartPage/GDevelopLogo.js
Normal file
16
newIDE/app/src/MainFrame/Editors/StartPage/GDevelopLogo.js
Normal file
@@ -0,0 +1,16 @@
|
||||
// @flow
|
||||
import * as React from 'react';
|
||||
import muiThemeable from 'material-ui/styles/muiThemeable';
|
||||
|
||||
const styles = {
|
||||
logo: {
|
||||
width: '100%',
|
||||
},
|
||||
};
|
||||
|
||||
const ThemableGDevelopLogo = ({ muiTheme }) => (
|
||||
<img src={muiTheme.logo.src} alt="" style={styles.logo} />
|
||||
);
|
||||
|
||||
const GDevelopLogo = muiThemeable()(ThemableGDevelopLogo);
|
||||
export default GDevelopLogo;
|
@@ -0,0 +1,25 @@
|
||||
// @flow
|
||||
import * as React from 'react';
|
||||
import muiThemeable from 'material-ui/styles/muiThemeable';
|
||||
|
||||
const styles = {
|
||||
scrollContainer: {
|
||||
flex: 1,
|
||||
display: 'flex',
|
||||
overflowY: 'scroll',
|
||||
},
|
||||
};
|
||||
|
||||
const ThemableScrollBackground = ({ muiTheme, children }) => (
|
||||
<div
|
||||
style={{
|
||||
...styles.scrollContainer,
|
||||
backgroundColor: muiTheme.palette.canvasColor,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
|
||||
const ScrollBackground = muiThemeable()(ThemableScrollBackground);
|
||||
export default ScrollBackground;
|
@@ -2,8 +2,8 @@
|
||||
import React from 'react';
|
||||
import renderer from 'react-test-renderer';
|
||||
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
|
||||
import defaultTheme from '../../UI/Theme/DefaultTheme';
|
||||
import StartPage from './StartPage';
|
||||
import defaultTheme from '../../../UI/Theme/DefaultTheme';
|
||||
import StartPage from '.';
|
||||
const gd = global.gd;
|
||||
|
||||
describe('StartPage', () => {
|
@@ -48,7 +48,7 @@ exports[`StartPage renders the start page with a project 1`] = `
|
||||
style={
|
||||
Object {
|
||||
"WebkitTapHighlightColor": "rgba(0,0,0,0)",
|
||||
"backgroundColor": "#f7f7f7",
|
||||
"backgroundColor": "#f0f0f0",
|
||||
"borderRadius": 2,
|
||||
"boxShadow": "0 1px 6px rgba(0, 0, 0, 0.12),
|
||||
0 1px 4px rgba(0, 0, 0, 0.12)",
|
||||
@@ -634,7 +634,7 @@ exports[`StartPage renders the start page with no project opened 1`] = `
|
||||
style={
|
||||
Object {
|
||||
"WebkitTapHighlightColor": "rgba(0,0,0,0)",
|
||||
"backgroundColor": "#f7f7f7",
|
||||
"backgroundColor": "#f0f0f0",
|
||||
"borderRadius": 2,
|
||||
"boxShadow": "0 1px 6px rgba(0, 0, 0, 0.12),
|
||||
0 1px 4px rgba(0, 0, 0, 0.12)",
|
@@ -1,18 +1,15 @@
|
||||
// @flow
|
||||
import React from 'react';
|
||||
import FlatButton from 'material-ui/FlatButton';
|
||||
import Paper from 'material-ui/Paper';
|
||||
import IconButton from 'material-ui/IconButton';
|
||||
import muiThemeable from 'material-ui/styles/muiThemeable';
|
||||
import BaseEditor from './BaseEditor';
|
||||
import Window from '../../Utils/Window';
|
||||
import { Line } from '../../UI/Grid';
|
||||
import BaseEditor from '../BaseEditor';
|
||||
import Window from '../../../Utils/Window';
|
||||
import { Line } from '../../../UI/Grid';
|
||||
import GDevelopLogo from './GDevelopLogo';
|
||||
import ScrollBackground from './ScrollBackground';
|
||||
|
||||
const styles = {
|
||||
scrollContainer: {
|
||||
flex: 1,
|
||||
display: 'flex',
|
||||
overflowY: 'scroll',
|
||||
},
|
||||
innerContainer: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
@@ -35,14 +32,11 @@ const styles = {
|
||||
buttonsPaper: {
|
||||
width: '100%',
|
||||
},
|
||||
logo: {
|
||||
width: '100%',
|
||||
},
|
||||
};
|
||||
|
||||
class ThemableStartPage extends BaseEditor {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
class StartPage extends BaseEditor {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.state = {
|
||||
aboutDialogOpen: false,
|
||||
@@ -65,28 +59,21 @@ class ThemableStartPage extends BaseEditor {
|
||||
onCreate,
|
||||
onOpenProjectManager,
|
||||
onCloseProject,
|
||||
muiTheme,
|
||||
onOpenAboutDialog,
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
backgroundColor: muiTheme.palette.canvasColor,
|
||||
...styles.scrollContainer,
|
||||
}}
|
||||
>
|
||||
<ScrollBackground>
|
||||
<div style={styles.innerContainer}>
|
||||
<Line expand justifyContent="center">
|
||||
<div style={styles.centerContainer}>
|
||||
<Paper
|
||||
zDepth={1}
|
||||
style={{
|
||||
backgroundColor: muiTheme.startPage.backgroundColor,
|
||||
...styles.logoPaper,
|
||||
}}
|
||||
>
|
||||
<img src={muiTheme.logo.src} alt="" style={styles.logo} />
|
||||
<GDevelopLogo />
|
||||
<p>
|
||||
GDevelop is an easy-to-use game creator with no programming
|
||||
language to learn.
|
||||
@@ -160,10 +147,9 @@ class ThemableStartPage extends BaseEditor {
|
||||
</div>
|
||||
</Line>
|
||||
</div>
|
||||
</div>
|
||||
</ScrollBackground>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const StartPage = muiThemeable()(ThemableStartPage);
|
||||
export default StartPage;
|
@@ -47,6 +47,11 @@ class ThemableObjectRow extends React.Component {
|
||||
enabled: !!this.props.onEdit,
|
||||
click: () => this.props.onEditName(),
|
||||
},
|
||||
{
|
||||
label: 'Set as a global object',
|
||||
enabled: !!this.props.onSetAsGlobalObject,
|
||||
click: () => this.props.onSetAsGlobalObject(),
|
||||
},
|
||||
{
|
||||
label: 'Delete',
|
||||
enabled: !!this.props.onEdit,
|
||||
|
@@ -69,6 +69,7 @@ export default class ObjectSelector extends Component {
|
||||
layout,
|
||||
allowedObjectType,
|
||||
noGroups,
|
||||
onBlur,
|
||||
...rest
|
||||
} = this.props;
|
||||
|
||||
@@ -97,6 +98,8 @@ export default class ObjectSelector extends Component {
|
||||
focused: false,
|
||||
text: null,
|
||||
});
|
||||
|
||||
if (onBlur) onBlur(event);
|
||||
}}
|
||||
onNewRequest={data => {
|
||||
// Note that data may be a string or a {text, value} object.
|
||||
|
@@ -111,6 +111,11 @@ class ObjectsList extends Component<*, *> {
|
||||
onPaste={() => this.props.onPaste(objectWithContext)}
|
||||
onRename={newName =>
|
||||
this.props.onRename(objectWithContext, newName)}
|
||||
onSetAsGlobalObject={
|
||||
objectWithContext.global
|
||||
? undefined
|
||||
: () => this.props.onSetAsGlobalObject(objectWithContext)
|
||||
}
|
||||
onAddNewObject={this.props.onAddNewObject}
|
||||
editingName={nameBeingEdited}
|
||||
getThumbnail={this.props.getThumbnail}
|
||||
@@ -355,6 +360,35 @@ export default class ObjectsListContainer extends React.Component<
|
||||
this.forceUpdateList();
|
||||
};
|
||||
|
||||
_setAsGlobalObject = (objectWithContext: ObjectWithContext) => {
|
||||
const { object } = objectWithContext;
|
||||
const { project, objectsContainer } = this.props;
|
||||
|
||||
const objectName = object.getName();
|
||||
if (!objectsContainer.hasObjectNamed(objectName)) return;
|
||||
|
||||
if (project.hasObjectNamed(objectName)) {
|
||||
showWarningBox(
|
||||
'A global object with this name already exists. Please change the object name before setting it as a global object'
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
//eslint-disable-next-line
|
||||
const answer = confirm(
|
||||
"This object will be loaded and available in all the scenes. This is only recommended for objects that you reuse a lot and can't be undone. Make this object global?"
|
||||
);
|
||||
if (!answer) return;
|
||||
|
||||
project.insertObject(
|
||||
objectsContainer.getObject(objectName),
|
||||
project.getObjectsCount()
|
||||
);
|
||||
objectsContainer.removeObject(objectName);
|
||||
|
||||
this.forceUpdateList();
|
||||
};
|
||||
|
||||
forceUpdateList = () => {
|
||||
this.forceUpdate();
|
||||
this.sortableList.getWrappedInstance().forceUpdateGrid();
|
||||
@@ -403,6 +437,7 @@ export default class ObjectsListContainer extends React.Component<
|
||||
onEditObject={this.props.onEditObject}
|
||||
onCopyObject={this._copyObject}
|
||||
onCutObject={this._cutObject}
|
||||
onSetAsGlobalObject={this._setAsGlobalObject}
|
||||
onPaste={this._paste}
|
||||
onAddNewObject={() =>
|
||||
this.setState({ newObjectDialogOpen: true })}
|
||||
|
@@ -95,9 +95,6 @@ const theme: Theme = {
|
||||
logo: {
|
||||
src: 'res/GD-logo.png',
|
||||
},
|
||||
startPage: {
|
||||
backgroundColor,
|
||||
},
|
||||
mosaicRootClassName: 'mosaic-gd-dark-theme',
|
||||
eventsSheetRootClassName: 'gd-events-sheet-dark-theme',
|
||||
};
|
||||
|
@@ -80,9 +80,6 @@ const theme = {
|
||||
logo: {
|
||||
src: 'res/GD-logo-big.png',
|
||||
},
|
||||
startPage: {
|
||||
backgroundColor,
|
||||
},
|
||||
mosaicRootClassName: 'mosaic-gd-default-theme',
|
||||
eventsSheetRootClassName: 'gd-events-sheet-default-theme',
|
||||
};
|
||||
|
@@ -79,7 +79,6 @@ export default class Authentification {
|
||||
getUserProfile = (cb: (any, ?Profile) => void) => {
|
||||
if (!this.isAuthenticated()) return cb({ unauthenticated: true });
|
||||
|
||||
console.log('User found', this.user);
|
||||
cb(null, this.user);
|
||||
};
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
"name": "gdevelop",
|
||||
"productName": "GDevelop 5",
|
||||
"description": "GDevelop 5 IDE running on the Electron runtime",
|
||||
"version": "5.0.0-beta27",
|
||||
"version": "5.0.0-beta28",
|
||||
"author": "Florian Rival",
|
||||
"license": "MIT",
|
||||
"homepage": "http://gdevelop-app.com",
|
||||
|
Reference in New Issue
Block a user