-
Notifications
You must be signed in to change notification settings - Fork 1
/
MyCanvasInputContainer.hx
120 lines (84 loc) · 3.05 KB
/
MyCanvasInputContainer.hx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package vega.ui;
import js.Browser;
import js.html.Event;
import pixi.core.display.Container;
import pixi.core.display.DisplayObject.DestroyOptions;
import pixi.core.graphics.Graphics;
import pixi.core.math.shapes.Rectangle;
import pixi.core.textures.Texture;
import pixi.interaction.InteractionEvent;
import vega.shell.ApplicationMatchSize;
import vega.shell.GlobalPointer;
import vega.utils.PointXY;
import haxe.extern.EitherType;
import pixi.core.sprites.Sprite;
/**
* champ texte de saisie ; wrapping de CanvasInput dans un Sprite ; ne fonctionne qu'en mode de rendu "canvas"
* @author nico
*/
class MyCanvasInputContainer extends Container {
var spInput : Sprite = null;
var input : CanvasInput = null;
var isFocus : Bool = false;
var wasDown : Bool = false;
var tmpAllowScale : Bool = false;
/**
* contruction la texture de sprite qui recopie une instance de CanvasInput wrappée
* @param pCanvasInputOptions paramètres de construction de l'instance de CanvasInput
* ne pas préciser de propriété "canvas" où l'afficher, car le rendu se fait par recopie dans une texture
* les champs "onblur" et "onsubmit" sont réservés
*/
public function new( pCanvasInputOptions : Dynamic) {
var lInput : CanvasInput;
pCanvasInputOptions.onblur = onBlur;
pCanvasInputOptions.onsubmit = onSubmit;
lInput = new CanvasInput( pCanvasInputOptions);
super();
tmpAllowScale = ApplicationMatchSize.instance.allowScale;
spInput = cast addChild( new Sprite( Texture.fromCanvas( lInput.renderCanvas())));
input = lInput;
interactive = true;
buttonMode = true;
addListener( "touchstart", onContainerFocus);
addListener( "mousedown", onContainerFocus);
}
public function getValue() : String { return input.value(); }
override public function destroy( ?options : EitherType<Bool,DestroyOptions>) : Void {
removeAllListeners();
input.destroy();
input = null;
removeChild( spInput);
spInput.destroy( true);
spInput = null;
super.destroy( options);
}
function onBlur( pTarget : CanvasInput) : Void {
isFocus = false;
input._mouseDown = false;
ApplicationMatchSize.instance.allowScale = tmpAllowScale;
ApplicationMatchSize.instance.refreshRender();
ApplicationMatchSize.instance.traceDebug( "INFO : MyCanvasInputContainer::onBlur : " + input.value(), true);
}
function onSubmit( pE : Event, pTarget : CanvasInput) : Void { input.blur(); }
function onContainerFocus( pE : InteractionEvent) : Void {
ApplicationMatchSize.instance.allowScale = false;
isFocus = true;
input.focus();
input._mouseDown = true;
wasDown = true;
}
override public function updateTransform() : Void {
super.updateTransform();
if ( isFocus && input != null){
if ( wasDown){
if ( ! GlobalPointer.instance.isDown){
wasDown = false;
}
}else if ( GlobalPointer.instance.isDown){
onSubmit( null, input);
return;
}
input._hiddenInput.focus();
}
}
}