Skip to content
This repository was archived by the owner on Sep 19, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.eslintrc.js
6 changes: 6 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
extends: ['airbnb-typescript'],
parserOptions: {
project: './tsconfig.json',
},
};
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,6 @@ dist

# TernJS port file
.tern-port

# Build output
build
27,210 changes: 23,722 additions & 3,488 deletions package-lock.json

Large diffs are not rendered by default.

25 changes: 7 additions & 18 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,18 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.32",
"@fortawesome/free-solid-svg-icons": "^5.15.1",
"@fortawesome/react-fontawesome": "^0.1.14",
"@material-ui/core": "^4.11.3",
"@techstark/opencv-js": "^4.5.2",
"@types/node": "^12.0.0",
"@types/react": "^16.9.53",
"@types/react-dom": "^16.9.8",
"as-bind": "^0.6.1",
"buffer": "^6.0.3",
"is-svg": ">=4.2.2",
"konva": "^7.2.5",
"normalize.css": "^8.0.1",
"react": "^17.0.1",
"react-app-rewired": "^2.1.8",
"react-dom": "^17.0.1",
"react-images-upload": "^1.2.8",
"react-konva": "^17.0.0-rc.1",
"react-material-workspace-layout": "^1.0.9",
"react-remove-scroll": "^2.4.1",
"react-scripts": "4.0.1",
"react-use": "^17.2.1",
"reactstrap": "^8.9.0",
"transformation-matrix-js": "^2.7.6",
"react-scripts": "^4.0.3",
"typescript": "^4.0.3",
"use-event-callback": "^0.1.0",
"use-image": "^1.0.7"
Expand All @@ -36,11 +24,6 @@
"build": "react-scripts build",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app"
]
},
"browserslist": {
"production": [
">0.2%",
Expand All @@ -54,6 +37,12 @@
]
},
"devDependencies": {
"eslint": "^7.24.0",
"eslint-config-airbnb-typescript": "^12.3.1",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-react": "^7.23.2",
"eslint-plugin-react-hooks": "^4.2.0",
"wasm-loader": "^1.3.0"
}
}
16 changes: 12 additions & 4 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,20 @@ const App = () => {
const [{ ...imageScaleState }, { ...imageScaleApi }] = useImageScale();

const toolbarProps = {
...painterState, ...selectedClassState, ...imageScaleState,
...painterApi, ...selectedClassApi, ...imageScaleApi
...painterState,
...selectedClassState,
...imageScaleState,
...painterApi,
...selectedClassApi,
...imageScaleApi,
};
const imageCanvasProps = {
...painterState, ...imageScaleState, ...selectedClassState,
...painterApi, ...imageScaleApi, canvasSize
...painterState,
...imageScaleState,
...selectedClassState,
...painterApi,
...imageScaleApi,
canvasSize,
};

return (
Expand Down
41 changes: 20 additions & 21 deletions src/common/colors.tsx
Original file line number Diff line number Diff line change
@@ -1,31 +1,30 @@

import * as muiColors from '@material-ui/core/colors';

export const colors = [
muiColors.red[500],
muiColors.blue[500],
muiColors.green[500],
muiColors.orange[800],
muiColors.brown[500],
muiColors.lightGreen[700],
muiColors.pink[500],
muiColors.purple[500],
muiColors.indigo[500],
muiColors.teal[500],
muiColors.lime[500],
muiColors.blueGrey[500],
]
muiColors.red[500],
muiColors.blue[500],
muiColors.green[500],
muiColors.orange[800],
muiColors.brown[500],
muiColors.lightGreen[700],
muiColors.pink[500],
muiColors.purple[500],
muiColors.indigo[500],
muiColors.teal[500],
muiColors.lime[500],
muiColors.blueGrey[500],
];

const transparency = 0x88000000
const transparency = 0x88000000;

function reverseParseColor(rrggbb) {
rrggbb = rrggbb.replace("#", "")
const bbggrr = rrggbb.substr(4, 2) + rrggbb.substr(2, 2) + rrggbb.substr(0, 2)
return parseInt(bbggrr, 16)
rrggbb = rrggbb.replace('#', '');
const bbggrr = rrggbb.substr(4, 2) + rrggbb.substr(2, 2) + rrggbb.substr(0, 2);
return parseInt(bbggrr, 16);
}

export const colorInts: Array<number> = colors.map(
(c) => (reverseParseColor(c) | transparency) >>> 0
)
(c) => (reverseParseColor(c) | transparency) >>> 0,
);

export default colors
export default colors;
12 changes: 6 additions & 6 deletions src/common/config.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
const ALL_CLASSES = [
"foreground",
"background",
"tree",
"road",
"traffic-light"
'foreground',
'background',
'tree',
'road',
'traffic-light',
];

export default ALL_CLASSES
export default ALL_CLASSES;
4 changes: 2 additions & 2 deletions src/components/BrushPreview.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from "react";
import React from 'react';

interface Props {
currentColor: string;
Expand All @@ -16,7 +16,7 @@ export const BrushPreview: React.FC<Props> = ({
};
return (
<div className="preview">
<div style={styles} className="preview__brush"></div>
<div style={styles} className="preview__brush" />
</div>
);
};
163 changes: 81 additions & 82 deletions src/components/ClassSelectionMenu.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

import classnames from 'classnames';
import capitalize from 'lodash/capitalize';
import React, { useEffect } from 'react';
Expand All @@ -11,89 +10,89 @@ import { styled } from '@material-ui/core/styles';
import colors from '../common/colors';
import SidebarBoxContainer from './SideBarBoxContainer';

const LabelContainer = styled("div")({
display: "flex",
paddingTop: 4,
paddingBottom: 4,
paddingLeft: 16,
paddingRight: 16,
alignItems: "center",
cursor: "pointer",
opacity: 0.7,
backgroundColor: "#fff",
"&:hover": {
opacity: 1,
},
"&.selected": {
opacity: 1,
fontWeight: "bold",
},
})
const Circle = styled("div")({
width: 12,
height: 12,
borderRadius: 12,
marginRight: 8,
})
const Label = styled("div")({
fontSize: 11,
})
const DashSep = styled("div")({
flexGrow: 1,
borderBottom: `2px dotted ${muiColors.grey[300]}`,
marginLeft: 8,
marginRight: 8,
})
const Number = styled("div")({
fontSize: 11,
textAlign: "center",
minWidth: 14,
paddingTop: 2,
paddingBottom: 2,
fontWeight: "bold",
color: muiColors.grey[700],
})
const LabelContainer = styled('div')({
display: 'flex',
paddingTop: 4,
paddingBottom: 4,
paddingLeft: 16,
paddingRight: 16,
alignItems: 'center',
cursor: 'pointer',
opacity: 0.7,
backgroundColor: '#fff',
'&:hover': {
opacity: 1,
},
'&.selected': {
opacity: 1,
fontWeight: 'bold',
},
});
const Circle = styled('div')({
width: 12,
height: 12,
borderRadius: 12,
marginRight: 8,
});
const Label = styled('div')({
fontSize: 11,
});
const DashSep = styled('div')({
flexGrow: 1,
borderBottom: `2px dotted ${muiColors.grey[300]}`,
marginLeft: 8,
marginRight: 8,
});
const Number = styled('div')({
fontSize: 11,
textAlign: 'center',
minWidth: 14,
paddingTop: 2,
paddingBottom: 2,
fontWeight: 'bold',
color: muiColors.grey[700],
});

export const ClassSelectionMenu = ({
selectedCls,
regionClsList,
onSelectCls,
selectedCls,
regionClsList,
onSelectCls,
}) => {
useEffect(() => {
const keyMapping = {}
for (let i = 0; i < 9 && i < regionClsList.length; i++) {
keyMapping[i + 1] = () => onSelectCls(regionClsList[i])
}
const onKeyDown = (e) => {
if (keyMapping[e.key]) {
keyMapping[e.key]()
e.preventDefault()
e.stopPropagation()
}
}
window.addEventListener("keydown", onKeyDown)
return () => window.removeEventListener("keydown", onKeyDown)
}, [regionClsList, selectedCls, onSelectCls])
useEffect(() => {
const keyMapping = {};
for (let i = 0; i < 9 && i < regionClsList.length; i++) {
keyMapping[i + 1] = () => onSelectCls(regionClsList[i]);
}
const onKeyDown = (e) => {
if (keyMapping[e.key]) {
keyMapping[e.key]();
e.preventDefault();
e.stopPropagation();
}
};
window.addEventListener('keydown', onKeyDown);
return () => window.removeEventListener('keydown', onKeyDown);
}, [regionClsList, selectedCls, onSelectCls]);

return (
<div>
{regionClsList.map((label, index) => (
<LabelContainer
className={classnames({ selected: label === selectedCls })}
onClick={() => onSelectCls(label)}
>
<Circle style={{ backgroundColor: colors[index % colors.length] }} />
<Label className={classnames({ selected: label === selectedCls })}>
{capitalize(label)}
</Label>
<DashSep />
<Number className={classnames({ selected: label === selectedCls })}>
{index < 9 ? `Key [${index + 1}]` : ""}
</Number>
</LabelContainer>
))}
</div>
)
}
return (
<div>
{regionClsList.map((label, index) => (
<LabelContainer
className={classnames({ selected: label === selectedCls })}
onClick={() => onSelectCls(label)}
>
<Circle style={{ backgroundColor: colors[index % colors.length] }} />
<Label className={classnames({ selected: label === selectedCls })}>
{capitalize(label)}
</Label>
<DashSep />
<Number className={classnames({ selected: label === selectedCls })}>
{index < 9 ? `Key [${index + 1}]` : ''}
</Number>
</LabelContainer>
))}
</div>
);
};

export default ClassSelectionMenu
export default ClassSelectionMenu;
Loading