Browse Source

Add handling wheel

pull/4418/head
Rustam Sayfutdinov 6 years ago
parent
commit
851c03fa70
  1. 26
      src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs
  2. 11
      src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/src/FramePresenter.tsx
  3. 2
      src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/src/Models/Input/PointerEventMessageBase.ts
  4. 2
      src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/src/Models/Input/PointerMovedEventMessage.ts
  5. 4
      src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/src/Models/Input/PointerPressedEventMessage.ts
  6. 4
      src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/src/Models/Input/PointerReleasedEventMessage.ts
  7. 17
      src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/src/Models/Input/ScrollEventMessage.ts

26
src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs

@ -135,9 +135,9 @@ namespace Avalonia.DesignerSupport.Remote.HtmlTransport
new InputProtocol.PointerReleasedEventMessage new InputProtocol.PointerReleasedEventMessage
{ {
Modifiers = ParseInputModifiers(parts[1]), Modifiers = ParseInputModifiers(parts[1]),
Button = ParseMouseButton(parts[2]), X = double.Parse(parts[2]),
X = double.Parse(parts[3]), Y = double.Parse(parts[3]),
Y = double.Parse(parts[4]), Button = ParseMouseButton(parts[4]),
}); });
break; break;
} }
@ -148,9 +148,9 @@ namespace Avalonia.DesignerSupport.Remote.HtmlTransport
new InputProtocol.PointerPressedEventMessage new InputProtocol.PointerPressedEventMessage
{ {
Modifiers = ParseInputModifiers(parts[1]), Modifiers = ParseInputModifiers(parts[1]),
Button = ParseMouseButton(parts[2]), X = double.Parse(parts[2]),
X = double.Parse(parts[3]), Y = double.Parse(parts[3]),
Y = double.Parse(parts[4]), Button = ParseMouseButton(parts[4]),
}); });
break; break;
} }
@ -166,6 +166,20 @@ namespace Avalonia.DesignerSupport.Remote.HtmlTransport
}); });
break; break;
} }
case "scroll":
{
_onMessage?.Invoke(
this,
new InputProtocol.ScrollEventMessage
{
Modifiers = ParseInputModifiers(parts[1]),
X = double.Parse(parts[2]),
Y = double.Parse(parts[3]),
DeltaX = double.Parse(parts[4]),
DeltaY = double.Parse(parts[5]),
});
break;
}
} }
} }
} }

11
src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/src/FramePresenter.tsx

@ -3,6 +3,7 @@ import {PreviewerFrame, PreviewerServerConnection} from "src/PreviewerServerConn
import {PointerPressedEventMessage} from "src/Models/Input/PointerPressedEventMessage"; import {PointerPressedEventMessage} from "src/Models/Input/PointerPressedEventMessage";
import {PointerReleasedEventMessage} from "src/Models/Input/PointerReleasedEventMessage"; import {PointerReleasedEventMessage} from "src/Models/Input/PointerReleasedEventMessage";
import {PointerMovedEventMessage} from "src/Models/Input/PointerMovedEventMessage"; import {PointerMovedEventMessage} from "src/Models/Input/PointerMovedEventMessage";
import {ScrollEventMessage} from "src/Models/Input/ScrollEventMessage";
interface PreviewerPresenterProps { interface PreviewerPresenterProps {
conn: PreviewerServerConnection; conn: PreviewerServerConnection;
@ -22,6 +23,7 @@ export class PreviewerPresenter extends React.Component<PreviewerPresenterProps>
this.handleMouseDown = this.handleMouseDown.bind(this); this.handleMouseDown = this.handleMouseDown.bind(this);
this.handleMouseUp = this.handleMouseUp.bind(this); this.handleMouseUp = this.handleMouseUp.bind(this);
this.handleMouseMove = this.handleMouseMove.bind(this); this.handleMouseMove = this.handleMouseMove.bind(this);
this.handleWheel = this.handleWheel.bind(this);
} }
componentDidMount(): void { componentDidMount(): void {
@ -73,10 +75,17 @@ export class PreviewerPresenter extends React.Component<PreviewerPresenterProps>
this.props.conn.sendMouseEvent(pointerMovedEventMessage); this.props.conn.sendMouseEvent(pointerMovedEventMessage);
} }
handleWheel(e: React.WheelEvent) {
e.preventDefault();
const scrollEventMessage = new ScrollEventMessage(e);
this.props.conn.sendMouseEvent(scrollEventMessage);
}
render() { render() {
return <canvas ref={this.canvasRef} return <canvas ref={this.canvasRef}
onMouseDown={this.handleMouseDown} onMouseDown={this.handleMouseDown}
onMouseUp={this.handleMouseUp} onMouseUp={this.handleMouseUp}
onMouseMove={this.handleMouseMove} /> onMouseMove={this.handleMouseMove}
onWheel={this.handleWheel} />
} }
} }

2
src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/src/Models/Input/PointerEventMessageBase.ts

@ -6,7 +6,7 @@ export abstract class PointerEventMessageBase extends InputEventMessageBase {
public readonly y: number; public readonly y: number;
protected constructor(e: React.MouseEvent) { protected constructor(e: React.MouseEvent) {
super(e) super(e);
this.x = e.clientX; this.x = e.clientX;
this.y = e.clientY; this.y = e.clientY;
} }

2
src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/src/Models/Input/PointerMovedEventMessage.ts

@ -3,7 +3,7 @@ import {PointerEventMessageBase} from "src/Models/Input/PointerEventMessageBase"
export class PointerMovedEventMessage extends PointerEventMessageBase { export class PointerMovedEventMessage extends PointerEventMessageBase {
constructor(e: React.MouseEvent) { constructor(e: React.MouseEvent) {
super(e) super(e);
} }
public toString = () : string => { public toString = () : string => {

4
src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/src/Models/Input/PointerPressedEventMessage.ts

@ -7,11 +7,11 @@ export class PointerPressedEventMessage extends PointerEventMessageBase {
public readonly button: MouseButton public readonly button: MouseButton
constructor(e: React.MouseEvent) { constructor(e: React.MouseEvent) {
super(e) super(e);
this.button = getMouseButton(e); this.button = getMouseButton(e);
} }
public toString = () : string => { public toString = () : string => {
return `pointer-pressed:${this.modifiers}:${this.button}:${this.x}:${this.y}`; return `pointer-pressed:${this.modifiers}:${this.x}:${this.y}:${this.button}`;
} }
} }

4
src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/src/Models/Input/PointerReleasedEventMessage.ts

@ -7,11 +7,11 @@ export class PointerReleasedEventMessage extends PointerEventMessageBase {
public readonly button: MouseButton public readonly button: MouseButton
constructor(e: React.MouseEvent) { constructor(e: React.MouseEvent) {
super(e) super(e);
this.button = getMouseButton(e); this.button = getMouseButton(e);
} }
public toString = () : string => { public toString = () : string => {
return `pointer-released:${this.modifiers}:${this.button}:${this.x}:${this.y}`; return `pointer-released:${this.modifiers}:${this.x}:${this.y}:${this.button}`;
} }
} }

17
src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/src/Models/Input/ScrollEventMessage.ts

@ -0,0 +1,17 @@
import * as React from "react";
import {PointerEventMessageBase} from "src/Models/Input/PointerEventMessageBase";
export class ScrollEventMessage extends PointerEventMessageBase {
public readonly deltaX: number;
public readonly deltaY: number;
constructor(e: React.WheelEvent) {
super(e);
this.deltaX = -e.deltaX;
this.deltaY = -e.deltaY;
}
public toString = () : string => {
return `scroll:${this.modifiers}:${this.x}:${this.y}:${this.deltaX}:${this.deltaY}`;
}
}
Loading…
Cancel
Save