x4js 2.0.34 → 2.1.0-manual
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -21
- package/package.json +39 -26
- package/src/components/base.scss +25 -89
- package/src/components/boxes/boxes.module.scss +54 -54
- package/src/components/boxes/boxes.ts +513 -513
- package/src/components/breadcrumb/breadcrumb.scss +56 -56
- package/src/components/breadcrumb/breadcrumb.ts +93 -93
- package/src/components/btngroup/btngroup.module.scss +40 -40
- package/src/components/btngroup/btngroup.ts +152 -152
- package/src/components/button/button.module.scss +172 -172
- package/src/components/button/button.ts +232 -232
- package/src/components/calendar/calendar.module.scss +162 -162
- package/src/components/calendar/calendar.ts +326 -326
- package/src/components/canvas/canvas.module.scss +24 -24
- package/src/components/canvas/canvas.ts +195 -195
- package/src/components/canvas/canvas_ex.ts +275 -275
- package/src/components/checkbox/check.svg +3 -3
- package/src/components/checkbox/checkbox.module.scss +141 -141
- package/src/components/checkbox/checkbox.ts +139 -139
- package/src/components/colorinput/colorinput.module.scss +64 -64
- package/src/components/colorinput/colorinput.ts +90 -90
- package/src/components/colorpicker/colorpicker.module.scss +132 -132
- package/src/components/colorpicker/colorpicker.ts +481 -481
- package/src/components/combobox/combobox.module.scss +145 -145
- package/src/components/combobox/combobox.ts +282 -282
- package/src/components/combobox/updown.svg +3 -3
- package/src/components/components.ts +45 -44
- package/src/components/dialog/dialog.module.scss +103 -105
- package/src/components/dialog/dialog.ts +233 -233
- package/src/components/filedrop/filedrop.module.scss +69 -69
- package/src/components/filedrop/filedrop.ts +130 -130
- package/src/components/form/form.module.scss +38 -38
- package/src/components/form/form.ts +172 -172
- package/src/components/gridview/gridview.module.scss +323 -337
- package/src/components/gridview/gridview.ts +1276 -1315
- package/src/components/header/header.module.scss +40 -40
- package/src/components/header/header.ts +141 -141
- package/src/components/icon/icon.module.scss +32 -32
- package/src/components/icon/icon.ts +165 -165
- package/src/components/image/image.module.scss +27 -27
- package/src/components/image/image.ts +168 -168
- package/src/components/input/input.module.scss +74 -74
- package/src/components/input/input.ts +537 -537
- package/src/components/keyboard/keyboard.module.scss +136 -136
- package/src/components/keyboard/keyboard.ts +549 -549
- package/src/components/label/label.module.scss +90 -91
- package/src/components/label/label.ts +101 -101
- package/src/components/link/link.module.scss +44 -44
- package/src/components/link/link.ts +87 -87
- package/src/components/listbox/listbox.module.scss +179 -179
- package/src/components/listbox/listbox.ts +596 -596
- package/src/components/menu/menu.module.scss +128 -128
- package/src/components/menu/menu.ts +174 -174
- package/src/components/messages/messages.module.scss +92 -146
- package/src/components/messages/messages.ts +237 -303
- package/src/components/normalize.scss +391 -391
- package/src/components/notification/notification.module.scss +83 -83
- package/src/components/notification/notification.ts +107 -107
- package/src/components/panel/panel.module.scss +66 -71
- package/src/components/panel/panel.ts +57 -57
- package/src/components/popup/popup.module.scss +51 -51
- package/src/components/popup/popup.ts +457 -457
- package/src/components/progress/progress.module.scss +56 -56
- package/src/components/progress/progress.ts +43 -43
- package/src/components/propgrid/progrid.module.scss +111 -111
- package/src/components/propgrid/propgrid.ts +300 -300
- package/src/components/propgrid/updown.svg +3 -3
- package/src/components/radio/radio.module.scss +163 -163
- package/src/components/radio/radio.svg +3 -3
- package/src/components/radio/radio.ts +141 -141
- package/src/components/rating/rating.module.scss +22 -22
- package/src/components/rating/rating.ts +131 -131
- package/src/components/select/select.module.scss +8 -8
- package/src/components/select/select.ts +134 -134
- package/src/components/shared.scss +141 -71
- package/src/components/sizers/sizer.module.scss +90 -107
- package/src/components/sizers/sizer.ts +131 -134
- package/src/components/slider/slider.module.scss +117 -117
- package/src/components/slider/slider.ts +197 -197
- package/src/components/spreadsheet/spreadsheet.module.scss +307 -307
- package/src/components/spreadsheet/spreadsheet.ts +1223 -1223
- package/src/components/switch/switch.module.scss +126 -126
- package/src/components/switch/switch.ts +61 -61
- package/src/components/tabs/tabs.module.scss +46 -67
- package/src/components/tabs/tabs.ts +229 -234
- package/src/components/textarea/textarea.module.scss +63 -63
- package/src/components/textarea/textarea.ts +131 -131
- package/src/components/textedit/textedit.module.scss +115 -115
- package/src/components/textedit/textedit.ts +122 -122
- package/src/components/themes.scss +90 -90
- package/src/components/tickline/tickline.module.scss +25 -25
- package/src/components/tickline/tickline.ts +81 -81
- package/src/components/tooltips/tooltips.scss +71 -71
- package/src/components/tooltips/tooltips.ts +120 -120
- package/src/components/treeview/treeview.module.scss +192 -192
- package/src/components/treeview/treeview.ts +484 -484
- package/src/components/viewport/viewport.module.scss +31 -31
- package/src/components/viewport/viewport.ts +41 -41
- package/src/core/component.ts +1299 -1299
- package/src/core/core_application.ts +361 -361
- package/src/core/core_colors.ts +512 -512
- package/src/core/core_data.ts +1297 -1297
- package/src/core/core_dom.ts +481 -481
- package/src/core/core_dragdrop.ts +225 -225
- package/src/core/core_element.ts +221 -221
- package/src/core/core_events.ts +214 -214
- package/src/core/core_i18n.ts +395 -395
- package/src/core/core_pdf.ts +454 -454
- package/src/core/core_react.ts +78 -78
- package/src/core/core_router.ts +296 -296
- package/src/core/core_state.ts +62 -62
- package/src/core/core_styles.ts +213 -213
- package/src/core/core_svg.ts +1042 -1042
- package/src/core/core_tools.ts +996 -996
- package/src/types/scss.d.ts +4 -4
- package/src/types/x4react.d.ts +8 -8
- package/src/x4.scss +19 -19
- package/src/x4.ts +36 -36
- package/src/x4tsx.d.ts +26 -26
- package/.vscode/launch.json +0 -14
- package/.vscode/settings.json +0 -2
- package/demo/assets/house-light.svg +0 -1
- package/demo/assets/radio.svg +0 -4
- package/demo/index.html +0 -12
- package/demo/main.scss +0 -23
- package/demo/main.ts +0 -324
- package/demo/package.json +0 -26
- package/demo/scss.d.ts +0 -4
- package/demo/svg.d.ts +0 -1
- package/demo/tsconfig.json +0 -14
- package/src/components/gridview/folder-open.svg +0 -1
- package/src/components/messages/spinner.svg +0 -1
- package/src/x4.d.ts +0 -10
- package/tsconfig.json +0 -11
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ___ ___ __
|
|
3
|
-
* \ \/ / / _
|
|
4
|
-
* \ / /_| |_
|
|
5
|
-
* / \____ _|
|
|
6
|
-
* /__/\__\ |_|.2
|
|
7
|
-
*
|
|
8
|
-
* @file canvas.module.scss
|
|
9
|
-
* @author Etienne Cochard
|
|
10
|
-
*
|
|
11
|
-
* @copyright (c) 2025 R-libre ingenierie
|
|
12
|
-
*
|
|
13
|
-
* Use of this source code is governed by an MIT-style license
|
|
14
|
-
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
.x4canvas {
|
|
18
|
-
overflow: hidden;
|
|
19
|
-
|
|
20
|
-
&> canvas {
|
|
21
|
-
position: absolute;
|
|
22
|
-
left: 0;
|
|
23
|
-
top: 0;
|
|
24
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* ___ ___ __
|
|
3
|
+
* \ \/ / / _
|
|
4
|
+
* \ / /_| |_
|
|
5
|
+
* / \____ _|
|
|
6
|
+
* /__/\__\ |_|.2
|
|
7
|
+
*
|
|
8
|
+
* @file canvas.module.scss
|
|
9
|
+
* @author Etienne Cochard
|
|
10
|
+
*
|
|
11
|
+
* @copyright (c) 2025 R-libre ingenierie
|
|
12
|
+
*
|
|
13
|
+
* Use of this source code is governed by an MIT-style license
|
|
14
|
+
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
+
**/
|
|
16
|
+
|
|
17
|
+
.x4canvas {
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
|
|
20
|
+
&> canvas {
|
|
21
|
+
position: absolute;
|
|
22
|
+
left: 0;
|
|
23
|
+
top: 0;
|
|
24
|
+
}
|
|
25
25
|
}
|
|
@@ -1,195 +1,195 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ___ ___ __
|
|
3
|
-
* \ \/ / / _
|
|
4
|
-
* \ / /_| |_
|
|
5
|
-
* / \____ _|
|
|
6
|
-
* /__/\__\ |_|.2
|
|
7
|
-
*
|
|
8
|
-
* @file canvas.ts
|
|
9
|
-
* @author Etienne Cochard
|
|
10
|
-
*
|
|
11
|
-
* @copyright (c) 2025 R-libre ingenierie
|
|
12
|
-
*
|
|
13
|
-
* Use of this source code is governed by an MIT-style license
|
|
14
|
-
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
import { class_ns } from '../../core/core_tools';
|
|
18
|
-
import { Component, ComponentEvent, ComponentEvents, ComponentProps } from '../../core/component';
|
|
19
|
-
import { EventCallback } from "../../core/core_events"
|
|
20
|
-
import { CanvasEx, createPainter } from './canvas_ex';
|
|
21
|
-
|
|
22
|
-
import './canvas.module.scss'
|
|
23
|
-
|
|
24
|
-
export interface EvPaint extends ComponentEvent {
|
|
25
|
-
ctx: CanvasEx;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
interface CanvasEventMap extends ComponentEvents {
|
|
29
|
-
paint: EvPaint;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface CanvasProps extends ComponentProps {
|
|
33
|
-
paint_cb?: (ctx: CanvasEx ) => void;// simple callback
|
|
34
|
-
paint?: EventCallback<EvPaint> // or standard event (slower)
|
|
35
|
-
clear?: boolean; // clear background before painting
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// ============================================================================
|
|
41
|
-
// [CANVAS]
|
|
42
|
-
// ============================================================================
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Standard Canvas
|
|
46
|
-
*/
|
|
47
|
-
|
|
48
|
-
@class_ns( "x4" )
|
|
49
|
-
export class Canvas extends Component<CanvasProps, CanvasEventMap> {
|
|
50
|
-
|
|
51
|
-
private m_iwidth: number = -1;
|
|
52
|
-
private m_iheight: number = -1;
|
|
53
|
-
private m_scale = 1.0;
|
|
54
|
-
private m_canvas: Component;
|
|
55
|
-
|
|
56
|
-
constructor(props: CanvasProps) {
|
|
57
|
-
super(props);
|
|
58
|
-
|
|
59
|
-
this.mapPropEvents( props, 'paint' );
|
|
60
|
-
this.addDOMEvent('resized', () => { this._paint(); })
|
|
61
|
-
|
|
62
|
-
this.m_iwidth = -1;
|
|
63
|
-
this.m_iheight = -1;
|
|
64
|
-
this.m_canvas = new Component({
|
|
65
|
-
tag: 'canvas'
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
this.setContent( this.m_canvas );
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* scale the whole canvas
|
|
73
|
-
*/
|
|
74
|
-
|
|
75
|
-
scale(scale: number) {
|
|
76
|
-
this.m_scale = scale;
|
|
77
|
-
this.m_iwidth = -1; // force recalc
|
|
78
|
-
this.redraw();
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* return the internal canvas
|
|
83
|
-
*/
|
|
84
|
-
get canvas(): Component {
|
|
85
|
-
return this.m_canvas;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
getContext( ) {
|
|
89
|
-
return (this.m_canvas.dom as HTMLCanvasElement).getContext('2d') as CanvasEx;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* redraw the canvas (force a paint)
|
|
94
|
-
*/
|
|
95
|
-
|
|
96
|
-
private $update_rep = 0;
|
|
97
|
-
public redraw(wait?: number) {
|
|
98
|
-
|
|
99
|
-
if (wait !== undefined) {
|
|
100
|
-
if( ++this.$update_rep>=20 ) {
|
|
101
|
-
this.clearTimeout( 'update' );
|
|
102
|
-
this._paint( );
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
this.setTimeout( 'update', wait, () => this._paint() );
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
this.clearTimeout( 'update' );
|
|
110
|
-
this._paint();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
*
|
|
116
|
-
*/
|
|
117
|
-
|
|
118
|
-
private _paint() {
|
|
119
|
-
this.$update_rep = 0;
|
|
120
|
-
|
|
121
|
-
let dom = this.dom;
|
|
122
|
-
if (!this.isVisible() ) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
//const canvas = this.m_canvas.dom as HTMLCanvasElement;
|
|
127
|
-
const w = dom.clientWidth;
|
|
128
|
-
const h = dom.clientHeight;
|
|
129
|
-
|
|
130
|
-
const ctx = this.getContext();
|
|
131
|
-
if (w != this.m_iwidth || h != this.m_iheight) {
|
|
132
|
-
// adjustment for HDPI
|
|
133
|
-
let devicePixelRatio = window.devicePixelRatio || 1;
|
|
134
|
-
let backingStoreRatio = (<any>ctx).webkitBackingStorePixelRatio ||
|
|
135
|
-
(<any>ctx).mozBackingStorePixelRatio ||
|
|
136
|
-
(<any>ctx).msBackingStorePixelRatio ||
|
|
137
|
-
(<any>ctx).oBackingStorePixelRatio ||
|
|
138
|
-
(<any>ctx).backingStorePixelRatio || 1;
|
|
139
|
-
|
|
140
|
-
let canvas = this.canvas;
|
|
141
|
-
|
|
142
|
-
if ( this.m_scale != 1.0 ) { //devicePixelRatio !== backingStoreRatio || this.m_scale != 1.0) {
|
|
143
|
-
let ratio = 1; //devicePixelRatio / backingStoreRatio,
|
|
144
|
-
const rw = w * ratio;
|
|
145
|
-
const rh = h * ratio;
|
|
146
|
-
|
|
147
|
-
canvas.setAttribute('width', '' + rw);
|
|
148
|
-
canvas.setAttribute('height', '' + rh);
|
|
149
|
-
canvas.setStyleValue('width', w);
|
|
150
|
-
canvas.setStyleValue('height', h);
|
|
151
|
-
|
|
152
|
-
ratio *= this.m_scale;
|
|
153
|
-
ctx.scale(ratio, ratio);
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
canvas.setAttribute('width', '' + w);
|
|
157
|
-
canvas.setAttribute('height', '' + h);
|
|
158
|
-
canvas.setStyleValue('width', w);
|
|
159
|
-
canvas.setStyleValue('height', h);
|
|
160
|
-
ctx.scale(1, 1);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
this.m_iwidth = w;
|
|
164
|
-
this.m_iheight = h;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
if (w && h) {
|
|
168
|
-
let cc = createPainter(ctx, w, h);
|
|
169
|
-
if (this.props.clear) {
|
|
170
|
-
|
|
171
|
-
cc.clearRect(0,0,w/this.m_scale,h/this.m_scale);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
cc.save();
|
|
175
|
-
cc.translate(-0.5, -0.5);
|
|
176
|
-
this.paint(cc);
|
|
177
|
-
cc.restore();
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
protected paint(ctx: CanvasEx ) {
|
|
182
|
-
try {
|
|
183
|
-
if( this.props.paint_cb ) {
|
|
184
|
-
this.props.paint_cb( ctx );
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
this.fire('paint', { ctx } );
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
catch (x) {
|
|
191
|
-
console.assert(false, x);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
1
|
+
/**
|
|
2
|
+
* ___ ___ __
|
|
3
|
+
* \ \/ / / _
|
|
4
|
+
* \ / /_| |_
|
|
5
|
+
* / \____ _|
|
|
6
|
+
* /__/\__\ |_|.2
|
|
7
|
+
*
|
|
8
|
+
* @file canvas.ts
|
|
9
|
+
* @author Etienne Cochard
|
|
10
|
+
*
|
|
11
|
+
* @copyright (c) 2025 R-libre ingenierie
|
|
12
|
+
*
|
|
13
|
+
* Use of this source code is governed by an MIT-style license
|
|
14
|
+
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
+
**/
|
|
16
|
+
|
|
17
|
+
import { class_ns } from '../../core/core_tools';
|
|
18
|
+
import { Component, ComponentEvent, ComponentEvents, ComponentProps } from '../../core/component';
|
|
19
|
+
import { EventCallback } from "../../core/core_events"
|
|
20
|
+
import { CanvasEx, createPainter } from './canvas_ex';
|
|
21
|
+
|
|
22
|
+
import './canvas.module.scss'
|
|
23
|
+
|
|
24
|
+
export interface EvPaint extends ComponentEvent {
|
|
25
|
+
ctx: CanvasEx;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface CanvasEventMap extends ComponentEvents {
|
|
29
|
+
paint: EvPaint;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface CanvasProps extends ComponentProps {
|
|
33
|
+
paint_cb?: (ctx: CanvasEx ) => void;// simple callback
|
|
34
|
+
paint?: EventCallback<EvPaint> // or standard event (slower)
|
|
35
|
+
clear?: boolean; // clear background before painting
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
// ============================================================================
|
|
41
|
+
// [CANVAS]
|
|
42
|
+
// ============================================================================
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Standard Canvas
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
@class_ns( "x4" )
|
|
49
|
+
export class Canvas extends Component<CanvasProps, CanvasEventMap> {
|
|
50
|
+
|
|
51
|
+
private m_iwidth: number = -1;
|
|
52
|
+
private m_iheight: number = -1;
|
|
53
|
+
private m_scale = 1.0;
|
|
54
|
+
private m_canvas: Component;
|
|
55
|
+
|
|
56
|
+
constructor(props: CanvasProps) {
|
|
57
|
+
super(props);
|
|
58
|
+
|
|
59
|
+
this.mapPropEvents( props, 'paint' );
|
|
60
|
+
this.addDOMEvent('resized', () => { this._paint(); })
|
|
61
|
+
|
|
62
|
+
this.m_iwidth = -1;
|
|
63
|
+
this.m_iheight = -1;
|
|
64
|
+
this.m_canvas = new Component({
|
|
65
|
+
tag: 'canvas'
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
this.setContent( this.m_canvas );
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* scale the whole canvas
|
|
73
|
+
*/
|
|
74
|
+
|
|
75
|
+
scale(scale: number) {
|
|
76
|
+
this.m_scale = scale;
|
|
77
|
+
this.m_iwidth = -1; // force recalc
|
|
78
|
+
this.redraw();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* return the internal canvas
|
|
83
|
+
*/
|
|
84
|
+
get canvas(): Component {
|
|
85
|
+
return this.m_canvas;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
getContext( ) {
|
|
89
|
+
return (this.m_canvas.dom as HTMLCanvasElement).getContext('2d') as CanvasEx;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* redraw the canvas (force a paint)
|
|
94
|
+
*/
|
|
95
|
+
|
|
96
|
+
private $update_rep = 0;
|
|
97
|
+
public redraw(wait?: number) {
|
|
98
|
+
|
|
99
|
+
if (wait !== undefined) {
|
|
100
|
+
if( ++this.$update_rep>=20 ) {
|
|
101
|
+
this.clearTimeout( 'update' );
|
|
102
|
+
this._paint( );
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.setTimeout( 'update', wait, () => this._paint() );
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.clearTimeout( 'update' );
|
|
110
|
+
this._paint();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
*
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
private _paint() {
|
|
119
|
+
this.$update_rep = 0;
|
|
120
|
+
|
|
121
|
+
let dom = this.dom;
|
|
122
|
+
if (!this.isVisible() ) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
//const canvas = this.m_canvas.dom as HTMLCanvasElement;
|
|
127
|
+
const w = dom.clientWidth;
|
|
128
|
+
const h = dom.clientHeight;
|
|
129
|
+
|
|
130
|
+
const ctx = this.getContext();
|
|
131
|
+
if (w != this.m_iwidth || h != this.m_iheight) {
|
|
132
|
+
// adjustment for HDPI
|
|
133
|
+
let devicePixelRatio = window.devicePixelRatio || 1;
|
|
134
|
+
let backingStoreRatio = (<any>ctx).webkitBackingStorePixelRatio ||
|
|
135
|
+
(<any>ctx).mozBackingStorePixelRatio ||
|
|
136
|
+
(<any>ctx).msBackingStorePixelRatio ||
|
|
137
|
+
(<any>ctx).oBackingStorePixelRatio ||
|
|
138
|
+
(<any>ctx).backingStorePixelRatio || 1;
|
|
139
|
+
|
|
140
|
+
let canvas = this.canvas;
|
|
141
|
+
|
|
142
|
+
if ( this.m_scale != 1.0 ) { //devicePixelRatio !== backingStoreRatio || this.m_scale != 1.0) {
|
|
143
|
+
let ratio = 1; //devicePixelRatio / backingStoreRatio,
|
|
144
|
+
const rw = w * ratio;
|
|
145
|
+
const rh = h * ratio;
|
|
146
|
+
|
|
147
|
+
canvas.setAttribute('width', '' + rw);
|
|
148
|
+
canvas.setAttribute('height', '' + rh);
|
|
149
|
+
canvas.setStyleValue('width', w);
|
|
150
|
+
canvas.setStyleValue('height', h);
|
|
151
|
+
|
|
152
|
+
ratio *= this.m_scale;
|
|
153
|
+
ctx.scale(ratio, ratio);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
canvas.setAttribute('width', '' + w);
|
|
157
|
+
canvas.setAttribute('height', '' + h);
|
|
158
|
+
canvas.setStyleValue('width', w);
|
|
159
|
+
canvas.setStyleValue('height', h);
|
|
160
|
+
ctx.scale(1, 1);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
this.m_iwidth = w;
|
|
164
|
+
this.m_iheight = h;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (w && h) {
|
|
168
|
+
let cc = createPainter(ctx, w, h);
|
|
169
|
+
if (this.props.clear) {
|
|
170
|
+
|
|
171
|
+
cc.clearRect(0,0,w/this.m_scale,h/this.m_scale);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
cc.save();
|
|
175
|
+
cc.translate(-0.5, -0.5);
|
|
176
|
+
this.paint(cc);
|
|
177
|
+
cc.restore();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
protected paint(ctx: CanvasEx ) {
|
|
182
|
+
try {
|
|
183
|
+
if( this.props.paint_cb ) {
|
|
184
|
+
this.props.paint_cb( ctx );
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
this.fire('paint', { ctx } );
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch (x) {
|
|
191
|
+
console.assert(false, x);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|