Skip to content

Commit 8334367

Browse files
committed
add flag to enable and disable anti aliasing manually
1 parent 0fa197c commit 8334367

File tree

3 files changed

+112
-6
lines changed

3 files changed

+112
-6
lines changed

addons/gst-web-core/selkies-core.js

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ let currentEncoderMode = 'x264enc-stiped';
5959
let useCssScaling = false;
6060
let trackpadMode = false;
6161
let scalingDPI = 96;
62+
let antiAliasingEnabled = true;
6263
function setRealViewportHeight() {
6364
const vh = window.innerHeight * 0.01;
6465
document.documentElement.style.setProperty('--vh', `${vh}px`);
@@ -270,6 +271,8 @@ trackpadMode = getBoolParam('trackpadMode', false);
270271
setBoolParam('trackpadMode', trackpadMode);
271272
scalingDPI = getIntParam('SCALING_DPI', 96);
272273
setIntParam('SCALING_DPI', scalingDPI);
274+
antiAliasingEnabled = getBoolParam('antiAliasingEnabled', true);
275+
setBoolParam('antiAliasingEnabled', antiAliasingEnabled);
273276

274277
if (isSharedMode) {
275278
manualWidth = 1280;
@@ -325,19 +328,28 @@ const roundDownToEven = (num) => {
325328

326329
const updateCanvasImageRendering = () => {
327330
if (!canvas) return;
328-
const dpr = window.devicePixelRatio || 1;
329-
const isOneToOne = !useCssScaling || (useCssScaling && dpr <= 1);
330-
if (isOneToOne) {
331+
if (!antiAliasingEnabled) {
331332
if (canvas.style.imageRendering !== 'pixelated') {
332-
console.log("Setting canvas rendering to 'pixelated' for 1:1 display.");
333+
console.log("Anti-aliasing disabled by setting. Forcing 'pixelated' rendering.");
333334
canvas.style.imageRendering = 'pixelated';
334335
canvas.style.setProperty('image-rendering', 'crisp-edges', '');
335336
}
336-
} else {
337+
return;
338+
}
339+
const rect = canvas.getBoundingClientRect();
340+
const dpr = window.devicePixelRatio || 1;
341+
const isStretched = Math.round(rect.width * dpr) !== canvas.width || Math.round(rect.height * dpr) !== canvas.height;
342+
if (isStretched) {
337343
if (canvas.style.imageRendering !== 'auto') {
338-
console.log("Setting canvas rendering to 'auto' for smooth upscaling.");
344+
console.log(`Canvas is scaled (${canvas.width}x${canvas.height} buffer -> ${rect.width.toFixed(0)}x${rect.height.toFixed(0)} display). Setting rendering to 'auto'.`);
339345
canvas.style.imageRendering = 'auto';
340346
}
347+
} else {
348+
if (canvas.style.imageRendering !== 'pixelated') {
349+
console.log("Canvas is 1:1. Setting rendering to 'pixelated'.");
350+
canvas.style.imageRendering = 'pixelated';
351+
canvas.style.setProperty('image-rendering', 'crisp-edges', '');
352+
}
341353
}
342354
};
343355

@@ -1323,6 +1335,19 @@ function receiveMessage(event) {
13231335
console.warn("Invalid value received for setUseCssScaling:", message.value);
13241336
}
13251337
break;
1338+
case 'setAntiAliasing':
1339+
if (typeof message.value === 'boolean') {
1340+
const changed = antiAliasingEnabled !== message.value;
1341+
antiAliasingEnabled = message.value;
1342+
setBoolParam('antiAliasingEnabled', antiAliasingEnabled);
1343+
console.log(`Set antiAliasingEnabled to ${antiAliasingEnabled} and persisted.`);
1344+
if (changed) {
1345+
updateCanvasImageRendering();
1346+
}
1347+
} else {
1348+
console.warn("Invalid value received for setAntiAliasing:", message.value);
1349+
}
1350+
break;
13261351
case 'setManualResolution':
13271352
if (isSharedMode) {
13281353
console.log("Shared mode: setManualResolution message ignored.");

addons/selkies-dashboard/src/components/Sidebar.jsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -721,6 +721,10 @@ function Sidebar({ isOpen }) {
721721
const saved = localStorage.getItem(getPrefixedKey("useCssScaling"));
722722
return saved !== "true";
723723
});
724+
const [antiAliasing, setAntiAliasing] = useState(() => {
725+
const saved = localStorage.getItem(getPrefixedKey("antiAliasingEnabled"));
726+
return saved !== null ? saved === "true" : true;
727+
});
724728
const [presetValue, setPresetValue] = useState("");
725729
const [clientFps, setClientFps] = useState(0);
726730
const [audioBuffer, setAudioBuffer] = useState(0);
@@ -1302,6 +1306,14 @@ function Sidebar({ isOpen }) {
13021306
window.location.origin
13031307
);
13041308
};
1309+
const handleAntiAliasingToggle = () => {
1310+
const newState = !antiAliasing;
1311+
setAntiAliasing(newState);
1312+
window.postMessage(
1313+
{ type: "setAntiAliasing", value: newState },
1314+
window.location.origin
1315+
);
1316+
};
13051317
const handleSetManualResolution = () => {
13061318
const width = parseInt(manualWidth.trim(), 10),
13071319
height = parseInt(manualHeight.trim(), 10);
@@ -2344,6 +2356,21 @@ function Sidebar({ isOpen }) {
23442356
<span className="toggle-button-sidebar-knob"></span>
23452357
</button>
23462358
</div>
2359+
<div className="dev-setting-item toggle-item">
2360+
<label htmlFor="antiAliasingToggle">
2361+
{t("sections.screen.antiAliasingLabel", "Anti-aliasing")}
2362+
</label>
2363+
<button
2364+
id="antiAliasingToggle"
2365+
className={`toggle-button-sidebar ${antiAliasing ? "active" : ""}`}
2366+
onClick={handleAntiAliasingToggle}
2367+
aria-pressed={antiAliasing}
2368+
title={t(antiAliasing ? "sections.screen.antiAliasingDisableTitle" : "sections.screen.antiAliasingEnableTitle",
2369+
antiAliasing ? "Disable anti-aliasing (force pixelated)" : "Enable anti-aliasing (smooth on scaling)")}
2370+
>
2371+
<span className="toggle-button-sidebar-knob"></span>
2372+
</button>
2373+
</div>
23472374
<div className="dev-setting-item">
23482375
<label htmlFor="uiScalingSelect">
23492376
{t("sections.screen.uiScalingLabel", "UI Scaling")}

addons/selkies-dashboard/src/translations.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ const en = {
8585
hidpiLabel: "HiDPI (Pixel Perfect)",
8686
hidpiEnableTitle: "Enable HiDPI (Pixel Perfect)",
8787
hidpiDisableTitle: "Disable HiDPI (Use CSS Scaling)",
88+
antiAliasingLabel: "Anti-aliasing",
89+
antiAliasingEnableTitle: "Enable anti-aliasing (smooth on scaling)",
90+
antiAliasingDisableTitle: "Disable anti-aliasing (force pixelated)",
8891
},
8992
stats: {
9093
title: "Stats",
@@ -264,6 +267,9 @@ const es = {
264267
hidpiLabel: "HiDPI (Píxel Perfecto)",
265268
hidpiEnableTitle: "Activar HiDPI (Píxel Perfecto)",
266269
hidpiDisableTitle: "Desactivar HiDPI (Usar escalado CSS)",
270+
antiAliasingLabel: "Anti-aliasing",
271+
antiAliasingEnableTitle: "Activar anti-aliasing (suavizar al escalar)",
272+
antiAliasingDisableTitle: "Desactivar anti-aliasing (forzar pixelado)",
267273
},
268274
stats: {
269275
title: "Estadísticas",
@@ -443,6 +449,9 @@ const zh = {
443449
hidpiLabel: "HiDPI (像素完美)",
444450
hidpiEnableTitle: "启用 HiDPI (像素完美)",
445451
hidpiDisableTitle: "禁用 HiDPI (使用 CSS 缩放)",
452+
antiAliasingLabel: "抗锯齿",
453+
antiAliasingEnableTitle: "启用抗锯齿 (缩放时平滑)",
454+
antiAliasingDisableTitle: "禁用抗锯齿 (强制像素化)",
446455
},
447456
stats: {
448457
title: "统计信息",
@@ -622,6 +631,9 @@ const hi = {
622631
hidpiLabel: "HiDPI (पिक्सेल परफेक्ट)",
623632
hidpiEnableTitle: "HiDPI सक्षम करें (पिक्सेल परफेक्ट)",
624633
hidpiDisableTitle: "HiDPI अक्षम करें (CSS स्केलिंग का उपयोग करें)",
634+
antiAliasingLabel: "एंटी-अलियासिंग",
635+
antiAliasingEnableTitle: "एंटी-अलियासिंग सक्षम करें (स्केलिंग पर स्मूथ)",
636+
antiAliasingDisableTitle: "एंटी-अलियासिंग अक्षम करें (पिक्सेलयुक्त करने के लिए बाध्य करें)",
625637
},
626638
stats: {
627639
title: "आँकड़े",
@@ -801,6 +813,9 @@ const pt = {
801813
hidpiLabel: "HiDPI (Pixel Perfeito)",
802814
hidpiEnableTitle: "Ativar HiDPI (Pixel Perfeito)",
803815
hidpiDisableTitle: "Desativar HiDPI (Usar dimensionamento CSS)",
816+
antiAliasingLabel: "Anti-aliasing",
817+
antiAliasingEnableTitle: "Ativar anti-aliasing (suavizar ao escalar)",
818+
antiAliasingDisableTitle: "Desativar anti-aliasing (forçar pixelização)",
804819
},
805820
stats: {
806821
title: "Estatísticas",
@@ -980,6 +995,9 @@ const fr = {
980995
hidpiLabel: "HiDPI (Pixel Perfect)",
981996
hidpiEnableTitle: "Activer HiDPI (Pixel Perfect)",
982997
hidpiDisableTitle: "Désactiver HiDPI (Utiliser la mise à l'échelle CSS)",
998+
antiAliasingLabel: "Anticrénelage",
999+
antiAliasingEnableTitle: "Activer l'anticrénelage (lisser à la mise à l'échelle)",
1000+
antiAliasingDisableTitle: "Désactiver l'anticrénelage (forcer la pixellisation)",
9831001
},
9841002
stats: {
9851003
title: "Statistiques",
@@ -1159,6 +1177,9 @@ const ru = {
11591177
hidpiLabel: "HiDPI (Пиксельная точность)",
11601178
hidpiEnableTitle: "Включить HiDPI (Пиксельная точность)",
11611179
hidpiDisableTitle: "Отключить HiDPI (Использовать масштабирование CSS)",
1180+
antiAliasingLabel: "Сглаживание",
1181+
antiAliasingEnableTitle: "Включить сглаживание (плавно при масштабировании)",
1182+
antiAliasingDisableTitle: "Отключить сглаживание (принудительно пикселизировать)",
11621183
},
11631184
stats: {
11641185
title: "Статистика",
@@ -1338,6 +1359,9 @@ const de = {
13381359
hidpiLabel: "HiDPI (Pixelgenau)",
13391360
hidpiEnableTitle: "HiDPI aktivieren (Pixelgenau)",
13401361
hidpiDisableTitle: "HiDPI deaktivieren (CSS-Skalierung verwenden)",
1362+
antiAliasingLabel: "Kantenglättung",
1363+
antiAliasingEnableTitle: "Kantenglättung aktivieren (Glättung bei Skalierung)",
1364+
antiAliasingDisableTitle: "Kantenglättung deaktivieren (Verpixelung erzwingen)",
13411365
},
13421366
stats: {
13431367
title: "Statistiken",
@@ -1517,6 +1541,9 @@ const tr = {
15171541
hidpiLabel: "HiDPI (Piksel Mükemmelliği)",
15181542
hidpiEnableTitle: "HiDPI'yi Etkinleştir (Piksel Mükemmelliği)",
15191543
hidpiDisableTitle: "HiDPI'yi Devre Dışı Bırak (CSS Ölçeklendirme Kullan)",
1544+
antiAliasingLabel: "Kenar Yumuşatma",
1545+
antiAliasingEnableTitle: "Kenar yumuşatmayı etkinleştir (ölçeklemede pürüzsüzleştir)",
1546+
antiAliasingDisableTitle: "Kenar yumuşatmayı devre dışı bırak (pikselli olmaya zorla)",
15201547
},
15211548
stats: {
15221549
title: "İstatistikler",
@@ -1696,6 +1723,9 @@ const it = {
16961723
hidpiLabel: "HiDPI (Pixel Perfect)",
16971724
hidpiEnableTitle: "Abilita HiDPI (Pixel Perfect)",
16981725
hidpiDisableTitle: "Disabilita HiDPI (Usa ridimensionamento CSS)",
1726+
antiAliasingLabel: "Anti-aliasing",
1727+
antiAliasingEnableTitle: "Abilita anti-aliasing (smussa durante il ridimensionamento)",
1728+
antiAliasingDisableTitle: "Disabilita anti-aliasing (forza la pixelatura)",
16991729
},
17001730
stats: {
17011731
title: "Statistiche",
@@ -1875,6 +1905,9 @@ const nl = {
18751905
hidpiLabel: "HiDPI (Pixel Perfect)",
18761906
hidpiEnableTitle: "HiDPI inschakelen (Pixel Perfect)",
18771907
hidpiDisableTitle: "HiDPI uitschakelen (CSS-schaling gebruiken)",
1908+
antiAliasingLabel: "Randverzachting",
1909+
antiAliasingEnableTitle: "Randverzachting inschakelen (vloeiend bij schalen)",
1910+
antiAliasingDisableTitle: "Randverzachting uitschakelen (gepixeleerd forceren)",
18781911
},
18791912
stats: {
18801913
title: "Statistieken",
@@ -2054,6 +2087,9 @@ const ar = {
20542087
hidpiLabel: "HiDPI (دقة بكسل مثالية)",
20552088
hidpiEnableTitle: "تمكين HiDPI (دقة بكسل مثالية)",
20562089
hidpiDisableTitle: "تعطيل HiDPI (استخدام تحجيم CSS)",
2090+
antiAliasingLabel: "تنعيم الحواف",
2091+
antiAliasingEnableTitle: "تمكين تنعيم الحواف (سلس عند التكبير)",
2092+
antiAliasingDisableTitle: "تعطيل تنعيم الحواف (فرض البيكسلات)",
20572093
},
20582094
stats: {
20592095
title: "الإحصائيات",
@@ -2233,6 +2269,9 @@ const ko = {
22332269
hidpiLabel: "HiDPI (픽셀 퍼펙트)",
22342270
hidpiEnableTitle: "HiDPI 활성화 (픽셀 퍼펙트)",
22352271
hidpiDisableTitle: "HiDPI 비활성화 (CSS 스케일링 사용)",
2272+
antiAliasingLabel: "안티에일리어싱",
2273+
antiAliasingEnableTitle: "안티에일리어싱 활성화 (확대/축소 시 부드럽게)",
2274+
antiAliasingDisableTitle: "안티에일리어싱 비활성화 (픽셀화 강제)",
22362275
},
22372276
stats: {
22382277
title: "통계",
@@ -2412,6 +2451,9 @@ const ja = {
24122451
hidpiLabel: "HiDPI (ピクセルパーフェクト)",
24132452
hidpiEnableTitle: "HiDPI を有効にする (ピクセルパーフェクト)",
24142453
hidpiDisableTitle: "HiDPI を無効にする (CSS スケーリングを使用)",
2454+
antiAliasingLabel: "アンチエイリアシング",
2455+
antiAliasingEnableTitle: "アンチエイリアシングを有効にする (スケーリング時に滑らかに)",
2456+
antiAliasingDisableTitle: "アンチエイリアシングを無効にする (ピクセル化を強制)",
24152457
},
24162458
stats: {
24172459
title: "統計",
@@ -2591,6 +2633,9 @@ const vi = {
25912633
hidpiLabel: "HiDPI (Hoàn hảo đến từng Pixel)",
25922634
hidpiEnableTitle: "Bật HiDPI (Hoàn hảo đến từng Pixel)",
25932635
hidpiDisableTitle: "Tắt HiDPI (Sử dụng CSS Scaling)",
2636+
antiAliasingLabel: "Khử răng cưa",
2637+
antiAliasingEnableTitle: "Bật khử răng cưa (làm mịn khi co giãn)",
2638+
antiAliasingDisableTitle: "Tắt khử răng cưa (buộc hiển thị pixel)",
25942639
},
25952640
stats: {
25962641
title: "Thống kê",
@@ -2770,6 +2815,9 @@ const th = {
27702815
hidpiLabel: "HiDPI (ความคมชัดระดับพิกเซล)",
27712816
hidpiEnableTitle: "เปิดใช้งาน HiDPI (ความคมชัดระดับพิกเซล)",
27722817
hidpiDisableTitle: "ปิดใช้งาน HiDPI (ใช้การปรับขนาด CSS)",
2818+
antiAliasingLabel: "การลบรอยหยัก",
2819+
antiAliasingEnableTitle: "เปิดใช้งานการลบรอยหยัก (ปรับให้เรียบเมื่อปรับขนาด)",
2820+
antiAliasingDisableTitle: "ปิดใช้งานการลบรอยหยัก (บังคับให้เป็นพิกเซล)",
27732821
},
27742822
stats: {
27752823
title: "สถิติ",
@@ -2949,6 +2997,9 @@ const fil = {
29492997
hidpiLabel: "HiDPI (Pixel Perfect)",
29502998
hidpiEnableTitle: "Paganahin ang HiDPI (Pixel Perfect)",
29512999
hidpiDisableTitle: "Huwag paganahin ang HiDPI (Gamitin ang CSS Scaling)",
3000+
antiAliasingLabel: "Anti-aliasing (Pagpapakinis)",
3001+
antiAliasingEnableTitle: "Paganahin ang anti-aliasing (makinis kapag nag-scale)",
3002+
antiAliasingDisableTitle: "Huwag paganahin ang anti-aliasing (puwersahing maging pixelated)",
29523003
},
29533004
stats: {
29543005
title: "Stats",
@@ -3128,6 +3179,9 @@ const da = {
31283179
hidpiLabel: "HiDPI (Pixel Perfekt)",
31293180
hidpiEnableTitle: "Aktivér HiDPI (Pixel Perfekt)",
31303181
hidpiDisableTitle: "Deaktivér HiDPI (Brug CSS-skalering)",
3182+
antiAliasingLabel: "Kantudjævning",
3183+
antiAliasingEnableTitle: "Aktiver kantudjævning (glat ved skalering)",
3184+
antiAliasingDisableTitle: "Deaktiver kantudjævning (tving pixeleret)",
31313185
},
31323186
stats: {
31333187
title: "Statistik",

0 commit comments

Comments
 (0)