@@ -53,6 +53,7 @@ Object.assign(pc, function () {
53
53
54
54
this . _visualState = VisualState . DEFAULT ;
55
55
this . _isHovering = false ;
56
+ this . _hoveringCounter = 0 ;
56
57
this . _isPressed = false ;
57
58
58
59
this . _defaultTint = new pc . Color ( 1 , 1 , 1 , 1 ) ;
@@ -150,6 +151,10 @@ Object.assign(pc, function () {
150
151
this . entity . element [ onOrOff ] ( 'touchend' , this . _onTouchEnd , this ) ;
151
152
this . entity . element [ onOrOff ] ( 'touchleave' , this . _onTouchLeave , this ) ;
152
153
this . entity . element [ onOrOff ] ( 'touchcancel' , this . _onTouchCancel , this ) ;
154
+ this . entity . element [ onOrOff ] ( 'selectstart' , this . _onSelectStart , this ) ;
155
+ this . entity . element [ onOrOff ] ( 'selectend' , this . _onSelectEnd , this ) ;
156
+ this . entity . element [ onOrOff ] ( 'selectenter' , this . _onSelectEnter , this ) ;
157
+ this . entity . element [ onOrOff ] ( 'selectleave' , this . _onSelectLeave , this ) ;
153
158
this . entity . element [ onOrOff ] ( 'click' , this . _onClick , this ) ;
154
159
155
160
this . _hasHitElementListeners = isAdding ;
@@ -278,6 +283,41 @@ Object.assign(pc, function () {
278
283
this . _fireIfActive ( 'touchcancel' , event ) ;
279
284
} ,
280
285
286
+ _onSelectStart : function ( event ) {
287
+ this . _isPressed = true ;
288
+ this . _updateVisualState ( ) ;
289
+ this . _fireIfActive ( 'selectstart' , event ) ;
290
+ } ,
291
+
292
+ _onSelectEnd : function ( event ) {
293
+ this . _isPressed = false ;
294
+ this . _updateVisualState ( ) ;
295
+ this . _fireIfActive ( 'selectend' , event ) ;
296
+ } ,
297
+
298
+ _onSelectEnter : function ( event ) {
299
+ this . _hoveringCounter ++ ;
300
+
301
+ if ( this . _hoveringCounter === 1 ) {
302
+ this . _isHovering = true ;
303
+ this . _updateVisualState ( ) ;
304
+ }
305
+
306
+ this . _fireIfActive ( 'selectenter' , event ) ;
307
+ } ,
308
+
309
+ _onSelectLeave : function ( event ) {
310
+ this . _hoveringCounter -- ;
311
+
312
+ if ( this . _hoveringCounter === 0 ) {
313
+ this . _isHovering = false ;
314
+ this . _isPressed = false ;
315
+ this . _updateVisualState ( ) ;
316
+ }
317
+
318
+ this . _fireIfActive ( 'selectleave' , event ) ;
319
+ } ,
320
+
281
321
_onClick : function ( event ) {
282
322
this . _fireIfActive ( 'click' , event ) ;
283
323
} ,
@@ -524,6 +564,34 @@ Object.assign(pc, function () {
524
564
* @param {pc.ElementTouchEvent } event - The event.
525
565
*/
526
566
567
+ /**
568
+ * @event
569
+ * @name pc.ButtonComponent#selectstart
570
+ * @description Fired when a xr select starts on the component.
571
+ * @param {pc.ElementSelectEvent } event - The event.
572
+ */
573
+
574
+ /**
575
+ * @event
576
+ * @name pc.ButtonComponent#selectend
577
+ * @description Fired when a xr select ends on the component.
578
+ * @param {pc.ElementSelectEvent } event - The event.
579
+ */
580
+
581
+ /**
582
+ * @event
583
+ * @name pc.ButtonComponent#selectenter
584
+ * @description Fired when a xr select now hovering over the component.
585
+ * @param {pc.ElementSelectEvent } event - The event.
586
+ */
587
+
588
+ /**
589
+ * @event
590
+ * @name pc.ButtonComponent#selectleave
591
+ * @description Fired when a xr select not hovering over the component.
592
+ * @param {pc.ElementSelectEvent } event - The event.
593
+ */
594
+
527
595
/**
528
596
* @event
529
597
* @name pc.ButtonComponent#hoverstart
0 commit comments