gem-graph-client/docs/GTK-docs/gnome-dev-guidelines/developer.gnome.org/hig/guidelines/pointer-touch.html

362 lines
21 KiB
HTML
Raw Normal View History

<!doctype html>
<html class="no-js">
<head><meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="Keyboard" href="keyboard.html" /><link rel="prev" title="App Icons" href="app-icons.html" />
<meta name="generator" content="sphinx-4.3.0, furo 2021.07.05.beta38"/>
<title>Pointer &amp; Touch - GNOME Human Interface Guidelines documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/styles/furo.css" />
<link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css" />
<link rel="stylesheet" type="text/css" href="../_static/gnome.css" />
<style>
:root {
--color-code-background: #f8f8f8;
--color-code-foreground: black;
--color-brand-primary: #4a86cf;
--color-brand-content: #4a86cf;
}
@media (prefers-color-scheme: dark) {
:root {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
}
/* For allowing end-user-specific overrides */
.override-light {
--color-code-background: #f8f8f8;
--color-code-foreground: black;
--color-brand-primary: #4a86cf;
--color-brand-content: #4a86cf;
}
.override-dark {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
</style><link media="(prefers-color-scheme: dark)" rel="stylesheet" href="../_static/pygments_dark.css"></head>
<body dir="">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="svg-toc" viewBox="0 0 24 24">
<title>Contents</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke-width="1.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z"/>
<line x1="4" y1="6" x2="20" y2="6" />
<line x1="10" y1="12" x2="20" y2="12" />
<line x1="6" y1="18" x2="20" y2="18" />
</svg>
</symbol>
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="feather feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="feather feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
</svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
<label class="overlay sidebar-overlay" for="__navigation"></label>
<label class="overlay toc-overlay" for="__toc"></label>
<div class="page">
<header class="mobile-header">
<div class="header-left">
<label class="nav-overlay-icon" for="__navigation">
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label>
</div>
<div class="header-center">
<a href="../index.html"><div class="brand">GNOME Human Interface Guidelines</div></a>
</div>
<div class="header-right">
<label class="toc-overlay-icon toc-header-icon" for="__toc">
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
</header>
<aside class="sidebar-drawer">
<div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="../index.html">
<div class="sidebar-logo-container">
<img class="sidebar-logo" src="../_static/logo.svg" alt="Logo"/>
</div>
<span class="sidebar-brand-text">GNOME Human Interface Guidelines</span>
</a><form class="sidebar-search-container" method="get" action="../search.html">
<input class="sidebar-search" placeholder=Search name="q">
<input type="hidden" name="check_keywords" value="yes">
<input type="hidden" name="area" value="default">
</form><div class="sidebar-scroll"><div class="sidebar-tree">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../principles.html">Design Principles</a></li>
<li class="toctree-l1"><a class="reference internal" href="../resources.html">Tools &amp; Resources</a></li>
<li class="toctree-l1 current has-children"><a class="reference internal" href="../guidelines.html">Guidelines</a><input checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" type="checkbox"/><label for="toctree-checkbox-1"><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="app-naming.html">App Naming</a></li>
<li class="toctree-l2"><a class="reference internal" href="app-icons.html">App Icons</a></li>
<li class="toctree-l2 current current-page"><a class="current reference internal" href="#">Pointer &amp; Touch</a></li>
<li class="toctree-l2"><a class="reference internal" href="keyboard.html">Keyboard</a></li>
<li class="toctree-l2"><a class="reference internal" href="ui-icons.html">UI Icons</a></li>
<li class="toctree-l2"><a class="reference internal" href="ui-styling.html">UI Styling</a></li>
<li class="toctree-l2"><a class="reference internal" href="writing-style.html">Writing Style</a></li>
<li class="toctree-l2"><a class="reference internal" href="typography.html">Typography</a></li>
<li class="toctree-l2"><a class="reference internal" href="navigation.html">Navigation</a></li>
<li class="toctree-l2"><a class="reference internal" href="adaptive.html">Scaling &amp; Adaptiveness</a></li>
<li class="toctree-l2"><a class="reference internal" href="accessibility.html">Accessibility</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../patterns.html">Patterns</a><input class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" type="checkbox"/><label for="toctree-checkbox-2"><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2 has-children"><a class="reference internal" href="../patterns/containers.html">Containers</a><input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" type="checkbox"/><label for="toctree-checkbox-3"><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="../patterns/containers/windows.html">Windows</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/containers/header-bars.html">Header Bars</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/containers/popovers.html">Popovers</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/containers/utility-panes.html">Utility Panes</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/containers/boxed-lists.html">Boxed Lists</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/containers/grid-views.html">Grid Views</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/containers/list-column-views.html">List &amp; Column Views</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/containers/selection-mode.html">Selection &amp; Edit Modes</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../patterns/nav.html">Navigation</a><input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" type="checkbox"/><label for="toctree-checkbox-4"><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="../patterns/nav/browsing.html">Browsing</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/nav/view-switchers.html">View Switchers</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/nav/tabs.html">Tabs</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/nav/sidebars.html">Sidebars</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/nav/search.html">Search</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../patterns/controls.html">Controls</a><input class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" type="checkbox"/><label for="toctree-checkbox-5"><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="../patterns/controls/buttons.html">Buttons</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/controls/menus.html">Menus</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/controls/switches.html">Switches</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/controls/text-fields.html">Text Fields</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/controls/checkboxes.html">Checkboxes</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/controls/radio-buttons.html">Radio Buttons</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/controls/drop-downs.html">Drop-Down Lists</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/controls/sliders.html">Sliders</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/controls/spin-buttons.html">Spin Buttons</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/controls/overlaid.html">Overlaid Controls</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../patterns/feedback.html">Feedback</a><input class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" type="checkbox"/><label for="toctree-checkbox-6"><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="../patterns/feedback/notifications.html">Notifications</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/feedback/toasts.html">Toasts</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/feedback/info-bars.html">Info Bars</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/feedback/progress-bars.html">Progress Bars</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/feedback/spinners.html">Spinners</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/feedback/dialogs.html">Dialogs</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/feedback/placeholders.html">Placeholder Pages</a></li>
<li class="toctree-l3"><a class="reference internal" href="../patterns/feedback/tooltips.html">Tooltips</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../reference.html">Reference</a><input class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" type="checkbox"/><label for="toctree-checkbox-7"><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="../reference/keyboard.html">Standard Keyboard Shortcuts</a></li>
<li class="toctree-l2"><a class="reference internal" href="../reference/palette.html">Palette</a></li>
<li class="toctree-l2"><a class="reference internal" href="../reference/backgrounds.html">Backgrounds</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
</aside>
<main class="main">
<div class="content">
<article role="main">
<label class="toc-overlay-icon toc-content-icon" for="__toc">
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
<section id="pointer-touch">
<h1>Pointer &amp; Touch<a class="headerlink" href="#pointer-touch" title="Permalink to this headline"></a></h1>
<p>A pointing device is any input device that allows the manipulation of a pointer — typically represented as an arrow, and often called a cursor — on screen. While mice and touchpads are the most common pointing devices, there are many others, including graphics tablets, track balls, track points and joysticks.</p>
<p>While there is no visible pointer when using touchscreens, they fulfill the same role as other pointing devices.</p>
<section id="general-guidelines">
<h2>General Guidelines<a class="headerlink" href="#general-guidelines" title="Permalink to this headline"></a></h2>
<p>User interface designs should be easy to use with the full range of pointing devices. The only exception to this rule is apps which have specialist input devices associated with them. For example, games might provide features that are specific to game controllers, or specialist graphics apps might expect a graphics tablet to be used. If an app requires a specific type of device in order to be used, this expectation should be clearly communicated to the user.</p>
<p>Designs should also be easy to use with a range of physical abilities. People and situations can vary enormously in terms of how precise and controlled pointer interaction can be. It is therefore important to design for contexts where pointer accuracy and control is low.</p>
<p>To achieve this broad level of accessibility, the following guidelines should be followed:</p>
<ul class="simple">
<li><p>Click targets should be large enough to be comfortably used with different pointing devices and physical abilities.</p></li>
<li><p>Buttons and controls which are only available on some pointing devices should not be exclusively relied upon for particular actions.</p></li>
<li><p>Actions which are physically challenging to accomplish, such as double-clicking or chording (pressing multiple buttons simultaneously), should be avoided.</p></li>
<li><p>Because designs should generally be input device agnostic, specific input devices or input device buttons should not be referenced in user interfaces. For example, text should not instruct users to “move the mouse”.</p></li>
<li><p>Pointer hover should not be relied upon for revealing actions or essential information.</p></li>
</ul>
<p>In addition, all actions which can be accomplished with a pointing device should also be possible with a <a class="reference internal" href="keyboard.html"><span class="doc">keyboard</span></a>.</p>
</section>
<section id="primary-secondary-actions">
<h2>Primary &amp; Secondary Actions<a class="headerlink" href="#primary-secondary-actions" title="Permalink to this headline"></a></h2>
<p>The primary and secondary action are the most basic actions which are expected to work in the same manner for all pointing devices. The primary action activates, opens or selects. The secondary action should display additional actions for whatever is being pointed at, typically through a context menu. Secondary actions should:</p>
<ul class="simple">
<li><p>not be used for additional alternative actions, such as delete or remove</p></li>
<li><p>only provide a context menu if there is a set of relevant menu items to expose</p></li>
<li><p>be accessible with a <a class="reference internal" href="keyboard.html"><span class="doc">keyboard</span></a>.</p></li>
</ul>
<p>While some mice have a third “middle” button, it is not recommended to make use of this in application designs.</p>
</section>
<section id="scrolling-panning-zooming">
<h2>Scrolling, Panning &amp; Zooming<a class="headerlink" href="#scrolling-panning-zooming" title="Permalink to this headline"></a></h2>
<p>Scrolling moves a view along a single (typically vertical) axis, and is typical for web pages and documents. Panning moves the view along two axes, and is seen in image viewers and maps.</p>
<p>Views which scroll and dont pan should use the following behaviors:</p>
<div class="table-wrapper"><table class="colwidths-given docutils align-default">
<colgroup>
<col style="width: 10%"/>
<col style="width: 30%"/>
<col style="width: 30%"/>
<col style="width: 30%"/>
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Operation</p></th>
<th class="head"><p>Mouse</p></th>
<th class="head"><p>Touchpad</p></th>
<th class="head"><p>Touchscreen</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Scroll</p></td>
<td><p>Scroll wheel</p></td>
<td><p>Two-finger drag</p></td>
<td><p>Single-finger drag</p></td>
</tr>
<tr class="row-odd"><td><p>Zoom</p></td>
<td><p>Ctrl+scroll wheel</p></td>
<td><p>Pinch</p></td>
<td><p>Pinch</p></td>
</tr>
</tbody>
</table></div>
<p>Alternatively, views which pan rather than scroll should use the following behaviors:</p>
<div class="table-wrapper"><table class="colwidths-given docutils align-default">
<colgroup>
<col style="width: 10%"/>
<col style="width: 30%"/>
<col style="width: 30%"/>
<col style="width: 30%"/>
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Operation</p></th>
<th class="head"><p>Mouse</p></th>
<th class="head"><p>Touchpad</p></th>
<th class="head"><p>Touchscreen</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Pan</p></td>
<td><p>Click+drag</p></td>
<td><p>Click+drag or tap then drag</p></td>
<td><p>Single-finger drag</p></td>
</tr>
<tr class="row-odd"><td><p>Zoom</p></td>
<td><p>Scroll wheel</p></td>
<td><p>Two-finger drag / pinch</p></td>
<td><p>Pinch</p></td>
</tr>
</tbody>
</table></div>
</section>
<section id="additional-guidelines">
<h2>Additional Guidelines<a class="headerlink" href="#additional-guidelines" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Pressing <em>Esc</em> while a pointer operation is in progress should cancel it. For example, while dragging and dropping a file or drawing a shape.</p></li>
<li><p>In GNOME, three and four finger gestures are reserved for use by the system, so these should be avoided by applications. This includes both touchpad and touchscreen gestures. Drags from the top and bottom screen edges are also reserved.</p></li>
<li><p>Apps are free to use two finger gestures as well as drags from the left and right screen edge.</p></li>
</ul>
</section>
</section>
</article>
<footer>
<div class="related-pages">
<a class="next-page" href="keyboard.html">
<div class="page-info">
<div class="context">
<span>Next</span>
</div>
<div class="title">Keyboard</div>
</div>
<svg><use href="#svg-arrow-right"></use></svg>
</a>
<a class="prev-page" href="app-icons.html">
<svg><use href="#svg-arrow-right"></use></svg>
<div class="page-info">
<div class="context">
<span>Previous</span>
</div>
<div class="title">App Icons</div>
</div>
</a>
</div>
</footer>
</div>
<aside class="toc-drawer">
<div class="toc-sticky toc-scroll">
<div class="toc-title-container">
<span class="toc-title">
Contents
</span>
</div>
<div class="toc-tree-container">
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">Pointer &amp; Touch</a><ul>
<li><a class="reference internal" href="#general-guidelines">General Guidelines</a></li>
<li><a class="reference internal" href="#primary-secondary-actions">Primary &amp; Secondary Actions</a></li>
<li><a class="reference internal" href="#scrolling-panning-zooming">Scrolling, Panning &amp; Zooming</a></li>
<li><a class="reference internal" href="#additional-guidelines">Additional Guidelines</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</aside>
</main>
</div><script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/scripts/main.js"></script>
</body>
</html>