Skip to content

Commit 7cb9fd2

Browse files
feat(webapp): granular JPEG Quality option instead of explicit TightLow and TightHigh pseudo-encodings (#1488)
1 parent abe9972 commit 7cb9fd2

11 files changed

Lines changed: 128 additions & 28 deletions

File tree

webapp/package-lock.json

Lines changed: 4 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webapp/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"@devolutions/icons": "4.0.8",
3333
"@devolutions/iron-remote-desktop": "0.9.0",
3434
"@devolutions/iron-remote-desktop-rdp": "^0.6.0",
35-
"@devolutions/iron-remote-desktop-vnc": "^0.5.0",
35+
"@devolutions/iron-remote-desktop-vnc": "^0.6.0",
3636
"@devolutions/terminal-shared": "^1.3.1",
3737
"@devolutions/web-ssh-gui": "^0.4.0",
3838
"@devolutions/web-telnet-gui": "^0.3.0",

webapp/src/client/app/modules/web-client/form/form-components/vnc/vnc-form.component.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@
4444
[inputFormData]="inputFormData"></web-client-enabled-encodings-control>
4545
</div>
4646

47+
<div class="col-12 gateway-form-group">
48+
<web-client-jpeg-quality-level-control [parentForm]="form"
49+
[inputFormData]="inputFormData"></web-client-jpeg-quality-level-control>
50+
</div>
51+
4752
<div class="col-12 gateway-form-group">
4853
<web-client-enable-cursor-control [parentForm]="form"
4954
[inputFormData]="inputFormData"></web-client-enable-cursor-control>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<div [formGroup]="parentForm">
2+
<div class="gateway-form-input">
3+
<p-checkbox formControlName="jpegEnabled"
4+
label="Use Tight JPEG"
5+
binary="true"
6+
(onChange)="toggleCheckbox()"></p-checkbox>
7+
</div>
8+
9+
@if (jpegEnabled) {
10+
<div class="gateway-sub-control">
11+
<label for="jpegQualityLevel">JPEG Quality Level</label>
12+
<div class="gateway-form-input">
13+
<p-inputNumber formControlName="jpegQualityLevel"
14+
id="jpegQualityLevel"
15+
mode="decimal"
16+
[min]="0"
17+
[max]="9"
18+
[showButtons]="true"></p-inputNumber>
19+
</div>
20+
</div>
21+
}
22+
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
@import '../../../../../../../assets/css/style/mixins';
2+
@import "../../../../../../../assets/css/style/variables";
3+
@import "../../../../../../../assets/css/theme/theme-mode-variables";
4+
5+
:host ::ng-deep p-inputNumber {
6+
width: 50px;
7+
}
8+
9+
.gateway-sub-control {
10+
padding: 18px 0 0 0;
11+
}
12+
13+
.gateway-form-input {
14+
display: flex;
15+
align-items: center;
16+
}
17+
18+
.col-pad-right-lg {
19+
padding-right: 15px !important;
20+
}
21+
.col-pad-right-md {
22+
padding-right: 10px !important;
23+
}
24+
.col-pad-right-sm {
25+
padding-right: 5px !important;
26+
}
27+
28+
.form-helper-text {
29+
line-height: 11px;
30+
word-wrap: break-word;
31+
color: var(--status-error-text-color);
32+
font-size: 11px;
33+
font-family: Open Sans;
34+
font-weight: 400;
35+
padding-left: 0;
36+
justify-content: flex-start;
37+
align-items: flex-start;
38+
gap: 10px;
39+
display: inline-flex;
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { Component, Input, OnInit } from '@angular/core';
2+
import { FormGroup } from '@angular/forms';
3+
4+
import { BaseComponent } from '@shared/bases/base.component';
5+
import { WebFormService } from '@shared/services/web-form.service';
6+
7+
@Component({
8+
selector: 'web-client-jpeg-quality-level-control',
9+
templateUrl: 'jpeg-quality-level-control.component.html',
10+
styleUrls: ['jpeg-quality-level-control.component.scss'],
11+
})
12+
export class JpegQualityLevelControlComponent extends BaseComponent implements OnInit {
13+
@Input() parentForm: FormGroup;
14+
@Input() inputFormData;
15+
16+
jpegEnabled = true;
17+
18+
constructor(private formService: WebFormService) {
19+
super();
20+
}
21+
22+
toggleCheckbox() {
23+
this.jpegEnabled = !this.jpegEnabled;
24+
}
25+
26+
ngOnInit(): void {
27+
this.formService.addControlToForm({
28+
formGroup: this.parentForm,
29+
controlName: 'jpegEnabled',
30+
inputFormData: this.inputFormData,
31+
isRequired: false,
32+
defaultValue: true,
33+
});
34+
35+
this.formService.addControlToForm({
36+
formGroup: this.parentForm,
37+
controlName: 'jpegQualityLevel',
38+
inputFormData: this.inputFormData,
39+
isRequired: false,
40+
defaultValue: 9,
41+
});
42+
}
43+
}

webapp/src/client/app/modules/web-client/vnc/web-client-vnc.component.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import {
3434
enableCursor,
3535
enabledEncodings,
3636
enableExtendedClipboard,
37+
jpegQualityLevel,
3738
ultraVirtualDisplay,
3839
wheelSpeedFactor,
3940
} from '@devolutions/iron-remote-desktop-vnc';
@@ -451,6 +452,8 @@ export class WebClientVncComponent extends WebClientBaseComponent implements OnI
451452
enableExtendedClipboard,
452453
enabledEncodings,
453454
ultraVirtualDisplay,
455+
jpegEnabled,
456+
jpegQualityLevel,
454457
wheelSpeedFactor = 1,
455458
} = formData;
456459
const extractedData: ExtractedHostnamePort = this.utils.string.extractHostnameAndPort(hostname, DefaultVncPort);
@@ -471,6 +474,7 @@ export class WebClientVncComponent extends WebClientBaseComponent implements OnI
471474
screenSize: desktopScreenSize,
472475
sessionId,
473476
enabledEncodings: enabledEncodings.join(','),
477+
jpegQualityLevel: jpegEnabled ? jpegQualityLevel : undefined,
474478
enableCursor,
475479
enableExtendedClipboard: enableExtendedClipboard ?? false,
476480
ultraVirtualDisplay,
@@ -520,6 +524,10 @@ export class WebClientVncComponent extends WebClientBaseComponent implements OnI
520524
configBuilder.withExtension(enabledEncodings(Encoding.getAllEncodings().join(',')));
521525
}
522526

527+
if (connectionParameters.jpegQualityLevel != null) {
528+
configBuilder.withExtension(jpegQualityLevel(connectionParameters.jpegQualityLevel));
529+
}
530+
523531
const config = configBuilder.build();
524532

525533
this.setKeyboardUnicodeMode(true);

webapp/src/client/app/modules/web-client/web-client.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import { AutoClipboardControlComponent } from './form/form-controls/auto-clipboa
3737
import { EnabledEncodingsControlComponent } from './form/form-controls/enabled-encodings-control/enabled-encodings-control.component';
3838
import { ExtendedClipboardControlComponent } from './form/form-controls/extended-clipboard-control/extended-clipboard-control.component';
3939
import { FileControlComponent } from './form/form-controls/file-control/file-control.component';
40+
import { JpegQualityLevelControlComponent } from './form/form-controls/jpeg-quality-level-control/jpeg-quality-level-control.component';
4041
import { ResolutionQualityControlComponent } from './form/form-controls/resolution-quality-control/resolution-quality-control.component';
4142
import { UltraVirtualDisplayControlComponent } from './form/form-controls/ultra-virtual-display-control/ultra-virtual-display-control.component';
4243
import { NetScanComponent } from './net-scan/net-scan.component';
@@ -79,6 +80,7 @@ const routes: Routes = [
7980
UsernameControlComponent,
8081
PasswordControlComponent,
8182
ExtendedClipboardControlComponent,
83+
JpegQualityLevelControlComponent,
8284
ScreenSizeControlComponent,
8385
EnableDisplayConfigurationControlComponent,
8486
KdcUrlControlComponent,

webapp/src/client/app/shared/enums/encoding.enum.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ enum Encoding {
55
Zlib = 'zlib',
66
Hextile = 'hextile',
77
Tight = 'tight',
8-
JpegLow = 'jpeg-low',
9-
JpegHigh = 'jpeg-high',
108
TightPng = 'tight-png',
119
}
1210

webapp/src/client/app/shared/interfaces/connection-params.interfaces.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export interface IronVNCConnectionParameters {
3636
token?: string;
3737
screenSize?: DesktopSize;
3838
enabledEncodings?: string;
39+
jpegQualityLevel?: number;
3940
enableCursor: boolean;
4041
enableExtendedClipboard: boolean;
4142
ultraVirtualDisplay: boolean;

0 commit comments

Comments
 (0)