refactor: font size and split fields
This commit is contained in:
@@ -8,18 +8,24 @@ import type { CardData, LayerConfig, Dimensions } from '../types';
|
||||
* 默认配置常量
|
||||
*/
|
||||
export const DECK_DEFAULTS = {
|
||||
SIZE: '54x86',
|
||||
GRID: '5x8',
|
||||
SIZE_W: 54,
|
||||
SIZE_H: 86,
|
||||
GRID_W: 5,
|
||||
GRID_H: 8,
|
||||
BLEED: '1',
|
||||
PADDING: '2'
|
||||
PADDING: '2',
|
||||
FONT_SIZE: 3
|
||||
} as const;
|
||||
|
||||
export interface DeckState {
|
||||
// 基本属性
|
||||
size: string;
|
||||
grid: string;
|
||||
sizeW: number;
|
||||
sizeH: number;
|
||||
gridW: number;
|
||||
gridH: number;
|
||||
bleed: string;
|
||||
padding: string;
|
||||
fontSize: number;
|
||||
fixed: boolean;
|
||||
src: string;
|
||||
|
||||
@@ -51,10 +57,13 @@ export interface DeckState {
|
||||
|
||||
export interface DeckActions {
|
||||
// 基本属性设置
|
||||
setSize: (size: string) => void;
|
||||
setGrid: (grid: string) => void;
|
||||
setSizeW: (size: number) => void;
|
||||
setSizeH: (size: number) => void;
|
||||
setGridW: (grid: number) => void;
|
||||
setGridH: (grid: number) => void;
|
||||
setBleed: (bleed: string) => void;
|
||||
setPadding: (padding: string) => void;
|
||||
setFontSize: (size: number) => void;
|
||||
|
||||
// 数据设置
|
||||
setCards: (cards: CardData[]) => void;
|
||||
@@ -100,10 +109,13 @@ export function createDeckStore(
|
||||
initialLayers: string = ''
|
||||
): DeckStore {
|
||||
const [state, setState] = createStore<DeckState>({
|
||||
size: DECK_DEFAULTS.SIZE,
|
||||
grid: DECK_DEFAULTS.GRID,
|
||||
sizeW: DECK_DEFAULTS.SIZE_W,
|
||||
sizeH: DECK_DEFAULTS.SIZE_H,
|
||||
gridW: DECK_DEFAULTS.GRID_W,
|
||||
gridH: DECK_DEFAULTS.GRID_H,
|
||||
bleed: DECK_DEFAULTS.BLEED,
|
||||
padding: DECK_DEFAULTS.PADDING,
|
||||
fontSize: DECK_DEFAULTS.FONT_SIZE,
|
||||
fixed: false,
|
||||
src: initialSrc,
|
||||
dimensions: null,
|
||||
@@ -122,20 +134,31 @@ export function createDeckStore(
|
||||
// 更新尺寸并重新计算 dimensions
|
||||
const updateDimensions = () => {
|
||||
const dims = calculateDimensions({
|
||||
size: state.size,
|
||||
grid: state.grid,
|
||||
sizeW: state.sizeW,
|
||||
sizeH: state.sizeH,
|
||||
gridW: state.gridW,
|
||||
gridH: state.gridH,
|
||||
bleed: state.bleed,
|
||||
padding: state.padding
|
||||
padding: state.padding,
|
||||
fontSize: state.fontSize
|
||||
});
|
||||
setState({ dimensions: dims });
|
||||
};
|
||||
|
||||
const setSize = (size: string) => {
|
||||
setState({ size });
|
||||
const setSizeW = (size: number) => {
|
||||
setState({ sizeW: size });
|
||||
updateDimensions();
|
||||
};
|
||||
const setGrid = (grid: string) => {
|
||||
setState({ grid });
|
||||
const setSizeH = (size: number) => {
|
||||
setState({ sizeH: size });
|
||||
updateDimensions();
|
||||
};
|
||||
const setGridW = (grid: number) => {
|
||||
setState({ gridW: grid });
|
||||
updateDimensions();
|
||||
};
|
||||
const setGridH = (grid: number) => {
|
||||
setState({ gridH: grid });
|
||||
updateDimensions();
|
||||
};
|
||||
const setBleed = (bleed: string) => {
|
||||
@@ -146,6 +169,10 @@ export function createDeckStore(
|
||||
setState({ padding });
|
||||
updateDimensions();
|
||||
};
|
||||
const setFontSize = (size: number) => {
|
||||
setState({ fontSize: size });
|
||||
updateDimensions();
|
||||
};
|
||||
|
||||
const setCards = (cards: CardData[]) => setState({ cards, activeTab: 0 });
|
||||
const setActiveTab = (index: number) => setState({ activeTab: index });
|
||||
@@ -224,7 +251,7 @@ export function createDeckStore(
|
||||
.filter(l => l.visible)
|
||||
.map(l => `${l.prop}:${l.x1},${l.y1}-${l.x2},${l.y2}`)
|
||||
.join(' ');
|
||||
return `:md-deck[${state.src}]{size="${state.size}" grid="${state.grid}" bleed="${state.bleed}" padding="${state.padding}" layers="${layersStr}"}`;
|
||||
return `:md-deck[${state.src}]{size="${state.sizeW}x${state.sizeH}" grid="${state.gridW}x${state.gridH}" bleed="${state.bleed}" padding="${state.padding}" fontSize="${state.fontSize}" layers="${layersStr}"}`;
|
||||
};
|
||||
|
||||
const copyCode = async () => {
|
||||
@@ -239,10 +266,13 @@ export function createDeckStore(
|
||||
};
|
||||
|
||||
const actions: DeckActions = {
|
||||
setSize,
|
||||
setGrid,
|
||||
setSizeW,
|
||||
setSizeH,
|
||||
setGridW,
|
||||
setGridH,
|
||||
setBleed,
|
||||
setPadding,
|
||||
setFontSize,
|
||||
setCards,
|
||||
setActiveTab,
|
||||
updateCardData,
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
import type { Dimensions } from '../types';
|
||||
|
||||
export interface DimensionOptions {
|
||||
size: string;
|
||||
sizeW: number;
|
||||
sizeH: number;
|
||||
bleed: string;
|
||||
padding: string;
|
||||
grid: string;
|
||||
gridW: number;
|
||||
gridH: number;
|
||||
fontSize?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析卡牌尺寸和网格配置
|
||||
*/
|
||||
export function calculateDimensions(options: DimensionOptions): Dimensions {
|
||||
const [width, height] = options.size.split('x').map(Number);
|
||||
const [bleedW, bleedH] = options.bleed.includes('x')
|
||||
? options.bleed.split('x').map(Number)
|
||||
: [Number(options.bleed), Number(options.bleed)];
|
||||
@@ -20,19 +22,16 @@ export function calculateDimensions(options: DimensionOptions): Dimensions {
|
||||
: [Number(options.padding), Number(options.padding)];
|
||||
|
||||
// 实际卡牌尺寸(含出血)
|
||||
const cardWidth = width + bleedW * 2;
|
||||
const cardHeight = height + bleedH * 2;
|
||||
const cardWidth = options.sizeW + bleedW * 2;
|
||||
const cardHeight = options.sizeH + bleedH * 2;
|
||||
|
||||
// 网格区域尺寸(减去 padding)
|
||||
const gridAreaWidth = width - padW * 2;
|
||||
const gridAreaHeight = height - padH * 2;
|
||||
|
||||
// 解析网格
|
||||
const [gridW, gridH] = options.grid.split('x').map(Number);
|
||||
const gridAreaWidth = options.sizeW - padW * 2;
|
||||
const gridAreaHeight = options.sizeH - padH * 2;
|
||||
|
||||
// 每个网格单元的尺寸(mm)
|
||||
const cellWidth = gridAreaWidth / gridW;
|
||||
const cellHeight = gridAreaHeight / gridH;
|
||||
const cellWidth = gridAreaWidth / options.gridW;
|
||||
const cellHeight = gridAreaHeight / options.gridH;
|
||||
|
||||
// 网格区域起点(相对于卡牌左上角,含 bleed 和 padding)
|
||||
const gridOriginX = bleedW + padW;
|
||||
@@ -45,10 +44,11 @@ export function calculateDimensions(options: DimensionOptions): Dimensions {
|
||||
gridAreaHeight,
|
||||
cellWidth,
|
||||
cellHeight,
|
||||
gridW,
|
||||
gridH,
|
||||
gridW: options.gridW,
|
||||
gridH: options.gridH,
|
||||
gridOriginX,
|
||||
gridOriginY
|
||||
gridOriginY,
|
||||
fontSize: options.fontSize ?? 3
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user