From adbad553776f6b28e8ae7448d34daafdb9b02fc1 Mon Sep 17 00:00:00 2001 From: Rick Calixte <10281587+rcalixte@users.noreply.github.com> Date: Mon, 9 Oct 2023 20:11:24 -0400 Subject: [PATCH] Add support for PDF output --- .github/LICENSE | 427 ++++++++++++++++++ .github/workflows/main.yml | 46 ++ .gitignore | 1 + README.md | 35 ++ deeplists.tex | 24 + pandoc-docker.sh | 15 + pandoc-en-US.yaml | 97 ++++ pandoc.sh | 31 ++ src/clipboard/data-offers.md | 2 +- src/clipboard/dnd.md | 2 +- src/introduction.md | 4 +- src/introduction/goals.md | 2 +- src/introduction/high-level-design.md | 26 +- src/introduction/package.md | 8 +- src/libwayland/event-loop.md | 2 +- src/libwayland/fds.md | 2 +- src/libwayland/interfaces.md | 2 +- src/libwayland/proxies.md | 2 +- src/libwayland/util.md | 2 +- src/libwayland/wayland-scanner.md | 2 +- src/protocol-design/design-patterns.md | 8 +- src/protocol-design/high-level.md | 2 +- src/protocol-design/interfaces-reqs-events.md | 8 +- src/protocol-design/wire-protocol.md | 8 +- src/protocol-extensions/clipboard.md | 2 +- src/protocol-extensions/desktop-shell.md | 2 +- src/protocol-extensions/misc.md | 2 +- .../pointer-constraints.md | 2 +- src/protocol-extensions/timing.md | 2 +- src/protocol-extensions/writing.md | 2 +- src/registry/binding.md | 2 +- src/registry/server-side.md | 2 +- src/seat.md | 6 +- src/seat/example.md | 12 +- src/seat/keyboard.md | 10 +- src/seat/pointer.md | 10 +- src/seat/touch.md | 12 +- src/seat/xkb.md | 4 +- src/surfaces-in-depth/damaging-surfaces.md | 2 +- src/surfaces-in-depth/frame-callbacks.md | 2 +- src/surfaces-in-depth/hidpi.md | 2 +- src/surfaces-in-depth/lifecycle.md | 2 +- src/surfaces-in-depth/subsurfaces.md | 2 +- src/surfaces-in-depth/surface-regions.md | 2 +- src/surfaces/compositor.md | 2 +- src/surfaces/dmabuf.md | 6 +- src/surfaces/roles.md | 2 +- src/surfaces/shared-memory.md | 10 +- src/surfaces/surface-roles.md | 2 +- src/wayland-display/creation.md | 6 +- src/wayland-display/event-loop.md | 8 +- src/xdg-shell-basics.md | 2 +- src/xdg-shell-basics/example-code.md | 2 +- src/xdg-shell-basics/xdg-surface.md | 2 +- src/xdg-shell-basics/xdg-toplevel.md | 2 +- src/xdg-shell-in-depth/configuration.md | 6 +- src/xdg-shell-in-depth/interactive.md | 4 +- src/xdg-shell-in-depth/popups.md | 10 +- src/xdg-shell-in-depth/positioners.md | 6 +- wayland-logo.png | Bin 0 -> 119559 bytes 60 files changed, 793 insertions(+), 117 deletions(-) create mode 100644 .github/LICENSE create mode 100644 .github/workflows/main.yml create mode 100644 README.md create mode 100644 deeplists.tex create mode 100755 pandoc-docker.sh create mode 100644 pandoc-en-US.yaml create mode 100755 pandoc.sh create mode 100644 wayland-logo.png diff --git a/.github/LICENSE b/.github/LICENSE new file mode 100644 index 0000000..cc3e245 --- /dev/null +++ b/.github/LICENSE @@ -0,0 +1,427 @@ +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + + including for purposes of Section 3(b); and + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..10d3308 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,46 @@ +--- +name: Generate PDF using Pandoc + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [ master ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "create_pdf" + create_pdf: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Pandoc Docker image v3.1.1.0 + container: + image: pandoc/latex:3.1.1.0 + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v4 + + # Run the PDF creation script in the container + - uses: docker://pandoc/latex:3.1.1.0 + with: + entrypoint: './pandoc-docker.sh' + + # Create an output with the shortened version of the commit SHA + - id: short_sha + env: + GITHUB_SHA: ${{ github.sha }} + run: echo "{short_sha}=${GITHUB_SHA::7}" >> $GITHUB_OUTPUT + + # Create a release with the PDFs as assets and the shortened SHA as the tag name + - uses: softprops/action-gh-release@v2 + with: + tag_name: v${{ steps.short_sha.outputs.short_sha }} + draft: false + files: | + *.pdf diff --git a/.gitignore b/.gitignore index 7585238..478c1b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ +*.pdf book diff --git a/README.md b/README.md new file mode 100644 index 0000000..f712598 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# WAYLAND BOOK + +This repository is a clone of the repository for [Wayland Book](https://wayland-book.com/), located at +[~sircmpwn/wayland-book](https://git.sr.ht/~sircmpwn/wayland-book). + +The original author of this work is [Drew DeVault](https://github.com/ddevault). + +## GENERATING A PDF + +Every commit or push to the master branch will generate a PDF that can then be +downloaded under the Releases tab. There are two local scripts available if +that is preferred as well. + +The PDF can also be generated on a local client by cloning this repository and +running `pandoc.sh` in a shell, assuming the dependencies below are installed +locally and accessible. + +The `pandoc-docker.sh` script can be used with the [pandoc/latex Docker images](https://hub.docker.com/r/pandoc/latex) +to similarly generate the same output PDF as the one in the Releases tab. + +## DEPENDENCIES + +The local execution of the script depends on two packages being installed: + +- pandoc +- tex + +Check with your distribution for how to install those packages. + +## CONTRIBUTING + +All issues to report or contributions to be made should be done upstream at the +source content repository linked above. This repository will then be rebased so +that a new PDF can be generated with the changes. The only exception would be +the case where something specific to the PDF generation should be addressed. diff --git a/deeplists.tex b/deeplists.tex new file mode 100644 index 0000000..a35480a --- /dev/null +++ b/deeplists.tex @@ -0,0 +1,24 @@ + \usepackage{enumitem} + \setlistdepth{9} + + \setlist[itemize,1]{label=$\bullet$} + \setlist[itemize,2]{label=$\bullet$} + \setlist[itemize,3]{label=$\bullet$} + \setlist[itemize,4]{label=$\bullet$} + \setlist[itemize,5]{label=$\bullet$} + \setlist[itemize,6]{label=$\bullet$} + \setlist[itemize,7]{label=$\bullet$} + \setlist[itemize,8]{label=$\bullet$} + \setlist[itemize,9]{label=$\bullet$} + \renewlist{itemize}{itemize}{9} + + \setlist[enumerate,1]{label=$\arabic*.$} + \setlist[enumerate,2]{label=$\alph*.$} + \setlist[enumerate,3]{label=$\roman*.$} + \setlist[enumerate,4]{label=$\arabic*.$} + \setlist[enumerate,5]{label=$\alpha*$} + \setlist[enumerate,6]{label=$\roman*.$} + \setlist[enumerate,7]{label=$\arabic*.$} + \setlist[enumerate,8]{label=$\alph*.$} + \setlist[enumerate,9]{label=$\roman*.$} + \renewlist{enumerate}{enumerate}{9} diff --git a/pandoc-docker.sh b/pandoc-docker.sh new file mode 100755 index 0000000..e3ba44e --- /dev/null +++ b/pandoc-docker.sh @@ -0,0 +1,15 @@ +#! /bin/sh + +# Install dependencies for successful PDF generations +tlmgr install ctex enumitem float koma-script titling + +# Generate PDFs using pandoc +for filename in pandoc-*yaml; do + # Create variable for language based on filename + language=`echo $filename | cut -d'.' -f1 | cut -d'-' -f2-3` + + # Attempt to create the PDF + echo "Generating ${language} PDF..." + pandoc -d ${filename} + [[ $? -eq 0 ]] && echo "Success! The ${language} PDF has been successfully created!" +done diff --git a/pandoc-en-US.yaml b/pandoc-en-US.yaml new file mode 100644 index 0000000..0b1403b --- /dev/null +++ b/pandoc-en-US.yaml @@ -0,0 +1,97 @@ +--- +metadata: + title: The Wayland Protocol + author: Drew DeVault + category: "License: Creative Commons Attribution 4.0 International License" + keywords: + - "display server" + - "wayland" + - "xorg" + - "xwayland" +standalone: true +variables: + documentclass: scrbook + header-includes: + - \usepackage{graphicx} + - \usepackage{titling} + - \newcommand{\titlesc}[1]{\textsc{#1}} + - \pretitle{\begin{center}\includegraphics[width=2in]{wayland-logo.png}\\\LARGE\titlesc} + - \posttitle{\end{center}} + lang: en-US + links-as-notes: true + lot: false + lof: false + margin-top: 1.27cm + margin-left: .635cm + margin-right: .635cm + margin-bottom: 1.27cm + numbersections: true +table-of-contents: true +toc-depth: 2 +include-in-header: deeplists.tex +verbosity: ERROR +pdf-engine: xelatex +input-files: + - ./src/introduction.md + - ./src/introduction/high-level-design.md + - ./src/introduction/goals.md + - ./src/introduction/package.md + - ./src/protocol-design.md + - ./src/protocol-design/wire-protocol.md + - ./src/protocol-design/interfaces-reqs-events.md + - ./src/protocol-design/high-level.md + - ./src/protocol-design/design-patterns.md + - ./src/libwayland.md + - ./src/libwayland/util.md + - ./src/libwayland/wayland-scanner.md + - ./src/libwayland/proxies.md + - ./src/libwayland/interfaces.md +# - ./src/libwayland/event-loop.md +# - ./src/libwayland/fds.md + - ./src/wayland-display.md + - ./src/wayland-display/creation.md + - ./src/wayland-display/event-loop.md + - ./src/registry.md + - ./src/registry/binding.md + - ./src/registry/server-side.md + - ./src/surfaces.md + - ./src/surfaces/compositor.md + - ./src/surfaces/shared-memory.md + - ./src/surfaces/dmabuf.md + - ./src/surfaces/roles.md +# - ./src/surfaces/surface-roles.md + - ./src/xdg-shell-basics.md + - ./src/xdg-shell-basics/xdg-surface.md + - ./src/xdg-shell-basics/xdg-toplevel.md + - ./src/xdg-shell-basics/example-code.md + - ./src/surfaces-in-depth.md + - ./src/surfaces-in-depth/lifecycle.md + - ./src/surfaces-in-depth/frame-callbacks.md + - ./src/surfaces-in-depth/damaging-surfaces.md + - ./src/surfaces-in-depth/surface-regions.md + - ./src/surfaces-in-depth/subsurfaces.md + - ./src/surfaces-in-depth/hidpi.md + - ./src/seat.md + - ./src/seat/pointer.md + - ./src/seat/xkb.md + - ./src/seat/keyboard.md + - ./src/seat/touch.md + - ./src/seat/example.md + - ./src/xdg-shell-in-depth.md + - ./src/xdg-shell-in-depth/configuration.md + - ./src/xdg-shell-in-depth/popups.md + - ./src/xdg-shell-in-depth/interactive.md + - ./src/xdg-shell-in-depth/positioners.md +# - ./src/clipboard.md +# - ./src/clipboard/data-offers.md +# - ./src/clipboard/dnd.md +# - ./src/protocol-extensions.md +# - ./src/protocol-extensions/timing.md +# - ./src/protocol-extensions/pointer-constraints.md +# - ./src/protocol-extensions/clipboard.md +# - ./src/protocol-extensions/desktop-shell.md +# - ./src/protocol-extensions/misc.md +# - ./src/protocol-extensions/writing.md +# - ./src/acknowledgements.md +output-file: wayland-book.pdf +... diff --git a/pandoc.sh b/pandoc.sh new file mode 100755 index 0000000..c699ae2 --- /dev/null +++ b/pandoc.sh @@ -0,0 +1,31 @@ +#! /bin/bash + +# Generate PDFs using pandoc +generate_pdfs() { + for filename in pandoc-*yaml; do + # Create variable for language based on filename + IFS=- read _ language <<< "${filename}" + language=${language/.yaml/} + + # Attempt to create the PDF + echo "Generating ${language} PDF..." + pandoc -d "${filename}" + [[ $? -eq 0 ]] && echo "Success! The ${language} PDF has been successfully created!" + done +} + +# Check if dependencies exist +check_dependencies () { + for dependency in "${dependencies[@]}" + do + if ! [ -x "$(command -v ${dependency})" ]; then + echo "Error: $dependency is not installed." >&2 + exit 1 + fi + done +} + +dependencies=("pandoc" "tex") + +check_dependencies +generate_pdfs diff --git a/src/clipboard/data-offers.md b/src/clipboard/data-offers.md index 9205374..b2aab8b 100644 --- a/src/clipboard/data-offers.md +++ b/src/clipboard/data-offers.md @@ -1 +1 @@ -# Data offers +## Data offers diff --git a/src/clipboard/dnd.md b/src/clipboard/dnd.md index 4436a74..f3d45f1 100644 --- a/src/clipboard/dnd.md +++ b/src/clipboard/dnd.md @@ -1 +1 @@ -# Drag & drop +## Drag & drop diff --git a/src/introduction.md b/src/introduction.md index 36a65aa..2668205 100644 --- a/src/introduction.md +++ b/src/introduction.md @@ -26,7 +26,7 @@ be updated later. Chapters 11 forward in large part remain to be written. - Add example code for interactive move, to demonstrate the use of serials - Prepare PDFs and EPUBs -## About the book +### About the book This work is licensed under a Creative Commons @@ -37,7 +37,7 @@ Attribution-ShareAlike 4.0 International License. The source code is [source]: https://git.sr.ht/~sircmpwn/wayland-book -## About the author +### About the author In the words of Preston Carpenter, a close collaborator of Drew's: diff --git a/src/introduction/goals.md b/src/introduction/goals.md index 497336b..890db26 100644 --- a/src/introduction/goals.md +++ b/src/introduction/goals.md @@ -1,4 +1,4 @@ -# Goals & target audience +## Goals & target audience Our goal is for you to come away from this book with an understanding of the Wayland protocol and its high-level usage. You should have a solid understanding diff --git a/src/introduction/high-level-design.md b/src/introduction/high-level-design.md index 48e35aa..dae9587 100644 --- a/src/introduction/high-level-design.md +++ b/src/introduction/high-level-design.md @@ -1,4 +1,4 @@ -# High-level design +## High-level design Your computer has *input* and *output* devices, which respectively are responsible for receiving information from you and displaying information to @@ -18,7 +18,7 @@ their appropriate place on your outputs. The process of bringing together all of your application windows for display on an output is called *compositing* — and thus we call the software which does this the *compositor*. -## In practice +### In practice There are many distinct software components in desktop ecosystem. There are tools like Mesa for rendering (and each of its drivers), the Linux KMS/DRM @@ -31,7 +31,7 @@ run most applications without implicating any of this software. That being said, a surface-level understanding of what these pieces are and how they work is useful. Let's start from the bottom and work our way up. -## The hardware +### The hardware A typical computer is equipped with a few important pieces of hardware. Outside of the box, we have your displays, keyboard, mouse, perhaps some speakers and a @@ -55,7 +55,7 @@ on your system. The hardware provides an interface with which it can be commanded to perform work, and does what it's told — regardless of who tells it so. For this reason, only one component is allowed to talk to it... -## The kernel +### The kernel This responsibility falls onto the kernel. The kernel is a complex beast, so we'll focus on only the parts which are relevant to Wayland. Linux's job is to @@ -74,12 +74,12 @@ modesetting, and a render node (e.g. `renderD128`), for unprivileged operations like rendering or video decoding. For evdev, the "device nodes" are `/dev/input/event*`. -## Userspace +### Userspace Now, we enter userspace. Here, applications are isolated from the hardware and must work via the device nodes provided by the kernel. -### libdrm +#### libdrm Most Linux interfaces have a userspace counterpart which provides a pleasant(ish) C API for working with these device nodes. One such library is @@ -87,7 +87,7 @@ libdrm, which is the userspace portion of the DRM subsystem. libdrm is used by Wayland compositors to do modesetting and other DRM operations, but is generally not used by Wayland clients directly. -### Mesa +#### Mesa Mesa is one of the most important parts of the Linux graphics stack. It provides, among other things, vendor-optimized implementations of OpenGL (and @@ -96,7 +96,7 @@ abstraction on top of libdrm for allocating buffers on the GPU. Most Wayland compositors will use both GBM and OpenGL via Mesa, and most Wayland clients will use at least its OpenGL or Vulkan implementations. -### libinput +#### libinput Like libdrm abstracts the DRM subsystem, libinput provides the userspace end of evdev. It's responsible for receiving input events from the kernel from your @@ -105,7 +105,7 @@ the Wayland compositor. The Wayland compositor requires special permissions to use the evdev files, forcing Wayland clients to go through the compositor to receive input events — which, for example, prevents keylogging. -### (e)udev +#### (e)udev Dealing with the appearance of new devices from the kernel, configuring permissions for the resulting device nodes in `/dev`, and sending word of these @@ -114,7 +114,7 @@ onto userspace. Most systems use udev (or eudev, a fork) for this purpose. Your Wayland compositor uses udev to enumerate input devices and GPUs, and to receive notifications when new ones appear or old ones are unplugged. -### xkbcommon +#### xkbcommon XKB, short for X keyboard, is the original keyboard handling subsystem of the Xorg server. Several years ago, it was extracted from the Xorg tree and made @@ -126,13 +126,13 @@ these scan codes into meaningful and generic key "symbols" — for example, converting `65` to `XKB_KEY_Space`. It also contains a state machine which knows that pressing "1" while shift is held emits "!". -### pixman +#### pixman A simple library used by clients and compositors alike for efficiently manipulating pixel buffers, doing math with intersecting rectangles, and performing other similar **pix**el **man**ipulation tasks. -### libwayland +#### libwayland libwayland the most commonly used implementation of the Wayland protocol, is written in C, and handles much of the low-level wire protocol. It also @@ -140,7 +140,7 @@ provides a tool which generates high-level code from Wayland protocol definitions (which are XML files). We will be discussing libwayland in detail in chapter 1.3, and throughout this book. -### ...and all the rest. +#### ...and all the rest. Each of the pieces mentioned so far are consistently found throughout the Linux desktop ecosystem. Beyond this, more components exist. Many graphical diff --git a/src/introduction/package.md b/src/introduction/package.md index 4560031..6147338 100644 --- a/src/introduction/package.md +++ b/src/introduction/package.md @@ -1,4 +1,4 @@ -# What's in the Wayland package +## What's in the Wayland package When you install "wayland" in your Linux distribution, you'll most likely end up with the freedesktop.org distribution of libwayland-client, libwayland-server, @@ -8,7 +8,7 @@ represents the most popular *implementation* of the Wayland protocol, but it is not the only one. Chapter 3 covers this implementation of Wayland in detail; the rest of the book is equally applicable to any implementation. -## wayland.xml +### wayland.xml Wayland protocols are defined by XML files. If you locate and open "wayland.xml" in your favorite text editor, you will find the XML specification for the "core" @@ -16,7 +16,7 @@ Wayland protocol. This is a high-level protocol — built on top of the wire protocol that we'll discuss in the next chapter. Most of this book is devoted to explaining this file. -## wayland-scanner +### wayland-scanner The "wayland-scanner" tool is used to process these XML files and generate code from them. The most common implementation is the one you're examining now, and @@ -24,7 +24,7 @@ it can be used to generate C headers & glue code from XML files like wayland.xml. Other scanners exist for other programming languages, notably wayland-rs (Rust), waymonad-scanner (Haskell), and more. -## libwayland +### libwayland The two libraries, libwayland-client and libwayland-server, include an implementation of the wire protocol for each end of the connection. Some common diff --git a/src/libwayland/event-loop.md b/src/libwayland/event-loop.md index 01428a3..c3d9de5 100644 --- a/src/libwayland/event-loop.md +++ b/src/libwayland/event-loop.md @@ -1 +1 @@ -# The event loop +## The event loop diff --git a/src/libwayland/fds.md b/src/libwayland/fds.md index dd20d77..da4878c 100644 --- a/src/libwayland/fds.md +++ b/src/libwayland/fds.md @@ -1 +1 @@ -# File descriptor passing +## File descriptor passing diff --git a/src/libwayland/interfaces.md b/src/libwayland/interfaces.md index 2365acb..a0206d5 100644 --- a/src/libwayland/interfaces.md +++ b/src/libwayland/interfaces.md @@ -1,4 +1,4 @@ -# Interfaces & listeners +## Interfaces & listeners Finally, we reach the summit of libwayland's abstractions: interfaces and listeners. The ideas discussed in previous chapters — `wl_proxy` and diff --git a/src/libwayland/proxies.md b/src/libwayland/proxies.md index 51231df..647a4d9 100644 --- a/src/libwayland/proxies.md +++ b/src/libwayland/proxies.md @@ -1,4 +1,4 @@ -# Proxies & resources +## Proxies & resources An *object* is an entity known to both the client and server that has some state, changes to which are negotiated over the wire. On the client side, diff --git a/src/libwayland/util.md b/src/libwayland/util.md index 596e2b3..59aa281 100644 --- a/src/libwayland/util.md +++ b/src/libwayland/util.md @@ -1,4 +1,4 @@ -# wayland-util primitives +## wayland-util primitives Common to both the client and server libraries is `wayland-util.h`, which defines a number of structs, utility functions, and macros that establish a diff --git a/src/libwayland/wayland-scanner.md b/src/libwayland/wayland-scanner.md index abe2799..4cedea0 100644 --- a/src/libwayland/wayland-scanner.md +++ b/src/libwayland/wayland-scanner.md @@ -1,4 +1,4 @@ -# wayland-scanner +## wayland-scanner The Wayland package comes with one binary: `wayland-scanner`. This tool is used to generate C headers & glue code from the Wayland protocol XML files discussed diff --git a/src/protocol-design/design-patterns.md b/src/protocol-design/design-patterns.md index 276aeb8..6371f1a 100644 --- a/src/protocol-design/design-patterns.md +++ b/src/protocol-design/design-patterns.md @@ -1,4 +1,4 @@ -# Protocol design patterns +## Protocol design patterns There are some key concepts which have been applied in the design of most Wayland protocols that we should briefly cover here. These patterns are found @@ -6,7 +6,7 @@ throughout the high-level Wayland protocol and protocol extensions (well, in the Wayland protocol, at least[^1]). If you find yourself writing your own protocol extensions, you'd be wise to apply these patterns yourself. -## Atomicity +### Atomicity The most important of the Wayland protocol design patterns is *atomicity*. A stated goal of Wayland is "every frame is perfect". To this end, most interfaces @@ -29,7 +29,7 @@ few other key design decisions, this allows Wayland compositors to render everything perfectly in every frame — no tearing or partially updated windows, just every pixel in its place and every place in its pixel. -## Resource lifetimes +### Resource lifetimes Another important design pattern is avoiding a situation where the server or client is sending events or requests that pertain to an invalid object. For this @@ -48,7 +48,7 @@ queued up some requests for an object before destroying it, it would have had to send these requests in the correct order so that the object is no longer used after the client agreed it had been destroyed. -## Versioning +### Versioning There are two versioning models in use in Wayland protocols: unstable and stable. Both models only allow for backwards-compatible changes, but when a diff --git a/src/protocol-design/high-level.md b/src/protocol-design/high-level.md index f9808e8..d6dd52b 100644 --- a/src/protocol-design/high-level.md +++ b/src/protocol-design/high-level.md @@ -1,4 +1,4 @@ -# The high-level protocol +## The high-level protocol In chapter 1.3, I mentioned that `wayland.xml` is probably installed with the Wayland package on your system. Find and pull up that file now in your favorite diff --git a/src/protocol-design/interfaces-reqs-events.md b/src/protocol-design/interfaces-reqs-events.md index 3bb7899..aa3c067 100644 --- a/src/protocol-design/interfaces-reqs-events.md +++ b/src/protocol-design/interfaces-reqs-events.md @@ -1,11 +1,11 @@ -# Interfaces, requests, and events +## Interfaces, requests, and events The Wayland protocol works by issuing *requests* and *events* that act on *objects*. Each object has an *interface* which defines what requests and events are possible, and the *signature* of each. Let's consider an example interface: `wl_surface`. -## Requests +### Requests A surface is a box of pixels that can be displayed on-screen. It's one of the primitives we build things like application windows out of. One of its @@ -28,7 +28,7 @@ it looks up the signature for the request with opcode 2. It then knows to expect four integers as the arguments, and it can decode the message and dispatch it for processing internally. -## Events +### Events The server can also send messages back to the client — events. One event that the server can send regarding a `wl_surface` is "enter", which it sends @@ -47,7 +47,7 @@ tune as the server did. It looks up object 10, associates it with the opcode 0. It decodes the rest of the message accordingly, looking up the `wl_output` with ID 5 as well, then dispatches it for processing internally. -## Interfaces +### Interfaces The interfaces which define the list of requests and events, the opcodes associated with each, and the signatures with which you can decode the messages, diff --git a/src/protocol-design/wire-protocol.md b/src/protocol-design/wire-protocol.md index e02ad10..e216331 100644 --- a/src/protocol-design/wire-protocol.md +++ b/src/protocol-design/wire-protocol.md @@ -1,4 +1,4 @@ -# Wire protocol basics +## Wire protocol basics **Note**: If you're just going to use libwayland, this chapter is optional - feel free to skip to chapter 2.2. @@ -35,7 +35,7 @@ the other end using the ancillary data in the Unix domain socket message **enum**: A single value (or bitmap) from an enumeration of known constants, encoded into a 32-bit integer. -## Messages +### Messages The wire protocol is a stream of messages built with these primitives. Every message is an event (in the case of server to client messages) or request @@ -55,7 +55,7 @@ and can be used to bootstrap other objects. We'll discuss this in chapter 4. The next chapter goes over what an interface is, and how requests and events work, assuming you've already negotiated an object ID. Speaking of which... -## Object IDs +### Object IDs When a message comes in with a `new_id` argument, the sender allocates an object ID for it — the interface used for this object is established through @@ -69,7 +69,7 @@ new object allocation. An object ID of 0 represents a null object; that is, a non-existent object or the explicit lack of an object. -## Transports +### Transports To date all known Wayland implementations work over a Unix domain socket. This is used for one reason in particular: file descriptor messages. Unix sockets are diff --git a/src/protocol-extensions/clipboard.md b/src/protocol-extensions/clipboard.md index a1c34c2..cdce0e6 100644 --- a/src/protocol-extensions/clipboard.md +++ b/src/protocol-extensions/clipboard.md @@ -1 +1 @@ -# Extended clipboard +## Extended clipboard diff --git a/src/protocol-extensions/desktop-shell.md b/src/protocol-extensions/desktop-shell.md index 6874e4e..dd4fc51 100644 --- a/src/protocol-extensions/desktop-shell.md +++ b/src/protocol-extensions/desktop-shell.md @@ -1 +1 @@ -# Desktop shell components +## Desktop shell components diff --git a/src/protocol-extensions/misc.md b/src/protocol-extensions/misc.md index cafdd1a..ad5f745 100644 --- a/src/protocol-extensions/misc.md +++ b/src/protocol-extensions/misc.md @@ -1 +1 @@ -# Miscellaneous extensions +## Miscellaneous extensions diff --git a/src/protocol-extensions/pointer-constraints.md b/src/protocol-extensions/pointer-constraints.md index 74e169f..93ff976 100644 --- a/src/protocol-extensions/pointer-constraints.md +++ b/src/protocol-extensions/pointer-constraints.md @@ -1 +1 @@ -# Pointer constraints +## Pointer constraints diff --git a/src/protocol-extensions/timing.md b/src/protocol-extensions/timing.md index 0fb1545..d620e4e 100644 --- a/src/protocol-extensions/timing.md +++ b/src/protocol-extensions/timing.md @@ -1 +1 @@ -# Accurate timing +## Accurate timing diff --git a/src/protocol-extensions/writing.md b/src/protocol-extensions/writing.md index 0a30b32..a8b6da5 100644 --- a/src/protocol-extensions/writing.md +++ b/src/protocol-extensions/writing.md @@ -1 +1 @@ -# Writing protocol extensions +## Writing protocol extensions diff --git a/src/registry/binding.md b/src/registry/binding.md index 185bc93..2f21e93 100644 --- a/src/registry/binding.md +++ b/src/registry/binding.md @@ -1,4 +1,4 @@ -# Binding to globals +## Binding to globals Upon creating a registry object, the server will emit the `global` event for each global available on the server. You can then bind to the globals you diff --git a/src/registry/server-side.md b/src/registry/server-side.md index e2d9a32..112edce 100644 --- a/src/registry/server-side.md +++ b/src/registry/server-side.md @@ -1,4 +1,4 @@ -# Registering globals +## Registering globals Registering globals with libwayland-server is done somewhat differently. When you generate "server-code" with wayland-scanner, it creates interfaces diff --git a/src/seat.md b/src/seat.md index 50164fd..3d6579a 100644 --- a/src/seat.md +++ b/src/seat.md @@ -67,7 +67,7 @@ chapters. Before we get to those, let's cover some common semantics. -## Event serials +### Event serials Some actions that a Wayland client may perform require a trivial form of authentication in the form of input event serials. For example, a client which @@ -92,7 +92,7 @@ the desired action. We'll discuss these in more detail in later chapters, when we start covering the specific requests which require input event serials to validate them. -## Input frames +### Input frames A single input event from an input device may be broken up into several Wayland events for practical reasons. For example, a `wl_pointer` will emit an `axis` @@ -114,7 +114,7 @@ If this sounds too complicated, don't sweat it. Many applications don't have to worry about input frames. It's only when you start doing more complex input event handling that you'll want to concern yourself with this. -## Releasing devices +### Releasing devices When you're done using a device, each interface has a `release` request you can use to clean it up. It'll look something like this: diff --git a/src/seat/example.md b/src/seat/example.md index fa1fe5d..73a7f6f 100644 --- a/src/seat/example.md +++ b/src/seat/example.md @@ -1,4 +1,4 @@ -# Expanding our example code +## Expanding our example code In previous chapters, we built a simple client which can present its surfaces on the display. Let's expand this code a bit to build a client which can receive @@ -8,7 +8,7 @@ events to stderr. This is going to require a lot more code than we've worked with so far, so get strapped in. The first thing we need to do is set up the seat. -## Setting up the seat +### Setting up the seat The first thing we'll need is a reference to a seat. We'll add it to our `client_state` struct, and add keyboard, pointer, and touch objects for later @@ -73,7 +73,7 @@ also rig up that listener: If you compile (`cc -o client client.c xdg-shell-protocol.c`) and run this now, you should seat the name of the seat printed to stderr. -## Rigging up pointer events +### Rigging up pointer events Let's get to pointer events. If you recall, pointer events from the Wayland server are to be accumulated into a single logical event. For this reason, we'll @@ -356,7 +356,7 @@ confusing, though. All we're doing here is pretty-printing the accumulated state for this frame to stderr. If you compile and run this again now, you should be able to wiggle your mouse over the window and see input events printed out! -## Rigging up keyboard events +### Rigging up keyboard events Let's update our `client_state` struct with some fields to store XKB state. @@ -557,7 +557,7 @@ you to decide. If you compile this again, you should be able to start typing into the window and see your input printed into the log. Huzzah! -## Rigging up touch events +### Rigging up touch events Finally, we'll add support for touch-capable devices. Like pointers, a "frame" event exists for touch devices. However, they're further complicated by the @@ -837,7 +837,7 @@ Compile and run this again, and you'll be able to see touch events printed to stderr as you interact with your touch device (assuming you have such a device to test with). And now our client supports input! -## What's next? +### What's next? There are a lot of different kinds of input devices, so extending our code to support them was a fair bit of work — our code has grown by 2.5× in diff --git a/src/seat/keyboard.md b/src/seat/keyboard.md index 83df82b..1e27fc9 100644 --- a/src/seat/keyboard.md +++ b/src/seat/keyboard.md @@ -1,4 +1,4 @@ -# Keyboard input +## Keyboard input Equipped with an understanding of how to use XKB, let's extend our Wayland code to provide us with key events to feed into it. Similarly to how we obtained a @@ -17,7 +17,7 @@ keyboard. But how do you actually use it? Let's start with the basics. -## Key maps +### Key maps When you bind to `wl_keyboard`, the first event that the server is likely to send is `keymap`. @@ -69,7 +69,7 @@ Once we have a keymap, we can interpret future keypress events for this `wl_keyboard`. Note that the server can send a new keymap at any time, and all future key events should be interpreted in that light. -## Keyboard focus +### Keyboard focus ``` @@ -94,7 +94,7 @@ The "enter" event also includes an array of currently pressed keys. This is an array of 32-bit unsigned integers, each representing the scancode of a pressed key. -## Input events +### Input events Once the keyboard has entered your surface, you can expect to start receiving input events. @@ -152,7 +152,7 @@ static void wl_keyboard_modifiers(void *data, struct wl_keyboard *wl_keyboard, } ``` -## Key repeat +### Key repeat The last event to consider is the "repeat_info" event: diff --git a/src/seat/pointer.md b/src/seat/pointer.md index 172a73d..fe398ad 100644 --- a/src/seat/pointer.md +++ b/src/seat/pointer.md @@ -1,4 +1,4 @@ -# Pointer input +## Pointer input Using the `wl_seat.get_pointer` request, clients may obtain a `wl_pointer` object. The server will send events to it whenever the user moves their pointer, @@ -75,7 +75,7 @@ After the cursor has entered your surface and you have attached an appropriate cursor, you're ready to start processing input events. There are motion, button, and axis events. -## Pointer frames +### Pointer frames A single frame of input processing on the server could carry information about lots of changes — for example, polling the mouse once could return, in a @@ -91,7 +91,7 @@ Clients should accumulate all `wl_pointer` events as they're received, then process pending inputs as a single pointer event once the "frame" event is received. -## Motion events +### Motion events Motion events are specified in the same coordinate space as the `enter` event uses, and are straightforward enough: @@ -108,7 +108,7 @@ Like all input events which include a timestamp, the `time` value is a monotonically increasing millisecond-precision timestamp associated with this input event. -## Button events +### Button events Button events are mostly self-explanatory: @@ -133,7 +133,7 @@ the most useful ones will probably be represented by the constants `BTN_LEFT`, `BTN_RIGHT`, and `BTN_MIDDLE`. There are more, I'll leave you to peruse the header at your leisure. -## Axis events +### Axis events The axis event is used for scrolling actions, such as rotating your scroll wheel or rocking it from left to right. The most basic form looks like this: diff --git a/src/seat/touch.md b/src/seat/touch.md index c8ce269..de7c626 100644 --- a/src/seat/touch.md +++ b/src/seat/touch.md @@ -1,4 +1,4 @@ -# Touch input +## Touch input On the surface, touchscreen input is fairly simple, and your implementation can be simple as well. However, the protocol offers you a lot of depth, which @@ -15,7 +15,7 @@ Similarly to other input devices, you may obtain a `wl_touch` resource with `wl_seat.get_touch`, and you should send a "release" request when you're finished with it. -## Touch frames +### Touch frames Like pointers, a single frame of touch processing on the server might carry information about many changes, but the server sends these as discrete Wayland @@ -29,7 +29,7 @@ Clients should accumulate all `wl_touch` events as they're received, then process pending inputs as a single touch event when the "frame" event is received. -## Touch and release +### Touch and release The first events we'll look at are "down" and "up", which are respectively raised when you press your finger against the device, and remove your finger @@ -58,7 +58,7 @@ argument. The time is a monotonically increasing timestamp with an arbitrary epoch, in milliseconds.[^2] Note also the inclusion of a serial, which can be included in future requests to associate them with this input event. -## Motion +### Motion After you receive a "down" event with a specific touch ID, you will begin to receive motion events which describe the movement of that touch point across the @@ -76,7 +76,7 @@ device. The "x" and "y" coordinates here are in the relative coordinate space of the surface which the "enter" event was sent for. -## Gesture cancellation +### Gesture cancellation Touch events often have to meet some threshold before they're recognized as a gesture. For example, swiping across the screen from left to right could be used @@ -96,7 +96,7 @@ taking over. When you receive this event, all active touch points are cancelled. -## Shape and orientation +### Shape and orientation Some high-end touch hardware is capable of determining more information about the way the user is interacting with it. For users of suitable hardware and diff --git a/src/seat/xkb.md b/src/seat/xkb.md index b439146..815e292 100644 --- a/src/seat/xkb.md +++ b/src/seat/xkb.md @@ -1,4 +1,4 @@ -# XKB, briefly +## XKB, briefly The next input device on our list is keyboards, but we need to stop and give you some additional context before we discuss them. Keymaps are an essential detail @@ -27,7 +27,7 @@ primitives for dealing with all of these cases, and maintains a state machine which tracks what your keyboard is doing and figures out exactly which *Unicode codepoints* the user is trying to type. -## Using XKB +### Using XKB So how is xkbcommon actually used? Well, the first step is to link to it and grab the header, `xkbcommon/xkbcommon.h`.[^1] Most programs which utilize diff --git a/src/surfaces-in-depth/damaging-surfaces.md b/src/surfaces-in-depth/damaging-surfaces.md index 0c1aaa8..4e1f716 100644 --- a/src/surfaces-in-depth/damaging-surfaces.md +++ b/src/surfaces-in-depth/damaging-surfaces.md @@ -1,4 +1,4 @@ -# Damaging surfaces +## Damaging surfaces You may have noticed in the last example that we added this line of code when we committed a new frame for the surface: diff --git a/src/surfaces-in-depth/frame-callbacks.md b/src/surfaces-in-depth/frame-callbacks.md index 1e5f030..f3c1850 100644 --- a/src/surfaces-in-depth/frame-callbacks.md +++ b/src/surfaces-in-depth/frame-callbacks.md @@ -1,4 +1,4 @@ -# Frame callbacks +## Frame callbacks The simplest way to update your surface is to simply render and attach new frames when it needs to change. This approach works well, for example, with diff --git a/src/surfaces-in-depth/hidpi.md b/src/surfaces-in-depth/hidpi.md index 70afbde..bea94e4 100644 --- a/src/surfaces-in-depth/hidpi.md +++ b/src/surfaces-in-depth/hidpi.md @@ -1,4 +1,4 @@ -# High density surfaces (HiDPI) +## High density surfaces (HiDPI) In the past several years, a huge leap in pixel density in high-end displays has been seen, new displays packing twice as many pixels into the same physical area diff --git a/src/surfaces-in-depth/lifecycle.md b/src/surfaces-in-depth/lifecycle.md index cfead55..8007731 100644 --- a/src/surfaces-in-depth/lifecycle.md +++ b/src/surfaces-in-depth/lifecycle.md @@ -1,4 +1,4 @@ -# Surface lifecycle +## Surface lifecycle We mentioned earlier that Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. Of the diff --git a/src/surfaces-in-depth/subsurfaces.md b/src/surfaces-in-depth/subsurfaces.md index 575594b..87400b6 100644 --- a/src/surfaces-in-depth/subsurfaces.md +++ b/src/surfaces-in-depth/subsurfaces.md @@ -1,4 +1,4 @@ -# Subsurfaces +## Subsurfaces There's only one[^1] surface role defined in the core Wayland protocol, `wayland.xml`: subsurfaces. They have an X, Y position relative to the parent diff --git a/src/surfaces-in-depth/surface-regions.md b/src/surfaces-in-depth/surface-regions.md index fd4b8f3..df876d0 100644 --- a/src/surfaces-in-depth/surface-regions.md +++ b/src/surfaces-in-depth/surface-regions.md @@ -1,4 +1,4 @@ -# Surface regions +## Surface regions We've already used the `wl_compositor` interface to create `wl_surfaces` via `wl_compositor.create_surface`. Note, however, that it has a second request: diff --git a/src/surfaces/compositor.md b/src/surfaces/compositor.md index 0e57d28..9ab8e7f 100644 --- a/src/surfaces/compositor.md +++ b/src/surfaces/compositor.md @@ -1,4 +1,4 @@ -# Using wl_compositor +## Using wl_compositor They say naming things is one of the most difficult problems in computer science, and here we are, with evidence in hand. The `wl_compositor` global is diff --git a/src/surfaces/dmabuf.md b/src/surfaces/dmabuf.md index dd68677..c162c4d 100644 --- a/src/surfaces/dmabuf.md +++ b/src/surfaces/dmabuf.md @@ -1,4 +1,4 @@ -# Linux dmabuf +## Linux dmabuf @@ -33,7 +33,7 @@ particular. However, we can provide a short summary of its use. Should you need to change the size of the `wl_egl_window` later, use `wl_egl_window_resize`. -## But I really want to know about the internals +### But I really want to know about the internals Some Wayland programmers who don't use libwayland complain that this approach ties Mesa and libwayland tightly together, which is true. However, untangling @@ -43,7 +43,7 @@ for details on the protocol, and Mesa's implementation at `src/egl/drivers/dri2/platform_wayland.c` (at the time of writing). Good luck and godspeed. -## For the server +### For the server Unfortunately, the details for the compositor are both complicated and out-of-scope for this book. I can point you in the right direction, however: diff --git a/src/surfaces/roles.md b/src/surfaces/roles.md index 1e76209..9114026 100644 --- a/src/surfaces/roles.md +++ b/src/surfaces/roles.md @@ -1,4 +1,4 @@ -# Surface roles +## Surface roles We have created a pixel buffer, sent it to the server, and attached it to a surface through which we can allegedly present it to the user. However, one diff --git a/src/surfaces/shared-memory.md b/src/surfaces/shared-memory.md index 0484676..96a52d0 100644 --- a/src/surfaces/shared-memory.md +++ b/src/surfaces/shared-memory.md @@ -1,4 +1,4 @@ -# Shared memory buffers +## Shared memory buffers The simplest means of getting pixels from client to compositor, and the only one enshrined in `wayland.xml`, is `wl_shm` — shared memory. Simply put, it @@ -7,7 +7,7 @@ allows you to transfer a file descriptor for the compositor to mmap with synchronization primitives to keep everyone from fighting over each buffer, and you have a workable — and portable — solution. -## Binding to wl_shm +### Binding to wl_shm The registry global listener explained in chapter 5.1 will advertise the `wl_shm` global when it's available. Binding to it is fairly straightforward. @@ -47,7 +47,7 @@ full list of possible pixel formats is given in `wayland.xml`. Two formats are required to be supported: `ARGB8888`, and `XRGB8888`, which are 24-bit color, with and without an alpha channel respectively. -## Allocating a shared memory pool +### Allocating a shared memory pool A combination of POSIX `shm_open` and random file names can be utilized to create a file suitable for this purpose, and `ftruncate` can be utilized to @@ -131,7 +131,7 @@ struct wl_shm *shm = ...; // Bound from registry struct wl_shm_pool *pool = wl_shm_create_pool(shm, fd, shm_pool_size); ``` -## Creating buffers from a pool +### Creating buffers from a pool Once word of this gets to the compositor, it will `mmap` this file descriptor as well. Wayland is asynchronous, though, so we can start allocating buffers from @@ -185,7 +185,7 @@ role. [^1]: "Damaged" meaning "this area needs to be redrawn" -## wl_shm on the server +### wl_shm on the server Before we get there, however, the server-side part of this deserves note. libwayland provides some helpers to make using `wl_shm` easier. To configure it diff --git a/src/surfaces/surface-roles.md b/src/surfaces/surface-roles.md index b52b9f0..9db3a96 100644 --- a/src/surfaces/surface-roles.md +++ b/src/surfaces/surface-roles.md @@ -1 +1 @@ -# Surface roles +## Surface roles diff --git a/src/wayland-display/creation.md b/src/wayland-display/creation.md index c731fcc..213ec64 100644 --- a/src/wayland-display/creation.md +++ b/src/wayland-display/creation.md @@ -1,8 +1,8 @@ -# Creating a display +## Creating a display Fire up your text editor — it's time to write our first lines of code. -## For Wayland clients +### For Wayland clients Connecting to a Wayland server and creating a `wl_display` to manage the connection's state is quite easy: @@ -69,7 +69,7 @@ You can also obtain the file descriptor that the `wl_display` is using via int wl_display_get_fd(struct wl_display *display); ``` -## For Wayland servers +### For Wayland servers The process is fairly simple for servers as well. The creation of the display and binding to a socket are separate, to give you time to configure the display diff --git a/src/wayland-display/event-loop.md b/src/wayland-display/event-loop.md index 5f45d44..ff914fe 100644 --- a/src/wayland-display/event-loop.md +++ b/src/wayland-display/event-loop.md @@ -1,11 +1,11 @@ -# Incorporating an event loop +## Incorporating an event loop libwayland provides its own event loop implementation for Wayland servers to take advantage of, but the maintainers have acknowledged this as a design overstep. For clients, there is no such equivalent. Regardless, the Wayland server event loop is useful enough, even if it's out-of-scope. -## Wayland server event loop +### Wayland server event loop Each `wl_display` created by libwayland-server has a corresponding `wl_event_loop`, which you may obtain a reference to with @@ -35,7 +35,7 @@ occurs on that file descriptor. You will also need to call [poll]: https://pubs.opengroup.org/onlinepubs/009695399/functions/poll.html -## Wayland client event loop +### Wayland client event loop libwayland-client, on the other hand, does not have its own event loop. However, since there is only generally one file descriptor, it's easier to manage @@ -54,7 +54,7 @@ descriptor with `wl_display_get_fd`. Upon `POLLIN` events, call `wl_display_dispatch` to process incoming events. To flush outgoing requests, call `wl_display_flush`. -## Almost there! +### Almost there! At this point you have all of the context you need to set up a Wayland display and process events and requests. The only remaining step is to allocate diff --git a/src/xdg-shell-basics.md b/src/xdg-shell-basics.md index dea94e8..8b87471 100644 --- a/src/xdg-shell-basics.md +++ b/src/xdg-shell-basics.md @@ -15,7 +15,7 @@ you'll find it in the `wayland-protocols` package. It's probably installed at a path somewhat like `/usr/share/wayland-protocols/stable/xdg-shell/xdg-shell.xml` on your system. -## xdg_wm_base +### xdg_wm_base `xdg_wm_base` is the only global defined by the specification, and it provides requests for creating each of the other objects you need. The most basic diff --git a/src/xdg-shell-basics/example-code.md b/src/xdg-shell-basics/example-code.md index e2c3313..a08160c 100644 --- a/src/xdg-shell-basics/example-code.md +++ b/src/xdg-shell-basics/example-code.md @@ -1,4 +1,4 @@ -# Extended example code +## Extended example code Using the sum of what we've learned so far, we can now write a Wayland client which displays something on the screen. The following code is a complete Wayland diff --git a/src/xdg-shell-basics/xdg-surface.md b/src/xdg-shell-basics/xdg-surface.md index 259ae12..754197c 100644 --- a/src/xdg-shell-basics/xdg-surface.md +++ b/src/xdg-shell-basics/xdg-surface.md @@ -1,4 +1,4 @@ -# XDG surfaces +## XDG surfaces Surfaces in the domain of xdg-shell are referred to as `xdg_surfaces`, and this interface brings with it a small amount of functionality common to both kinds of diff --git a/src/xdg-shell-basics/xdg-toplevel.md b/src/xdg-shell-basics/xdg-toplevel.md index 2f18d06..ad1679a 100644 --- a/src/xdg-shell-basics/xdg-toplevel.md +++ b/src/xdg-shell-basics/xdg-toplevel.md @@ -1,4 +1,4 @@ -# Application windows +## Application windows We have shaved many yaks to get here, but it's time: XDG toplevel is the interface which we will finally use to display an application window. The XDG diff --git a/src/xdg-shell-in-depth/configuration.md b/src/xdg-shell-in-depth/configuration.md index d38cbd9..4b79fa3 100644 --- a/src/xdg-shell-in-depth/configuration.md +++ b/src/xdg-shell-in-depth/configuration.md @@ -1,4 +1,4 @@ -# Configuration & lifecycle +## Configuration & lifecycle Previously, we created a window at a fixed size of our choosing: 640x480. However, the compositor will often have an opinion about what size our window @@ -34,7 +34,7 @@ assumed a state consistent with these suggestions, it sends an `ack_configure` request with the same serial to indicate this. Upon the next commit to the associated `wl_surface`, the compositor will consider the state consistent. -## XDG top-level lifecycle +### XDG top-level lifecycle Our example code from chapter 7 works, but it's not the best citizen of the desktop right now. It does not assume the compositor's recommended size, and if @@ -162,7 +162,7 @@ diff --git a/client.c b/client.c If you compile and run this client again, you'll notice that it's a lot more well-behaved than before. -## Requesting state changes +### Requesting state changes The client can also request that the compositor put the client into one of these states, or place constraints on the size of the window. diff --git a/src/xdg-shell-in-depth/interactive.md b/src/xdg-shell-in-depth/interactive.md index 7f9bc23..b19cb60 100644 --- a/src/xdg-shell-in-depth/interactive.md +++ b/src/xdg-shell-in-depth/interactive.md @@ -1,4 +1,4 @@ -# Interactive move and resize +## Interactive move and resize Many application windows have interactive UI elements the user can use to drag around or resize windows. Many Wayland clients, by default, expect to be @@ -78,7 +78,7 @@ client-driven interactions with compositor-driven meta operations like minimizing windows. If your client uses client-side decorations, you may use this request for this purpose. -## xdg-decoration +### xdg-decoration The last detail which bears mentioning when discussing the behavior of client-side decorations is the protocol which governs the negotiation of their diff --git a/src/xdg-shell-in-depth/popups.md b/src/xdg-shell-in-depth/popups.md index 980824d..3312bca 100644 --- a/src/xdg-shell-in-depth/popups.md +++ b/src/xdg-shell-in-depth/popups.md @@ -1,4 +1,4 @@ -# Popups +## Popups When designing software which utilizes application windows, there are many cases where smaller secondary surfaces are used for various purposes. Some examples @@ -48,7 +48,7 @@ Then we can render and attach buffers to our popup surface with the same lifecyle discussed earlier. We also have access to a few other popup-specific features. -## Configuration +### Configuration Like the XDG toplevel configure event, the compositor has an event which it may use to suggest the size for your popup to assume. Unlike toplevels, however, @@ -69,7 +69,7 @@ position of the popup relative to its parent surface. The client can influence these values with the XDG positioner, to be discussed in chapter 10.4. -## Popup grabs +### Popup grabs Popup surfaces will often want to "grab" all input, for example to allow the user to use the arrow keys to select different menu items. This is facilitated @@ -88,7 +88,7 @@ request. These semantics are covered in detail in chapter 9. The compositor can cancel this grab later, for example if the user presses escape or clicks outside of your popup. -## Dismissal +### Dismissal In these cases where the compositor dismisses your popup, such as when the escape key is pressed, the following event is sent: @@ -101,7 +101,7 @@ To avoid race conditions, the compositor keeps the popup structures in memory and services requests for them even after their dismissal. For more detail about object lifetimes and race conditions, see chapter 2.4. -## Destroying popups +### Destroying popups Client-initiated destruction of a popup is fairly straightforward: diff --git a/src/xdg-shell-in-depth/positioners.md b/src/xdg-shell-in-depth/positioners.md index bac2330..bc592e2 100644 --- a/src/xdg-shell-in-depth/positioners.md +++ b/src/xdg-shell-in-depth/positioners.md @@ -1,4 +1,4 @@ -# Positioners +## Positioners When we introduced pop-ups a few pages ago, we noted that you had to provide a positioner object when creating the pop-up. We asked you not to worry about it @@ -15,7 +15,7 @@ client specify certain constraints in how the pop-up can be moved or resized, and then the compositor, being in full possession of the facts, can make the final call on how to accommodate. -# The Basics +### The Basics ```xml @@ -36,7 +36,7 @@ The set_size request is used to set the size of the pop-up window being created. All clients which use a positioner will use these two requests. Now, let's get to the interesting ones. -# Anchoring +### Anchoring ```xml ``` diff --git a/wayland-logo.png b/wayland-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..76aca750e9c446b88686926c23305d13b2887f81 GIT binary patch literal 119559 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