devexpress-richedit
Version:
DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.
57 lines (56 loc) • 2.48 kB
JavaScript
import { MathUtils } from '@devexpress/utils/lib/utils/math';
import { ColorModelInfo } from '../color/color-model-info';
import { JSONShadingInfoConverter } from '../json/importers/json-shading-info-converter';
import { ShadingPattern } from './shading-pattern';
import { ShadingHelper } from './shading-pattern-helper';
export class ShadingInfo {
static get noColor() { return ShadingInfo.createByColor(ColorModelInfo.noColor); }
static get auto() { return ShadingInfo.createByColor(ColorModelInfo.auto); }
static get nullColor() { return ShadingInfo.createByColor(ColorModelInfo.makeByColor(0)); }
shadingPattern;
backColor;
foreColor;
hash;
constructor(shadingPattern, backColor, foreColor) {
this.shadingPattern = shadingPattern;
this.backColor = backColor;
this.foreColor = foreColor;
}
static createByColor(backColor) {
return new ShadingInfo(ShadingPattern.Clear, backColor, ColorModelInfo.nullColor);
}
static createByFullData(cache, pattern, fill, patternColor) {
return new ShadingInfo(pattern, cache.getItem(ColorModelInfo.makeByColor(fill)), cache.getItem(ColorModelInfo.makeByColor(patternColor)));
}
getActualColor(colorProvider) {
const fill = this.backColor.toRgb(colorProvider);
const patternColor = this.foreColor.toRgb(colorProvider);
return ShadingHelper.getActualBackColor(fill, patternColor, this.shadingPattern);
}
equals(obj) {
return obj &&
this.shadingPattern == obj.shadingPattern &&
this.backColor.equals(obj.backColor) &&
this.foreColor.equals(obj.foreColor);
}
static equalsBinary(a, b) {
return a && b && (a === b ||
a.shadingPattern == b.shadingPattern &&
a.backColor.equals(b.backColor) &&
a.foreColor.equals(b.foreColor));
}
clone() {
return new ShadingInfo(this.shadingPattern, this.backColor, this.foreColor);
}
calculateHash() {
return MathUtils.somePrimes[0] * this.shadingPattern ^
MathUtils.somePrimes[1] * this.backColor.getHashCode() ^
MathUtils.somePrimes[2] * this.foreColor.getHashCode();
}
getHashCode() {
return this.hash === undefined ? this.hash = this.calculateHash() : this.hash;
}
toJSON() {
return JSONShadingInfoConverter.convertToJSON(this);
}
}