mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-08 06:19:05 +08:00
feat: added new painting functionality with mac device restriction
This commit is contained in:
parent
837d91aa61
commit
2f420c0fcd
@ -1,4 +1,4 @@
|
|||||||
import { DeleteOutlined } from '@ant-design/icons'
|
import { DeleteOutlined, PlusOutlined } from '@ant-design/icons'
|
||||||
import DragableList from '@renderer/components/DragableList'
|
import DragableList from '@renderer/components/DragableList'
|
||||||
import { usePaintings } from '@renderer/hooks/usePaintings'
|
import { usePaintings } from '@renderer/hooks/usePaintings'
|
||||||
import FileManager from '@renderer/services/FileManager'
|
import FileManager from '@renderer/services/FileManager'
|
||||||
@ -14,15 +14,22 @@ interface PaintingsListProps {
|
|||||||
selectedPainting: Painting
|
selectedPainting: Painting
|
||||||
onSelectPainting: (painting: Painting) => void
|
onSelectPainting: (painting: Painting) => void
|
||||||
onDeletePainting: (painting: Painting) => void
|
onDeletePainting: (painting: Painting) => void
|
||||||
|
onNewPainting: () => void
|
||||||
}
|
}
|
||||||
|
|
||||||
const PaintingsList: FC<PaintingsListProps> = ({ paintings, selectedPainting, onSelectPainting, onDeletePainting }) => {
|
const PaintingsList: FC<PaintingsListProps> = ({
|
||||||
|
paintings,
|
||||||
|
selectedPainting,
|
||||||
|
onSelectPainting,
|
||||||
|
onDeletePainting,
|
||||||
|
onNewPainting
|
||||||
|
}) => {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const [dragging, setDragging] = useState(false)
|
const [dragging, setDragging] = useState(false)
|
||||||
const { updatePaintings } = usePaintings()
|
const { updatePaintings } = usePaintings()
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container style={{ paddingBottom: dragging ? 30 : 0 }}>
|
<Container style={{ paddingBottom: dragging ? 80 : 0 }}>
|
||||||
<DragableList
|
<DragableList
|
||||||
list={paintings}
|
list={paintings}
|
||||||
onUpdate={updatePaintings}
|
onUpdate={updatePaintings}
|
||||||
@ -47,6 +54,11 @@ const PaintingsList: FC<PaintingsListProps> = ({ paintings, selectedPainting, on
|
|||||||
</CanvasWrapper>
|
</CanvasWrapper>
|
||||||
)}
|
)}
|
||||||
</DragableList>
|
</DragableList>
|
||||||
|
{!dragging && (
|
||||||
|
<NewPaintingButton onClick={onNewPainting}>
|
||||||
|
<PlusOutlined />
|
||||||
|
</NewPaintingButton>
|
||||||
|
)}
|
||||||
</Container>
|
</Container>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -116,4 +128,24 @@ const DeleteButton = styled.div.attrs({ className: 'delete-button' })`
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
`
|
`
|
||||||
|
|
||||||
|
const NewPaintingButton = styled.div`
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
margin-top: -10px;
|
||||||
|
background-color: var(--color-background-soft);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background-color 0.2s ease;
|
||||||
|
border: 1px dashed var(--color-border);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: var(--color-text-2);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--color-background-mute);
|
||||||
|
border-color: var(--color-primary);
|
||||||
|
color: var(--color-primary);
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
export default PaintingsList
|
export default PaintingsList
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import { Navbar, NavbarCenter, NavbarRight } from '@renderer/components/app/Navb
|
|||||||
import { VStack } from '@renderer/components/Layout'
|
import { VStack } from '@renderer/components/Layout'
|
||||||
import Scrollbar from '@renderer/components/Scrollbar'
|
import Scrollbar from '@renderer/components/Scrollbar'
|
||||||
import TranslateButton from '@renderer/components/TranslateButton'
|
import TranslateButton from '@renderer/components/TranslateButton'
|
||||||
|
import { isMac } from '@renderer/config/constant'
|
||||||
import { TEXT_TO_IMAGES_MODELS } from '@renderer/config/models'
|
import { TEXT_TO_IMAGES_MODELS } from '@renderer/config/models'
|
||||||
import { useTheme } from '@renderer/context/ThemeProvider'
|
import { useTheme } from '@renderer/context/ThemeProvider'
|
||||||
import { usePaintings } from '@renderer/hooks/usePaintings'
|
import { usePaintings } from '@renderer/hooks/usePaintings'
|
||||||
@ -252,11 +253,13 @@ const PaintingsPage: FC = () => {
|
|||||||
<Container>
|
<Container>
|
||||||
<Navbar>
|
<Navbar>
|
||||||
<NavbarCenter style={{ borderRight: 'none' }}>{t('images.title')}</NavbarCenter>
|
<NavbarCenter style={{ borderRight: 'none' }}>{t('images.title')}</NavbarCenter>
|
||||||
<NavbarRight style={{ justifyContent: 'flex-end' }}>
|
{isMac && (
|
||||||
<Button size="small" className="nodrag" icon={<PlusOutlined />} onClick={() => setPainting(addPainting())}>
|
<NavbarRight style={{ justifyContent: 'flex-end' }}>
|
||||||
{t('images.button.new.image')}
|
<Button size="small" className="nodrag" icon={<PlusOutlined />} onClick={() => setPainting(addPainting())}>
|
||||||
</Button>
|
{t('images.button.new.image')}
|
||||||
</NavbarRight>
|
</Button>
|
||||||
|
</NavbarRight>
|
||||||
|
)}
|
||||||
</Navbar>
|
</Navbar>
|
||||||
<ContentContainer id="content-container">
|
<ContentContainer id="content-container">
|
||||||
<LeftContainer>
|
<LeftContainer>
|
||||||
@ -391,6 +394,7 @@ const PaintingsPage: FC = () => {
|
|||||||
selectedPainting={painting}
|
selectedPainting={painting}
|
||||||
onSelectPainting={onSelectPainting}
|
onSelectPainting={onSelectPainting}
|
||||||
onDeletePainting={onDeletePainting}
|
onDeletePainting={onDeletePainting}
|
||||||
|
onNewPainting={() => setPainting(addPainting())}
|
||||||
/>
|
/>
|
||||||
</ContentContainer>
|
</ContentContainer>
|
||||||
</Container>
|
</Container>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user