improve: font size setting api
This commit is contained in:
@@ -22,7 +22,7 @@ export class Command {
|
||||
private static applyPainterStyle: CommandAdapt['applyPainterStyle']
|
||||
private static format: CommandAdapt['format']
|
||||
private static font: CommandAdapt['font']
|
||||
private static sizeSet: CommandAdapt['sizeSet']
|
||||
private static size: CommandAdapt['size']
|
||||
private static sizeAdd: CommandAdapt['sizeAdd']
|
||||
private static sizeMinus: CommandAdapt['sizeMinus']
|
||||
private static bold: CommandAdapt['bold']
|
||||
@@ -96,7 +96,7 @@ export class Command {
|
||||
Command.applyPainterStyle = adapt.applyPainterStyle.bind(adapt)
|
||||
Command.format = adapt.format.bind(adapt)
|
||||
Command.font = adapt.font.bind(adapt)
|
||||
Command.sizeSet = adapt.sizeSet.bind(adapt)
|
||||
Command.size = adapt.size.bind(adapt)
|
||||
Command.sizeAdd = adapt.sizeAdd.bind(adapt)
|
||||
Command.sizeMinus = adapt.sizeMinus.bind(adapt)
|
||||
Command.bold = adapt.bold.bind(adapt)
|
||||
@@ -212,8 +212,8 @@ export class Command {
|
||||
return Command.font(payload)
|
||||
}
|
||||
|
||||
public executeSize(size: number) {
|
||||
return Command.sizeSet(size)
|
||||
public executeSize(payload: number) {
|
||||
return Command.size(payload)
|
||||
}
|
||||
|
||||
public executeSizeAdd() {
|
||||
|
||||
@@ -185,54 +185,70 @@ export class CommandAdapt {
|
||||
this.draw.render({ isSetCursor: false })
|
||||
}
|
||||
|
||||
public sizeSet(size: number) {
|
||||
public size(payload: number) {
|
||||
const { minSize, maxSize, defaultSize } = this.options
|
||||
if (payload < minSize || payload > maxSize) return
|
||||
const isReadonly = this.draw.isReadonly()
|
||||
if (isReadonly) return
|
||||
const selection = this.range.getSelection()
|
||||
if (!selection) return
|
||||
const lessThanMaxSizeIndex = selection.findIndex(s => !s.size || s.size + 2 <= 72)
|
||||
if (!~lessThanMaxSizeIndex) return
|
||||
const selection = this.range.getTextLikeSelection()
|
||||
if (!selection || !selection.length) return
|
||||
let isExistUpdate = false
|
||||
selection.forEach(el => {
|
||||
if (size > 72) return
|
||||
el.size = size
|
||||
if ((!el.size && payload === defaultSize) || (el.size && el.size === payload)) return
|
||||
el.size = payload
|
||||
isExistUpdate = true
|
||||
})
|
||||
this.draw.render({ isSetCursor: false })
|
||||
if (isExistUpdate) {
|
||||
this.draw.render({ isSetCursor: false })
|
||||
}
|
||||
}
|
||||
|
||||
public sizeAdd() {
|
||||
const isReadonly = this.draw.isReadonly()
|
||||
if (isReadonly) return
|
||||
const selection = this.range.getSelection()
|
||||
if (!selection) return
|
||||
const lessThanMaxSizeIndex = selection.findIndex(s => !s.size || s.size + 2 <= 72)
|
||||
const { defaultSize } = this.options
|
||||
if (!~lessThanMaxSizeIndex) return
|
||||
const selection = this.range.getTextLikeSelection()
|
||||
if (!selection || !selection.length) return
|
||||
const { defaultSize, maxSize } = this.options
|
||||
let isExistUpdate = false
|
||||
selection.forEach(el => {
|
||||
if (!el.size) {
|
||||
el.size = defaultSize
|
||||
}
|
||||
if (el.size + 2 > 72) return
|
||||
el.size += 2
|
||||
if (el.size >= maxSize) return
|
||||
if (el.size + 2 > maxSize) {
|
||||
el.size = maxSize
|
||||
} else {
|
||||
el.size += 2
|
||||
}
|
||||
isExistUpdate = true
|
||||
})
|
||||
this.draw.render({ isSetCursor: false })
|
||||
if (isExistUpdate) {
|
||||
this.draw.render({ isSetCursor: false })
|
||||
}
|
||||
}
|
||||
|
||||
public sizeMinus() {
|
||||
const isReadonly = this.draw.isReadonly()
|
||||
if (isReadonly) return
|
||||
const selection = this.range.getSelection()
|
||||
if (!selection) return
|
||||
const greaterThanMaxSizeIndex = selection.findIndex(s => !s.size || s.size - 2 >= 8)
|
||||
if (!~greaterThanMaxSizeIndex) return
|
||||
const { defaultSize } = this.options
|
||||
const selection = this.range.getTextLikeSelection()
|
||||
if (!selection || !selection.length) return
|
||||
const { defaultSize, minSize } = this.options
|
||||
let isExistUpdate = false
|
||||
selection.forEach(el => {
|
||||
if (!el.size) {
|
||||
el.size = defaultSize
|
||||
}
|
||||
if (el.size - 2 < 8) return
|
||||
el.size -= 2
|
||||
if (el.size <= minSize) return
|
||||
if (el.size - 2 < minSize) {
|
||||
el.size = minSize
|
||||
} else {
|
||||
el.size -= 2
|
||||
}
|
||||
isExistUpdate = true
|
||||
})
|
||||
this.draw.render({ isSetCursor: false })
|
||||
if (isExistUpdate) {
|
||||
this.draw.render({ isSetCursor: false })
|
||||
}
|
||||
}
|
||||
|
||||
public bold() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { ElementType } from '../..'
|
||||
import { ZERO } from '../../dataset/constant/Common'
|
||||
import { TEXTLIKE_ELEMENT_TYPE } from '../../dataset/constant/Element'
|
||||
import { ControlComponent } from '../../dataset/enum/Control'
|
||||
import { IEditorOption } from '../../interface/Editor'
|
||||
import { IElement } from '../../interface/Element'
|
||||
@@ -45,6 +46,12 @@ export class RangeManager {
|
||||
return elementList.slice(startIndex + 1, endIndex + 1)
|
||||
}
|
||||
|
||||
public getTextLikeSelection(): IElement[] | null {
|
||||
const selection = this.getSelection()
|
||||
if (!selection) return null
|
||||
return selection.filter(s => !s.type || TEXTLIKE_ELEMENT_TYPE.includes(s.type))
|
||||
}
|
||||
|
||||
// 获取光标所选位置行信息
|
||||
public getRangeRow(): RangeRowMap | null {
|
||||
const { startIndex, endIndex } = this.range
|
||||
|
||||
@@ -66,6 +66,8 @@ export default class Editor {
|
||||
defaultType: 'TEXT',
|
||||
defaultFont: 'Yahei',
|
||||
defaultSize: 16,
|
||||
minSize: 5,
|
||||
maxSize: 72,
|
||||
defaultRowMargin: 1,
|
||||
defaultBasicRowMarginHeight: 8,
|
||||
defaultTabWidth: 32,
|
||||
|
||||
@@ -18,6 +18,8 @@ export interface IEditorOption {
|
||||
defaultType?: string;
|
||||
defaultFont?: string;
|
||||
defaultSize?: number;
|
||||
minSize?: number;
|
||||
maxSize?: number;
|
||||
defaultBasicRowMarginHeight?: number;
|
||||
defaultRowMargin?: number;
|
||||
defaultTabWidth?: number;
|
||||
|
||||
Reference in New Issue
Block a user