blob: 2658af3d62e7f38e1d6615ac93840ea6966a1776 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (21) on Thu Oct 05 19:54:57 CEST 2023 -->
<title>GestureFollower (Apache SIS 1.4 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2023-10-05">
<meta name="description" content="declaration: module: org.apache.sis.gui, package: org.apache.sis.gui.map, class: GestureFollower">
<meta name="generator" content="javadoc/ClassWriterImpl">
<meta name="keywords" content="org.apache.sis.gui.map.GestureFollower class">
<meta name="keywords" content="transformEnabled">
<meta name="keywords" content="cursorEnabled">
<meta name="keywords" content="getSourceDisplayPOI()">
<meta name="keywords" content="handle()">
<meta name="keywords" content="filter()">
<meta name="keywords" content="transformedSource()">
<meta name="keywords" content="dispose()">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../sis.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.6.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
<ul class="sub-nav-list-small">
<li>
<p>Summary:</p>
<ul>
<li>Nested</li>
<li><a href="#field-summary">Field</a></li>
<li><a href="#constructor-summary">Constr</a></li>
<li><a href="#method-summary">Method</a></li>
</ul>
</li>
<li>
<p>Detail:</p>
<ul>
<li><a href="#field-detail">Field</a></li>
<li><a href="#constructor-detail">Constr</a></li>
<li><a href="#method-detail">Method</a></li>
</ul>
</li>
</ul>
</div>
<div class="sub-nav">
<div id="navbar-sub-list">
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><a href="../../../../../../search.html">SEARCH</a>
<input type="text" id="search-input" disabled placeholder="Search">
<input type="reset" id="reset-button" disabled value="reset">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../../../../module-summary.html">org.apache.sis.gui</a></div>
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.sis.gui.map</a></div>
<h1 title="Class GestureFollower" class="title">Class GestureFollower</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>
<div class="inheritance"><a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html" title="class in org.apache.sis.portrayal">CanvasFollower</a>
<div class="inheritance">GestureFollower</div>
</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/beans/PropertyChangeListener.html" title="class or interface in java.beans" class="external-link">Property­Change­Listener</a></code>, <code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/EventListener.html" title="class or interface in java.util" class="external-link">Event­Listener</a></code>, <code><a href="https://openjfx.io/javadoc/21/javafx.base/javafx/event/EventHandler.html" title="class or interface in javafx.event" class="external-link">Event­Handler</a>&lt;<a href="https://openjfx.io/javadoc/21/javafx.graphics/javafx/scene/input/MouseEvent.html" title="class or interface in javafx.scene.input" class="external-link">Mouse­Event</a>&gt;</code>, <code><a href="../../../../../../org.apache.sis.util/org/apache/sis/util/Disposable.html" title="interface in org.apache.sis.util">Disposable</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public class </span><span class="element-name type-name-label">GestureFollower</span>
<span class="extends-implements">extends <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html" title="class in org.apache.sis.portrayal">CanvasFollower</a>
implements <a href="https://openjfx.io/javadoc/21/javafx.base/javafx/event/EventHandler.html" title="class or interface in javafx.event" class="external-link">EventHandler</a>&lt;<a href="https://openjfx.io/javadoc/21/javafx.graphics/javafx/scene/input/MouseEvent.html" title="class or interface in javafx.scene.input" class="external-link">MouseEvent</a>&gt;</span></div>
<div class="block">A listener of mouse or keyboard events in a source canvas which can be reproduced in a target canvas.
This listener can reproduce the "real world" displacements documented in <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html" title="class in org.apache.sis.portrayal">parent class</a>.
In addition, this class can also follow mouse movements in source canvas and move a cursor in the target canvas
at the same "real world" position.
<h2 id="listeners-heading">Listeners</h2>
<code>Gesture­Follower</code> listeners need to be registered explicitly by a call to the <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#initialize()"><code>Canvas­Follower​.initialize()</code></a> method.
The <a href="#dispose()"><code>dispose()</code></a> convenience method is provided for unregistering all those listeners.
<h2 id="multi-threading-heading">Multi-threading</h2>
This class is <strong>not</strong> thread-safe.
All events should be processed in the JavaFX thread.</div>
<dl class="notes">
<dt>Since:</dt>
<dd>1.3</dd>
</dl>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>final <a href="https://openjfx.io/javadoc/21/javafx.base/javafx/beans/property/BooleanProperty.html" title="class or interface in javafx.beans.property" class="external-link">Boolean­Property</a></code></div>
<div class="col-second even-row-color"><code><a href="#cursorEnabled" class="member-name-link">cursor­Enabled</a></code></div>
<div class="col-last even-row-color">
<div class="block">Whether mouse position in source canvas should be shown by a cursor in the target canvas.</div>
</div>
<div class="col-first odd-row-color"><code>final <a href="https://openjfx.io/javadoc/21/javafx.base/javafx/beans/property/BooleanProperty.html" title="class or interface in javafx.beans.property" class="external-link">Boolean­Property</a></code></div>
<div class="col-second odd-row-color"><code><a href="#transformEnabled" class="member-name-link">transform­Enabled</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Whether changes in the "objective to display" transforms should be propagated from source to target canvas.</div>
</div>
</div>
<div class="inherited-list">
<h3 id="fields-inherited-from-class-CanvasFollower">Fields inherited from class&nbsp;<a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html" title="class in org.apache.sis.portrayal">CanvasFollower</a></h3>
<code><a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#source">source</a>, <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#target">target</a></code></div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(org.apache.sis.gui.map.MapCanvas,org.apache.sis.gui.map.MapCanvas)" class="member-name-link">Gesture­Follower</a><wbr>(<a href="MapCanvas.html" title="class in org.apache.sis.gui.map">Map­Canvas</a>&nbsp;source,
<a href="MapCanvas.html" title="class in org.apache.sis.gui.map">Map­Canvas</a>&nbsp;target)</code></div>
<div class="col-last even-row-color">
<div class="block">Creates a new listener for synchronizing "objective to display" transform changes and cursor position
between the specified canvas.</div>
</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#dispose()" class="member-name-link">dispose</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Removes all listeners registered by this <code>Gesture­Follower</code> instance.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#filter(org.apache.sis.portrayal.TransformChangeEvent)" class="member-name-link">filter</a><wbr>(<a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/TransformChangeEvent.html" title="class in org.apache.sis.portrayal">Transform­Change­Event</a>&nbsp;event)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns <code>true</code> if this listener should replicate the following changes on the target canvas.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Optional.html" title="class or interface in java.util" class="external-link">Optional</a><wbr>&lt;<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/geom/Point2D.html" title="class or interface in java.awt.geom" class="external-link">Point2D</a>&gt;</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getSourceDisplayPOI()" class="member-name-link">get­Source­Display­POI</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns the position for the mouse cursor in the source canvas if that position is known.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#handle(javafx.scene.input.MouseEvent)" class="member-name-link">handle</a><wbr>(<a href="https://openjfx.io/javadoc/21/javafx.graphics/javafx/scene/input/MouseEvent.html" title="class or interface in javafx.scene.input" class="external-link">Mouse­Event</a>&nbsp;event)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Invoked when the mouse position changed.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#transformedSource(org.apache.sis.portrayal.TransformChangeEvent)" class="member-name-link">transformed­Source</a><wbr>(<a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/TransformChangeEvent.html" title="class in org.apache.sis.portrayal">Transform­Change­Event</a>&nbsp;event)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Invoked after the source "objective to display" transform has been updated.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-CanvasFollower">Methods inherited from class&nbsp;<a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html" title="class in org.apache.sis.portrayal">CanvasFollower</a></h3>
<code><a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#getDisplayTransform()">get­Display­Transform</a>, <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#getFollowRealWorld()">get­Follow­Real­World</a>, <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#getSourceObjectivePOI()">get­Source­Objective­POI</a>, <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#initialize()">initialize</a>, <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#isDisabled()">is­Disabled</a>, <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#propertyChange(java.beans.PropertyChangeEvent)">property­Change</a>, <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#setDisabled(boolean)">set­Disabled</a>, <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#setFollowRealWorld(boolean)">set­Follow­Real­World</a>, <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#transformDisplayCoordinates(org.apache.sis.portrayal.TransformChangeEvent,java.awt.geom.AffineTransform)">transform­Display­Coordinates</a>, <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#transformedTarget(org.apache.sis.portrayal.TransformChangeEvent)">transformed­Target</a>, <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#transformObjectiveCoordinates(org.apache.sis.portrayal.TransformChangeEvent,java.awt.geom.AffineTransform)">transform­Objective­Coordinates</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-Object">Methods inherited from class&nbsp;<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">get­Class</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hash­Code</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notify­All</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">to­String</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="transformEnabled">
<h3>transformEnabled</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="https://openjfx.io/javadoc/21/javafx.base/javafx/beans/property/BooleanProperty.html" title="class or interface in javafx.beans.property" class="external-link">BooleanProperty</a></span>&nbsp;<span class="element-name">transformEnabled</span></div>
<div class="block">Whether changes in the "objective to display" transforms should be propagated from source to target canvas.
The default value is <code>false</code>; this property needs to be enabled explicitly by caller if desired.</div>
</section>
</li>
<li>
<section class="detail" id="cursorEnabled">
<h3>cursorEnabled</h3>
<div class="member-signature"><span class="modifiers">public final</span>&nbsp;<span class="return-type"><a href="https://openjfx.io/javadoc/21/javafx.base/javafx/beans/property/BooleanProperty.html" title="class or interface in javafx.beans.property" class="external-link">BooleanProperty</a></span>&nbsp;<span class="element-name">cursorEnabled</span></div>
<div class="block">Whether mouse position in source canvas should be shown by a cursor in the target canvas.
The default value is <code>false</code>; this property needs to be enabled explicitly by caller if desired.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(org.apache.sis.gui.map.MapCanvas,org.apache.sis.gui.map.MapCanvas)">
<h3>GestureFollower</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">GestureFollower</span><wbr><span class="parameters">(<a href="MapCanvas.html" title="class in org.apache.sis.gui.map">MapCanvas</a>&nbsp;source,
<a href="MapCanvas.html" title="class in org.apache.sis.gui.map">MapCanvas</a>&nbsp;target)</span></div>
<div class="block">Creates a new listener for synchronizing "objective to display" transform changes and cursor position
between the specified canvas. This is a unidirectional binding: changes in source are applied on target,
but not the converse.
<p>Caller needs to register listeners by a call to the <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#initialize()"><code>Canvas­Follower​.initialize()</code></a> method.
This is not done automatically by this constructor for allowing users to control
when to start listening to changes.</p></div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>source</code> - the canvas which is the source of zoom, pan or rotation events.</dd>
<dd><code>target</code> - the canvas on which to apply the changes of zoom, pan or rotation.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="getSourceDisplayPOI()">
<h3>getSourceDisplayPOI</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Optional.html" title="class or interface in java.util" class="external-link">Optional</a>&lt;<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/geom/Point2D.html" title="class or interface in java.awt.geom" class="external-link">Point2D</a>&gt;</span>&nbsp;<span class="element-name">getSourceDisplayPOI</span>()</div>
<div class="block">Returns the position for the mouse cursor in the source canvas if that position is known.
This information is used when the source and target canvases do not use the same CRS.
<code>Gesture­Follower</code> tries to transform the canvas views in such a way that the
"real world" change is the same for both canvas at that location.
<p>The returned value is "live"; it may change with mouse and gesture events.
Callers should not modify that value, and copy it if they need to keep it.</p></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#getSourceDisplayPOI()">get­Source­Display­POI</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html" title="class in org.apache.sis.portrayal">Canvas­Follower</a></code></dd>
<dt>Returns:</dt>
<dd>mouse position in source canvas where displacements, zooms and rotations
applied on the source canvas should be mirrored exactly on the target canvas.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="handle(javafx.scene.input.MouseEvent)">
<h3>handle</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">handle</span><wbr><span class="parameters">(<a href="https://openjfx.io/javadoc/21/javafx.graphics/javafx/scene/input/MouseEvent.html" title="class or interface in javafx.scene.input" class="external-link">MouseEvent</a>&nbsp;event)</span></div>
<div class="block">Invoked when the mouse position changed. This method should be invoked only if
<a href="#cursorEnabled"><code>cursor­Enabled</code></a> is <code>true</code> (this is not verified by this method).</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="https://openjfx.io/javadoc/21/javafx.base/javafx/event/EventHandler.html#handle(T)" title="class or interface in javafx.event" class="external-link">handle</a></code>&nbsp;in interface&nbsp;<code><a href="https://openjfx.io/javadoc/21/javafx.base/javafx/event/EventHandler.html" title="class or interface in javafx.event" class="external-link">Event­Handler</a>&lt;<a href="https://openjfx.io/javadoc/21/javafx.graphics/javafx/scene/input/MouseEvent.html" title="class or interface in javafx.scene.input" class="external-link">Mouse­Event</a>&gt;</code></dd>
<dt>Parameters:</dt>
<dd><code>event</code> - the enter, exit or move event.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="filter(org.apache.sis.portrayal.TransformChangeEvent)">
<h3>filter</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">filter</span><wbr><span class="parameters">(<a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/TransformChangeEvent.html" title="class in org.apache.sis.portrayal">TransformChangeEvent</a>&nbsp;event)</span></div>
<div class="block">Returns <code>true</code> if this listener should replicate the following changes on the target canvas.
This implementation returns <code>true</code> if the transform reason is <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/TransformChangeEvent.Reason.html#INTERIM"><code>Transform­Change­Event​.Reason​.INTERIM</code></a>.
It allows immediate feedback to users without waiting for the background thread to complete rendering.</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#filter(org.apache.sis.portrayal.TransformChangeEvent)">filter</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html" title="class in org.apache.sis.portrayal">Canvas­Follower</a></code></dd>
<dt>Parameters:</dt>
<dd><code>event</code> - a transform change event that occurred on the source canvas.</dd>
<dt>Returns:</dt>
<dd>whether to replicate that change on the target canvas.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="transformedSource(org.apache.sis.portrayal.TransformChangeEvent)">
<h3>transformedSource</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">transformedSource</span><wbr><span class="parameters">(<a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/TransformChangeEvent.html" title="class in org.apache.sis.portrayal">TransformChangeEvent</a>&nbsp;event)</span></div>
<div class="block">Invoked after the source "objective to display" transform has been updated.
This implementation adjusts the cursor position for compensating the relative change in mouse position.
<h4 id="details-heading">Details</h4>
If the map moved in the <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#source">source</a> canvas without a change of mouse cursor position
(for example if the user navigates using the keyboard), then the mouse position changed relatively to
the map, so the cursor position on the <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#target">target</a> canvas needs to be updated accordingly.
This is a temporary change applied until the next <a href="https://openjfx.io/javadoc/21/javafx.graphics/javafx/scene/input/MouseEvent.html" title="class or interface in javafx.scene.input" class="external-link"><code>Mouse­Event</code></a> gives us new mouse coordinates relative
to the map.</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#transformedSource(org.apache.sis.portrayal.TransformChangeEvent)">transformed­Source</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html" title="class in org.apache.sis.portrayal">Canvas­Follower</a></code></dd>
<dt>Parameters:</dt>
<dd><code>event</code> - the change which has been applied on the <a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#source">CanvasFollower.source</a> canvas.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="dispose()">
<h3>dispose</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">dispose</span>()</div>
<div class="block">Removes all listeners registered by this <code>Gesture­Follower</code> instance.
This method should be invoked when <code>Gesture­Follower</code> is no longer needed,
in order to avoid memory leak.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="../../../../../../org.apache.sis.util/org/apache/sis/util/Disposable.html#dispose()">dispose</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org.apache.sis.util/org/apache/sis/util/Disposable.html" title="interface in org.apache.sis.util">Disposable</a></code></dd>
<dt>Overrides:</dt>
<dd><code><a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#dispose()">dispose</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html" title="class in org.apache.sis.portrayal">Canvas­Follower</a></code></dd>
<dt>See Also:</dt>
<dd>
<ul class="tag-list">
<li><a href="../../../../../../org.apache.sis.portrayal/org/apache/sis/portrayal/CanvasFollower.html#initialize()"><code>Canvas­Follower​.initialize()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
</div>
</div>
</body>
</html>