Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(): Replacement for getKlass utility #8500

Merged
merged 19 commits into from
Dec 28, 2022
Merged
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

## [next]

- chore(TS): replace getKlass utility with a registry that doesn't require full fabricJS to work [#8500](https://github.com/fabricjs/fabric.js/pull/8500)
- chore(): use context in static constructors [#8522](https://github.com/fabricjs/fabric.js/issues/8522)
- chore(TS): Convert Canvas class #8510
- chore(TS): Move object classes #8511
Expand Down
2 changes: 2 additions & 0 deletions src/filters/blendcolor_filter.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Color } from '../color';
import { TClassProperties } from '../typedefs';
import { AbstractBaseFilter } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* Color Blend filter class
Expand Down Expand Up @@ -254,3 +255,4 @@ export const blendColorDefaultValues: Partial<TClassProperties<BlendColor>> = {
};

Object.assign(BlendColor.prototype, blendColorDefaultValues);
classRegistry.setClass(BlendColor);
6 changes: 4 additions & 2 deletions src/filters/blendimage_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
// @ts-nocheck
import { Image } from '../shapes/image.class';
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { createCanvasElement } from '../util/misc/dom';
import { AbstractBaseFilter } from './base_filter.class';
import {
import type {
T2DPipelineState,
TWebGLPipelineState,
TWebGLUniformLocationMap,
} from './typedefs';
import { WebGLFilterBackend } from './webgl_backend.class';
import { classRegistry } from '../util/class_registry';

/**
* Image Blend filter class
Expand Down Expand Up @@ -248,3 +249,4 @@ export const blendImageDefaultValues: Partial<TClassProperties<BlendImage>> = {
};

Object.assign(BlendImage.prototype, blendImageDefaultValues);
classRegistry.setClass(BlendImage);
8 changes: 5 additions & 3 deletions src/filters/blur_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
// @ts-nocheck
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { createCanvasElement } from '../util/misc/dom';
import { BaseFilter } from './base_filter.class';
import {
import type {
TWebGLPipelineState,
T2DPipelineState,
TWebGLUniformLocationMap,
isWebGLPipelineState,
} from './typedefs';
import { isWebGLPipelineState } from './typedefs';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can do:

import {
  type TWebGLPipelineState,
  type T2DPipelineState,
  type TWebGLUniformLocationMap,
  isWebGLPipelineState,
} from './typedefs';

import { classRegistry } from '../util/class_registry';

/**
* Blur filter class
Expand Down Expand Up @@ -199,3 +200,4 @@ export const blurDefaultValues: Partial<TClassProperties<Blur>> = {
};

Object.assign(Blur.prototype, blurDefaultValues);
classRegistry.setClass(Blur);
7 changes: 4 additions & 3 deletions src/filters/brightness_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { BaseFilter } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';

import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';
/**
* Brightness filter class
* @example
Expand Down Expand Up @@ -90,3 +90,4 @@ export const brightnessDefaultValues: Partial<TClassProperties<Brightness>> = {
};

Object.assign(Brightness.prototype, brightnessDefaultValues);
classRegistry.setClass(Brightness);
7 changes: 4 additions & 3 deletions src/filters/colormatrix_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { BaseFilter } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';

import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';
/**
* Color Matrix filter class
* @see {@link http://fabricjs.com/image-filters|ImageFilters demo}
Expand Down Expand Up @@ -153,3 +153,4 @@ export const colorMatrixDefaultValues: Partial<TClassProperties<ColorMatrix>> =
};

Object.assign(ColorMatrix.prototype, colorMatrixDefaultValues);
classRegistry.setClass(ColorMatrix);
17 changes: 7 additions & 10 deletions src/filters/composed_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
// @ts-nocheck
import * as filters from '.';
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import {
AbstractBaseFilter,
BaseFilter,
BaseFilterOptions,
} from './base_filter.class';
import {
isWebGLPipelineState,
T2DPipelineState,
TWebGLPipelineState,
} from './typedefs';
import type { T2DPipelineState, TWebGLPipelineState } from './typedefs';
import { isWebGLPipelineState } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* A container class that knows how to apply a sequence of filters to an input image.
*/
Expand Down Expand Up @@ -70,9 +68,7 @@ export class Composed extends BaseFilter {
static fromObject(object, options) {
return Promise.all(
((object.subFilters || []) as AbstractBaseFilter[]).map((filter) =>
Object.values(filters)
.find((klass) => klass.prototype?.type === filter.type)!
.fromObject(filter, options)
classRegistry.getClass(filter.type).fromObject(filter, options)
)
).then((enlivedFilters) => new Composed({ subFilters: enlivedFilters }));
}
Expand All @@ -83,3 +79,4 @@ export const composedDefaultValues: Partial<TClassProperties<Composed>> = {
};

Object.assign(Composed.prototype, composedDefaultValues);
classRegistry.setClass(Composed);
6 changes: 4 additions & 2 deletions src/filters/contrast_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { BaseFilter } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* Contrast filter class
Expand Down Expand Up @@ -90,3 +91,4 @@ export const contrastDefaultValues: Partial<TClassProperties<Contrast>> = {
};

Object.assign(Contrast.prototype, contrastDefaultValues);
classRegistry.setClass(Contrast);
6 changes: 4 additions & 2 deletions src/filters/convolute_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { AbstractBaseFilter } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* Adapted from <a href="http://www.html5rocks.com/en/tutorials/canvas/imagefilters/">html5rocks article</a>
Expand Down Expand Up @@ -337,3 +338,4 @@ export const convoluteDefaultValues: Partial<TClassProperties<Convolute>> = {
};

Object.assign(Convolute.prototype, convoluteDefaultValues);
classRegistry.setClass(Convolute);
15 changes: 15 additions & 0 deletions src/filters/filter_generator.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { ColorMatrix } from './colormatrix_filter.class';
import { classRegistry } from '../util/class_registry';

export function createColorMatrixFilter(key: string, matrix: number[]) {
return class GeneratedColorMatrix extends ColorMatrix {
Expand Down Expand Up @@ -42,6 +43,8 @@ export const Brownie = createColorMatrixFilter(
]
);

classRegistry.setClass(Brownie);

export const Vintage = createColorMatrixFilter(
'Vintage',
[
Expand All @@ -50,6 +53,8 @@ export const Vintage = createColorMatrixFilter(
]
);

classRegistry.setClass(Vintage);

export const Kodachrome = createColorMatrixFilter(
'Kodachrome',
[
Expand All @@ -58,6 +63,8 @@ export const Kodachrome = createColorMatrixFilter(
]
);

classRegistry.setClass(Kodachrome);

export const Technicolor = createColorMatrixFilter(
'Technicolor',
[
Expand All @@ -66,6 +73,8 @@ export const Technicolor = createColorMatrixFilter(
]
);

classRegistry.setClass(Technicolor);

export const Polaroid = createColorMatrixFilter(
'Polaroid',
[
Expand All @@ -74,6 +83,8 @@ export const Polaroid = createColorMatrixFilter(
]
);

classRegistry.setClass(Polaroid);

export const Sepia = createColorMatrixFilter(
'Sepia',
[
Expand All @@ -82,10 +93,14 @@ export const Sepia = createColorMatrixFilter(
]
);

classRegistry.setClass(Sepia);

export const BlackWhite = createColorMatrixFilter(
'BlackWhite',
[
1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 0, 0, 0,
1, 0,
]
);

classRegistry.setClass(BlackWhite);
6 changes: 4 additions & 2 deletions src/filters/gamma_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { BaseFilter, BaseFilterOptions } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';

export type GammaInput = [number, number, number];

Expand Down Expand Up @@ -123,3 +124,4 @@ export const gammaDefaultValues: Partial<TClassProperties<Gamma>> = {
};

Object.assign(Gamma.prototype, gammaDefaultValues);
classRegistry.setClass(Gamma);
6 changes: 4 additions & 2 deletions src/filters/grayscale_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { AbstractBaseFilter } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* Grayscale image filter class
Expand Down Expand Up @@ -133,3 +134,4 @@ export const grayscaleDefaultValues: Partial<TClassProperties<Grayscale>> = {
};

Object.assign(Grayscale.prototype, grayscaleDefaultValues);
classRegistry.setClass(Grayscale);
6 changes: 4 additions & 2 deletions src/filters/hue_rotation.class.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { cos } from '../util/misc/cos';
import { sin } from '../util/misc/sin';
import { ColorMatrix } from './colormatrix_filter.class';
import { TWebGLPipelineState, T2DPipelineState } from './typedefs';
import type { TWebGLPipelineState, T2DPipelineState } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* HueRotation filter class
Expand Down Expand Up @@ -62,3 +63,4 @@ export const hueRotationDefaultValues: Partial<TClassProperties<HueRotation>> =
};

Object.assign(HueRotation.prototype, hueRotationDefaultValues);
classRegistry.setClass(HueRotation);
6 changes: 4 additions & 2 deletions src/filters/invert_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { BaseFilter } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* @example
Expand Down Expand Up @@ -113,3 +114,4 @@ export const invertDefaultValues: Partial<TClassProperties<Invert>> = {
};

Object.assign(Invert.prototype, invertDefaultValues);
classRegistry.setClass(Invert);
6 changes: 4 additions & 2 deletions src/filters/noise_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { BaseFilter } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* Noise filter class
Expand Down Expand Up @@ -105,3 +106,4 @@ export const noiseDefaultValues: Partial<TClassProperties<Noise>> = {
};

Object.assign(Noise.prototype, noiseDefaultValues);
classRegistry.setClass(Noise);
6 changes: 4 additions & 2 deletions src/filters/pixelate_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { BaseFilter } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* Pixelate filter class
Expand Down Expand Up @@ -110,3 +111,4 @@ export const pixelateDefaultValues: Partial<TClassProperties<Pixelate>> = {
};

Object.assign(Pixelate.prototype, pixelateDefaultValues);
classRegistry.setClass(Pixelate);
6 changes: 4 additions & 2 deletions src/filters/removecolor_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { Color } from '../color';
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { BaseFilter } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* Remove white filter class
Expand Down Expand Up @@ -144,3 +145,4 @@ export const removeColorDefaultValues: Partial<TClassProperties<RemoveColor>> =
};

Object.assign(RemoveColor.prototype, removeColorDefaultValues);
classRegistry.setClass(RemoveColor);
11 changes: 5 additions & 6 deletions src/filters/resize_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
// @ts-nocheck
import { fabric } from '../../HEADER';
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { BaseFilter } from './base_filter.class';
import {
isWebGLPipelineState,
T2DPipelineState,
TWebGLPipelineState,
} from './typedefs';
import type { T2DPipelineState, TWebGLPipelineState } from './typedefs';
import { isWebGLPipelineState } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* Resize image filter class
Expand Down Expand Up @@ -539,3 +537,4 @@ export const resizeDefaultValues: Partial<TClassProperties<Resize>> = {
};

Object.assign(Resize.prototype, resizeDefaultValues);
classRegistry.setClass(Resize);
6 changes: 4 additions & 2 deletions src/filters/saturate_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { BaseFilter } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* Saturate filter class
Expand Down Expand Up @@ -96,3 +97,4 @@ export const saturationDefaultValues: Partial<TClassProperties<Saturation>> = {
};

Object.assign(Saturation.prototype, saturationDefaultValues);
classRegistry.setClass(Saturation);
6 changes: 4 additions & 2 deletions src/filters/vibrance_filter.class.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { TClassProperties } from '../typedefs';
import type { TClassProperties } from '../typedefs';
import { BaseFilter } from './base_filter.class';
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
import { classRegistry } from '../util/class_registry';

/**
* Vibrance filter class
Expand Down Expand Up @@ -99,3 +100,4 @@ export const vibranceDefaultValues: Partial<TClassProperties<Vibrance>> = {
};

Object.assign(Vibrance.prototype, vibranceDefaultValues);
classRegistry.setClass(Vibrance);
Loading