Skip to content

Commit 2b58e7c

Browse files
author
Hardy--Lee
committed
feat: Support adjustment filter
1 parent d27f740 commit 2b58e7c

4 files changed

Lines changed: 88 additions & 1 deletion

File tree

packages/webgal/src/Core/controller/stage/pixi/PixiController.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,13 @@ export default class PixiStage {
271271
rotation: target.pixiContainer.rotation,
272272
// @ts-ignore
273273
blur: target.pixiContainer.blur,
274+
brightness: target.pixiContainer.brightness,
275+
contrast: target.pixiContainer.contrast,
276+
saturation: target.pixiContainer.saturation,
277+
gamma: target.pixiContainer.gamma,
278+
colorRed: target.pixiContainer.colorRed,
279+
colorGreen: target.pixiContainer.colorGreen,
280+
colorBlue: target.pixiContainer.colorBlue,
274281
...webgalFilters,
275282
};
276283
let effect: IEffect = {

packages/webgal/src/Core/controller/stage/pixi/WebGALPixiContainer.ts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
getRadiusAlphaFilter,
1616
setRadiusAlphaFilter,
1717
} from '@/Core/controller/stage/pixi/shaders/RadiusAlphaFilter';
18+
import { AdjustmentFilter } from 'pixi-filters';
1819

1920
export class WebGALPixiContainer extends PIXI.Container {
2021
public containerFilters = new Map<string, PIXI.Filter>();
@@ -115,6 +116,71 @@ export class WebGALPixiContainer extends PIXI.Container {
115116
}
116117
}
117118

119+
/**
120+
* adjustment filter
121+
* @public
122+
*/
123+
public getOrCreateAdjustmentFilter(): AdjustmentFilter {
124+
const filterFromMap = this.containerFilters.get("adjustment");
125+
if (filterFromMap) {
126+
return filterFromMap as AdjustmentFilter;
127+
} else {
128+
const adjustment = new AdjustmentFilter();
129+
this.addFilter(adjustment);
130+
this.containerFilters.set('adjustment', adjustment);
131+
return adjustment;
132+
}
133+
}
134+
135+
public get brightness(): number {
136+
return this.getOrCreateAdjustmentFilter().brightness;
137+
}
138+
public set brightness(value: number) {
139+
this.getOrCreateAdjustmentFilter().brightness = value;
140+
}
141+
142+
public get contrast(): number {
143+
return this.getOrCreateAdjustmentFilter().contrast;
144+
}
145+
public set contrast(value: number) {
146+
this.getOrCreateAdjustmentFilter().contrast = value;
147+
}
148+
149+
public get saturation(): number {
150+
return this.getOrCreateAdjustmentFilter().saturation;
151+
}
152+
public set saturation(value: number) {
153+
this.getOrCreateAdjustmentFilter().saturation = value;
154+
}
155+
156+
public get gamma(): number {
157+
return this.getOrCreateAdjustmentFilter().gamma;
158+
}
159+
public set gamma(value: number) {
160+
this.getOrCreateAdjustmentFilter().gamma = value;
161+
}
162+
163+
public get colorRed(): number {
164+
return this.getOrCreateAdjustmentFilter().red * 255.0;
165+
}
166+
public set colorRed(value: number) {
167+
this.getOrCreateAdjustmentFilter().red = value / 255.0;
168+
}
169+
170+
public get colorGreen(): number {
171+
return this.getOrCreateAdjustmentFilter().green * 255.0;
172+
}
173+
public set colorGreen(value: number) {
174+
this.getOrCreateAdjustmentFilter().green = value / 255.0;
175+
}
176+
177+
public get colorBlue(): number {
178+
return this.getOrCreateAdjustmentFilter().blue * 255.0;
179+
}
180+
public set colorBlue(value: number) {
181+
this.getOrCreateAdjustmentFilter().blue = value / 255.0;
182+
}
183+
118184
/**
119185
* old film filter
120186
* @public

packages/webgal/src/Core/controller/stage/pixi/animations/timeline.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ export function generateTimelineObj(
123123

124124
function getEndFilterEffect() {
125125
const endSegment = timeline[timeline.length - 1];
126-
const { alpha, rotation, blur, duration, scale, position, ...rest } = endSegment;
126+
const { alpha, rotation, blur, brightness, contrast, saturation, gamma, colorRed, colorGreen, colorBlue, duration, scale, position, ...rest } = endSegment;
127127
return rest;
128128
}
129129

packages/webgal/src/store/stageInterface.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ export interface ITransform {
3939
};
4040
rotation: number;
4141
blur: number;
42+
brightness: number;
43+
contrast: number;
44+
saturation: number;
45+
gamma: number;
46+
colorRed: number;
47+
colorGreen: number;
48+
colorBlue: number;
4249
}
4350

4451
/**
@@ -69,6 +76,13 @@ export const baseTransform: ITransform = {
6976
},
7077
rotation: 0,
7178
blur: 0,
79+
brightness: 1,
80+
contrast: 1,
81+
saturation: 1,
82+
gamma: 1,
83+
colorRed: 255,
84+
colorGreen: 255,
85+
colorBlue: 255,
7286
};
7387

7488
export interface IFreeFigure {

0 commit comments

Comments
 (0)