Full Code of elvissteinjr/DesktopPlus for AI

master 78a63d79b184 cached
211 files
7.6 MB
2.0M tokens
2568 symbols
1 requests
Download .txt
Showing preview only (8,006K chars total). Download the full file or copy to clipboard to get everything.
Repository: elvissteinjr/DesktopPlus
Branch: master
Commit: 78a63d79b184
Files: 211
Total size: 7.6 MB

Directory structure:
gitextract_9ffo_z3l/

├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       └── nightly.yml
├── CONTRIBUTING
├── LICENSE
├── README.md
├── assets/
│   ├── action_manifest.json
│   ├── actions_default.ini
│   ├── config_default.ini
│   ├── input/
│   │   ├── action_bindings_frame_controller.json
│   │   ├── action_bindings_gamepad.json
│   │   ├── action_bindings_generic.json
│   │   ├── action_bindings_holographic.json
│   │   ├── action_bindings_hpmotioncontroller.json
│   │   ├── action_bindings_knuckles.json
│   │   ├── action_bindings_knuckles_ev1.json
│   │   ├── action_bindings_playstation_vr2_sense_controller.json
│   │   ├── action_bindings_svl_hand_interaction_augmented.json
│   │   ├── action_bindings_touch.json
│   │   ├── action_bindings_vive_controller.json
│   │   ├── action_bindings_vive_cosmos.json
│   │   ├── action_manifest_de.json
│   │   ├── action_manifest_en.json
│   │   ├── action_manifest_ja.json
│   │   ├── action_manifest_ko.json
│   │   └── action_manifest_zh_CN.json
│   ├── keyboards/
│   │   ├── azerty_be.ini
│   │   ├── azerty_fr.ini
│   │   ├── qwerty_dk.ini
│   │   ├── qwerty_es.ini
│   │   ├── qwerty_ja.ini
│   │   ├── qwerty_ko_2-set.ini
│   │   ├── qwerty_latam.ini
│   │   ├── qwerty_th_kedmanee.ini
│   │   ├── qwerty_uk.ini
│   │   ├── qwerty_usa.ini
│   │   ├── qwertz_ger.ini
│   │   └── qwertz_hu.ini
│   ├── lang/
│   │   ├── de.ini
│   │   ├── en.ini
│   │   ├── ja.ini
│   │   ├── ko.ini
│   │   └── zh_CN.ini
│   ├── license.txt
│   ├── manifest.vrmanifest
│   ├── misc/
│   │   ├── !About this folder.txt
│   │   ├── CreateElevatedTask.bat
│   │   ├── CreateElevatedTask.ps1
│   │   ├── EnableUIAccess.bat
│   │   ├── EnableUIAccess.ps1
│   │   ├── EnableUIAccessDesktopPlus.manifest
│   │   ├── UndoSystemChanges.bat
│   │   └── UndoSystemChanges.ps1
│   ├── profiles/
│   │   └── Sample Profile.ini
│   ├── readme.txt
│   └── third-party_licenses.txt
├── docs/
│   └── user_guide.md
└── src/
    ├── DesktopPlus/
    │   ├── BackgroundOverlay.cpp
    │   ├── BackgroundOverlay.h
    │   ├── CommonTypes.h
    │   ├── DesktopPlus.cpp
    │   ├── DesktopPlus.manifest
    │   ├── DesktopPlus.rc
    │   ├── DesktopPlus.ruleset
    │   ├── DesktopPlus.vcxproj
    │   ├── DesktopPlus.vcxproj.filters
    │   ├── DesktopPlus.vcxproj.user
    │   ├── DisplayManager.cpp
    │   ├── DisplayManager.h
    │   ├── DuplicationManager.cpp
    │   ├── DuplicationManager.h
    │   ├── ElevatedMode.cpp
    │   ├── ElevatedMode.h
    │   ├── InputSimulator.cpp
    │   ├── InputSimulator.h
    │   ├── LaserPointer.cpp
    │   ├── LaserPointer.h
    │   ├── OutputManager.cpp
    │   ├── OutputManager.h
    │   ├── Overlays.cpp
    │   ├── Overlays.h
    │   ├── PixelShader.hlsl
    │   ├── PixelShaderCursor.hlsl
    │   ├── RadialFollowSmoothing.cpp
    │   ├── RadialFollowSmoothing.h
    │   ├── SoftwareCursorGrabber.cpp
    │   ├── SoftwareCursorGrabber.h
    │   ├── ThreadManager.cpp
    │   ├── ThreadManager.h
    │   ├── VRInput.cpp
    │   ├── VRInput.h
    │   ├── VertexShader.hlsl
    │   └── resource.h
    ├── DesktopPlus.sln
    ├── DesktopPlusUI/
    │   ├── AuxUI.cpp
    │   ├── AuxUI.h
    │   ├── DesktopPlusUI.cpp
    │   ├── DesktopPlusUI.rc
    │   ├── DesktopPlusUI.vcxproj
    │   ├── DesktopPlusUI.vcxproj.filters
    │   ├── DesktopPlusUI.vcxproj.user
    │   ├── FloatingUI.cpp
    │   ├── FloatingUI.h
    │   ├── FloatingWindow.cpp
    │   ├── FloatingWindow.h
    │   ├── ImGuiExt.cpp
    │   ├── ImGuiExt.h
    │   ├── NotificationIcon.cpp
    │   ├── NotificationIcon.h
    │   ├── TextureManager.cpp
    │   ├── TextureManager.h
    │   ├── TranslationManager.cpp
    │   ├── TranslationManager.h
    │   ├── UIManager.cpp
    │   ├── UIManager.h
    │   ├── VRKeyboard.cpp
    │   ├── VRKeyboard.h
    │   ├── VRKeyboardCommon.h
    │   ├── Win32PerformanceData.cpp
    │   ├── Win32PerformanceData.h
    │   ├── WindowDesktopMode.cpp
    │   ├── WindowDesktopMode.h
    │   ├── WindowFloatingUIBar.cpp
    │   ├── WindowFloatingUIBar.h
    │   ├── WindowKeyboard.cpp
    │   ├── WindowKeyboard.h
    │   ├── WindowKeyboardEditor.cpp
    │   ├── WindowKeyboardEditor.h
    │   ├── WindowOverlayBar.cpp
    │   ├── WindowOverlayBar.h
    │   ├── WindowOverlayProperties.cpp
    │   ├── WindowOverlayProperties.h
    │   ├── WindowPerformance.cpp
    │   ├── WindowPerformance.h
    │   ├── WindowSettings.cpp
    │   ├── WindowSettings.h
    │   ├── imgui/
    │   │   ├── imconfig.h
    │   │   ├── imgui.cpp
    │   │   ├── imgui.h
    │   │   ├── imgui_demo.cpp
    │   │   ├── imgui_draw.cpp
    │   │   ├── imgui_internal.h
    │   │   ├── imgui_tables.cpp
    │   │   ├── imgui_widgets.cpp
    │   │   ├── imstb_rectpack.h
    │   │   ├── imstb_textedit.h
    │   │   └── imstb_truetype.h
    │   ├── imgui_win32_dx11_openvr/
    │   │   ├── PixelShaderImGui.hlsl
    │   │   ├── VertexShaderImGui.hlsl
    │   │   ├── imgui_impl_dx11_openvr.cpp
    │   │   ├── imgui_impl_dx11_openvr.h
    │   │   ├── imgui_impl_win32_openvr.cpp
    │   │   └── imgui_impl_win32_openvr.h
    │   ├── implot/
    │   │   ├── implot.cpp
    │   │   ├── implot.h
    │   │   ├── implot_internal.h
    │   │   └── implot_items.cpp
    │   └── resource.h
    ├── DesktopPlusWinRT/
    │   ├── CaptureManager.cpp
    │   ├── CaptureManager.h
    │   ├── CommonHeaders.h
    │   ├── DesktopPlusWinRT.cpp
    │   ├── DesktopPlusWinRT.h
    │   ├── DesktopPlusWinRT.rc
    │   ├── DesktopPlusWinRT.vcxproj
    │   ├── DesktopPlusWinRT.vcxproj.filters
    │   ├── DesktopPlusWinRT.vcxproj.user
    │   ├── OverlayCapture.cpp
    │   ├── OverlayCapture.h
    │   ├── ThreadData.h
    │   ├── packages.config
    │   ├── resource.h
    │   └── util/
    │       ├── DesktopWindow.h
    │       ├── capture.desktop.interop.h
    │       ├── direct3d11.interop.h
    │       ├── dispatcherqueue.desktop.interop.h
    │       └── hwnd.interop.h
    └── Shared/
        ├── Actions.cpp
        ├── Actions.h
        ├── AppProfiles.cpp
        ├── AppProfiles.h
        ├── ConfigManager.cpp
        ├── ConfigManager.h
        ├── DPBrowserAPI.h
        ├── DPBrowserAPIClient.cpp
        ├── DPBrowserAPIClient.h
        ├── DPRect.h
        ├── Ini.cpp
        ├── Ini.h
        ├── InterprocessMessaging.cpp
        ├── InterprocessMessaging.h
        ├── Logging.cpp
        ├── Logging.h
        ├── Matrices.cpp
        ├── Matrices.h
        ├── OUtoSBSConverter.cpp
        ├── OUtoSBSConverter.h
        ├── OpenVRExt.cpp
        ├── OpenVRExt.h
        ├── OverlayDragger.cpp
        ├── OverlayDragger.h
        ├── OverlayManager.cpp
        ├── OverlayManager.h
        ├── Util.cpp
        ├── Util.h
        ├── Vectors.h
        ├── WindowManager.cpp
        ├── WindowManager.h
        ├── loguru.cpp
        ├── loguru.hpp
        ├── openvr.h
        └── openvr_api.lib

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/FUNDING.yml
================================================
ko_fi: elvissteinjr


================================================
FILE: .github/workflows/nightly.yml
================================================
name: Nightly Build

on:
  push:
    paths-ignore:
      - 'README.md'
      - 'CONTRIBUTING'
      - 'LICENSE'
      - 'docs/**'

env:
  SOLUTION_FILE_PATH: ./src/DesktopPlus.sln
  OUTPUT_PATH: ./src/x64/Release
  BUILD_CONFIGURATION: Release

permissions:
  contents: read

jobs:
  build:
    runs-on: windows-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v4

    - name: Setup MSBuild
      uses: microsoft/setup-msbuild@v2

    - name: Restore NuGet Packages
      working-directory: ${{env.GITHUB_WORKSPACE}}
      run: nuget restore ${{env.SOLUTION_FILE_PATH}}

    - name: Build
      working-directory: ${{env.GITHUB_WORKSPACE}}
      run: msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:DPLUS_SHA='"${{github.sha}}"' ${{env.SOLUTION_FILE_PATH}}

    - name: Rename Output Folder for Archive
      working-directory: ${{env.GITHUB_WORKSPACE}}
      run: ren ${{env.OUTPUT_PATH}} DesktopPlus

    - name: Upload Artifact
      uses: actions/upload-artifact@v4
      with:
        name: DesktopPlus-${{github.sha}}
        path: |
          ./src/x64
          !./**/*.h
          !./**/*.lib
          !./**/*.exp


================================================
FILE: CONTRIBUTING
================================================
Short version:
Any contribution is welcomed with open arms. In the rare case something would be off, it'll be taken care of.
If you contribute code, you allow me to use it in a Steam build that may contain additional code not present in this repo.

Long version:
I want to preface this with stating that the Desktop+ code is no way trying to be professional. Just read the comments.
It's provided as-is, in hope somebody finds a use in it. 
The code grew with time, overall structure may not be up to best practice. If you want to re-organize it to be "better", feel free.

In terms of actually adding code, there are no strict style guidelines. Just don't make the code look foreign in the middle of the existing mess.
If you plan to add something big, consider opening an issue for it first.
I take some needless pride in the low memory footprint, both runtime and size on disk. Try to not add bloat without reason.
It's fine for code to be a tiny bit awkward in order to use system libraries instead of pulling megabytes of additional dependencies.
Perhaps also avoid stacks of abstraction. The code may run on typically beefy machines, but it's running in the background most of time. Make sane decisions.

Just felt like I should mention this stuff somewhere. Not like anyone reads this anyways.

If you contribute code to this repository, you are also granting me (GitHub user elvissteinjr) permission to distribute it on other platforms such as Steam in binary form, possibly linking to non-free third-party libraries such as the Steamworks API library. Such a build may also contain additional code not present in this repo to support these libraries.
Please do not contribute if you do not agree to this.

================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.


================================================
FILE: README.md
================================================
# Desktop+ VR Overlay
Advanced desktop access for OpenVR.

![VR Interface](docs/screenshot.jpg)

## Features

- User interface with real-time adjustments accessible in VR or on desktop
- Smooth, low-latency mirroring of desktops and windows
- Low memory footprint and performance impact
- Support for creating as many overlays as SteamVR allows at once
- Customizable overlay settings (width, position, curvature, opacity, cropping), with switchable profiles
- 3D support (SBS, HSBS, OU, HOU)
- Overlay visibility and origin settings: Display a desktop/window during gameplay or attach it to a different origin (play space, dashboard, HMD, controllers, tracker)
- Actions: User-definable functions (input simulation, running applications) which can be bound to controller inputs, hotkeys or UI buttons
- Custom laser pointer implementation, allowing for non-blocking overlay interaction during gameplay
- Configurable PC-style VR keyboard with various layouts and a keyboard layout editor for deeper customization, appearing automatically when detecting text input widget focus
- Elevated access toggle, making it possible to deal with UAC prompts and other UIP-restricted UI in VR without using full admin-access at all times
- Gaze Fade: Fade-out overlay when not looking at it
- Window management: Change window focus depending on overlay/dashboard state or drag overlays when dragging the title bar of a mirrored window
- Performance Monitor: View system performance in real time
- Application profiles: Automatically switch overlay profiles when a specific VR application is being run
- Browser overlays: View web pages independent from your desktop (CEF-based)

## Usage

### Steam

Install Desktop+ from its [Steam store page](https://store.steampowered.com/app/1494460) and run it.

### Release Archive

Download and extract the latest archive from the [releases page](https://github.com/elvissteinjr/DesktopPlus/releases). Follow instructions in the included [readme file](assets/readme.txt).  
Make sure to also download the [Desktop+ Browser component](https://github.com/elvissteinjr/DesktopPlusBrowser/releases) if you want browser overlay support.

### Nightly Build

An automated build based on the latest code changes can be downloaded from [here](https://nightly.link/elvissteinjr/DesktopPlus/workflows/nightly/master).  
Keep in mind that nightly builds are unstable and mostly untested. Prefer the latest release if possible.

### Building from Source

The Visual Studio 2019 Solution builds out of the box with no further external dependencies.  
Building with Graphics Capture support requires Windows SDK 10.0.19041 or newer, and will download C++/WinRT packages automatically.
Graphics Capture support can be disabled entirely if desired. Windows 8 SDK or newer is sufficient in that case. See DesktopPlusWinRT.h for details.

See the [Desktop+ Browser repository](https://github.com/elvissteinjr/DesktopPlusBrowser) for building the browser component.

Other compilers likely work as well, but are neither tested nor have a build configuration. Building for 32-bit is not supported.

## Demonstration

The [Steam announcements](https://store.steampowered.com/news/app/1494460) for typically feature short video clips showing off new additions.  
The trailer on the [Steam store page](https://store.steampowered.com/app/1494460) also shows off some functionality.

## Documentation

For basic usage, installation and troubleshooting see the included [readme file](assets/readme.txt).  
For more detailed information on each setting, step-by-step examples for a few common usage scenarios and more check out the [User Guide](docs/user_guide.md).

## Notes

Desktop+ only runs on Windows 8.1 or newer, as it uses the DXGI Desktop Duplication API which is not available on older versions of Windows.  
Window mirroring through Graphics Capture requires at least Windows 10 1803 for basic support, Windows 10 2004 or newer for full support (some additional non-essential features require Windows 11 or Windows 11 24H2). 

## License

This software is licensed under the GPL 3.0.  
Desktop+ includes work of third-party projects. For their licenses, see [here](assets/third-party_licenses.txt).


================================================
FILE: assets/action_manifest.json
================================================
{
  "actions": [
    {
      "name": "/actions/shortcuts/in/EnableGlobalLaserPointer",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut01",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut02",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut03",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut04",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut05",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut06",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut07",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut08",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut09",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut10",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut11",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut12",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut13",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut14",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut15",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut16",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut17",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut18",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut19",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/shortcuts/in/GlobalShortcut20",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/laserpointer/in/LeftClick",
      "requirement": "suggested",
      "type": "boolean"
    },
    {
      "name": "/actions/laserpointer/in/RightClick",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/laserpointer/in/MiddleClick",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/laserpointer/in/Aux01Click",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/laserpointer/in/Aux02Click",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/laserpointer/in/Drag",
      "requirement": "optional",
      "type": "boolean"
    },
    {
      "name": "/actions/scroll_discrete/in/ScrollDiscrete",
      "requirement": "suggested",
      "type": "vector2"
    },
    {
      "name": "/actions/scroll_smooth/in/ScrollSmooth",
      "requirement": "suggested",
      "type": "vector2"
    },
    {
      "name": "/actions/laserpointer/out/Haptic",
      "requirement": "suggested",
      "type": "vibration"
    }
  ],
  "action_sets": [
    {
      "name": "/actions/shortcuts",
      "usage": "leftright"
    },
    {
      "name": "/actions/laserpointer",
      "usage": "single"
    },
    {
      "name": "/actions/scroll_discrete",
      "display_with": "/actions/laserpointer",
      "usage": "single"
    },
    {
      "name": "/actions/scroll_smooth",
      "display_with": "/actions/laserpointer",
      "usage": "single"
    }
  ],
  "localization_files": {
    "en_US" : "input/action_manifest_en.json",
    "de_DE" : "input/action_manifest_de.json",
    "ja_JP" : "input/action_manifest_ja.json",
    "ko_KR" : "input/action_manifest_ko.json",
    "zh_CN" : "input/action_manifest_zh_CN.json"
  },
  "default_bindings": [
    {
      "controller_type": "frame_controller",
      "binding_url": "input/action_bindings_frame_controller.json"
    },
    {
      "controller_type": "knuckles",
      "binding_url": "input/action_bindings_knuckles.json"
    },
    {
      "controller_type": "playstation_vr2_sense",
      "binding_url": "input/action_bindings_playstation_vr2_sense_controller.json"
    },
    {
      "controller_type": "hpmotioncontroller",
      "binding_url": "input/action_bindings_hpmotioncontroller.json"
    },
    {
      "controller_type": "holographic",
      "binding_url": "input/action_bindings_holographic.json"
    },
	{
      "controller_type": "oculus_touch",
      "binding_url": "input/action_bindings_touch.json"
    },
    {
      "controller_type": "vive_cosmos_controller",
      "binding_url": "input/action_bindings_vive_cosmos.json"
    },
	{
      "controller_type": "knuckles_ev1",
      "binding_url": "input/action_bindings_knuckles_ev1.json"
    },
    {
      "controller_type": "vive_controller",
      "binding_url": "input/action_bindings_vive_controller.json"
    },
    {
      "controller_type": "svl_hand_interaction_augmented",
      "binding_url": "input/action_bindings_svl_hand_interaction_augmented.json"
    },
    {
      "controller_type": "gamepad",
      "binding_url": "input/action_bindings_gamepad.json"
    },
    {
      "controller_type": "generic",
      "binding_url": "input/action_bindings_generic.json"
    }
  ],
  "version": 5,
  "minimum_required_version": 2
}


================================================
FILE: assets/actions_default.ini
================================================
[1]
Name=tstr_DefActionShowKeyboard
CommandCount=1
Command0Type=ShowKeyboard
Command0UIntArg=0
IconFilename=keyboard.png

[2]
Name=tstr_DefActionActiveWindowCrop
Label=tstr_DefActionActiveWindowCropLabel
CommandCount=1
Command0Type=CropActiveWindow

[3]
Name=tstr_DefActionSwitchTask
CommandCount=1
Command0Type=SwitchTask
IconFilename=task_switch.png

[4]
Name=tstr_DefActionToggleOverlays
Label=tstr_DefActionToggleOverlaysLabel
CommandCount=1
Command0Type=ShowOverlay
TargetUseTags=true
TargetTags=Ovrl_All

[5]
Name=tstr_DefActionMiddleMouse
Label=tstr_DefActionMiddleMouseLabel
CommandCount=1
Command0Type=Key
Command0UIntID=4
Command0UIntArg=0

[6]
Name=tstr_DefActionBackMouse
Label=tstr_DefActionBackMouseLabel
CommandCount=1
Command0Type=Key
Command0UIntID=5
Command0UIntArg=0

[7]
Name=tstr_DefActionReadMe
Label=tstr_DefActionReadMeLabel
CommandCount=1
Command0Type=LaunchApp
Command0StrMain=readme.txt

[8]
Name=tstr_DefActionDashboardToggle
Label=tstr_DefActionDashboardToggleLabel
CommandCount=1
Command0Type=LaunchApp
Command0StrMain=vrmonitor://debugcommands/system_dashboard_toggle

================================================
FILE: assets/config_default.ini
================================================
;Lines starting with ; are comments
;Boolean settings allow use of "true"/"false" or 1/0
;Do not include the quotation marks for string values
;Only change the values after the =
;
;It shouldn't be necessary to mess with most of these by hand, but feel free to do so
;Hidden settings are preceded by a comment line
;Save changes to config.ini, not config_default.ini, and make sure Desktop+ is not running when doing so
[Overlay0]
Name=
NameIsCustom=false
Enabled=true
DesktopID=0
CaptureSource=0
WinRTDesktopID=-2
WinRTLastWindowTitle=
WinRTLastWindowClassName=
WinRTLastWindowExeName=
BrowserURL=
BrowserURLUserLast=
BrowserTitle=
BrowserAllowTransparency=false
Width=165
Curvature=17
Opacity=100
Brightness=100
OffsetRight=0
OffsetUp=0
OffsetForward=0
DisplayMode=3
Origin=Dashboard
OriginHMDFloorTurning=false
OriginSmoothingLevel=0
TransformLocked=true
CroppingEnabled=false
CroppingX=0
CroppingY=0
CroppingWidth=-1
CroppingHeight=-1
ShowBackside=true
3DEnabled=false
3DMode=0
3DSwapped=false
GazeFade=false
GazeFadeDistance=0
GazeFadeRate=100
GazeFadeOpacity=0
UpdateLimitModeOverride=0
UpdateLimitMS=0
UpdateLimitFPS=7
InputEnabled=true
InputDPlusLPEnabled=true
UpdateInvisible=false
ShowFloatingUI=true
ShowDesktopButtons=true
ShowActionBar=true
ShowExtraButtons=true
ActionBarOrderUseGlobal=true
Transform=[2.12766 0 0 0 0 2.12766 0 0 0 0 2.12766 0 0 0 0 1]

[Interface]
;Don't want DesktopPlusUI.exe to run automatically? Set this to true
NoUIAutoLaunch=false
;Don't want the notification/tray icon? Set this to true
NoNotificationIcon=false
;Want to override desktop mode DPI? Set your custom scale here (100 is 100%)
DesktopUIScaleOverride=0
;LanguageFile is not included here to trigger auto-detection
ShowAdvancedSettings=false
DisplaySizeLarge=false
OverlayCurrentID=0
DesktopButtonCyclingMode=1
DesktopButtonIncludeAll=false
EnvironmentBackgroundColor=00000080
EnvironmentBackgroundColorDisplayMode=0
DimUI=false
BlankSpaceDragEnabled=true
LastVRUIScale=100
WarningCompositorResolutionHidden=false
WarningCompositorQualityHidden=false
WarningProcessElevationHidden=false
WarningElevatedModeHidden=false
WarningBrowserMissingHidden=false
WarningBrowserVersionMismatchHidden=false
WarningAppProfileActiveHidden=false
ActionOrder=1;2;3;4;5;6;7;8;
ActionOrderBarDefault=1;3;7;
WindowSettingsRestoreState=false
WindowSettingsRoomVisible=false
WindowSettingsRoomPinned=false
WindowSettingsRoomSize=100
WindowSettingsRoomTransform=[0.965926 0 0.258819 0 0 1 0 0 -0.258819 0 0.965926 0 0.846609 0.7 0.38214 1]
WindowSettingsDashboardTabVisible=false
WindowSettingsDashboardTabPinned=false
WindowSettingsDashboardTabSize=100
WindowSettingsDashboardTabTransform=[0.965926 0 0.258819 0 0 1 0 0 -0.258819 0 0.965926 0 0.846609 0.7 0.38214 1]
WindowPropertiesRestoreState=false
WindowPropertiesRoomVisible=false
WindowPropertiesRoomPinned=false
WindowPropertiesRoomSize=100
WindowPropertiesRoomTransform=[0.965926 0 -0.258819 0 0 1 0 0 0.258819 0 0.965926 0 -0.846609 0.7 0.38214 1]
WindowPropertiesDashboardTabVisible=false
WindowPropertiesDashboardTabPinned=false
WindowPropertiesDashboardTabSize=100
WindowPropertiesDashboardTabTransform=[0.965926 0 -0.258819 0 0 1 0 0 0.258819 0 0.965926 0 -0.846609 0.7 0.38214 1]
WindowPropertiesLastOverlayID=-1
WindowPropertiesRestoreState=false
WindowPropertiesRoomVisible=false
WindowPropertiesDashboardTabVisible=false
WindowKeyboardRestoreState=true
WindowKeyboardRoomVisible=false
WindowKeyboardRoomPinned=false
WindowKeyboardRoomSize=100
WindowKeyboardRoomTransform=[1 0 0 0 0 0.707107 -0.707107 0 0 0.707107 0.707107 0 0 -0.782608 0.782608 1]
WindowKeyboardDashboardTabVisible=false
WindowKeyboardDashboardTabPinned=false
WindowKeyboardDashboardTabSize=100
WindowKeyboardDashboardTabTransform=[1 0 0 0 0 0.707107 -0.707107 0 0 0.707107 0.707107 0 0 -0.767465 0.767466 1]
WindowKeyboardLastAssignedOverlayID=-1
QuickStartGuideHidden=false

[Input]
GoHomeButtonActionUID=6
GoBackButtonActionUID=5
;You can change this to allow for more global shortcuts, but the action manifest needs to adjusted as well and the app can not be installed in Steam (its internal manifest has priority)
GlobalShortcutsMaxCount=20
GlobalShortcut01ActionUID=0
GlobalHotkey01Modifiers=0
GlobalHotkey01KeyCode=0
GlobalHotkey01ActionUID=0
DetachedInteractionMaxDistance=200
LaserPointerBlockInput=false
GlobalHMDPointer=false
LaserPointerHMDKeyCodeToggle=0
LaserPointerHMDKeyCodeLeft=0
LaserPointerHMDKeyCodeRight=0
LaserPointerHMDKeyCodeMiddle=0
LaserPointerHMDKeyCodeDrag=0
DragAutoDocking=true
DragFixedDistance=false
DragFixedDistanceCM=200
DragFixedDistanceShape=0
DragFixedDistanceAutoCurve=true
DragFixedDistanceAutoTilt=true
DragSnapPosition=false
DragSnapPositionSize=10
DragSnapRotation=false
DragSnapRotationX=true
DragSnapRotationY=true
DragSnapRotationZ=true
DragSnapRotationAngle=45

[Mouse]
RenderCursor=true
RenderIntersectionBlob=false
ScrollSmooth=false
SimulatePenInput=false
AllowPointerOverride=true
DoubleClickAssistDuration=-1
InputSmoothingLevel=0

[Keyboard]
LayoutFile=qwerty_usa.ini
LayoutClusterFunction=true
LayoutClusterNavigation=true
LayoutClusterNumpad=false
LayoutClusterExtra=false
StickyModifiers=true
KeyRepeat=true

[Windows]
AutoFocusSceneAppDashboard=false
WinRTAutoFocus=true
WinRTKeepOnScreen=true
WinRTAutoSizeOverlay=false
WinRTAutoFocusSceneApp=false
WinRTWindowMatchingStrict=false
WinRTDraggingMode=2
WinRTOnCaptureLost=1

[Browser]
;These arguments are passed to the Desktop+ Browser executable and parsed by CEF. Things may break, use at your own risk.
CommandLineArguments=
BrowserMaxFPS=60
BrowserContentBlocker=false

[Performance]
UpdateLimitMode=0
UpdateLimitMS=0
UpdateLimitFPS=7
RapidLaserPointerUpdates=false
SingleDesktopMirroring=false
AlternativeCursorRendering=false
ShowFPS=false
;Experience issues with the UI getting stuck? Set this to false to let it render unconditionally
UIAutoThrottle=true
;Want to lower the render rate of the UI? Set this to the amount of VR frame syncs to skip for each rendered UI frame
UIFrameSkip=0
PerformanceMonitorStyleMinimal=false
PerformanceMonitorStyleLarge=true
PerformanceMonitorStyleShowWindow=true
PerformanceMonitorStyleShowTextOutline=false
PerformanceMonitorStyleMinimalShowMore=false
PerformanceMonitorShowGraphs=true
PerformanceMonitorShowTime=false
PerformanceMonitorShowCPU=true
PerformanceMonitorShowGPU=true
PerformanceMonitorShowFPS=true
PerformanceMonitorShowBattery=true
PerformanceMonitorShowTrackers=true
PerformanceMonitorShowViveWireless=false
;Disables display of GPU load % and VRAM usage. This prevents GPU hardware monitoring related stutter with certain older NVIDIA drivers
PerformanceMonitorDisableGPUCounters=false

[Misc]
NoSteam=false
UIAccessWasEnabled=false
;Need to force a specific GPU to be used? Set the DeviceID here (get the IDs from logs)
ForceGPUDeviceID=-1
;Same as above but for the GPU SteamVR is using if different from the desktops. Normally SteamVR reports it to the application with no need to change anything here
ForceGPUVRDeviceID=-1


================================================
FILE: assets/input/action_bindings_frame_controller.json
================================================
{
   "action_manifest_version" : 5,
   "alias_info" : {},
   "app_key" : "steam.overlay.1494460",
   "bindings" : {
      "/actions/laserpointer" : {
         "haptics" : [
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/left/output/haptic"
            },
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/right/output/haptic"
            }
         ],
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6",
                  "haptic_amplitude" : "0"
               },
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6",
                  "haptic_amplitude" : "0"
               },
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/bumper"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/bumper"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/dpad_down"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/b"
            }
         ]
      },
      "/actions/scroll_discrete" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/left/input/thumbstick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/right/input/thumbstick"
            }
         ]
      },
	  "/actions/scroll_smooth" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/left/input/thumbstick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/right/input/thumbstick"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type" : "frame_controller",
   "description" : "",
   "name" : "Default Desktop+ bindings for Steam Frame Controllers",
   "options" : {},
   "simulated_actions" : []
}


================================================
FILE: assets/input/action_bindings_gamepad.json
================================================
{
   "action_manifest_version" : 5,
   "alias_info" : {},
   "app_key" : "steam.overlay.1494460",
   "bindings" : {
      "/actions/laserpointer" : {
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/gamepad/input/trigger_right"
            },
            {
               "inputs" : {
                  "east" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/gamepad/input/trigger_left"
            },
			{
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/gamepad/input/b"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/gamepad/input/x"
            }
         ]
      },
	  "/actions/scroll_discrete" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/gamepad/input/joystick_right"
            }
         ]
      },
	  "/actions/scroll_smooth" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/gamepad/input/joystick_right"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type" : "gamepad",
   "description" : "",
   "name" : "Default Desktop+ bindings for Gamepads",
   "options" : {},
   "simulated_actions" : []
}


================================================
FILE: assets/input/action_bindings_generic.json
================================================
{
   "action_manifest_version" : 5,
   "alias_info" : {},
   "app_key" : "steam.overlay.1494460",
   "bindings" : {
      "/actions/laserpointer" : {
         "haptics" : [
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/left/output/haptic"
            },
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/right/output/haptic"
            }
         ],
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "east" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "dpad_click",
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "east" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "dpad_click",
               "path" : "/user/hand/right/input/trackpad"
            },
			{
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/grip"
            },
			{
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/grip"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/application_menu"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/application_menu"
            }
         ]
      },
	  "/actions/scroll_discrete" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "discrete_scroll_trackpad_accumthreshold_onmove" : "0.224",
                  "discrete_scroll_trackpad_accumthreshold_onreversal" : "0.672",
                  "discrete_scroll_trackpad_accumthreshold_ontouch" : "0.624",
                  "discrete_scroll_trackpad_noisethreshold_onmove" : "0.008",
                  "discrete_scroll_trackpad_noisethreshold_onreversal" : "0.095",
                  "discrete_scroll_trackpad_noisethreshold_ontouch" : "0.16",
                  "discrete_scroll_trackpad_slideandhold_borderbottom" : "-0.60",
                  "discrete_scroll_trackpad_slideandhold_bordertop" : "0.65",
                  "scroll_mode" : "discrete"
               },
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "discrete_scroll_trackpad_accumthreshold_onmove" : "0.224",
                  "discrete_scroll_trackpad_accumthreshold_onreversal" : "0.672",
                  "discrete_scroll_trackpad_accumthreshold_ontouch" : "0.624",
                  "discrete_scroll_trackpad_noisethreshold_onmove" : "0.008",
                  "discrete_scroll_trackpad_noisethreshold_onreversal" : "0.095",
                  "discrete_scroll_trackpad_noisethreshold_ontouch" : "0.16",
                  "discrete_scroll_trackpad_slideandhold_borderbottom" : "-0.60",
                  "discrete_scroll_trackpad_slideandhold_bordertop" : "0.65",
                  "scroll_mode" : "discrete"
               },
               "path" : "/user/hand/right/input/trackpad"
            }
         ]
      },
	  "/actions/scroll_smooth" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/right/input/trackpad"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type" : "generic",
   "description" : "",
   "name" : "Default Desktop+ bindings for Generic Controllers",
   "options" : {},
   "simulated_actions" : []
}


================================================
FILE: assets/input/action_bindings_holographic.json
================================================
{
   "action_manifest_version" : 5,
   "alias_info" : {},
   "app_key" : "steam.overlay.1494460",
   "bindings" : {
      "/actions/laserpointer" : {
         "haptics" : [
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/left/output/haptic"
            },
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/right/output/haptic"
            }
         ],
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "east" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "dpad_click",
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "east" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "dpad_click",
               "path" : "/user/hand/right/input/trackpad"
            },
			{
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/grip"
            },
			{
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/grip"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/application_menu"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/application_menu"
            }
         ]
      },
	  "/actions/scroll_discrete" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "discrete"
               },
               "path" : "/user/hand/left/input/joystick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "discrete"
               },
               "path" : "/user/hand/right/input/joystick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/right/input/trackpad"
            }
         ]
      },
	  "/actions/scroll_smooth" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters": {
                  "scroll_mode": "smooth",
                  "smooth_scroll_multiplier": "11.8"
               },
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters": {
                  "scroll_mode": "smooth",
                  "smooth_scroll_multiplier": "11.8"
               },
               "path" : "/user/hand/right/input/trackpad"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters": {
                  "scroll_mode": "smooth",
                  "smooth_scroll_joystick_min_input_magnitude": "0.3"
               },
               "path" : "/user/hand/left/input/joystick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters": {
                  "scroll_mode": "smooth",
                  "smooth_scroll_joystick_min_input_magnitude": "0.3"
               },
               "path" : "/user/hand/right/input/joystick"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type" : "holographic_controller",
   "description" : "",
   "name" : "Default Desktop+ bindings for Windows Mixed Reality Controllers",
   "options" : {},
   "simulated_actions" : []
}


================================================
FILE: assets/input/action_bindings_hpmotioncontroller.json
================================================
{
   "action_manifest_version" : 5,
   "alias_info" : {},
   "app_key" : "steam.overlay.1494460",
   "bindings" : {
      "/actions/laserpointer" : {
         "haptics" : [
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/left/output/haptic"
            },
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/right/output/haptic"
            }
         ],
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/x"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/a"
            },
			{
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/grip"
            },
			{
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/grip"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/y"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/b"
            }
         ]
      },
	  "/actions/scroll_discrete" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/left/input/joystick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/right/input/joystick"
            }
         ]
      },
	  "/actions/scroll_smooth" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/left/input/joystick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/right/input/joystick"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type" : "hpmotioncontroller",
   "description" : "",
   "name" : "Default Desktop+ bindings for HP Motion Controllers",
   "options" : {},
   "simulated_actions" : []
}


================================================
FILE: assets/input/action_bindings_knuckles.json
================================================
{
   "action_manifest_version" : 5,
   "alias_info" : {},
   "app_key" : "steam.overlay.1494460",
   "bindings" : {
      "/actions/laserpointer" : {
         "haptics" : [
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/left/output/haptic"
            },
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/right/output/haptic"
            }
         ],
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6"
               },
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6"
               },
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/trackpad"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/MiddleClick"
                  }
               },
               "mode" : "joystick",
               "path" : "/user/hand/left/input/thumbstick"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/MiddleClick"
                  }
               },
               "mode" : "joystick",
               "path" : "/user/hand/right/input/thumbstick"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/b"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/b"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/a"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/a"
            }
         ]
      },
      "/actions/scroll_discrete" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "discrete"
               },
               "path" : "/user/hand/left/input/thumbstick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "discrete"
               },
               "path" : "/user/hand/right/input/thumbstick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "discrete_scroll_trackpad_accumthreshold_onmove" : "0.28",
                  "discrete_scroll_trackpad_accumthreshold_onreversal" : "0.84",
                  "discrete_scroll_trackpad_accumthreshold_ontouch" : "0.78",
                  "discrete_scroll_trackpad_noisethreshold_onmove" : "0.01",
                  "discrete_scroll_trackpad_noisethreshold_onreversal" : "0.045",
                  "discrete_scroll_trackpad_noisethreshold_ontouch" : "0.15",
                  "discrete_scroll_trackpad_slideandhold_borderbottom" : "-0.65",
                  "discrete_scroll_trackpad_slideandhold_bordertop" : "0.55",
                  "scroll_mode" : "discrete"
               },
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "discrete_scroll_trackpad_accumthreshold_onmove" : "0.28",
                  "discrete_scroll_trackpad_accumthreshold_onreversal" : "0.84",
                  "discrete_scroll_trackpad_accumthreshold_ontouch" : "0.78",
                  "discrete_scroll_trackpad_noisethreshold_onmove" : "0.01",
                  "discrete_scroll_trackpad_noisethreshold_onreversal" : "0.045",
                  "discrete_scroll_trackpad_noisethreshold_ontouch" : "0.15",
                  "discrete_scroll_trackpad_slideandhold_borderbottom" : "-0.65",
                  "discrete_scroll_trackpad_slideandhold_bordertop" : "0.55",
                  "scroll_mode" : "discrete"
               },
               "path" : "/user/hand/right/input/trackpad"
            }
         ]
      },
	  "/actions/scroll_smooth" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth",
                  "smooth_scroll_edge_min_swipe" : "0.75",
                  "smooth_scroll_edge_scroll_threshold" : "0.55",
                  "smooth_scroll_edge_scroll_threshold_vertical_bias" : "0.1",
                  "smooth_scroll_trackpad_aspect_ratio" : "0.5"
               },
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth",
                  "smooth_scroll_edge_min_swipe" : "0.75",
                  "smooth_scroll_edge_scroll_threshold" : "0.55",
                  "smooth_scroll_edge_scroll_threshold_vertical_bias" : "0.1",
                  "smooth_scroll_trackpad_aspect_ratio" : "0.5"
               },
               "path" : "/user/hand/right/input/trackpad"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/left/input/thumbstick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/right/input/thumbstick"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type" : "knuckles",
   "description" : "",
   "name" : "Default Desktop+ bindings for Index Controllers",
   "options" : {},
   "simulated_actions" : []
}


================================================
FILE: assets/input/action_bindings_knuckles_ev1.json
================================================
{
   "action_manifest_version" : 5,
   "alias_info" : {},
   "app_key" : "steam.overlay.1494460",
   "bindings" : {
      "/actions/laserpointer" : {
         "haptics" : [
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/left/output/haptic"
            },
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/right/output/haptic"
            }
         ],
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "east" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "dpad_click",
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "east" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "dpad_click",
               "path" : "/user/hand/right/input/trackpad"
            },
			{
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/b"
            },
			{
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/a"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/a"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/b"
            }
         ]
      },
	  "/actions/scroll_discrete" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "discrete_scroll_trackpad_accumthreshold_onmove" : "0.224",
                  "discrete_scroll_trackpad_accumthreshold_onreversal" : "0.672",
                  "discrete_scroll_trackpad_accumthreshold_ontouch" : "0.624",
                  "discrete_scroll_trackpad_noisethreshold_onmove" : "0.008",
                  "discrete_scroll_trackpad_noisethreshold_onreversal" : "0.095",
                  "discrete_scroll_trackpad_noisethreshold_ontouch" : "0.16",
                  "discrete_scroll_trackpad_slideandhold_borderbottom" : "-0.60",
                  "discrete_scroll_trackpad_slideandhold_bordertop" : "0.65",
                  "scroll_mode" : "discrete"
               },
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "discrete_scroll_trackpad_accumthreshold_onmove" : "0.224",
                  "discrete_scroll_trackpad_accumthreshold_onreversal" : "0.672",
                  "discrete_scroll_trackpad_accumthreshold_ontouch" : "0.624",
                  "discrete_scroll_trackpad_noisethreshold_onmove" : "0.008",
                  "discrete_scroll_trackpad_noisethreshold_onreversal" : "0.095",
                  "discrete_scroll_trackpad_noisethreshold_ontouch" : "0.16",
                  "discrete_scroll_trackpad_slideandhold_borderbottom" : "-0.60",
                  "discrete_scroll_trackpad_slideandhold_bordertop" : "0.65",
                  "scroll_mode" : "discrete"
               },
               "path" : "/user/hand/right/input/trackpad"
            }
         ]
      },
	  "/actions/scroll_smooth" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/right/input/trackpad"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type" : "knuckles_ev1",
   "description" : "",
   "name" : "Default Desktop+ bindings for Knuckles EV1 Controllers",
   "options" : {},
   "simulated_actions" : []
}


================================================
FILE: assets/input/action_bindings_playstation_vr2_sense_controller.json
================================================
{
   "action_manifest_version" : 5,
   "alias_info" : {},
   "app_key" : "steam.overlay.1494460",
   "bindings" : {
      "/actions/laserpointer" : {
         "haptics" : [
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/left/output/haptic"
            },
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/right/output/haptic"
            }
         ],
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6"
               },
               "path" : "/user/hand/left/input/l2"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6"
               },
               "path" : "/user/hand/right/input/r2"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/square"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/cross"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/triangle"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/circle"
            }
         ]
      },
      "/actions/scroll_discrete" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/left/input/left_stick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/right/input/right_stick"
            }
         ]
      },
	  "/actions/scroll_smooth" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/left/input/left_stick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/right/input/right_stick"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type" : "playstation_vr2_sense",
   "description" : "",
   "name" : "Default Desktop+ bindings for PS VR2 Sense Controllers",
   "options" : {},
   "simulated_actions" : []
}


================================================
FILE: assets/input/action_bindings_svl_hand_interaction_augmented.json
================================================
{
   "action_manifest_version" : 5,
   "alias_info" : {},
   "app_key" : "steam.overlay.1494460",
   "bindings" : {
      "/actions/laserpointer" : {
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6"
               },
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6"
               },
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/index_pinch"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/index_pinch"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/pinky_pinch"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/pinky_pinch"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type": "svl_hand_interaction_augmented",
   "description": "",
   "name": "Default Desktop+ bindings for Steam Link Hand Tracking",
   "options" : {},
   "simulated_actions" : []
}


================================================
FILE: assets/input/action_bindings_touch.json
================================================
{
   "action_manifest_version" : 5,
   "alias_info" : {},
   "app_key" : "steam.overlay.1494460",
   "bindings" : {
      "/actions/laserpointer" : {
         "haptics" : [
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/left/output/haptic"
            },
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/right/output/haptic"
            }
         ],
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6"
               },
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6"
               },
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/x"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/a"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/MiddleClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/grip"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/MiddleClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/grip"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/y"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/b"
            }
         ]
      },
      "/actions/scroll_discrete" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/left/input/joystick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/right/input/joystick"
            }
         ]
      },
      "/actions/scroll_smooth" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/left/input/joystick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/right/input/joystick"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type" : "oculus_touch",
   "description" : "",
   "name" : "Default Desktop+ bindings for Oculus Touch",
   "options" : {},
   "simulated_actions" : []
}


================================================
FILE: assets/input/action_bindings_vive_controller.json
================================================
{
   "action_manifest_version" : 5,
   "alias_info" : {},
   "app_key" : "steam.overlay.1494460",
   "bindings" : {
      "/actions/laserpointer" : {
         "haptics" : [
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/left/output/haptic"
            },
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/right/output/haptic"
            }
         ],
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6"
               },
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6"
               },
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "east" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "dpad_click",
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "east" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "dpad_click",
               "path" : "/user/hand/right/input/trackpad"
            },
			{
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/grip"
            },
			{
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux01Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/grip"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/application_menu"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/application_menu"
            }
         ]
      },
	  "/actions/scroll_discrete" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "discrete_scroll_trackpad_accumthreshold_onmove" : "0.224",
                  "discrete_scroll_trackpad_accumthreshold_onreversal" : "0.672",
                  "discrete_scroll_trackpad_accumthreshold_ontouch" : "0.624",
                  "discrete_scroll_trackpad_noisethreshold_onmove" : "0.008",
                  "discrete_scroll_trackpad_noisethreshold_onreversal" : "0.095",
                  "discrete_scroll_trackpad_noisethreshold_ontouch" : "0.16",
                  "discrete_scroll_trackpad_slideandhold_borderbottom" : "-0.60",
                  "discrete_scroll_trackpad_slideandhold_bordertop" : "0.65",
                  "scroll_mode" : "discrete"
               },
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "discrete_scroll_trackpad_accumthreshold_onmove" : "0.224",
                  "discrete_scroll_trackpad_accumthreshold_onreversal" : "0.672",
                  "discrete_scroll_trackpad_accumthreshold_ontouch" : "0.624",
                  "discrete_scroll_trackpad_noisethreshold_onmove" : "0.008",
                  "discrete_scroll_trackpad_noisethreshold_onreversal" : "0.095",
                  "discrete_scroll_trackpad_noisethreshold_ontouch" : "0.16",
                  "discrete_scroll_trackpad_slideandhold_borderbottom" : "-0.60",
                  "discrete_scroll_trackpad_slideandhold_bordertop" : "0.65",
                  "scroll_mode" : "discrete"
               },
               "path" : "/user/hand/right/input/trackpad"
            }
         ]
      },
	  "/actions/scroll_smooth" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/left/input/trackpad"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
               "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/right/input/trackpad"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type" : "vive_controller",
   "description" : "",
   "name" : "Default Desktop+ bindings for Vive Controllers",
   "options" : {},
   "simulated_actions" : []
}


================================================
FILE: assets/input/action_bindings_vive_cosmos.json
================================================
{
   "action_manifest_version" : 5,
   "alias_info" : {},
   "app_key" : "steam.overlay.1494460",
   "bindings" : {
      "/actions/laserpointer" : {
         "haptics" : [
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/left/output/haptic"
            },
            {
               "output" : "/actions/laserpointer/out/Haptic",
               "path" : "/user/hand/right/output/haptic"
            }
         ],
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
			   "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6"
               },
               "path" : "/user/hand/right/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/LeftClick"
                  }
               },
               "mode" : "button",
			   "parameters" : {
                  "click_activate_threshold" : "0.65",
                  "click_deactivate_threshold" : "0.6"
               },
               "path" : "/user/hand/left/input/trigger"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/x"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/RightClick"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/a"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/left/input/y"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/laserpointer/in/Aux02Click"
                  }
               },
               "mode" : "button",
               "path" : "/user/hand/right/input/b"
            }
         ]
      },
	  "/actions/scroll_discrete" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/left/input/joystick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_discrete/in/ScrollDiscrete"
                  }
               },
               "mode" : "scroll",
               "path" : "/user/hand/right/input/joystick"
            }
         ]
      },
	  "/actions/scroll_smooth" : {
         "sources" : [
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
			   "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/left/input/joystick"
            },
            {
               "inputs" : {
                  "scroll" : {
                     "output" : "/actions/scroll_smooth/in/ScrollSmooth"
                  }
               },
               "mode" : "scroll",
			   "parameters" : {
                  "scroll_mode" : "smooth"
               },
               "path" : "/user/hand/right/input/joystick"
            }
         ]
      }
   },
   "category" : "steamvr_input",
   "controller_type" : "vive_cosmos_controller",
   "description" : "",
   "name" : "Default Desktop+ bindings for Vive Cosmos Controllers",
   "options" : {},
   "simulated_actions" : []
}


================================================
FILE: assets/input/action_manifest_de.json
================================================
{
    "language_tag": "de_DE",

    "/actions/shortcuts" : "Globale Kürzel",

    "/actions/shortcuts/in/EnableGlobalLaserPointer" : "Aktiviere globalen Laser-Pointer",
    "/actions/shortcuts/in/GlobalShortcut01" : "Globales Kürzel #1 ausführen",
    "/actions/shortcuts/in/GlobalShortcut02" : "Globales Kürzel #2 ausführen",
    "/actions/shortcuts/in/GlobalShortcut03" : "Globales Kürzel #3 ausführen",
    "/actions/shortcuts/in/GlobalShortcut04" : "Globales Kürzel #4 ausführen",
    "/actions/shortcuts/in/GlobalShortcut05" : "Globales Kürzel #5 ausführen",
    "/actions/shortcuts/in/GlobalShortcut06" : "Globales Kürzel #6 ausführen",
    "/actions/shortcuts/in/GlobalShortcut07" : "Globales Kürzel #7 ausführen",
    "/actions/shortcuts/in/GlobalShortcut08" : "Globales Kürzel #8 ausführen",
    "/actions/shortcuts/in/GlobalShortcut09" : "Globales Kürzel #9 ausführen",
    "/actions/shortcuts/in/GlobalShortcut10" : "Globales Kürzel #10 ausführen",
    "/actions/shortcuts/in/GlobalShortcut11" : "Globales Kürzel #11 ausführen",
    "/actions/shortcuts/in/GlobalShortcut12" : "Globales Kürzel #12 ausführen",
    "/actions/shortcuts/in/GlobalShortcut13" : "Globales Kürzel #13 ausführen",
    "/actions/shortcuts/in/GlobalShortcut14" : "Globales Kürzel #14 ausführen",
    "/actions/shortcuts/in/GlobalShortcut15" : "Globales Kürzel #15 ausführen",
    "/actions/shortcuts/in/GlobalShortcut16" : "Globales Kürzel #16 ausführen",
    "/actions/shortcuts/in/GlobalShortcut17" : "Globales Kürzel #17 ausführen",
    "/actions/shortcuts/in/GlobalShortcut18" : "Globales Kürzel #18 ausführen",
    "/actions/shortcuts/in/GlobalShortcut19" : "Globales Kürzel #19 ausführen",
    "/actions/shortcuts/in/GlobalShortcut20" : "Globales Kürzel #20 ausführen",

    "/actions/laserpointer" : "Laserpointer",

    "/actions/laserpointer/in/LeftClick"   : "Linksklick",
    "/actions/laserpointer/in/RightClick"  : "Rechtsklick",
    "/actions/laserpointer/in/MiddleClick" : "Mittelklick",
    "/actions/laserpointer/in/Aux01Click"  : "Extra 1-Klick",
    "/actions/laserpointer/in/Aux02Click"  : "Extra 2-Klick",
    "/actions/laserpointer/in/Drag"        : "Overlay ziehen",
	
	"/actions/scroll_discrete" : "Mausrad-Bildlauf",
	
    "/actions/scroll_discrete/in/ScrollDiscrete" : "Overlay scrollen",
	
	"/actions/scroll_smooth" : "Weicher Bildlauf",
	
    "/actions/scroll_smooth/in/ScrollSmooth"   : "Overlay scrollen"
}


================================================
FILE: assets/input/action_manifest_en.json
================================================
{
    "language_tag": "en_US",

    "/actions/shortcuts" : "Global Shortcuts",

    "/actions/shortcuts/in/EnableGlobalLaserPointer" : "Enable Global Laser Pointer",
    "/actions/shortcuts/in/GlobalShortcut01" : "Do Global Shortcut #1",
    "/actions/shortcuts/in/GlobalShortcut02" : "Do Global Shortcut #2",
    "/actions/shortcuts/in/GlobalShortcut03" : "Do Global Shortcut #3",
    "/actions/shortcuts/in/GlobalShortcut04" : "Do Global Shortcut #4",
    "/actions/shortcuts/in/GlobalShortcut05" : "Do Global Shortcut #5",
    "/actions/shortcuts/in/GlobalShortcut06" : "Do Global Shortcut #6",
    "/actions/shortcuts/in/GlobalShortcut07" : "Do Global Shortcut #7",
    "/actions/shortcuts/in/GlobalShortcut08" : "Do Global Shortcut #8",
    "/actions/shortcuts/in/GlobalShortcut09" : "Do Global Shortcut #9",
    "/actions/shortcuts/in/GlobalShortcut10" : "Do Global Shortcut #10",
    "/actions/shortcuts/in/GlobalShortcut11" : "Do Global Shortcut #11",
    "/actions/shortcuts/in/GlobalShortcut12" : "Do Global Shortcut #12",
    "/actions/shortcuts/in/GlobalShortcut13" : "Do Global Shortcut #13",
    "/actions/shortcuts/in/GlobalShortcut14" : "Do Global Shortcut #14",
    "/actions/shortcuts/in/GlobalShortcut15" : "Do Global Shortcut #15",
    "/actions/shortcuts/in/GlobalShortcut16" : "Do Global Shortcut #16",
    "/actions/shortcuts/in/GlobalShortcut17" : "Do Global Shortcut #17",
    "/actions/shortcuts/in/GlobalShortcut18" : "Do Global Shortcut #18",
    "/actions/shortcuts/in/GlobalShortcut19" : "Do Global Shortcut #19",
    "/actions/shortcuts/in/GlobalShortcut20" : "Do Global Shortcut #20",

    "/actions/laserpointer" : "Laser Pointer",

    "/actions/laserpointer/in/LeftClick"   : "Left Click",
    "/actions/laserpointer/in/RightClick"  : "Right Click",
    "/actions/laserpointer/in/MiddleClick" : "Middle Click",
    "/actions/laserpointer/in/Aux01Click"  : "Auxiliary 1 Click",
    "/actions/laserpointer/in/Aux02Click"  : "Auxiliary 2 Click",
    "/actions/laserpointer/in/Drag"        : "Drag Overlay",
	
	"/actions/scroll_discrete" : "Mousewheel Scrolling",
	
    "/actions/scroll_discrete/in/ScrollDiscrete" : "Scroll Overlay",
	
	"/actions/scroll_smooth" : "Smooth Scrolling",
	
    "/actions/scroll_smooth/in/ScrollSmooth" : "Scroll Overlay"
}


================================================
FILE: assets/input/action_manifest_ja.json
================================================
{
    "language_tag": "ja_JP",

    "/actions/shortcuts" : "グローバルショートカット",

    "/actions/shortcuts/in/EnableGlobalLaserPointer" : "グローバルレーザーポインターを有効化",
    "/actions/shortcuts/in/GlobalShortcut01" : "グローバルショートカットを実行 #1",
    "/actions/shortcuts/in/GlobalShortcut02" : "グローバルショートカットを実行 #2",
    "/actions/shortcuts/in/GlobalShortcut03" : "グローバルショートカットを実行 #3",
    "/actions/shortcuts/in/GlobalShortcut04" : "グローバルショートカットを実行 #4",
    "/actions/shortcuts/in/GlobalShortcut05" : "グローバルショートカットを実行 #5",
    "/actions/shortcuts/in/GlobalShortcut06" : "グローバルショートカットを実行 #6",
    "/actions/shortcuts/in/GlobalShortcut07" : "グローバルショートカットを実行 #7",
    "/actions/shortcuts/in/GlobalShortcut08" : "グローバルショートカットを実行 #8",
    "/actions/shortcuts/in/GlobalShortcut09" : "グローバルショートカットを実行 #9",
    "/actions/shortcuts/in/GlobalShortcut10" : "グローバルショートカットを実行 #10",
    "/actions/shortcuts/in/GlobalShortcut11" : "グローバルショートカットを実行 #11",
    "/actions/shortcuts/in/GlobalShortcut12" : "グローバルショートカットを実行 #12",
    "/actions/shortcuts/in/GlobalShortcut13" : "グローバルショートカットを実行 #13",
    "/actions/shortcuts/in/GlobalShortcut14" : "グローバルショートカットを実行 #14",
    "/actions/shortcuts/in/GlobalShortcut15" : "グローバルショートカットを実行 #15",
    "/actions/shortcuts/in/GlobalShortcut16" : "グローバルショートカットを実行 #16",
    "/actions/shortcuts/in/GlobalShortcut17" : "グローバルショートカットを実行 #17",
    "/actions/shortcuts/in/GlobalShortcut18" : "グローバルショートカットを実行 #18",
    "/actions/shortcuts/in/GlobalShortcut19" : "グローバルショートカットを実行 #19",
    "/actions/shortcuts/in/GlobalShortcut20" : "グローバルショートカットを実行 #20",

    "/actions/laserpointer" : "レーザーポインター",

    "/actions/laserpointer/in/LeftClick"   : "左クリック",
    "/actions/laserpointer/in/RightClick"  : "右クリック",
    "/actions/laserpointer/in/MiddleClick" : "ホイールクリック",
    "/actions/laserpointer/in/Aux01Click"  : "補助 1 クリック",
    "/actions/laserpointer/in/Aux02Click"  : "補助 2 クリック",
	
	"/actions/scroll_discrete" : "マウスホイール スクロール",
	
    "/actions/scroll_discrete/in/ScrollDiscrete" : "スクロールオーバーレイ",
	
	"/actions/scroll_smooth" : "スムーズ スクロール",
	
    "/actions/scroll_smooth/in/ScrollSmooth" : "スクロールオーバーレイ"
}


================================================
FILE: assets/input/action_manifest_ko.json
================================================
{
    "language_tag": "ko_KR",

    "/actions/shortcuts" : "전역 단축키",

    "/actions/shortcuts/in/EnableGlobalLaserPointer" : "전역 레이저 포인터 활성화",
    "/actions/shortcuts/in/GlobalShortcut01" : "전역 단축키 실행 #1",
    "/actions/shortcuts/in/GlobalShortcut02" : "전역 단축키 실행 #2",
    "/actions/shortcuts/in/GlobalShortcut03" : "전역 단축키 실행 #3",
    "/actions/shortcuts/in/GlobalShortcut04" : "전역 단축키 실행 #4",
    "/actions/shortcuts/in/GlobalShortcut05" : "전역 단축키 실행 #5",
    "/actions/shortcuts/in/GlobalShortcut06" : "전역 단축키 실행 #6",
    "/actions/shortcuts/in/GlobalShortcut07" : "전역 단축키 실행 #7",
    "/actions/shortcuts/in/GlobalShortcut08" : "전역 단축키 실행 #8",
    "/actions/shortcuts/in/GlobalShortcut09" : "전역 단축키 실행 #9",
    "/actions/shortcuts/in/GlobalShortcut10" : "전역 단축키 실행 #10",
    "/actions/shortcuts/in/GlobalShortcut11" : "전역 단축키 실행 #11",
    "/actions/shortcuts/in/GlobalShortcut12" : "전역 단축키 실행 #12",
    "/actions/shortcuts/in/GlobalShortcut13" : "전역 단축키 실행 #13",
    "/actions/shortcuts/in/GlobalShortcut14" : "전역 단축키 실행 #14",
    "/actions/shortcuts/in/GlobalShortcut15" : "전역 단축키 실행 #15",
    "/actions/shortcuts/in/GlobalShortcut16" : "전역 단축키 실행 #16",
    "/actions/shortcuts/in/GlobalShortcut17" : "전역 단축키 실행 #17",
    "/actions/shortcuts/in/GlobalShortcut18" : "전역 단축키 실행 #18",
    "/actions/shortcuts/in/GlobalShortcut19" : "전역 단축키 실행 #19",
    "/actions/shortcuts/in/GlobalShortcut20" : "전역 단축키 실행 #20",

    "/actions/laserpointer" : "레이저 포인터",

    "/actions/laserpointer/in/LeftClick"   : "왼쪽 클릭",
    "/actions/laserpointer/in/RightClick"  : "오른쪽 클릭",
    "/actions/laserpointer/in/MiddleClick" : "휠 클릭",
    "/actions/laserpointer/in/Aux01Click"  : "측면 1 클릭",
    "/actions/laserpointer/in/Aux02Click"  : "측면 2 클릭",
    "/actions/laserpointer/in/Drag"        : "오버레이 드래그",
	
	"/actions/scroll_discrete" : "마우스 휠 스크롤",
	
    "/actions/scroll_discrete/in/ScrollDiscrete" : "오버레이 스크롤",
	
	"/actions/scroll_smooth" : "부드러운 스크롤",
	
    "/actions/scroll_smooth/in/ScrollSmooth" : "오버레이 스크롤"
}


================================================
FILE: assets/input/action_manifest_zh_CN.json
================================================
{
    "language_tag": "zh_CN",

    "/actions/shortcuts" : "全局快捷键",

    "/actions/shortcuts/in/EnableGlobalLaserPointer" : "启用全局激光指针",
    "/actions/shortcuts/in/GlobalShortcut01" : "执行全局快捷键 #1",
    "/actions/shortcuts/in/GlobalShortcut02" : "执行全局快捷键 #2",
    "/actions/shortcuts/in/GlobalShortcut03" : "执行全局快捷键 #3",
    "/actions/shortcuts/in/GlobalShortcut04" : "执行全局快捷键 #4",
    "/actions/shortcuts/in/GlobalShortcut05" : "执行全局快捷键 #5",
    "/actions/shortcuts/in/GlobalShortcut06" : "执行全局快捷键 #6",
    "/actions/shortcuts/in/GlobalShortcut07" : "执行全局快捷键 #7",
    "/actions/shortcuts/in/GlobalShortcut08" : "执行全局快捷键 #8",
    "/actions/shortcuts/in/GlobalShortcut09" : "执行全局快捷键 #9",
    "/actions/shortcuts/in/GlobalShortcut10" : "执行全局快捷键 #10",
    "/actions/shortcuts/in/GlobalShortcut11" : "执行全局快捷键 #11",
    "/actions/shortcuts/in/GlobalShortcut12" : "执行全局快捷键 #12",
    "/actions/shortcuts/in/GlobalShortcut13" : "执行全局快捷键 #13",
    "/actions/shortcuts/in/GlobalShortcut14" : "执行全局快捷键 #14",
    "/actions/shortcuts/in/GlobalShortcut15" : "执行全局快捷键 #15",
    "/actions/shortcuts/in/GlobalShortcut16" : "执行全局快捷键 #16",
    "/actions/shortcuts/in/GlobalShortcut17" : "执行全局快捷键 #17",
    "/actions/shortcuts/in/GlobalShortcut18" : "执行全局快捷键 #18",
    "/actions/shortcuts/in/GlobalShortcut19" : "执行全局快捷键 #19",
    "/actions/shortcuts/in/GlobalShortcut20" : "执行全局快捷键 #20",

    "/actions/laserpointer" : "激光指针",

    "/actions/laserpointer/in/LeftClick"   : "左键点击",
    "/actions/laserpointer/in/RightClick"  : "右键点击",
    "/actions/laserpointer/in/MiddleClick" : "中键点击",
    "/actions/laserpointer/in/Aux01Click"  : "辅助1点击",
    "/actions/laserpointer/in/Aux02Click"  : "辅助2点击",
    "/actions/laserpointer/in/Drag"        : "拖动叠加",
	
	"/actions/scroll_discrete" : "鼠标滚轮滚动",
	
    "/actions/scroll_discrete/in/ScrollDiscrete" : "滚动叠加",
	
	"/actions/scroll_smooth" : "平滑滚动",
	
    "/actions/scroll_smooth/in/ScrollSmooth" : "滚动叠加"
}


================================================
FILE: assets/keyboards/azerty_be.ini
================================================
[LayoutInfo]
Name=AZERTY (Belgium)
Author=
HasAltGr=true
HasClusterFunction=true
HasClusterNavigation=true
HasClusterNumpad=true
HasClusterExtra=true

[Key_Base_Row_0_ID_0]
Type=VirtualKey
Label=Esc
Cluster=Function
KeyCode=27
NoRepeat=true

[Key_Base_Row_0_ID_1]
Type=Blank
Cluster=Function

[Key_Base_Row_0_ID_2]
Type=VirtualKey
Label=F1
Cluster=Function
KeyCode=112

[Key_Base_Row_0_ID_3]
Type=VirtualKey
Label=F2
Cluster=Function
KeyCode=113

[Key_Base_Row_0_ID_4]
Type=VirtualKey
Label=F3
Cluster=Function
KeyCode=114

[Key_Base_Row_0_ID_5]
Type=VirtualKey
Label=F4
Cluster=Function
KeyCode=115

[Key_Base_Row_0_ID_6]
Type=Blank
Width=50
Cluster=Function

[Key_Base_Row_0_ID_7]
Type=VirtualKey
Label=F5
Cluster=Function
KeyCode=116

[Key_Base_Row_0_ID_8]
Type=VirtualKey
Label=F6
Cluster=Function
KeyCode=117

[Key_Base_Row_0_ID_9]
Type=VirtualKey
Label=F7
Cluster=Function
KeyCode=118

[Key_Base_Row_0_ID_10]
Type=VirtualKey
Label=F8
Cluster=Function
KeyCode=119

[Key_Base_Row_0_ID_11]
Type=Blank
Width=50
Cluster=Function

[Key_Base_Row_0_ID_12]
Type=VirtualKey
Label=F9
Cluster=Function
KeyCode=120

[Key_Base_Row_0_ID_13]
Type=VirtualKey
Label=F10
Cluster=Function
KeyCode=121

[Key_Base_Row_0_ID_14]
Type=VirtualKey
Label=F11
Cluster=Function
KeyCode=122

[Key_Base_Row_0_ID_15]
Type=VirtualKey
Label=F12
Cluster=Function
KeyCode=123

[Key_Base_Row_0_ID_16]
Type=Blank
Width=25
Cluster=Function

[Key_Base_Row_0_ID_17]
Type=VirtualKey
Label=Print\nScreen
Cluster=Function
KeyCode=44
NoRepeat=true

[Key_Base_Row_0_ID_18]
Type=VirtualKey
Label=Scroll\nLock
Cluster=Function
KeyCode=145
NoRepeat=true

[Key_Base_Row_0_ID_19]
Type=VirtualKey
Label=Pause
Cluster=Function
KeyCode=19
NoRepeat=true

[Key_Base_Row_0_ID_20]
Type=Blank
Width=25
Cluster=Extra

[Key_Base_Row_0_ID_21]
Type=VirtualKey
Label=⏯
Cluster=Extra
KeyCode=179
NoRepeat=true

[Key_Base_Row_0_ID_22]
Type=VirtualKey
Label=◼
Cluster=Extra
KeyCode=178
NoRepeat=true

[Key_Base_Row_0_ID_23]
Type=VirtualKey
Label=⏮
Cluster=Extra
KeyCode=177
NoRepeat=true

[Key_Base_Row_0_ID_24]
Type=VirtualKey
Label=⏭
Cluster=Extra
KeyCode=176
NoRepeat=true

[Key_Base_Row_1_ID_0]
Type=Blank
Height=25
Cluster=Function

[Key_Base_Row_1_ID_1]
Type=Blank
Height=25
Cluster=Extra

[Key_Base_Row_2_ID_0]
Type=String
Label=²
String=²

[Key_Base_Row_2_ID_1]
Type=String
Label=&
String=&

[Key_Base_Row_2_ID_2]
Type=String
Label=é
String=é

[Key_Base_Row_2_ID_3]
Type=String
Label="
String="

[Key_Base_Row_2_ID_4]
Type=String
Label='
String='

[Key_Base_Row_2_ID_5]
Type=String
Label=(
String=(

[Key_Base_Row_2_ID_6]
Type=String
Label=§
String=§

[Key_Base_Row_2_ID_7]
Type=String
Label=è
String=è

[Key_Base_Row_2_ID_8]
Type=String
Label=!
String=!

[Key_Base_Row_2_ID_9]
Type=String
Label=ç
String=ç

[Key_Base_Row_2_ID_10]
Type=String
Label=à
String=à

[Key_Base_Row_2_ID_11]
Type=String
Label=)
String=)

[Key_Base_Row_2_ID_12]
Type=String
Label=-
String=-

[Key_Base_Row_2_ID_13]
Type=VirtualKey
Width=200
Label=⟵
KeyCode=8

[Key_Base_Row_2_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Base_Row_2_ID_15]
Type=VirtualKey
Label=Insert
Cluster=Navigation
KeyCode=45

[Key_Base_Row_2_ID_16]
Type=VirtualKey
Label=Home
Cluster=Navigation
KeyCode=36

[Key_Base_Row_2_ID_17]
Type=VirtualKey
Label=PgUp
Cluster=Navigation
KeyCode=33

[Key_Base_Row_2_ID_18]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_2_ID_19]
Type=VirtualKey
Label=Num\nLock
Cluster=Numpad
KeyCode=144
NoRepeat=true

[Key_Base_Row_2_ID_20]
Type=VirtualKey
Label=/
Cluster=Numpad
KeyCode=111

[Key_Base_Row_2_ID_21]
Type=VirtualKey
Label=*
Cluster=Numpad
KeyCode=106

[Key_Base_Row_2_ID_22]
Type=VirtualKey
Label=-
Cluster=Numpad
KeyCode=109

[Key_Base_Row_3_ID_0]
Type=VirtualKey
Width=150
Label=⭾
KeyCode=9

[Key_Base_Row_3_ID_1]
Type=VirtualKey
Label=a
KeyCode=65

[Key_Base_Row_3_ID_2]
Type=VirtualKey
Label=z
KeyCode=90

[Key_Base_Row_3_ID_3]
Type=VirtualKey
Label=e
KeyCode=69

[Key_Base_Row_3_ID_4]
Type=VirtualKey
Label=r
KeyCode=82

[Key_Base_Row_3_ID_5]
Type=VirtualKey
Label=t
KeyCode=84

[Key_Base_Row_3_ID_6]
Type=VirtualKey
Label=y
KeyCode=89

[Key_Base_Row_3_ID_7]
Type=VirtualKey
Label=u
KeyCode=85

[Key_Base_Row_3_ID_8]
Type=VirtualKey
Label=i
KeyCode=73

[Key_Base_Row_3_ID_9]
Type=VirtualKey
Label=o
KeyCode=79

[Key_Base_Row_3_ID_10]
Type=VirtualKey
Label=p
KeyCode=80

[Key_Base_Row_3_ID_11]
Type=String
Label=^
String=^

[Key_Base_Row_3_ID_12]
Type=String
Label=$
String=$

[Key_Base_Row_3_ID_13]
Type=VirtualKeyIsoEnter
Width=150
Label=
KeyCode=13

[Key_Base_Row_3_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Base_Row_3_ID_15]
Type=VirtualKey
Label=Delete
Cluster=Navigation
KeyCode=46

[Key_Base_Row_3_ID_16]
Type=VirtualKey
Label=End
Cluster=Navigation
KeyCode=35

[Key_Base_Row_3_ID_17]
Type=VirtualKey
Label=PgDn
Cluster=Navigation
KeyCode=34

[Key_Base_Row_3_ID_18]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_3_ID_19]
Type=VirtualKey
Label=7
Cluster=Numpad
KeyCode=103

[Key_Base_Row_3_ID_20]
Type=VirtualKey
Label=8
Cluster=Numpad
KeyCode=104

[Key_Base_Row_3_ID_21]
Type=VirtualKey
Label=9
Cluster=Numpad
KeyCode=105

[Key_Base_Row_3_ID_22]
Type=VirtualKey
Height=200
Label=+
Cluster=Numpad
KeyCode=107

[Key_Base_Row_4_ID_0]
Type=VirtualKey
Width=175
Label=🡇
KeyCode=20
NoRepeat=true

[Key_Base_Row_4_ID_1]
Type=VirtualKey
Label=q
KeyCode=81

[Key_Base_Row_4_ID_2]
Type=VirtualKey
Label=s
KeyCode=83

[Key_Base_Row_4_ID_3]
Type=VirtualKey
Label=d
KeyCode=68

[Key_Base_Row_4_ID_4]
Type=VirtualKey
Label=f
KeyCode=70

[Key_Base_Row_4_ID_5]
Type=VirtualKey
Label=g
KeyCode=71

[Key_Base_Row_4_ID_6]
Type=VirtualKey
Label=h
KeyCode=72

[Key_Base_Row_4_ID_7]
Type=VirtualKey
Label=j
KeyCode=74

[Key_Base_Row_4_ID_8]
Type=VirtualKey
Label=k
KeyCode=75

[Key_Base_Row_4_ID_9]
Type=VirtualKey
Label=l
KeyCode=76

[Key_Base_Row_4_ID_10]
Type=VirtualKey
Label=m
KeyCode=77

[Key_Base_Row_4_ID_11]
Type=String
Label=ù
String=ù

[Key_Base_Row_4_ID_12]
Type=String
Label=µ
String=µ

[Key_Base_Row_4_ID_13]
Type=VirtualKeyIsoEnter
Width=125
Label=↵
KeyCode=13

[Key_Base_Row_4_ID_14]
Type=Blank
Width=325
Cluster=Navigation

[Key_Base_Row_4_ID_15]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_4_ID_16]
Type=VirtualKey
Label=4
Cluster=Numpad
KeyCode=100

[Key_Base_Row_4_ID_17]
Type=VirtualKey
Label=5
Cluster=Numpad
KeyCode=101

[Key_Base_Row_4_ID_18]
Type=VirtualKey
Label=6
Cluster=Numpad
KeyCode=102

[Key_Base_Row_5_ID_0]
Type=VirtualKeyToggle
Width=125
Label=🡅
KeyCode=160
NoRepeat=true

[Key_Base_Row_5_ID_1]
Type=String
Label=<
String=<

[Key_Base_Row_5_ID_2]
Type=VirtualKey
Label=w
KeyCode=87

[Key_Base_Row_5_ID_3]
Type=VirtualKey
Label=x
KeyCode=88

[Key_Base_Row_5_ID_4]
Type=VirtualKey
Label=c
KeyCode=67

[Key_Base_Row_5_ID_5]
Type=VirtualKey
Label=v
KeyCode=86

[Key_Base_Row_5_ID_6]
Type=VirtualKey
Label=b
KeyCode=66

[Key_Base_Row_5_ID_7]
Type=VirtualKey
Label=n
KeyCode=78

[Key_Base_Row_5_ID_8]
Type=String
Label=,
String=,

[Key_Base_Row_5_ID_9]
Type=String
Label=;
String=;

[Key_Base_Row_5_ID_10]
Type=String
Label=:
String=:

[Key_Base_Row_5_ID_11]
Type=String
Label==
String==

[Key_Base_Row_5_ID_12]
Type=VirtualKeyToggle
Width=275
Label=🡅
KeyCode=161
NoRepeat=true

[Key_Base_Row_5_ID_13]
Type=Blank
Width=125
Cluster=Navigation

[Key_Base_Row_5_ID_14]
Type=VirtualKey
Label=🠅
Cluster=Navigation
KeyCode=38

[Key_Base_Row_5_ID_15]
Type=Blank
Cluster=Navigation

[Key_Base_Row_5_ID_16]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_5_ID_17]
Type=VirtualKey
Label=1
Cluster=Numpad
KeyCode=97

[Key_Base_Row_5_ID_18]
Type=VirtualKey
Label=2
Cluster=Numpad
KeyCode=98

[Key_Base_Row_5_ID_19]
Type=VirtualKey
Label=3
Cluster=Numpad
KeyCode=99

[Key_Base_Row_5_ID_20]
Type=VirtualKey
Height=200
Label=Enter
Cluster=Numpad
KeyCode=13

[Key_Base_Row_6_ID_0]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=162
NoRepeat=true

[Key_Base_Row_6_ID_1]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=91
NoRepeat=true

[Key_Base_Row_6_ID_2]
Type=VirtualKeyToggle
Width=125
Label=Alt
KeyCode=164
NoRepeat=true

[Key_Base_Row_6_ID_3]
Type=VirtualKey
Width=625
Label=
KeyCode=32

[Key_Base_Row_6_ID_4]
Type=VirtualKeyToggle
Width=125
Label=AltGr
KeyCode=165
NoRepeat=true

[Key_Base_Row_6_ID_5]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=92
NoRepeat=true

[Key_Base_Row_6_ID_6]
Type=VirtualKey
Width=125
Label=Menu
KeyCode=93
NoRepeat=true

[Key_Base_Row_6_ID_7]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=163
NoRepeat=true

[Key_Base_Row_6_ID_8]
Type=Blank
Width=25
Cluster=Navigation

[Key_Base_Row_6_ID_9]
Type=VirtualKey
Label=🠄
Cluster=Navigation
KeyCode=37

[Key_Base_Row_6_ID_10]
Type=VirtualKey
Label=🠇
Cluster=Navigation
KeyCode=40

[Key_Base_Row_6_ID_11]
Type=VirtualKey
Label=🠆
Cluster=Navigation
KeyCode=39

[Key_Base_Row_6_ID_12]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_6_ID_13]
Type=VirtualKey
Width=200
Label=0
Cluster=Numpad
KeyCode=96

[Key_Base_Row_6_ID_14]
Type=VirtualKey
Label=.
Cluster=Numpad
KeyCode=110

[Key_Shift_Row_0_ID_0]
Type=VirtualKey
Label=Esc
Cluster=Function
KeyCode=27
NoRepeat=true

[Key_Shift_Row_0_ID_1]
Type=Blank
Cluster=Function

[Key_Shift_Row_0_ID_2]
Type=VirtualKey
Label=F1
Cluster=Function
KeyCode=112

[Key_Shift_Row_0_ID_3]
Type=VirtualKey
Label=F2
Cluster=Function
KeyCode=113

[Key_Shift_Row_0_ID_4]
Type=VirtualKey
Label=F3
Cluster=Function
KeyCode=114

[Key_Shift_Row_0_ID_5]
Type=VirtualKey
Label=F4
Cluster=Function
KeyCode=115

[Key_Shift_Row_0_ID_6]
Type=Blank
Width=50
Cluster=Function

[Key_Shift_Row_0_ID_7]
Type=VirtualKey
Label=F5
Cluster=Function
KeyCode=116

[Key_Shift_Row_0_ID_8]
Type=VirtualKey
Label=F6
Cluster=Function
KeyCode=117

[Key_Shift_Row_0_ID_9]
Type=VirtualKey
Label=F7
Cluster=Function
KeyCode=118

[Key_Shift_Row_0_ID_10]
Type=VirtualKey
Label=F8
Cluster=Function
KeyCode=119

[Key_Shift_Row_0_ID_11]
Type=Blank
Width=50
Cluster=Function

[Key_Shift_Row_0_ID_12]
Type=VirtualKey
Label=F9
Cluster=Function
KeyCode=120

[Key_Shift_Row_0_ID_13]
Type=VirtualKey
Label=F10
Cluster=Function
KeyCode=121

[Key_Shift_Row_0_ID_14]
Type=VirtualKey
Label=F11
Cluster=Function
KeyCode=122

[Key_Shift_Row_0_ID_15]
Type=VirtualKey
Label=F12
Cluster=Function
KeyCode=123

[Key_Shift_Row_0_ID_16]
Type=Blank
Width=25
Cluster=Function

[Key_Shift_Row_0_ID_17]
Type=VirtualKey
Label=Print\nScreen
Cluster=Function
KeyCode=44
NoRepeat=true

[Key_Shift_Row_0_ID_18]
Type=VirtualKey
Label=Scroll\nLock
Cluster=Function
KeyCode=145
NoRepeat=true

[Key_Shift_Row_0_ID_19]
Type=VirtualKey
Label=Pause
Cluster=Function
KeyCode=19
NoRepeat=true

[Key_Shift_Row_0_ID_20]
Type=Blank
Width=25
Cluster=Extra

[Key_Shift_Row_0_ID_21]
Type=VirtualKey
Label=🡰
Cluster=Extra
KeyCode=166
NoRepeat=true

[Key_Shift_Row_0_ID_22]
Type=VirtualKey
Label=🡲
Cluster=Extra
KeyCode=167
NoRepeat=true

[Key_Shift_Row_0_ID_23]
Type=VirtualKey
Label=🔇
Cluster=Extra
KeyCode=173
NoRepeat=true

[Key_Shift_Row_1_ID_0]
Type=Blank
Height=25
Cluster=Function

[Key_Shift_Row_1_ID_1]
Type=Blank
Height=25
Cluster=Extra

[Key_Shift_Row_2_ID_0]
Type=String
Label=³
String=³
NoRepeat=true

[Key_Shift_Row_2_ID_1]
Type=VirtualKey
Label=1
KeyCode=49

[Key_Shift_Row_2_ID_2]
Type=VirtualKey
Label=2
KeyCode=50

[Key_Shift_Row_2_ID_3]
Type=VirtualKey
Label=3
KeyCode=51

[Key_Shift_Row_2_ID_4]
Type=VirtualKey
Label=4
KeyCode=52

[Key_Shift_Row_2_ID_5]
Type=VirtualKey
Label=5
KeyCode=53

[Key_Shift_Row_2_ID_6]
Type=VirtualKey
Label=6
KeyCode=54

[Key_Shift_Row_2_ID_7]
Type=VirtualKey
Label=7
KeyCode=55

[Key_Shift_Row_2_ID_8]
Type=VirtualKey
Label=8
KeyCode=56

[Key_Shift_Row_2_ID_9]
Type=VirtualKey
Label=9
KeyCode=57

[Key_Shift_Row_2_ID_10]
Type=VirtualKey
Label=0
KeyCode=48

[Key_Shift_Row_2_ID_11]
Type=String
Label=°
String=°

[Key_Shift_Row_2_ID_12]
Type=String
Label=_
String=_

[Key_Shift_Row_2_ID_13]
Type=VirtualKey
Width=200
Label=⟵
KeyCode=8

[Key_Shift_Row_2_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Shift_Row_2_ID_15]
Type=VirtualKey
Label=Insert
Cluster=Navigation
KeyCode=45

[Key_Shift_Row_2_ID_16]
Type=VirtualKey
Label=Home
Cluster=Navigation
KeyCode=36

[Key_Shift_Row_2_ID_17]
Type=VirtualKey
Label=PgUp
Cluster=Navigation
KeyCode=33

[Key_Shift_Row_2_ID_18]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_2_ID_19]
Type=VirtualKey
Label=Num\nLock
Cluster=Numpad
KeyCode=144
NoRepeat=true

[Key_Shift_Row_2_ID_20]
Type=VirtualKey
Label=/
Cluster=Numpad
KeyCode=111

[Key_Shift_Row_2_ID_21]
Type=VirtualKey
Label=*
Cluster=Numpad
KeyCode=106

[Key_Shift_Row_2_ID_22]
Type=VirtualKey
Label=-
Cluster=Numpad
KeyCode=109

[Key_Shift_Row_3_ID_0]
Type=VirtualKey
Width=150
Label=⭾
KeyCode=9

[Key_Shift_Row_3_ID_1]
Type=VirtualKey
Label=A
KeyCode=65

[Key_Shift_Row_3_ID_2]
Type=VirtualKey
Label=Z
KeyCode=90

[Key_Shift_Row_3_ID_3]
Type=VirtualKey
Label=E
KeyCode=69

[Key_Shift_Row_3_ID_4]
Type=VirtualKey
Label=R
KeyCode=82

[Key_Shift_Row_3_ID_5]
Type=VirtualKey
Label=T
KeyCode=84

[Key_Shift_Row_3_ID_6]
Type=VirtualKey
Label=Y
KeyCode=89

[Key_Shift_Row_3_ID_7]
Type=VirtualKey
Label=U
KeyCode=85

[Key_Shift_Row_3_ID_8]
Type=VirtualKey
Label=I
KeyCode=73

[Key_Shift_Row_3_ID_9]
Type=VirtualKey
Label=O
KeyCode=79

[Key_Shift_Row_3_ID_10]
Type=VirtualKey
Label=P
KeyCode=80

[Key_Shift_Row_3_ID_11]
Type=String
Label=¨
String=¨

[Key_Shift_Row_3_ID_12]
Type=String
Label=*
String=*

[Key_Shift_Row_3_ID_13]
Type=VirtualKeyIsoEnter
Width=150
Label=
KeyCode=13

[Key_Shift_Row_3_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Shift_Row_3_ID_15]
Type=VirtualKey
Label=Delete
Cluster=Navigation
KeyCode=46

[Key_Shift_Row_3_ID_16]
Type=VirtualKey
Label=End
Cluster=Navigation
KeyCode=35

[Key_Shift_Row_3_ID_17]
Type=VirtualKey
Label=PgDn
Cluster=Navigation
KeyCode=34

[Key_Shift_Row_3_ID_18]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_3_ID_19]
Type=VirtualKey
Label=7
Cluster=Numpad
KeyCode=103

[Key_Shift_Row_3_ID_20]
Type=VirtualKey
Label=8
Cluster=Numpad
KeyCode=104

[Key_Shift_Row_3_ID_21]
Type=VirtualKey
Label=9
Cluster=Numpad
KeyCode=105

[Key_Shift_Row_3_ID_22]
Type=VirtualKey
Height=200
Label=+
Cluster=Numpad
KeyCode=107

[Key_Shift_Row_4_ID_0]
Type=VirtualKey
Width=175
Label=🡇
KeyCode=20
NoRepeat=true

[Key_Shift_Row_4_ID_1]
Type=VirtualKey
Label=Q
KeyCode=81

[Key_Shift_Row_4_ID_2]
Type=VirtualKey
Label=S
KeyCode=83

[Key_Shift_Row_4_ID_3]
Type=VirtualKey
Label=D
KeyCode=68

[Key_Shift_Row_4_ID_4]
Type=VirtualKey
Label=F
KeyCode=70

[Key_Shift_Row_4_ID_5]
Type=VirtualKey
Label=G
KeyCode=71

[Key_Shift_Row_4_ID_6]
Type=VirtualKey
Label=H
KeyCode=72

[Key_Shift_Row_4_ID_7]
Type=VirtualKey
Label=J
KeyCode=74

[Key_Shift_Row_4_ID_8]
Type=VirtualKey
Label=K
KeyCode=75

[Key_Shift_Row_4_ID_9]
Type=VirtualKey
Label=L
KeyCode=76

[Key_Shift_Row_4_ID_10]
Type=VirtualKey
Label=M
KeyCode=77

[Key_Shift_Row_4_ID_11]
Type=String
Label=%
String=%

[Key_Shift_Row_4_ID_12]
Type=String
Label=£
String=£

[Key_Shift_Row_4_ID_13]
Type=VirtualKeyIsoEnter
Width=125
Label=↵
KeyCode=13

[Key_Shift_Row_4_ID_14]
Type=Blank
Width=325
Cluster=Navigation

[Key_Shift_Row_4_ID_15]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_4_ID_16]
Type=VirtualKey
Label=4
Cluster=Numpad
KeyCode=100

[Key_Shift_Row_4_ID_17]
Type=VirtualKey
Label=5
Cluster=Numpad
KeyCode=101

[Key_Shift_Row_4_ID_18]
Type=VirtualKey
Label=6
Cluster=Numpad
KeyCode=102

[Key_Shift_Row_5_ID_0]
Type=VirtualKeyToggle
Width=125
Label=🡅
KeyCode=160
NoRepeat=true

[Key_Shift_Row_5_ID_1]
Type=String
Label=>
String=>

[Key_Shift_Row_5_ID_2]
Type=VirtualKey
Label=W
KeyCode=87

[Key_Shift_Row_5_ID_3]
Type=VirtualKey
Label=X
KeyCode=88

[Key_Shift_Row_5_ID_4]
Type=VirtualKey
Label=C
KeyCode=67

[Key_Shift_Row_5_ID_5]
Type=VirtualKey
Label=V
KeyCode=86

[Key_Shift_Row_5_ID_6]
Type=VirtualKey
Label=B
KeyCode=66

[Key_Shift_Row_5_ID_7]
Type=VirtualKey
Label=N
KeyCode=78

[Key_Shift_Row_5_ID_8]
Type=String
Label=?
String=?

[Key_Shift_Row_5_ID_9]
Type=String
Label=.
String=.

[Key_Shift_Row_5_ID_10]
Type=String
Label=/
String=/

[Key_Shift_Row_5_ID_11]
Type=String
Label=+
String=+

[Key_Shift_Row_5_ID_12]
Type=VirtualKeyToggle
Width=275
Label=🡅
KeyCode=161
NoRepeat=true

[Key_Shift_Row_5_ID_13]
Type=Blank
Width=125
Cluster=Navigation

[Key_Shift_Row_5_ID_14]
Type=VirtualKey
Label=🠅
Cluster=Navigation
KeyCode=38

[Key_Shift_Row_5_ID_15]
Type=Blank
Cluster=Navigation

[Key_Shift_Row_5_ID_16]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_5_ID_17]
Type=VirtualKey
Label=1
Cluster=Numpad
KeyCode=97

[Key_Shift_Row_5_ID_18]
Type=VirtualKey
Label=2
Cluster=Numpad
KeyCode=98

[Key_Shift_Row_5_ID_19]
Type=VirtualKey
Label=3
Cluster=Numpad
KeyCode=99

[Key_Shift_Row_5_ID_20]
Type=VirtualKey
Height=200
Label=Enter
Cluster=Numpad
KeyCode=13

[Key_Shift_Row_6_ID_0]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=162
NoRepeat=true

[Key_Shift_Row_6_ID_1]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=91
NoRepeat=true

[Key_Shift_Row_6_ID_2]
Type=VirtualKeyToggle
Width=125
Label=Alt
KeyCode=164
NoRepeat=true

[Key_Shift_Row_6_ID_3]
Type=VirtualKey
Width=625
Label=
KeyCode=32

[Key_Shift_Row_6_ID_4]
Type=VirtualKeyToggle
Width=125
Label=AltGr
KeyCode=165
NoRepeat=true

[Key_Shift_Row_6_ID_5]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=92
NoRepeat=true

[Key_Shift_Row_6_ID_6]
Type=VirtualKey
Width=125
Label=Menu
KeyCode=93
NoRepeat=true

[Key_Shift_Row_6_ID_7]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=163
NoRepeat=true

[Key_Shift_Row_6_ID_8]
Type=Blank
Width=25
Cluster=Navigation

[Key_Shift_Row_6_ID_9]
Type=VirtualKey
Label=🠄
Cluster=Navigation
KeyCode=37

[Key_Shift_Row_6_ID_10]
Type=VirtualKey
Label=🠇
Cluster=Navigation
KeyCode=40

[Key_Shift_Row_6_ID_11]
Type=VirtualKey
Label=🠆
Cluster=Navigation
KeyCode=39

[Key_Shift_Row_6_ID_12]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_6_ID_13]
Type=VirtualKey
Width=200
Label=0
Cluster=Numpad
KeyCode=96

[Key_Shift_Row_6_ID_14]
Type=VirtualKey
Label=.
Cluster=Numpad
KeyCode=110

[Key_AltGr_Row_0_ID_0]
Type=VirtualKey
Label=Esc
Cluster=Function
KeyCode=27
NoRepeat=true

[Key_AltGr_Row_0_ID_1]
Type=Blank
Cluster=Function

[Key_AltGr_Row_0_ID_2]
Type=VirtualKey
Label=F1
Cluster=Function
KeyCode=112

[Key_AltGr_Row_0_ID_3]
Type=VirtualKey
Label=F2
Cluster=Function
KeyCode=113

[Key_AltGr_Row_0_ID_4]
Type=VirtualKey
Label=F3
Cluster=Function
KeyCode=114

[Key_AltGr_Row_0_ID_5]
Type=VirtualKey
Label=F4
Cluster=Function
KeyCode=115

[Key_AltGr_Row_0_ID_6]
Type=Blank
Width=50
Cluster=Function

[Key_AltGr_Row_0_ID_7]
Type=VirtualKey
Label=F5
Cluster=Function
KeyCode=116

[Key_AltGr_Row_0_ID_8]
Type=VirtualKey
Label=F6
Cluster=Function
KeyCode=117

[Key_AltGr_Row_0_ID_9]
Type=VirtualKey
Label=F7
Cluster=Function
KeyCode=118

[Key_AltGr_Row_0_ID_10]
Type=VirtualKey
Label=F8
Cluster=Function
KeyCode=119

[Key_AltGr_Row_0_ID_11]
Type=Blank
Width=50
Cluster=Function

[Key_AltGr_Row_0_ID_12]
Type=VirtualKey
Label=F9
Cluster=Function
KeyCode=120

[Key_AltGr_Row_0_ID_13]
Type=VirtualKey
Label=F10
Cluster=Function
KeyCode=121

[Key_AltGr_Row_0_ID_14]
Type=VirtualKey
Label=F11
Cluster=Function
KeyCode=122

[Key_AltGr_Row_0_ID_15]
Type=VirtualKey
Label=F12
Cluster=Function
KeyCode=123

[Key_AltGr_Row_0_ID_16]
Type=Blank
Width=25
Cluster=Function

[Key_AltGr_Row_0_ID_17]
Type=VirtualKey
Label=Print\nScreen
Cluster=Function
KeyCode=44
NoRepeat=true

[Key_AltGr_Row_0_ID_18]
Type=VirtualKey
Label=Scroll\nLock
Cluster=Function
KeyCode=145
NoRepeat=true

[Key_AltGr_Row_0_ID_19]
Type=VirtualKey
Label=Pause
Cluster=Function
KeyCode=19
NoRepeat=true

[Key_AltGr_Row_0_ID_20]
Type=Blank
Width=25
Cluster=Extra

[Key_AltGr_Row_0_ID_21]
Type=VirtualKey
Label=⏯
Cluster=Extra
KeyCode=179
NoRepeat=true

[Key_AltGr_Row_0_ID_22]
Type=VirtualKey
Label=◼
Cluster=Extra
KeyCode=178
NoRepeat=true

[Key_AltGr_Row_0_ID_23]
Type=VirtualKey
Label=⏮
Cluster=Extra
KeyCode=177
NoRepeat=true

[Key_AltGr_Row_0_ID_24]
Type=VirtualKey
Label=⏭
Cluster=Extra
KeyCode=176
NoRepeat=true

[Key_AltGr_Row_1_ID_0]
Type=Blank
Height=25
Cluster=Function

[Key_AltGr_Row_1_ID_1]
Type=Blank
Height=25
Cluster=Extra

[Key_AltGr_Row_2_ID_0]
Type=Blank

[Key_AltGr_Row_2_ID_1]
Type=String
Label=|
String=|

[Key_AltGr_Row_2_ID_2]
Type=String
Label=@
String=@

[Key_AltGr_Row_2_ID_3]
Type=String
Label=#
String=#

[Key_AltGr_Row_2_ID_4]
Type=Blank
Width=200

[Key_AltGr_Row_2_ID_5]
Type=String
Label=^
String=^

[Key_AltGr_Row_2_ID_6]
Type=Blank
Width=200

[Key_AltGr_Row_2_ID_7]
Type=String
Label={
String={

[Key_AltGr_Row_2_ID_8]
Type=String
Label=}
String=}

[Key_AltGr_Row_2_ID_9]
Type=Blank
Width=200

[Key_AltGr_Row_2_ID_10]
Type=VirtualKey
Width=200
Label=⟵
KeyCode=8

[Key_AltGr_Row_2_ID_11]
Type=Blank
Width=25
Cluster=Navigation

[Key_AltGr_Row_2_ID_12]
Type=VirtualKey
Label=Insert
Cluster=Navigation
KeyCode=45

[Key_AltGr_Row_2_ID_13]
Type=VirtualKey
Label=Home
Cluster=Navigation
KeyCode=36

[Key_AltGr_Row_2_ID_14]
Type=VirtualKey
Label=PgUp
Cluster=Navigation
KeyCode=33

[Key_AltGr_Row_2_ID_15]
Type=Blank
Width=25
Cluster=Numpad

[Key_AltGr_Row_2_ID_16]
Type=VirtualKey
Label=Num\nLock
Cluster=Numpad
KeyCode=144
NoRepeat=true

[Key_AltGr_Row_2_ID_17]
Type=VirtualKey
Label=/
Cluster=Numpad
KeyCode=111

[Key_AltGr_Row_2_ID_18]
Type=VirtualKey
Label=*
Cluster=Numpad
KeyCode=106

[Key_AltGr_Row_2_ID_19]
Type=VirtualKey
Label=-
Cluster=Numpad
KeyCode=109

[Key_AltGr_Row_3_ID_0]
Type=VirtualKey
Width=150
Label=⭾
KeyCode=9

[Key_AltGr_Row_3_ID_1]
Type=Blank
Width=200

[Key_AltGr_Row_3_ID_2]
Type=String
Label=€
String=€

[Key_AltGr_Row_3_ID_3]
Type=Blank
Width=700

[Key_AltGr_Row_3_ID_4]
Type=String
Label=[
String=[

[Key_AltGr_Row_3_ID_5]
Type=String
Label=]
String=]

[Key_AltGr_Row_3_ID_6]
Type=VirtualKeyIsoEnter
Width=150
Label=
KeyCode=13

[Key_AltGr_Row_3_ID_7]
Type=Blank
Width=25
Cluster=Navigation

[Key_AltGr_Row_3_ID_8]
Type=VirtualKey
Label=Delete
Cluster=Navigation
KeyCode=46

[Key_AltGr_Row_3_ID_9]
Type=VirtualKey
Label=End
Cluster=Navigation
KeyCode=35

[Key_AltGr_Row_3_ID_10]
Type=VirtualKey
Label=PgDn
Cluster=Navigation
KeyCode=34

[Key_AltGr_Row_3_ID_11]
Type=Blank
Width=25
Cluster=Numpad

[Key_AltGr_Row_3_ID_12]
Type=VirtualKey
Label=7
Cluster=Numpad
KeyCode=103

[Key_AltGr_Row_3_ID_13]
Type=VirtualKey
Label=8
Cluster=Numpad
KeyCode=104

[Key_AltGr_Row_3_ID_14]
Type=VirtualKey
Label=9
Cluster=Numpad
KeyCode=105

[Key_AltGr_Row_3_ID_15]
Type=VirtualKey
Height=200
Label=+
Cluster=Numpad
KeyCode=107

[Key_AltGr_Row_4_ID_0]
Type=VirtualKey
Width=175
Label=🡇
KeyCode=20
NoRepeat=true

[Key_AltGr_Row_4_ID_1]
Type=Blank
Width=1000

[Key_AltGr_Row_4_ID_2]
Type=String
Label=´
String=´

[Key_AltGr_Row_4_ID_3]
Type=String
Label=`
String=`

[Key_AltGr_Row_4_ID_4]
Type=VirtualKeyIsoEnter
Width=125
Label=↵
KeyCode=13

[Key_AltGr_Row_4_ID_5]
Type=Blank
Width=325
Cluster=Navigation

[Key_AltGr_Row_4_ID_6]
Type=Blank
Width=25
Cluster=Numpad

[Key_AltGr_Row_4_ID_7]
Type=VirtualKey
Label=4
Cluster=Numpad
KeyCode=100

[Key_AltGr_Row_4_ID_8]
Type=VirtualKey
Label=5
Cluster=Numpad
KeyCode=101

[Key_AltGr_Row_4_ID_9]
Type=VirtualKey
Label=6
Cluster=Numpad
KeyCode=102

[Key_AltGr_Row_5_ID_0]
Type=VirtualKeyToggle
Width=125
Label=🡅
KeyCode=160
NoRepeat=true

[Key_AltGr_Row_5_ID_1]
Type=String
Label=\
String=\

[Key_AltGr_Row_5_ID_2]
Type=Blank
Width=900

[Key_AltGr_Row_5_ID_3]
Type=String
Label=~
String=~

[Key_AltGr_Row_5_ID_4]
Type=VirtualKeyToggle
Width=275
Label=🡅
KeyCode=161
NoRepeat=true

[Key_AltGr_Row_5_ID_5]
Type=Blank
Width=125
Cluster=Navigation

[Key_AltGr_Row_5_ID_6]
Type=VirtualKey
Label=🠅
Cluster=Navigation
KeyCode=38

[Key_AltGr_Row_5_ID_7]
Type=Blank
Cluster=Navigation

[Key_AltGr_Row_5_ID_8]
Type=Blank
Width=25
Cluster=Numpad

[Key_AltGr_Row_5_ID_9]
Type=VirtualKey
Label=1
Cluster=Numpad
KeyCode=97

[Key_AltGr_Row_5_ID_10]
Type=VirtualKey
Label=2
Cluster=Numpad
KeyCode=98

[Key_AltGr_Row_5_ID_11]
Type=VirtualKey
Label=3
Cluster=Numpad
KeyCode=99

[Key_AltGr_Row_5_ID_12]
Type=VirtualKey
Height=200
Label=Enter
Cluster=Numpad
KeyCode=13

[Key_AltGr_Row_6_ID_0]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=162
NoRepeat=true

[Key_AltGr_Row_6_ID_1]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=91
NoRepeat=true

[Key_AltGr_Row_6_ID_2]
Type=VirtualKeyToggle
Width=125
Label=Alt
KeyCode=164
NoRepeat=true

[Key_AltGr_Row_6_ID_3]
Type=VirtualKey
Width=625
Label=
KeyCode=32

[Key_AltGr_Row_6_ID_4]
Type=VirtualKeyToggle
Width=125
Label=AltGr
KeyCode=165
NoRepeat=true

[Key_AltGr_Row_6_ID_5]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=92
NoRepeat=true

[Key_AltGr_Row_6_ID_6]
Type=VirtualKey
Width=125
Label=Menu
KeyCode=93
NoRepeat=true

[Key_AltGr_Row_6_ID_7]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=163
NoRepeat=true

[Key_AltGr_Row_6_ID_8]
Type=Blank
Width=25
Cluster=Navigation

[Key_AltGr_Row_6_ID_9]
Type=VirtualKey
Label=🠄
Cluster=Navigation
KeyCode=37

[Key_AltGr_Row_6_ID_10]
Type=VirtualKey
Label=🠇
Cluster=Navigation
KeyCode=40

[Key_AltGr_Row_6_ID_11]
Type=VirtualKey
Label=🠆
Cluster=Navigation
KeyCode=39

[Key_AltGr_Row_6_ID_12]
Type=Blank
Width=25
Cluster=Numpad

[Key_AltGr_Row_6_ID_13]
Type=VirtualKey
Width=200
Label=0
Cluster=Numpad
KeyCode=96

[Key_AltGr_Row_6_ID_14]
Type=VirtualKey
Label=.
Cluster=Numpad
KeyCode=110



================================================
FILE: assets/keyboards/azerty_fr.ini
================================================
[LayoutInfo]
Name=AZERTY (France)
Author=
HasAltGr=true
HasClusterFunction=true
HasClusterNavigation=true
HasClusterNumpad=true
HasClusterExtra=true

[Key_Base_Row_0_ID_0]
Type=VirtualKey
Label=Échap
Cluster=Function
KeyCode=27
NoRepeat=true

[Key_Base_Row_0_ID_1]
Type=Blank
Cluster=Function

[Key_Base_Row_0_ID_2]
Type=VirtualKey
Label=F1
Cluster=Function
KeyCode=112

[Key_Base_Row_0_ID_3]
Type=VirtualKey
Label=F2
Cluster=Function
KeyCode=113

[Key_Base_Row_0_ID_4]
Type=VirtualKey
Label=F3
Cluster=Function
KeyCode=114

[Key_Base_Row_0_ID_5]
Type=VirtualKey
Label=F4
Cluster=Function
KeyCode=115

[Key_Base_Row_0_ID_6]
Type=Blank
Width=50
Cluster=Function

[Key_Base_Row_0_ID_7]
Type=VirtualKey
Label=F5
Cluster=Function
KeyCode=116

[Key_Base_Row_0_ID_8]
Type=VirtualKey
Label=F6
Cluster=Function
KeyCode=117

[Key_Base_Row_0_ID_9]
Type=VirtualKey
Label=F7
Cluster=Function
KeyCode=118

[Key_Base_Row_0_ID_10]
Type=VirtualKey
Label=F8
Cluster=Function
KeyCode=119

[Key_Base_Row_0_ID_11]
Type=Blank
Width=50
Cluster=Function

[Key_Base_Row_0_ID_12]
Type=VirtualKey
Label=F9
Cluster=Function
KeyCode=120

[Key_Base_Row_0_ID_13]
Type=VirtualKey
Label=F10
Cluster=Function
KeyCode=121

[Key_Base_Row_0_ID_14]
Type=VirtualKey
Label=F11
Cluster=Function
KeyCode=122

[Key_Base_Row_0_ID_15]
Type=VirtualKey
Label=F12
Cluster=Function
KeyCode=123

[Key_Base_Row_0_ID_16]
Type=Blank
Width=25
Cluster=Function

[Key_Base_Row_0_ID_17]
Type=VirtualKey
Label=Impr
Cluster=Function
KeyCode=44
NoRepeat=true

[Key_Base_Row_0_ID_18]
Type=VirtualKey
Label=Défil
Cluster=Function
KeyCode=145
NoRepeat=true

[Key_Base_Row_0_ID_19]
Type=VirtualKey
Label=Pause
Cluster=Function
KeyCode=19
NoRepeat=true

[Key_Base_Row_0_ID_20]
Type=Blank
Width=25
Cluster=Extra

[Key_Base_Row_0_ID_21]
Type=VirtualKey
Label=⏯
Cluster=Extra
KeyCode=179
NoRepeat=true

[Key_Base_Row_0_ID_22]
Type=VirtualKey
Label=◼
Cluster=Extra
KeyCode=178
NoRepeat=true

[Key_Base_Row_0_ID_23]
Type=VirtualKey
Label=⏮
Cluster=Extra
KeyCode=177
NoRepeat=true

[Key_Base_Row_0_ID_24]
Type=VirtualKey
Label=⏭
Cluster=Extra
KeyCode=176
NoRepeat=true

[Key_Base_Row_1_ID_0]
Type=Blank
Height=25
Cluster=Function

[Key_Base_Row_1_ID_1]
Type=Blank
Height=25
Cluster=Extra

[Key_Base_Row_2_ID_0]
Type=String
Label=²
String=²

[Key_Base_Row_2_ID_1]
Type=String
Label=&
String=&

[Key_Base_Row_2_ID_2]
Type=String
Label=é
String=é

[Key_Base_Row_2_ID_3]
Type=String
Label="
String="

[Key_Base_Row_2_ID_4]
Type=String
Label='
String='

[Key_Base_Row_2_ID_5]
Type=String
Label=(
String=(

[Key_Base_Row_2_ID_6]
Type=String
Label=-
String=-

[Key_Base_Row_2_ID_7]
Type=String
Label=è
String=è

[Key_Base_Row_2_ID_8]
Type=String
Label=_
String=_

[Key_Base_Row_2_ID_9]
Type=String
Label=ç
String=ç

[Key_Base_Row_2_ID_10]
Type=String
Label=à
String=à

[Key_Base_Row_2_ID_11]
Type=String
Label=)
String=)

[Key_Base_Row_2_ID_12]
Type=String
Label==
String==

[Key_Base_Row_2_ID_13]
Type=VirtualKey
Width=200
Label=⟵
KeyCode=8

[Key_Base_Row_2_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Base_Row_2_ID_15]
Type=VirtualKey
Label=Inser
Cluster=Navigation
KeyCode=45

[Key_Base_Row_2_ID_16]
Type=VirtualKey
Label=Début
Cluster=Navigation
KeyCode=36

[Key_Base_Row_2_ID_17]
Type=VirtualKey
Label=Page🠹
Cluster=Navigation
KeyCode=33

[Key_Base_Row_2_ID_18]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_2_ID_19]
Type=VirtualKey
Label=Verr\nNum
Cluster=Numpad
KeyCode=144
NoRepeat=true

[Key_Base_Row_2_ID_20]
Type=VirtualKey
Label=/
Cluster=Numpad
KeyCode=111

[Key_Base_Row_2_ID_21]
Type=VirtualKey
Label=*
Cluster=Numpad
KeyCode=106

[Key_Base_Row_2_ID_22]
Type=VirtualKey
Label=-
Cluster=Numpad
KeyCode=109

[Key_Base_Row_3_ID_0]
Type=VirtualKey
Width=150
Label=⭾
KeyCode=9

[Key_Base_Row_3_ID_1]
Type=VirtualKey
Label=a
KeyCode=65

[Key_Base_Row_3_ID_2]
Type=VirtualKey
Label=z
KeyCode=90

[Key_Base_Row_3_ID_3]
Type=VirtualKey
Label=e
KeyCode=69

[Key_Base_Row_3_ID_4]
Type=VirtualKey
Label=r
KeyCode=82

[Key_Base_Row_3_ID_5]
Type=VirtualKey
Label=t
KeyCode=84

[Key_Base_Row_3_ID_6]
Type=VirtualKey
Label=y
KeyCode=89

[Key_Base_Row_3_ID_7]
Type=VirtualKey
Label=u
KeyCode=85

[Key_Base_Row_3_ID_8]
Type=VirtualKey
Label=i
KeyCode=73

[Key_Base_Row_3_ID_9]
Type=VirtualKey
Label=o
KeyCode=79

[Key_Base_Row_3_ID_10]
Type=VirtualKey
Label=p
KeyCode=80

[Key_Base_Row_3_ID_11]
Type=String
Label=^
String=^

[Key_Base_Row_3_ID_12]
Type=String
Label=$
String=$

[Key_Base_Row_3_ID_13]
Type=VirtualKeyIsoEnter
Width=150
Label=
KeyCode=13

[Key_Base_Row_3_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Base_Row_3_ID_15]
Type=VirtualKey
Label=Suppr
Cluster=Navigation
KeyCode=46

[Key_Base_Row_3_ID_16]
Type=VirtualKey
Label=Fin
Cluster=Navigation
KeyCode=35

[Key_Base_Row_3_ID_17]
Type=VirtualKey
Label=Page🠻
Cluster=Navigation
KeyCode=34

[Key_Base_Row_3_ID_18]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_3_ID_19]
Type=VirtualKey
Label=7
Cluster=Numpad
KeyCode=103

[Key_Base_Row_3_ID_20]
Type=VirtualKey
Label=8
Cluster=Numpad
KeyCode=104

[Key_Base_Row_3_ID_21]
Type=VirtualKey
Label=9
Cluster=Numpad
KeyCode=105

[Key_Base_Row_3_ID_22]
Type=VirtualKey
Height=200
Label=+
Cluster=Numpad
KeyCode=107

[Key_Base_Row_4_ID_0]
Type=VirtualKey
Width=175
Label=🡇
KeyCode=20
NoRepeat=true

[Key_Base_Row_4_ID_1]
Type=VirtualKey
Label=q
KeyCode=81

[Key_Base_Row_4_ID_2]
Type=VirtualKey
Label=s
KeyCode=83

[Key_Base_Row_4_ID_3]
Type=VirtualKey
Label=d
KeyCode=68

[Key_Base_Row_4_ID_4]
Type=VirtualKey
Label=f
KeyCode=70

[Key_Base_Row_4_ID_5]
Type=VirtualKey
Label=g
KeyCode=71

[Key_Base_Row_4_ID_6]
Type=VirtualKey
Label=h
KeyCode=72

[Key_Base_Row_4_ID_7]
Type=VirtualKey
Label=j
KeyCode=74

[Key_Base_Row_4_ID_8]
Type=VirtualKey
Label=k
KeyCode=75

[Key_Base_Row_4_ID_9]
Type=VirtualKey
Label=l
KeyCode=76

[Key_Base_Row_4_ID_10]
Type=VirtualKey
Label=m
KeyCode=77

[Key_Base_Row_4_ID_11]
Type=String
Label=ù
String=ù

[Key_Base_Row_4_ID_12]
Type=String
Label=*
String=*

[Key_Base_Row_4_ID_13]
Type=VirtualKeyIsoEnter
Width=125
Label=↵
KeyCode=13

[Key_Base_Row_4_ID_14]
Type=Blank
Width=325
Cluster=Navigation

[Key_Base_Row_4_ID_15]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_4_ID_16]
Type=VirtualKey
Label=4
Cluster=Numpad
KeyCode=100

[Key_Base_Row_4_ID_17]
Type=VirtualKey
Label=5
Cluster=Numpad
KeyCode=101

[Key_Base_Row_4_ID_18]
Type=VirtualKey
Label=6
Cluster=Numpad
KeyCode=102

[Key_Base_Row_5_ID_0]
Type=VirtualKeyToggle
Width=125
Label=🡅
KeyCode=160
NoRepeat=true

[Key_Base_Row_5_ID_1]
Type=String
Label=<
String=<

[Key_Base_Row_5_ID_2]
Type=VirtualKey
Label=w
KeyCode=87

[Key_Base_Row_5_ID_3]
Type=VirtualKey
Label=x
KeyCode=88

[Key_Base_Row_5_ID_4]
Type=VirtualKey
Label=c
KeyCode=67

[Key_Base_Row_5_ID_5]
Type=VirtualKey
Label=v
KeyCode=86

[Key_Base_Row_5_ID_6]
Type=VirtualKey
Label=b
KeyCode=66

[Key_Base_Row_5_ID_7]
Type=VirtualKey
Label=n
KeyCode=78

[Key_Base_Row_5_ID_8]
Type=String
Label=,
String=,

[Key_Base_Row_5_ID_9]
Type=String
Label=;
String=;

[Key_Base_Row_5_ID_10]
Type=String
Label=:
String=:

[Key_Base_Row_5_ID_11]
Type=String
Label=!
String=!

[Key_Base_Row_5_ID_12]
Type=VirtualKeyToggle
Width=275
Label=🡅
KeyCode=161
NoRepeat=true

[Key_Base_Row_5_ID_13]
Type=Blank
Width=125
Cluster=Navigation

[Key_Base_Row_5_ID_14]
Type=VirtualKey
Label=🠅
Cluster=Navigation
KeyCode=38

[Key_Base_Row_5_ID_15]
Type=Blank
Cluster=Navigation

[Key_Base_Row_5_ID_16]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_5_ID_17]
Type=VirtualKey
Label=1
Cluster=Numpad
KeyCode=97

[Key_Base_Row_5_ID_18]
Type=VirtualKey
Label=2
Cluster=Numpad
KeyCode=98

[Key_Base_Row_5_ID_19]
Type=VirtualKey
Label=3
Cluster=Numpad
KeyCode=99

[Key_Base_Row_5_ID_20]
Type=VirtualKey
Height=200
Label=Entrée
Cluster=Numpad
KeyCode=13

[Key_Base_Row_6_ID_0]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=162
NoRepeat=true

[Key_Base_Row_6_ID_1]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=91
NoRepeat=true

[Key_Base_Row_6_ID_2]
Type=VirtualKeyToggle
Width=125
Label=Alt
KeyCode=164
NoRepeat=true

[Key_Base_Row_6_ID_3]
Type=VirtualKey
Width=625
Label=
KeyCode=32

[Key_Base_Row_6_ID_4]
Type=VirtualKeyToggle
Width=125
Label=AltGr
KeyCode=165
NoRepeat=true

[Key_Base_Row_6_ID_5]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=92
NoRepeat=true

[Key_Base_Row_6_ID_6]
Type=VirtualKey
Width=125
Label=Menu
KeyCode=93
NoRepeat=true

[Key_Base_Row_6_ID_7]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=163
NoRepeat=true

[Key_Base_Row_6_ID_8]
Type=Blank
Width=25
Cluster=Navigation

[Key_Base_Row_6_ID_9]
Type=VirtualKey
Label=🠄
Cluster=Navigation
KeyCode=37

[Key_Base_Row_6_ID_10]
Type=VirtualKey
Label=🠇
Cluster=Navigation
KeyCode=40

[Key_Base_Row_6_ID_11]
Type=VirtualKey
Label=🠆
Cluster=Navigation
KeyCode=39

[Key_Base_Row_6_ID_12]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_6_ID_13]
Type=VirtualKey
Width=200
Label=0
Cluster=Numpad
KeyCode=96

[Key_Base_Row_6_ID_14]
Type=VirtualKey
Label=.
Cluster=Numpad
KeyCode=110

[Key_Shift_Row_0_ID_0]
Type=VirtualKey
Label=Échap
Cluster=Function
KeyCode=27
NoRepeat=true

[Key_Shift_Row_0_ID_1]
Type=Blank
Cluster=Function

[Key_Shift_Row_0_ID_2]
Type=VirtualKey
Label=F1
Cluster=Function
KeyCode=112

[Key_Shift_Row_0_ID_3]
Type=VirtualKey
Label=F2
Cluster=Function
KeyCode=113

[Key_Shift_Row_0_ID_4]
Type=VirtualKey
Label=F3
Cluster=Function
KeyCode=114

[Key_Shift_Row_0_ID_5]
Type=VirtualKey
Label=F4
Cluster=Function
KeyCode=115

[Key_Shift_Row_0_ID_6]
Type=Blank
Width=50
Cluster=Function

[Key_Shift_Row_0_ID_7]
Type=VirtualKey
Label=F5
Cluster=Function
KeyCode=116

[Key_Shift_Row_0_ID_8]
Type=VirtualKey
Label=F6
Cluster=Function
KeyCode=117

[Key_Shift_Row_0_ID_9]
Type=VirtualKey
Label=F7
Cluster=Function
KeyCode=118

[Key_Shift_Row_0_ID_10]
Type=VirtualKey
Label=F8
Cluster=Function
KeyCode=119

[Key_Shift_Row_0_ID_11]
Type=Blank
Width=50
Cluster=Function

[Key_Shift_Row_0_ID_12]
Type=VirtualKey
Label=F9
Cluster=Function
KeyCode=120

[Key_Shift_Row_0_ID_13]
Type=VirtualKey
Label=F10
Cluster=Function
KeyCode=121

[Key_Shift_Row_0_ID_14]
Type=VirtualKey
Label=F11
Cluster=Function
KeyCode=122

[Key_Shift_Row_0_ID_15]
Type=VirtualKey
Label=F12
Cluster=Function
KeyCode=123

[Key_Shift_Row_0_ID_16]
Type=Blank
Width=25
Cluster=Function

[Key_Shift_Row_0_ID_17]
Type=VirtualKey
Label=Impr
Cluster=Function
KeyCode=44
NoRepeat=true

[Key_Shift_Row_0_ID_18]
Type=VirtualKey
Label=Défil
Cluster=Function
KeyCode=145
NoRepeat=true

[Key_Shift_Row_0_ID_19]
Type=VirtualKey
Label=Pause
Cluster=Function
KeyCode=19
NoRepeat=true

[Key_Shift_Row_0_ID_20]
Type=Blank
Width=25
Cluster=Extra

[Key_Shift_Row_0_ID_21]
Type=VirtualKey
Label=🡰
Cluster=Extra
KeyCode=166
NoRepeat=true

[Key_Shift_Row_0_ID_22]
Type=VirtualKey
Label=🡲
Cluster=Extra
KeyCode=167
NoRepeat=true

[Key_Shift_Row_0_ID_23]
Type=VirtualKey
Label=🔇
Cluster=Extra
KeyCode=173
NoRepeat=true

[Key_Shift_Row_1_ID_0]
Type=Blank
Height=25
Cluster=Function

[Key_Shift_Row_1_ID_1]
Type=Blank
Height=25
Cluster=Extra

[Key_Shift_Row_2_ID_0]
Type=String
Label=²
String=²

[Key_Shift_Row_2_ID_1]
Type=VirtualKey
Label=1
KeyCode=49

[Key_Shift_Row_2_ID_2]
Type=VirtualKey
Label=2
KeyCode=50

[Key_Shift_Row_2_ID_3]
Type=VirtualKey
Label=3
KeyCode=51

[Key_Shift_Row_2_ID_4]
Type=VirtualKey
Label=4
KeyCode=52

[Key_Shift_Row_2_ID_5]
Type=VirtualKey
Label=5
KeyCode=53

[Key_Shift_Row_2_ID_6]
Type=VirtualKey
Label=6
KeyCode=54

[Key_Shift_Row_2_ID_7]
Type=VirtualKey
Label=7
KeyCode=55

[Key_Shift_Row_2_ID_8]
Type=VirtualKey
Label=8
KeyCode=56

[Key_Shift_Row_2_ID_9]
Type=VirtualKey
Label=9
KeyCode=57

[Key_Shift_Row_2_ID_10]
Type=VirtualKey
Label=0
KeyCode=48

[Key_Shift_Row_2_ID_11]
Type=String
Label=°
String=°

[Key_Shift_Row_2_ID_12]
Type=String
Label=+
String=+

[Key_Shift_Row_2_ID_13]
Type=VirtualKey
Width=200
Label=⟵
KeyCode=8

[Key_Shift_Row_2_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Shift_Row_2_ID_15]
Type=VirtualKey
Label=Inser
Cluster=Navigation
KeyCode=45

[Key_Shift_Row_2_ID_16]
Type=VirtualKey
Label=Début
Cluster=Navigation
KeyCode=36

[Key_Shift_Row_2_ID_17]
Type=VirtualKey
Label=Page🠹
Cluster=Navigation
KeyCode=33

[Key_Shift_Row_2_ID_18]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_2_ID_19]
Type=VirtualKey
Label=Verr\nNum
Cluster=Numpad
KeyCode=144
NoRepeat=true

[Key_Shift_Row_2_ID_20]
Type=VirtualKey
Label=/
Cluster=Numpad
KeyCode=111

[Key_Shift_Row_2_ID_21]
Type=VirtualKey
Label=*
Cluster=Numpad
KeyCode=106

[Key_Shift_Row_2_ID_22]
Type=VirtualKey
Label=-
Cluster=Numpad
KeyCode=109

[Key_Shift_Row_3_ID_0]
Type=VirtualKey
Width=150
Label=⭾
KeyCode=9

[Key_Shift_Row_3_ID_1]
Type=VirtualKey
Label=A
KeyCode=65

[Key_Shift_Row_3_ID_2]
Type=VirtualKey
Label=Z
KeyCode=90

[Key_Shift_Row_3_ID_3]
Type=VirtualKey
Label=E
KeyCode=69

[Key_Shift_Row_3_ID_4]
Type=VirtualKey
Label=R
KeyCode=82

[Key_Shift_Row_3_ID_5]
Type=VirtualKey
Label=T
KeyCode=84

[Key_Shift_Row_3_ID_6]
Type=VirtualKey
Label=Y
KeyCode=89

[Key_Shift_Row_3_ID_7]
Type=VirtualKey
Label=U
KeyCode=85

[Key_Shift_Row_3_ID_8]
Type=VirtualKey
Label=I
KeyCode=73

[Key_Shift_Row_3_ID_9]
Type=VirtualKey
Label=O
KeyCode=79

[Key_Shift_Row_3_ID_10]
Type=VirtualKey
Label=P
KeyCode=80

[Key_Shift_Row_3_ID_11]
Type=String
Label=¨
String=¨

[Key_Shift_Row_3_ID_12]
Type=String
Label=£
String=£

[Key_Shift_Row_3_ID_13]
Type=VirtualKeyIsoEnter
Width=150
Label=
KeyCode=13

[Key_Shift_Row_3_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Shift_Row_3_ID_15]
Type=VirtualKey
Label=Suppr
Cluster=Navigation
KeyCode=46

[Key_Shift_Row_3_ID_16]
Type=VirtualKey
Label=Fin
Cluster=Navigation
KeyCode=35

[Key_Shift_Row_3_ID_17]
Type=VirtualKey
Label=Page🠻
Cluster=Navigation
KeyCode=34

[Key_Shift_Row_3_ID_18]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_3_ID_19]
Type=VirtualKey
Label=7
Cluster=Numpad
KeyCode=103

[Key_Shift_Row_3_ID_20]
Type=VirtualKey
Label=8
Cluster=Numpad
KeyCode=104

[Key_Shift_Row_3_ID_21]
Type=VirtualKey
Label=9
Cluster=Numpad
KeyCode=105

[Key_Shift_Row_3_ID_22]
Type=VirtualKey
Height=200
Label=+
Cluster=Numpad
KeyCode=107

[Key_Shift_Row_4_ID_0]
Type=VirtualKey
Width=175
Label=🡇
KeyCode=20
NoRepeat=true

[Key_Shift_Row_4_ID_1]
Type=VirtualKey
Label=Q
KeyCode=81

[Key_Shift_Row_4_ID_2]
Type=VirtualKey
Label=S
KeyCode=83

[Key_Shift_Row_4_ID_3]
Type=VirtualKey
Label=D
KeyCode=68

[Key_Shift_Row_4_ID_4]
Type=VirtualKey
Label=F
KeyCode=70

[Key_Shift_Row_4_ID_5]
Type=VirtualKey
Label=G
KeyCode=71

[Key_Shift_Row_4_ID_6]
Type=VirtualKey
Label=H
KeyCode=72

[Key_Shift_Row_4_ID_7]
Type=VirtualKey
Label=J
KeyCode=74

[Key_Shift_Row_4_ID_8]
Type=VirtualKey
Label=K
KeyCode=75

[Key_Shift_Row_4_ID_9]
Type=VirtualKey
Label=L
KeyCode=76

[Key_Shift_Row_4_ID_10]
Type=VirtualKey
Label=M
KeyCode=77

[Key_Shift_Row_4_ID_11]
Type=String
Label=%
String=%

[Key_Shift_Row_4_ID_12]
Type=String
Label=µ
String=µ

[Key_Shift_Row_4_ID_13]
Type=VirtualKeyIsoEnter
Width=125
Label=↵
KeyCode=13

[Key_Shift_Row_4_ID_14]
Type=Blank
Width=325
Cluster=Navigation

[Key_Shift_Row_4_ID_15]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_4_ID_16]
Type=VirtualKey
Label=4
Cluster=Numpad
KeyCode=100

[Key_Shift_Row_4_ID_17]
Type=VirtualKey
Label=5
Cluster=Numpad
KeyCode=101

[Key_Shift_Row_4_ID_18]
Type=VirtualKey
Label=6
Cluster=Numpad
KeyCode=102

[Key_Shift_Row_5_ID_0]
Type=VirtualKeyToggle
Width=125
Label=🡅
KeyCode=160
NoRepeat=true

[Key_Shift_Row_5_ID_1]
Type=String
Label=>
String=>

[Key_Shift_Row_5_ID_2]
Type=VirtualKey
Label=W
KeyCode=87

[Key_Shift_Row_5_ID_3]
Type=VirtualKey
Label=X
KeyCode=88

[Key_Shift_Row_5_ID_4]
Type=VirtualKey
Label=C
KeyCode=67

[Key_Shift_Row_5_ID_5]
Type=VirtualKey
Label=V
KeyCode=86

[Key_Shift_Row_5_ID_6]
Type=VirtualKey
Label=B
KeyCode=66

[Key_Shift_Row_5_ID_7]
Type=VirtualKey
Label=N
KeyCode=78

[Key_Shift_Row_5_ID_8]
Type=String
Label=?
String=?

[Key_Shift_Row_5_ID_9]
Type=String
Label=.
String=.

[Key_Shift_Row_5_ID_10]
Type=String
Label=/
String=/

[Key_Shift_Row_5_ID_11]
Type=String
Label=§
String=§

[Key_Shift_Row_5_ID_12]
Type=VirtualKeyToggle
Width=275
Label=🡅
KeyCode=161
NoRepeat=true

[Key_Shift_Row_5_ID_13]
Type=Blank
Width=125
Cluster=Navigation

[Key_Shift_Row_5_ID_14]
Type=VirtualKey
Label=🠅
Cluster=Navigation
KeyCode=38

[Key_Shift_Row_5_ID_15]
Type=Blank
Cluster=Navigation

[Key_Shift_Row_5_ID_16]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_5_ID_17]
Type=VirtualKey
Label=1
Cluster=Numpad
KeyCode=97

[Key_Shift_Row_5_ID_18]
Type=VirtualKey
Label=2
Cluster=Numpad
KeyCode=98

[Key_Shift_Row_5_ID_19]
Type=VirtualKey
Label=3
Cluster=Numpad
KeyCode=99

[Key_Shift_Row_5_ID_20]
Type=VirtualKey
Height=200
Label=Entrée
Cluster=Numpad
KeyCode=13

[Key_Shift_Row_6_ID_0]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=162
NoRepeat=true

[Key_Shift_Row_6_ID_1]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=91
NoRepeat=true

[Key_Shift_Row_6_ID_2]
Type=VirtualKeyToggle
Width=125
Label=Alt
KeyCode=164
NoRepeat=true

[Key_Shift_Row_6_ID_3]
Type=VirtualKey
Width=625
Label=
KeyCode=32

[Key_Shift_Row_6_ID_4]
Type=VirtualKeyToggle
Width=125
Label=AltGr
KeyCode=165
NoRepeat=true

[Key_Shift_Row_6_ID_5]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=92
NoRepeat=true

[Key_Shift_Row_6_ID_6]
Type=VirtualKey
Width=125
Label=Menu
KeyCode=93
NoRepeat=true

[Key_Shift_Row_6_ID_7]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=163
NoRepeat=true

[Key_Shift_Row_6_ID_8]
Type=Blank
Width=25
Cluster=Navigation

[Key_Shift_Row_6_ID_9]
Type=VirtualKey
Label=🠄
Cluster=Navigation
KeyCode=37

[Key_Shift_Row_6_ID_10]
Type=VirtualKey
Label=🠇
Cluster=Navigation
KeyCode=40

[Key_Shift_Row_6_ID_11]
Type=VirtualKey
Label=🠆
Cluster=Navigation
KeyCode=39

[Key_Shift_Row_6_ID_12]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_6_ID_13]
Type=VirtualKey
Width=200
Label=0
Cluster=Numpad
KeyCode=96

[Key_Shift_Row_6_ID_14]
Type=VirtualKey
Label=.
Cluster=Numpad
KeyCode=110

[Key_AltGr_Row_0_ID_0]
Type=VirtualKey
Label=Échap
Cluster=Function
KeyCode=27
NoRepeat=true

[Key_AltGr_Row_0_ID_1]
Type=Blank
Cluster=Function

[Key_AltGr_Row_0_ID_2]
Type=VirtualKey
Label=F1
Cluster=Function
KeyCode=112

[Key_AltGr_Row_0_ID_3]
Type=VirtualKey
Label=F2
Cluster=Function
KeyCode=113

[Key_AltGr_Row_0_ID_4]
Type=VirtualKey
Label=F3
Cluster=Function
KeyCode=114

[Key_AltGr_Row_0_ID_5]
Type=VirtualKey
Label=F4
Cluster=Function
KeyCode=115

[Key_AltGr_Row_0_ID_6]
Type=Blank
Width=50
Cluster=Function

[Key_AltGr_Row_0_ID_7]
Type=VirtualKey
Label=F5
Cluster=Function
KeyCode=116

[Key_AltGr_Row_0_ID_8]
Type=VirtualKey
Label=F6
Cluster=Function
KeyCode=117

[Key_AltGr_Row_0_ID_9]
Type=VirtualKey
Label=F7
Cluster=Function
KeyCode=118

[Key_AltGr_Row_0_ID_10]
Type=VirtualKey
Label=F8
Cluster=Function
KeyCode=119

[Key_AltGr_Row_0_ID_11]
Type=Blank
Width=50
Cluster=Function

[Key_AltGr_Row_0_ID_12]
Type=VirtualKey
Label=F9
Cluster=Function
KeyCode=120

[Key_AltGr_Row_0_ID_13]
Type=VirtualKey
Label=F10
Cluster=Function
KeyCode=121

[Key_AltGr_Row_0_ID_14]
Type=VirtualKey
Label=F11
Cluster=Function
KeyCode=122

[Key_AltGr_Row_0_ID_15]
Type=VirtualKey
Label=F12
Cluster=Function
KeyCode=123

[Key_AltGr_Row_0_ID_16]
Type=Blank
Width=25
Cluster=Function

[Key_AltGr_Row_0_ID_17]
Type=VirtualKey
Label=Impr
Cluster=Function
KeyCode=44
NoRepeat=true

[Key_AltGr_Row_0_ID_18]
Type=VirtualKey
Label=Défil
Cluster=Function
KeyCode=145
NoRepeat=true

[Key_AltGr_Row_0_ID_19]
Type=VirtualKey
Label=Pause
Cluster=Function
KeyCode=19
NoRepeat=true

[Key_AltGr_Row_0_ID_20]
Type=Blank
Width=25
Cluster=Extra

[Key_AltGr_Row_0_ID_21]
Type=VirtualKey
Label=⏯
Cluster=Extra
KeyCode=179
NoRepeat=true

[Key_AltGr_Row_0_ID_22]
Type=VirtualKey
Label=◼
Cluster=Extra
KeyCode=178
NoRepeat=true

[Key_AltGr_Row_0_ID_23]
Type=VirtualKey
Label=⏮
Cluster=Extra
KeyCode=177
NoRepeat=true

[Key_AltGr_Row_0_ID_24]
Type=VirtualKey
Label=⏭
Cluster=Extra
KeyCode=176
NoRepeat=true

[Key_AltGr_Row_1_ID_0]
Type=Blank
Height=25
Cluster=Function

[Key_AltGr_Row_1_ID_1]
Type=Blank
Height=25
Cluster=Extra

[Key_AltGr_Row_2_ID_0]
Type=Blank
Width=200

[Key_AltGr_Row_2_ID_1]
Type=String
Label=~
String=~

[Key_AltGr_Row_2_ID_2]
Type=String
Label=#
String=#

[Key_AltGr_Row_2_ID_3]
Type=String
Label={
String={

[Key_AltGr_Row_2_ID_4]
Type=String
Label=[
String=[

[Key_AltGr_Row_2_ID_5]
Type=String
Label=|
String=|

[Key_AltGr_Row_2_ID_6]
Type=String
Label=`
String=`

[Key_AltGr_Row_2_ID_7]
Type=String
Label=\
String=\

[Key_AltGr_Row_2_ID_8]
Type=String
Label=^
String=^

[Key_AltGr_Row_2_ID_9]
Type=String
Label=@
String=@

[Key_AltGr_Row_2_ID_10]
Type=String
Label=]
String=]

[Key_AltGr_Row_2_ID_11]
Type=String
Label=}
String=}

[Key_AltGr_Row_2_ID_12]
Type=VirtualKey
Width=200
Label=⟵
KeyCode=8

[Key_AltGr_Row_2_ID_13]
Type=Blank
Width=25
Cluster=Navigation

[Key_AltGr_Row_2_ID_14]
Type=VirtualKey
Label=Inser
Cluster=Navigation
KeyCode=45

[Key_AltGr_Row_2_ID_15]
Type=VirtualKey
Label=Début
Cluster=Navigation
KeyCode=36

[Key_AltGr_Row_2_ID_16]
Type=VirtualKey
Label=Page🠹
Cluster=Navigation
KeyCode=33

[Key_AltGr_Row_2_ID_17]
Type=Blank
Width=25
Cluster=Numpad

[Key_AltGr_Row_2_ID_18]
Type=VirtualKey
Label=Verr\nNum
Cluster=Numpad
KeyCode=144
NoRepeat=true

[Key_AltGr_Row_2_ID_19]
Type=VirtualKey
Label=/
Cluster=Numpad
KeyCode=111

[Key_AltGr_Row_2_ID_20]
Type=VirtualKey
Label=*
Cluster=Numpad
KeyCode=106

[Key_AltGr_Row_2_ID_21]
Type=VirtualKey
Label=-
Cluster=Numpad
KeyCode=109

[Key_AltGr_Row_3_ID_0]
Type=VirtualKey
Width=150
Label=⭾
KeyCode=9

[Key_AltGr_Row_3_ID_1]
Type=Blank
Width=200

[Key_AltGr_Row_3_ID_2]
Type=String
Label=€
String=€

[Key_AltGr_Row_3_ID_3]
Type=Blank
Width=800

[Key_AltGr_Row_3_ID_4]
Type=String
Label=¤
String=¤

[Key_AltGr_Row_3_ID_5]
Type=VirtualKeyIsoEnter
Width=150
Label=
KeyCode=13

[Key_AltGr_Row_3_ID_6]
Type=Blank
Width=25
Cluster=Navigation

[Key_AltGr_Row_3_ID_7]
Type=VirtualKey
Label=Suppr
Cluster=Navigation
KeyCode=46

[Key_AltGr_Row_3_ID_8]
Type=VirtualKey
Label=Fin
Cluster=Navigation
KeyCode=35

[Key_AltGr_Row_3_ID_9]
Type=VirtualKey
Label=Page🠻
Cluster=Navigation
KeyCode=34

[Key_AltGr_Row_3_ID_10]
Type=Blank
Width=25
Cluster=Numpad

[Key_AltGr_Row_3_ID_11]
Type=VirtualKey
Label=7
Cluster=Numpad
KeyCode=103

[Key_AltGr_Row_3_ID_12]
Type=VirtualKey
Label=8
Cluster=Numpad
KeyCode=104

[Key_AltGr_Row_3_ID_13]
Type=VirtualKey
Label=9
Cluster=Numpad
KeyCode=105

[Key_AltGr_Row_3_ID_14]
Type=VirtualKey
Height=200
Label=+
Cluster=Numpad
KeyCode=107

[Key_AltGr_Row_4_ID_0]
Type=VirtualKey
Width=175
Label=🡇
KeyCode=20
NoRepeat=true

[Key_AltGr_Row_4_ID_1]
Type=Blank
Width=1200

[Key_AltGr_Row_4_ID_2]
Type=VirtualKeyIsoEnter
Width=125
Label=↵
KeyCode=13

[Key_AltGr_Row_4_ID_3]
Type=Blank
Width=325
Cluster=Navigation

[Key_AltGr_Row_4_ID_4]
Type=Blank
Width=25
Cluster=Numpad

[Key_AltGr_Row_4_ID_5]
Type=VirtualKey
Label=4
Cluster=Numpad
KeyCode=100

[Key_AltGr_Row_4_ID_6]
Type=VirtualKey
Label=5
Cluster=Numpad
KeyCode=101

[Key_AltGr_Row_4_ID_7]
Type=VirtualKey
Label=6
Cluster=Numpad
KeyCode=102

[Key_AltGr_Row_5_ID_0]
Type=VirtualKeyToggle
Width=125
Label=🡅
KeyCode=160
NoRepeat=true

[Key_AltGr_Row_5_ID_1]
Type=Blank
Width=1100

[Key_AltGr_Row_5_ID_2]
Type=VirtualKeyToggle
Width=275
Label=🡅
KeyCode=161
NoRepeat=true

[Key_AltGr_Row_5_ID_3]
Type=Blank
Width=125
Cluster=Navigation

[Key_AltGr_Row_5_ID_4]
Type=VirtualKey
Label=🠅
Cluster=Navigation
KeyCode=38

[Key_AltGr_Row_5_ID_5]
Type=Blank
Cluster=Navigation

[Key_AltGr_Row_5_ID_6]
Type=Blank
Width=25
Cluster=Numpad

[Key_AltGr_Row_5_ID_7]
Type=VirtualKey
Label=1
Cluster=Numpad
KeyCode=97

[Key_AltGr_Row_5_ID_8]
Type=VirtualKey
Label=2
Cluster=Numpad
KeyCode=98

[Key_AltGr_Row_5_ID_9]
Type=VirtualKey
Label=3
Cluster=Numpad
KeyCode=99

[Key_AltGr_Row_5_ID_10]
Type=VirtualKey
Height=200
Label=Entrée
Cluster=Numpad
KeyCode=13

[Key_AltGr_Row_6_ID_0]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=162
NoRepeat=true

[Key_AltGr_Row_6_ID_1]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=91
NoRepeat=true

[Key_AltGr_Row_6_ID_2]
Type=VirtualKeyToggle
Width=125
Label=Alt
KeyCode=164
NoRepeat=true

[Key_AltGr_Row_6_ID_3]
Type=VirtualKey
Width=625
Label=
KeyCode=32

[Key_AltGr_Row_6_ID_4]
Type=VirtualKeyToggle
Width=125
Label=AltGr
KeyCode=165
NoRepeat=true

[Key_AltGr_Row_6_ID_5]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=92
NoRepeat=true

[Key_AltGr_Row_6_ID_6]
Type=VirtualKey
Width=125
Label=Menu
KeyCode=93
NoRepeat=true

[Key_AltGr_Row_6_ID_7]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=163
NoRepeat=true

[Key_AltGr_Row_6_ID_8]
Type=Blank
Width=25
Cluster=Navigation

[Key_AltGr_Row_6_ID_9]
Type=VirtualKey
Label=🠄
Cluster=Navigation
KeyCode=37

[Key_AltGr_Row_6_ID_10]
Type=VirtualKey
Label=🠇
Cluster=Navigation
KeyCode=40

[Key_AltGr_Row_6_ID_11]
Type=VirtualKey
Label=🠆
Cluster=Navigation
KeyCode=39

[Key_AltGr_Row_6_ID_12]
Type=Blank
Width=25
Cluster=Numpad

[Key_AltGr_Row_6_ID_13]
Type=VirtualKey
Width=200
Label=0
Cluster=Numpad
KeyCode=96

[Key_AltGr_Row_6_ID_14]
Type=VirtualKey
Label=.
Cluster=Numpad
KeyCode=110



================================================
FILE: assets/keyboards/qwerty_dk.ini
================================================
[LayoutInfo]
Name=QWERTY (Denmark)
Author=BOTAlex
HasAltGr=true
HasClusterFunction=true
HasClusterNavigation=true
HasClusterNumpad=true
HasClusterExtra=true

[Key_Base_Row_0_ID_0]
Type=VirtualKey
Label=Esc
Cluster=Function
KeyCode=27
NoRepeat=true

[Key_Base_Row_0_ID_1]
Type=Blank
Cluster=Function

[Key_Base_Row_0_ID_2]
Type=VirtualKey
Label=F1
Cluster=Function
KeyCode=112

[Key_Base_Row_0_ID_3]
Type=VirtualKey
Label=F2
Cluster=Function
KeyCode=113

[Key_Base_Row_0_ID_4]
Type=VirtualKey
Label=F3
Cluster=Function
KeyCode=114

[Key_Base_Row_0_ID_5]
Type=VirtualKey
Label=F4
Cluster=Function
KeyCode=115

[Key_Base_Row_0_ID_6]
Type=Blank
Width=50
Cluster=Function

[Key_Base_Row_0_ID_7]
Type=VirtualKey
Label=F5
Cluster=Function
KeyCode=116

[Key_Base_Row_0_ID_8]
Type=VirtualKey
Label=F6
Cluster=Function
KeyCode=117

[Key_Base_Row_0_ID_9]
Type=VirtualKey
Label=F7
Cluster=Function
KeyCode=118

[Key_Base_Row_0_ID_10]
Type=VirtualKey
Label=F8
Cluster=Function
KeyCode=119

[Key_Base_Row_0_ID_11]
Type=Blank
Width=50
Cluster=Function

[Key_Base_Row_0_ID_12]
Type=VirtualKey
Label=F9
Cluster=Function
KeyCode=120

[Key_Base_Row_0_ID_13]
Type=VirtualKey
Label=F10
Cluster=Function
KeyCode=121

[Key_Base_Row_0_ID_14]
Type=VirtualKey
Label=F11
Cluster=Function
KeyCode=122

[Key_Base_Row_0_ID_15]
Type=VirtualKey
Label=F12
Cluster=Function
KeyCode=123

[Key_Base_Row_0_ID_16]
Type=Blank
Width=25
Cluster=Function

[Key_Base_Row_0_ID_17]
Type=VirtualKey
Label=Print\nScreen
Cluster=Function
KeyCode=44
NoRepeat=true

[Key_Base_Row_0_ID_18]
Type=VirtualKey
Label=Scroll\nLock
Cluster=Function
KeyCode=145
NoRepeat=true

[Key_Base_Row_0_ID_19]
Type=VirtualKey
Label=Pause
Cluster=Function
KeyCode=19
NoRepeat=true

[Key_Base_Row_0_ID_20]
Type=Blank
Width=25
Cluster=Extra

[Key_Base_Row_0_ID_21]
Type=VirtualKey
Label=⏯
Cluster=Extra
KeyCode=179
NoRepeat=true

[Key_Base_Row_0_ID_22]
Type=VirtualKey
Label=◼
Cluster=Extra
KeyCode=178
NoRepeat=true

[Key_Base_Row_0_ID_23]
Type=VirtualKey
Label=⏮
Cluster=Extra
KeyCode=177
NoRepeat=true

[Key_Base_Row_0_ID_24]
Type=VirtualKey
Label=⏭
Cluster=Extra
KeyCode=176
NoRepeat=true

[Key_Base_Row_1_ID_0]
Type=Blank
Width=1500
Height=25
Cluster=Function

[Key_Base_Row_2_ID_0]
Type=String
Label=½
String=½

[Key_Base_Row_2_ID_1]
Type=VirtualKey
Label=1
KeyCode=49

[Key_Base_Row_2_ID_2]
Type=VirtualKey
Label=2
KeyCode=50

[Key_Base_Row_2_ID_3]
Type=VirtualKey
Label=3
KeyCode=51

[Key_Base_Row_2_ID_4]
Type=VirtualKey
Label=4
KeyCode=52

[Key_Base_Row_2_ID_5]
Type=VirtualKey
Label=5
KeyCode=53

[Key_Base_Row_2_ID_6]
Type=VirtualKey
Label=6
KeyCode=54

[Key_Base_Row_2_ID_7]
Type=VirtualKey
Label=7
KeyCode=55

[Key_Base_Row_2_ID_8]
Type=VirtualKey
Label=8
KeyCode=56

[Key_Base_Row_2_ID_9]
Type=VirtualKey
Label=9
KeyCode=57

[Key_Base_Row_2_ID_10]
Type=VirtualKey
Label=0
KeyCode=48

[Key_Base_Row_2_ID_11]
Type=VirtualKey
Label=+
KeyCode=187

[Key_Base_Row_2_ID_12]
Type=String
Label=´
String=´

[Key_Base_Row_2_ID_13]
Type=VirtualKey
Width=200
Label=Backspace
KeyCode=8

[Key_Base_Row_2_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Base_Row_2_ID_15]
Type=VirtualKey
Label=Insert
Cluster=Navigation
KeyCode=45

[Key_Base_Row_2_ID_16]
Type=VirtualKey
Label=Home
Cluster=Navigation
KeyCode=36

[Key_Base_Row_2_ID_17]
Type=VirtualKey
Label=PgUp
Cluster=Navigation
KeyCode=33

[Key_Base_Row_2_ID_18]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_2_ID_19]
Type=VirtualKey
Label=Num\nLock
Cluster=Numpad
KeyCode=144
NoRepeat=true

[Key_Base_Row_2_ID_20]
Type=VirtualKey
Label=/
Cluster=Numpad
KeyCode=111

[Key_Base_Row_2_ID_21]
Type=VirtualKey
Label=*
Cluster=Numpad
KeyCode=106

[Key_Base_Row_2_ID_22]
Type=VirtualKey
Label=-
Cluster=Numpad
KeyCode=109

[Key_Base_Row_3_ID_0]
Type=VirtualKey
Width=150
Label=Tab
KeyCode=9

[Key_Base_Row_3_ID_1]
Type=VirtualKey
Label=q
KeyCode=81

[Key_Base_Row_3_ID_2]
Type=VirtualKey
Label=w
KeyCode=87

[Key_Base_Row_3_ID_3]
Type=VirtualKey
Label=e
KeyCode=69

[Key_Base_Row_3_ID_4]
Type=VirtualKey
Label=r
KeyCode=82

[Key_Base_Row_3_ID_5]
Type=VirtualKey
Label=t
KeyCode=84

[Key_Base_Row_3_ID_6]
Type=VirtualKey
Label=y
KeyCode=89

[Key_Base_Row_3_ID_7]
Type=VirtualKey
Label=u
KeyCode=85

[Key_Base_Row_3_ID_8]
Type=VirtualKey
Label=i
KeyCode=73

[Key_Base_Row_3_ID_9]
Type=VirtualKey
Label=o
KeyCode=79

[Key_Base_Row_3_ID_10]
Type=VirtualKey
Label=p
KeyCode=80

[Key_Base_Row_3_ID_11]
Type=String
Label=å
String=å

[Key_Base_Row_3_ID_12]
Type=String
Label=¨
String=¨

[Key_Base_Row_3_ID_13]
Type=VirtualKeyIsoEnter
Width=150
Label=Enter
KeyCode=13

[Key_Base_Row_3_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Base_Row_3_ID_15]
Type=VirtualKey
Label=Delete
Cluster=Navigation
KeyCode=46

[Key_Base_Row_3_ID_16]
Type=VirtualKey
Label=End
Cluster=Navigation
KeyCode=35

[Key_Base_Row_3_ID_17]
Type=VirtualKey
Label=PgDn
Cluster=Navigation
KeyCode=34

[Key_Base_Row_3_ID_18]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_3_ID_19]
Type=VirtualKey
Label=7
Cluster=Numpad
KeyCode=103

[Key_Base_Row_3_ID_20]
Type=VirtualKey
Label=8
Cluster=Numpad
KeyCode=104

[Key_Base_Row_3_ID_21]
Type=VirtualKey
Label=9
Cluster=Numpad
KeyCode=105

[Key_Base_Row_3_ID_22]
Type=VirtualKey
Height=200
Label=+
Cluster=Numpad
KeyCode=107

[Key_Base_Row_4_ID_0]
Type=VirtualKey
Width=175
Label=Caps Lock
KeyCode=20
NoRepeat=true

[Key_Base_Row_4_ID_1]
Type=VirtualKey
Label=a
KeyCode=65

[Key_Base_Row_4_ID_2]
Type=VirtualKey
Label=s
KeyCode=83

[Key_Base_Row_4_ID_3]
Type=VirtualKey
Label=d
KeyCode=68

[Key_Base_Row_4_ID_4]
Type=VirtualKey
Label=f
KeyCode=70

[Key_Base_Row_4_ID_5]
Type=VirtualKey
Label=g
KeyCode=71

[Key_Base_Row_4_ID_6]
Type=VirtualKey
Label=h
KeyCode=72

[Key_Base_Row_4_ID_7]
Type=VirtualKey
Label=j
KeyCode=74

[Key_Base_Row_4_ID_8]
Type=VirtualKey
Label=k
KeyCode=75

[Key_Base_Row_4_ID_9]
Type=VirtualKey
Label=l
KeyCode=76

[Key_Base_Row_4_ID_10]
Type=String
Label=æ
String=æ

[Key_Base_Row_4_ID_11]
Type=String
Label=ø
String=ø

[Key_Base_Row_4_ID_12]
Type=String
Label='
String='

[Key_Base_Row_4_ID_13]
Type=VirtualKeyIsoEnter
Width=125
Label=Enter
KeyCode=13

[Key_Base_Row_4_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Base_Row_4_ID_15]
Type=Blank
Width=300
Cluster=Navigation

[Key_Base_Row_4_ID_16]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_4_ID_17]
Type=VirtualKey
Label=4
Cluster=Numpad
KeyCode=100

[Key_Base_Row_4_ID_18]
Type=VirtualKey
Label=5
Cluster=Numpad
KeyCode=101

[Key_Base_Row_4_ID_19]
Type=VirtualKey
Label=6
Cluster=Numpad
KeyCode=102

[Key_Base_Row_5_ID_0]
Type=VirtualKeyToggle
Width=125
Label=Shift
KeyCode=160
NoRepeat=true

[Key_Base_Row_5_ID_1]
Type=VirtualKey
Label=<
KeyCode=226

[Key_Base_Row_5_ID_2]
Type=VirtualKey
Label=z
KeyCode=90

[Key_Base_Row_5_ID_3]
Type=VirtualKey
Label=x
KeyCode=88

[Key_Base_Row_5_ID_4]
Type=VirtualKey
Label=c
KeyCode=67

[Key_Base_Row_5_ID_5]
Type=VirtualKey
Label=v
KeyCode=86

[Key_Base_Row_5_ID_6]
Type=VirtualKey
Label=b
KeyCode=66

[Key_Base_Row_5_ID_7]
Type=VirtualKey
Label=n
KeyCode=78

[Key_Base_Row_5_ID_8]
Type=VirtualKey
Label=m
KeyCode=77

[Key_Base_Row_5_ID_9]
Type=String
Label=,
String=,

[Key_Base_Row_5_ID_10]
Type=String
Label=.
String=.

[Key_Base_Row_5_ID_11]
Type=String
Label=-
String=-

[Key_Base_Row_5_ID_12]
Type=VirtualKeyToggle
Width=275
Label=Shift
KeyCode=161
NoRepeat=true

[Key_Base_Row_5_ID_13]
Type=Blank
Width=125
Cluster=Navigation

[Key_Base_Row_5_ID_14]
Type=VirtualKey
Label=🠅
Cluster=Navigation
KeyCode=38

[Key_Base_Row_5_ID_15]
Type=Blank
Cluster=Navigation

[Key_Base_Row_5_ID_16]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_5_ID_17]
Type=VirtualKey
Label=1
Cluster=Numpad
KeyCode=97

[Key_Base_Row_5_ID_18]
Type=VirtualKey
Label=2
Cluster=Numpad
KeyCode=98

[Key_Base_Row_5_ID_19]
Type=VirtualKey
Label=3
Cluster=Numpad
KeyCode=99

[Key_Base_Row_5_ID_20]
Type=VirtualKey
Height=200
Label=Enter
Cluster=Numpad
KeyCode=13

[Key_Base_Row_6_ID_0]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=162
NoRepeat=true

[Key_Base_Row_6_ID_1]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=91
NoRepeat=true

[Key_Base_Row_6_ID_2]
Type=VirtualKeyToggle
Width=125
Label=Alt
KeyCode=164
NoRepeat=true

[Key_Base_Row_6_ID_3]
Type=VirtualKey
Width=625
Label=
KeyCode=32

[Key_Base_Row_6_ID_4]
Type=VirtualKeyToggle
Width=125
Label=AltGr
KeyCode=165
NoRepeat=true

[Key_Base_Row_6_ID_5]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=92
NoRepeat=true

[Key_Base_Row_6_ID_6]
Type=VirtualKey
Width=125
Label=Menu
KeyCode=93
NoRepeat=true

[Key_Base_Row_6_ID_7]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=163
NoRepeat=true

[Key_Base_Row_6_ID_8]
Type=Blank
Width=25
Cluster=Navigation

[Key_Base_Row_6_ID_9]
Type=VirtualKey
Label=🠄
Cluster=Navigation
KeyCode=37

[Key_Base_Row_6_ID_10]
Type=VirtualKey
Label=🠇
Cluster=Navigation
KeyCode=40

[Key_Base_Row_6_ID_11]
Type=VirtualKey
Label=🠆
Cluster=Navigation
KeyCode=39

[Key_Base_Row_6_ID_12]
Type=Blank
Width=25
Cluster=Numpad

[Key_Base_Row_6_ID_13]
Type=VirtualKey
Width=200
Label=0
Cluster=Numpad
KeyCode=96

[Key_Base_Row_6_ID_14]
Type=VirtualKey
Label=,
Cluster=Numpad
KeyCode=110

[Key_Shift_Row_0_ID_0]
Type=VirtualKey
Label=Esc
Cluster=Function
KeyCode=27
NoRepeat=true

[Key_Shift_Row_0_ID_1]
Type=Blank
Cluster=Function

[Key_Shift_Row_0_ID_2]
Type=VirtualKey
Label=F1
Cluster=Function
KeyCode=112

[Key_Shift_Row_0_ID_3]
Type=VirtualKey
Label=F2
Cluster=Function
KeyCode=113

[Key_Shift_Row_0_ID_4]
Type=VirtualKey
Label=F3
Cluster=Function
KeyCode=114

[Key_Shift_Row_0_ID_5]
Type=VirtualKey
Label=F4
Cluster=Function
KeyCode=115

[Key_Shift_Row_0_ID_6]
Type=Blank
Width=50
Cluster=Function

[Key_Shift_Row_0_ID_7]
Type=VirtualKey
Label=F5
Cluster=Function
KeyCode=116

[Key_Shift_Row_0_ID_8]
Type=VirtualKey
Label=F6
Cluster=Function
KeyCode=117

[Key_Shift_Row_0_ID_9]
Type=VirtualKey
Label=F7
Cluster=Function
KeyCode=118

[Key_Shift_Row_0_ID_10]
Type=VirtualKey
Label=F8
Cluster=Function
KeyCode=119

[Key_Shift_Row_0_ID_11]
Type=Blank
Width=50
Cluster=Function

[Key_Shift_Row_0_ID_12]
Type=VirtualKey
Label=F9
Cluster=Function
KeyCode=120

[Key_Shift_Row_0_ID_13]
Type=VirtualKey
Label=F10
Cluster=Function
KeyCode=121

[Key_Shift_Row_0_ID_14]
Type=VirtualKey
Label=F11
Cluster=Function
KeyCode=122

[Key_Shift_Row_0_ID_15]
Type=VirtualKey
Label=F12
Cluster=Function
KeyCode=123

[Key_Shift_Row_0_ID_16]
Type=Blank
Width=25
Cluster=Function

[Key_Shift_Row_0_ID_17]
Type=VirtualKey
Label=Print\nScreen
Cluster=Function
KeyCode=44
NoRepeat=true

[Key_Shift_Row_0_ID_18]
Type=VirtualKey
Label=Scroll\nLock
Cluster=Function
KeyCode=145
NoRepeat=true

[Key_Shift_Row_0_ID_19]
Type=VirtualKey
Label=Pause
Cluster=Function
KeyCode=19
NoRepeat=true

[Key_Shift_Row_0_ID_20]
Type=Blank
Width=25
Cluster=Extra

[Key_Shift_Row_0_ID_21]
Type=VirtualKey
Label=🡰
Cluster=Extra
KeyCode=166
NoRepeat=true

[Key_Shift_Row_0_ID_22]
Type=VirtualKey
Label=🡲
Cluster=Extra
KeyCode=167
NoRepeat=true

[Key_Shift_Row_0_ID_23]
Type=VirtualKey
Label=🔇
Cluster=Extra
KeyCode=173
NoRepeat=true

[Key_Shift_Row_1_ID_0]
Type=Blank
Height=25
Cluster=Function

[Key_Shift_Row_1_ID_1]
Type=Blank
Height=25
Cluster=Extra

[Key_Shift_Row_2_ID_0]
Type=String
Label=§
String=§

[Key_Shift_Row_2_ID_1]
Type=String
Label=!
String=!

[Key_Shift_Row_2_ID_2]
Type=String
Label="
String="

[Key_Shift_Row_2_ID_3]
Type=String
Label=#
String=#

[Key_Shift_Row_2_ID_4]
Type=String
Label=¤
String=¤

[Key_Shift_Row_2_ID_5]
Type=String
Label=%
String=%

[Key_Shift_Row_2_ID_6]
Type=String
Label=&
String=&

[Key_Shift_Row_2_ID_7]
Type=String
Label=/
String=/

[Key_Shift_Row_2_ID_8]
Type=String
Label=(
String=(

[Key_Shift_Row_2_ID_9]
Type=String
Label=)
String=)

[Key_Shift_Row_2_ID_10]
Type=String
Label==
String==

[Key_Shift_Row_2_ID_11]
Type=String
Label=?
String=?

[Key_Shift_Row_2_ID_12]
Type=String
Label=`
String=`

[Key_Shift_Row_2_ID_13]
Type=VirtualKey
Width=200
Label=Backspace
KeyCode=8

[Key_Shift_Row_2_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Shift_Row_2_ID_15]
Type=VirtualKey
Label=Insert
Cluster=Navigation
KeyCode=45

[Key_Shift_Row_2_ID_16]
Type=VirtualKey
Label=Home
Cluster=Navigation
KeyCode=36

[Key_Shift_Row_2_ID_17]
Type=VirtualKey
Label=PgUp
Cluster=Navigation
KeyCode=33

[Key_Shift_Row_2_ID_18]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_2_ID_19]
Type=VirtualKey
Label=Num\nLock
Cluster=Numpad
KeyCode=144
NoRepeat=true

[Key_Shift_Row_2_ID_20]
Type=VirtualKey
Label=/
Cluster=Numpad
KeyCode=111

[Key_Shift_Row_2_ID_21]
Type=VirtualKey
Label=*
Cluster=Numpad
KeyCode=106

[Key_Shift_Row_2_ID_22]
Type=VirtualKey
Label=-
Cluster=Numpad
KeyCode=109

[Key_Shift_Row_3_ID_0]
Type=VirtualKey
Width=150
Label=Tab
KeyCode=9

[Key_Shift_Row_3_ID_1]
Type=VirtualKey
Label=Q
KeyCode=81

[Key_Shift_Row_3_ID_2]
Type=VirtualKey
Label=W
KeyCode=87

[Key_Shift_Row_3_ID_3]
Type=VirtualKey
Label=E
KeyCode=69

[Key_Shift_Row_3_ID_4]
Type=VirtualKey
Label=R
KeyCode=82

[Key_Shift_Row_3_ID_5]
Type=VirtualKey
Label=T
KeyCode=84

[Key_Shift_Row_3_ID_6]
Type=VirtualKey
Label=Y
KeyCode=89

[Key_Shift_Row_3_ID_7]
Type=VirtualKey
Label=U
KeyCode=85

[Key_Shift_Row_3_ID_8]
Type=VirtualKey
Label=I
KeyCode=73

[Key_Shift_Row_3_ID_9]
Type=VirtualKey
Label=O
KeyCode=79

[Key_Shift_Row_3_ID_10]
Type=VirtualKey
Label=P
KeyCode=80

[Key_Shift_Row_3_ID_11]
Type=String
Label=Å
String=Å

[Key_Shift_Row_3_ID_12]
Type=String
Label=^
String=^

[Key_Shift_Row_3_ID_13]
Type=VirtualKeyIsoEnter
Width=150
Label=Enter
KeyCode=13

[Key_Shift_Row_3_ID_14]
Type=Blank
Width=25
Cluster=Navigation

[Key_Shift_Row_3_ID_15]
Type=VirtualKey
Label=Delete
Cluster=Navigation
KeyCode=46

[Key_Shift_Row_3_ID_16]
Type=VirtualKey
Label=End
Cluster=Navigation
KeyCode=35

[Key_Shift_Row_3_ID_17]
Type=VirtualKey
Label=PgDn
Cluster=Navigation
KeyCode=34

[Key_Shift_Row_3_ID_18]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_3_ID_19]
Type=VirtualKey
Label=7
Cluster=Numpad
KeyCode=103

[Key_Shift_Row_3_ID_20]
Type=VirtualKey
Label=8
Cluster=Numpad
KeyCode=104

[Key_Shift_Row_3_ID_21]
Type=VirtualKey
Label=9
Cluster=Numpad
KeyCode=105

[Key_Shift_Row_3_ID_22]
Type=VirtualKey
Height=200
Label=+
Cluster=Numpad
KeyCode=107

[Key_Shift_Row_4_ID_0]
Type=VirtualKey
Width=175
Label=Caps Lock
KeyCode=20
NoRepeat=true

[Key_Shift_Row_4_ID_1]
Type=VirtualKey
Label=A
KeyCode=65

[Key_Shift_Row_4_ID_2]
Type=VirtualKey
Label=S
KeyCode=83

[Key_Shift_Row_4_ID_3]
Type=VirtualKey
Label=D
KeyCode=68

[Key_Shift_Row_4_ID_4]
Type=VirtualKey
Label=F
KeyCode=70

[Key_Shift_Row_4_ID_5]
Type=VirtualKey
Label=G
KeyCode=71

[Key_Shift_Row_4_ID_6]
Type=VirtualKey
Label=H
KeyCode=72

[Key_Shift_Row_4_ID_7]
Type=VirtualKey
Label=J
KeyCode=74

[Key_Shift_Row_4_ID_8]
Type=VirtualKey
Label=K
KeyCode=75

[Key_Shift_Row_4_ID_9]
Type=VirtualKey
Label=L
KeyCode=76

[Key_Shift_Row_4_ID_10]
Type=String
Label=Æ
String=Æ

[Key_Shift_Row_4_ID_11]
Type=String
Label=Ø
String=Ø

[Key_Shift_Row_4_ID_12]
Type=String
Label=*
String=*

[Key_Shift_Row_4_ID_13]
Type=VirtualKeyIsoEnter
Width=125
Label=Enter
KeyCode=13

[Key_Shift_Row_4_ID_14]
Type=Blank
Width=325
Cluster=Navigation

[Key_Shift_Row_4_ID_15]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_4_ID_16]
Type=VirtualKey
Label=4
Cluster=Numpad
KeyCode=100

[Key_Shift_Row_4_ID_17]
Type=VirtualKey
Label=5
Cluster=Numpad
KeyCode=101

[Key_Shift_Row_4_ID_18]
Type=VirtualKey
Label=6
Cluster=Numpad
KeyCode=102

[Key_Shift_Row_5_ID_0]
Type=VirtualKeyToggle
Width=125
Label=Shift
KeyCode=160
NoRepeat=true

[Key_Shift_Row_5_ID_1]
Type=VirtualKey
Label=>
KeyCode=226

[Key_Shift_Row_5_ID_2]
Type=VirtualKey
Label=Z
KeyCode=90

[Key_Shift_Row_5_ID_3]
Type=VirtualKey
Label=X
KeyCode=88

[Key_Shift_Row_5_ID_4]
Type=VirtualKey
Label=C
KeyCode=67

[Key_Shift_Row_5_ID_5]
Type=VirtualKey
Label=V
KeyCode=86

[Key_Shift_Row_5_ID_6]
Type=VirtualKey
Label=B
KeyCode=66

[Key_Shift_Row_5_ID_7]
Type=VirtualKey
Label=N
KeyCode=78

[Key_Shift_Row_5_ID_8]
Type=VirtualKey
Label=M
KeyCode=77

[Key_Shift_Row_5_ID_9]
Type=String
Label=;
String=;

[Key_Shift_Row_5_ID_10]
Type=String
Label=:
String=:

[Key_Shift_Row_5_ID_11]
Type=String
Label=_
String=_

[Key_Shift_Row_5_ID_12]
Type=VirtualKeyToggle
Width=275
Label=Shift
KeyCode=161
NoRepeat=true

[Key_Shift_Row_5_ID_13]
Type=Blank
Width=125
Cluster=Navigation

[Key_Shift_Row_5_ID_14]
Type=VirtualKey
Label=🠅
Cluster=Navigation
KeyCode=38

[Key_Shift_Row_5_ID_15]
Type=Blank
Cluster=Navigation

[Key_Shift_Row_5_ID_16]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_5_ID_17]
Type=VirtualKey
Label=1
Cluster=Numpad
KeyCode=97

[Key_Shift_Row_5_ID_18]
Type=VirtualKey
Label=2
Cluster=Numpad
KeyCode=98

[Key_Shift_Row_5_ID_19]
Type=VirtualKey
Label=3
Cluster=Numpad
KeyCode=99

[Key_Shift_Row_5_ID_20]
Type=VirtualKey
Height=200
Label=Enter
Cluster=Numpad
KeyCode=13

[Key_Shift_Row_6_ID_0]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=162
NoRepeat=true

[Key_Shift_Row_6_ID_1]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=91
NoRepeat=true

[Key_Shift_Row_6_ID_2]
Type=VirtualKeyToggle
Width=125
Label=Alt
KeyCode=164
NoRepeat=true

[Key_Shift_Row_6_ID_3]
Type=VirtualKey
Width=625
Label=
KeyCode=32

[Key_Shift_Row_6_ID_4]
Type=VirtualKeyToggle
Width=125
Label=AltGr
KeyCode=165
NoRepeat=true

[Key_Shift_Row_6_ID_5]
Type=VirtualKeyToggle
Width=125
Label=Win
KeyCode=92
NoRepeat=true

[Key_Shift_Row_6_ID_6]
Type=VirtualKey
Width=125
Label=Menu
KeyCode=93
NoRepeat=true

[Key_Shift_Row_6_ID_7]
Type=VirtualKeyToggle
Width=125
Label=Ctrl
KeyCode=163
NoRepeat=true

[Key_Shift_Row_6_ID_8]
Type=Blank
Width=25
Cluster=Navigation

[Key_Shift_Row_6_ID_9]
Type=VirtualKey
Label=🠄
Cluster=Navigation
KeyCode=37

[Key_Shift_Row_6_ID_10]
Type=VirtualKey
Label=🠇
Cluster=Navigation
KeyCode=40

[Key_Shift_Row_6_ID_11]
Type=VirtualKey
Label=🠆
Cluster=Navigation
KeyCode=39

[Key_Shift_Row_6_ID_12]
Type=Blank
Width=25
Cluster=Numpad

[Key_Shift_Row_6_ID_13]
Type=VirtualKey
Width=200
Label=0
Cluster=Numpad
KeyCode=96

[Key_Shift_Row_6_ID_14]
Type=VirtualKey
Label=,
Cluster=Numpad
KeyCode=110

[Key_AltGr_Row_0_ID_0]
Type=VirtualKey
Label=Esc
Cluster=Function
KeyCode=27
NoRepeat=true

[Key_AltGr_Row_0_ID_1]
Type=Blank
Cluster=Function

[Key_AltGr_Row_0_ID_2]
Type=VirtualKey
Label=F1
Cluster=Function
KeyCode=112

[Key_AltGr_Row_0_ID_3]
Type=VirtualKey
Label=F2
Cluster=Function
KeyCode=113

[Key_AltGr_Row_0_ID_4]
Type=VirtualKey
Label=F3
Cluster=Function
KeyCode=114

[Key_AltGr_Row_0_ID_5]
Type=VirtualKey
Label=F4
Cluster=Function
KeyCode=115

[Key_AltGr_Row_0_ID_6]
Type=Blank
Width=50
Cluster=Function

[Key_AltGr_Row_0_ID_7]
Type=VirtualKey
Label=F5
Cluster=Function
KeyCode=116

[Key_AltGr_Row_0_ID_8]
Type=VirtualKey
Label=F6
Download .txt
gitextract_9ffo_z3l/

├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       └── nightly.yml
├── CONTRIBUTING
├── LICENSE
├── README.md
├── assets/
│   ├── action_manifest.json
│   ├── actions_default.ini
│   ├── config_default.ini
│   ├── input/
│   │   ├── action_bindings_frame_controller.json
│   │   ├── action_bindings_gamepad.json
│   │   ├── action_bindings_generic.json
│   │   ├── action_bindings_holographic.json
│   │   ├── action_bindings_hpmotioncontroller.json
│   │   ├── action_bindings_knuckles.json
│   │   ├── action_bindings_knuckles_ev1.json
│   │   ├── action_bindings_playstation_vr2_sense_controller.json
│   │   ├── action_bindings_svl_hand_interaction_augmented.json
│   │   ├── action_bindings_touch.json
│   │   ├── action_bindings_vive_controller.json
│   │   ├── action_bindings_vive_cosmos.json
│   │   ├── action_manifest_de.json
│   │   ├── action_manifest_en.json
│   │   ├── action_manifest_ja.json
│   │   ├── action_manifest_ko.json
│   │   └── action_manifest_zh_CN.json
│   ├── keyboards/
│   │   ├── azerty_be.ini
│   │   ├── azerty_fr.ini
│   │   ├── qwerty_dk.ini
│   │   ├── qwerty_es.ini
│   │   ├── qwerty_ja.ini
│   │   ├── qwerty_ko_2-set.ini
│   │   ├── qwerty_latam.ini
│   │   ├── qwerty_th_kedmanee.ini
│   │   ├── qwerty_uk.ini
│   │   ├── qwerty_usa.ini
│   │   ├── qwertz_ger.ini
│   │   └── qwertz_hu.ini
│   ├── lang/
│   │   ├── de.ini
│   │   ├── en.ini
│   │   ├── ja.ini
│   │   ├── ko.ini
│   │   └── zh_CN.ini
│   ├── license.txt
│   ├── manifest.vrmanifest
│   ├── misc/
│   │   ├── !About this folder.txt
│   │   ├── CreateElevatedTask.bat
│   │   ├── CreateElevatedTask.ps1
│   │   ├── EnableUIAccess.bat
│   │   ├── EnableUIAccess.ps1
│   │   ├── EnableUIAccessDesktopPlus.manifest
│   │   ├── UndoSystemChanges.bat
│   │   └── UndoSystemChanges.ps1
│   ├── profiles/
│   │   └── Sample Profile.ini
│   ├── readme.txt
│   └── third-party_licenses.txt
├── docs/
│   └── user_guide.md
└── src/
    ├── DesktopPlus/
    │   ├── BackgroundOverlay.cpp
    │   ├── BackgroundOverlay.h
    │   ├── CommonTypes.h
    │   ├── DesktopPlus.cpp
    │   ├── DesktopPlus.manifest
    │   ├── DesktopPlus.rc
    │   ├── DesktopPlus.ruleset
    │   ├── DesktopPlus.vcxproj
    │   ├── DesktopPlus.vcxproj.filters
    │   ├── DesktopPlus.vcxproj.user
    │   ├── DisplayManager.cpp
    │   ├── DisplayManager.h
    │   ├── DuplicationManager.cpp
    │   ├── DuplicationManager.h
    │   ├── ElevatedMode.cpp
    │   ├── ElevatedMode.h
    │   ├── InputSimulator.cpp
    │   ├── InputSimulator.h
    │   ├── LaserPointer.cpp
    │   ├── LaserPointer.h
    │   ├── OutputManager.cpp
    │   ├── OutputManager.h
    │   ├── Overlays.cpp
    │   ├── Overlays.h
    │   ├── PixelShader.hlsl
    │   ├── PixelShaderCursor.hlsl
    │   ├── RadialFollowSmoothing.cpp
    │   ├── RadialFollowSmoothing.h
    │   ├── SoftwareCursorGrabber.cpp
    │   ├── SoftwareCursorGrabber.h
    │   ├── ThreadManager.cpp
    │   ├── ThreadManager.h
    │   ├── VRInput.cpp
    │   ├── VRInput.h
    │   ├── VertexShader.hlsl
    │   └── resource.h
    ├── DesktopPlus.sln
    ├── DesktopPlusUI/
    │   ├── AuxUI.cpp
    │   ├── AuxUI.h
    │   ├── DesktopPlusUI.cpp
    │   ├── DesktopPlusUI.rc
    │   ├── DesktopPlusUI.vcxproj
    │   ├── DesktopPlusUI.vcxproj.filters
    │   ├── DesktopPlusUI.vcxproj.user
    │   ├── FloatingUI.cpp
    │   ├── FloatingUI.h
    │   ├── FloatingWindow.cpp
    │   ├── FloatingWindow.h
    │   ├── ImGuiExt.cpp
    │   ├── ImGuiExt.h
    │   ├── NotificationIcon.cpp
    │   ├── NotificationIcon.h
    │   ├── TextureManager.cpp
    │   ├── TextureManager.h
    │   ├── TranslationManager.cpp
    │   ├── TranslationManager.h
    │   ├── UIManager.cpp
    │   ├── UIManager.h
    │   ├── VRKeyboard.cpp
    │   ├── VRKeyboard.h
    │   ├── VRKeyboardCommon.h
    │   ├── Win32PerformanceData.cpp
    │   ├── Win32PerformanceData.h
    │   ├── WindowDesktopMode.cpp
    │   ├── WindowDesktopMode.h
    │   ├── WindowFloatingUIBar.cpp
    │   ├── WindowFloatingUIBar.h
    │   ├── WindowKeyboard.cpp
    │   ├── WindowKeyboard.h
    │   ├── WindowKeyboardEditor.cpp
    │   ├── WindowKeyboardEditor.h
    │   ├── WindowOverlayBar.cpp
    │   ├── WindowOverlayBar.h
    │   ├── WindowOverlayProperties.cpp
    │   ├── WindowOverlayProperties.h
    │   ├── WindowPerformance.cpp
    │   ├── WindowPerformance.h
    │   ├── WindowSettings.cpp
    │   ├── WindowSettings.h
    │   ├── imgui/
    │   │   ├── imconfig.h
    │   │   ├── imgui.cpp
    │   │   ├── imgui.h
    │   │   ├── imgui_demo.cpp
    │   │   ├── imgui_draw.cpp
    │   │   ├── imgui_internal.h
    │   │   ├── imgui_tables.cpp
    │   │   ├── imgui_widgets.cpp
    │   │   ├── imstb_rectpack.h
    │   │   ├── imstb_textedit.h
    │   │   └── imstb_truetype.h
    │   ├── imgui_win32_dx11_openvr/
    │   │   ├── PixelShaderImGui.hlsl
    │   │   ├── VertexShaderImGui.hlsl
    │   │   ├── imgui_impl_dx11_openvr.cpp
    │   │   ├── imgui_impl_dx11_openvr.h
    │   │   ├── imgui_impl_win32_openvr.cpp
    │   │   └── imgui_impl_win32_openvr.h
    │   ├── implot/
    │   │   ├── implot.cpp
    │   │   ├── implot.h
    │   │   ├── implot_internal.h
    │   │   └── implot_items.cpp
    │   └── resource.h
    ├── DesktopPlusWinRT/
    │   ├── CaptureManager.cpp
    │   ├── CaptureManager.h
    │   ├── CommonHeaders.h
    │   ├── DesktopPlusWinRT.cpp
    │   ├── DesktopPlusWinRT.h
    │   ├── DesktopPlusWinRT.rc
    │   ├── DesktopPlusWinRT.vcxproj
    │   ├── DesktopPlusWinRT.vcxproj.filters
    │   ├── DesktopPlusWinRT.vcxproj.user
    │   ├── OverlayCapture.cpp
    │   ├── OverlayCapture.h
    │   ├── ThreadData.h
    │   ├── packages.config
    │   ├── resource.h
    │   └── util/
    │       ├── DesktopWindow.h
    │       ├── capture.desktop.interop.h
    │       ├── direct3d11.interop.h
    │       ├── dispatcherqueue.desktop.interop.h
    │       └── hwnd.interop.h
    └── Shared/
        ├── Actions.cpp
        ├── Actions.h
        ├── AppProfiles.cpp
        ├── AppProfiles.h
        ├── ConfigManager.cpp
        ├── ConfigManager.h
        ├── DPBrowserAPI.h
        ├── DPBrowserAPIClient.cpp
        ├── DPBrowserAPIClient.h
        ├── DPRect.h
        ├── Ini.cpp
        ├── Ini.h
        ├── InterprocessMessaging.cpp
        ├── InterprocessMessaging.h
        ├── Logging.cpp
        ├── Logging.h
        ├── Matrices.cpp
        ├── Matrices.h
        ├── OUtoSBSConverter.cpp
        ├── OUtoSBSConverter.h
        ├── OpenVRExt.cpp
        ├── OpenVRExt.h
        ├── OverlayDragger.cpp
        ├── OverlayDragger.h
        ├── OverlayManager.cpp
        ├── OverlayManager.h
        ├── Util.cpp
        ├── Util.h
        ├── Vectors.h
        ├── WindowManager.cpp
        ├── WindowManager.h
        ├── loguru.cpp
        ├── loguru.hpp
        ├── openvr.h
        └── openvr_api.lib
Download .txt
Showing preview only (240K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2568 symbols across 119 files)

FILE: src/DesktopPlus/BackgroundOverlay.h
  function class (line 5) | class BackgroundOverlay

FILE: src/DesktopPlus/CommonTypes.h
  type enum (line 43) | typedef _Return_type_success_(return == DUPL_RETURN_SUCCESS) enum
  type enum (line 53) | typedef _Return_type_success_(return == DUPL_RETURN_UPD_SUCCESS) enum
  type PTR_INFO (line 71) | typedef struct _PTR_INFO
  type DX_RESOURCES (line 85) | typedef struct _DX_RESOURCES
  type THREAD_DATA (line 98) | typedef struct _THREAD_DATA
  type FRAME_DATA (line 126) | typedef struct _FRAME_DATA
  type VERTEX (line 138) | typedef struct _VERTEX

FILE: src/DesktopPlus/DesktopPlus.cpp
  class DYNAMIC_WAIT (line 83) | class DYNAMIC_WAIT
  function WinMain (line 156) | int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevIns...
  function LRESULT (line 551) | LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM ...
  function SpawnProcessWithDefaultEnv (line 618) | bool SpawnProcessWithDefaultEnv(LPCWSTR application_name, LPWSTR command...
  function ProcessCmdline (line 642) | void ProcessCmdline(bool& use_elevated_mode, bool& cancel_startup)
  function DisplayInitError (line 668) | bool DisplayInitError(vr::EVRInitError vr_init_error, vr::EVROverlayErro...
  function DWORD (line 715) | DWORD WINAPI CaptureThreadEntry(_In_ void* Param)
  function DUPL_RETURN (line 905) | DUPL_RETURN ProcessFailure(_In_opt_ ID3D11Device* device, _In_ LPCWSTR s...
  function DisplayMsg (line 966) | void DisplayMsg(_In_ LPCWSTR str, _In_ LPCWSTR title, HRESULT hr)

FILE: src/DesktopPlus/DisplayManager.cpp
  function DUPL_RETURN (line 59) | DUPL_RETURN DISPLAYMANAGER::ProcessFrame(_In_ FRAME_DATA* Data, _Inout_ ...
  function ID3D11Device (line 91) | ID3D11Device* DISPLAYMANAGER::GetDevice()
  function DUPL_RETURN (line 165) | DUPL_RETURN DISPLAYMANAGER::CopyMove(_Inout_ ID3D11Texture2D* SharedSurf...
  function DUPL_RETURN (line 330) | DUPL_RETURN DISPLAYMANAGER::CopyDirty(_In_ ID3D11Texture2D* SrcSurface, ...

FILE: src/DesktopPlus/DisplayManager.h
  function class (line 9) | class DISPLAYMANAGER

FILE: src/DesktopPlus/DuplicationManager.cpp
  function DUPL_RETURN (line 59) | DUPL_RETURN DUPLICATIONMANAGER::InitDupl(_In_ ID3D11Device* Device, UINT...
  function DUPL_RETURN (line 188) | DUPL_RETURN DUPLICATIONMANAGER::GetMouse(_Inout_ PTR_INFO* PtrInfo, _In_...
  function DUPL_RETURN (line 256) | DUPL_RETURN DUPLICATIONMANAGER::GetFrame(_Out_ FRAME_DATA* Data, _Out_ b...
  function DUPL_RETURN (line 350) | DUPL_RETURN DUPLICATIONMANAGER::DoneWithFrame()

FILE: src/DesktopPlus/DuplicationManager.h
  function class (line 9) | class DUPLICATIONMANAGER

FILE: src/DesktopPlus/ElevatedMode.cpp
  function ElevatedModeEnter (line 16) | int ElevatedModeEnter(HINSTANCE hinstance)
  function LRESULT (line 103) | LRESULT CALLBACK WndProcElevated(HWND hWnd, UINT message, WPARAM wParam,...
  function HandleIPCMessage (line 136) | bool HandleIPCMessage(MSG msg)

FILE: src/DesktopPlus/InputSimulator.cpp
  type KeyboardWin32KeystateFlags (line 7) | enum KeyboardWin32KeystateFlags

FILE: src/DesktopPlus/InputSimulator.h
  type IPCKeyboardKeystateFlags (line 13) | enum IPCKeyboardKeystateFlags : unsigned char
  type HANDLE (line 16) | typedef HANDLE HSYNTHETICPOINTERDEVICE_DPLUS;
  type POINTER_FEEDBACK_MODE (line 18) | typedef enum { POINTER_FEEDBACK_DEFAULT = 1, POINTER_FEEDBACK_INDIRECT =...
  function class (line 25) | class InputSimulator

FILE: src/DesktopPlus/LaserPointer.cpp
  function LaserPointerActivationOrigin (line 869) | LaserPointerActivationOrigin LaserPointer::GetActivationOrigin() const

FILE: src/DesktopPlus/LaserPointer.h
  type LaserPointerDevice (line 9) | struct LaserPointerDevice
  type LaserPointerActivationOrigin (line 25) | enum LaserPointerActivationOrigin
  function class (line 37) | class LaserPointer

FILE: src/DesktopPlus/OutputManager.cpp
  function OutputManager (line 30) | OutputManager* OutputManager::Get()
  function DUPL_RETURN (line 275) | DUPL_RETURN OutputManager::InitOutput(HWND Window, _Out_ INT& SingleOutp...
  function DUPL_RETURN_UPD (line 735) | DUPL_RETURN_UPD OutputManager::Update(_In_ PTR_INFO* PointerInfo,  _In_ ...
  function HWND (line 2086) | HWND OutputManager::GetWindowHandle()
  function HANDLE (line 2094) | HANDLE OutputManager::GetSharedHandle()
  function IDXGIAdapter (line 2112) | IDXGIAdapter* OutputManager::GetDXGIAdapter()
  function ID3D11Texture2D (line 2204) | ID3D11Texture2D* OutputManager::GetOverlayTexture() const
  function ID3D11Texture2D (line 2209) | ID3D11Texture2D* OutputManager::GetMultiGPUTargetTexture() const
  function DWORD (line 2229) | DWORD OutputManager::GetMaxRefreshDelay() const
  function Matrix4 (line 2745) | Matrix4 OutputManager::GetFallbackOverlayTransform() const
  function VRInput (line 2977) | VRInput& OutputManager::GetVRInput()
  function InputSimulator (line 2982) | InputSimulator& OutputManager::GetInputSimulator()
  function LARGE_INTEGER (line 3001) | const LARGE_INTEGER& OutputManager::GetUpdateLimiterDelay()
  function DUPL_RETURN (line 3242) | DUPL_RETURN OutputManager::ProcessMonoMask(bool is_mono, PTR_INFO& ptr_i...
  function DUPL_RETURN (line 3458) | DUPL_RETURN OutputManager::ProcessMonoMaskFloat16(bool is_mono, PTR_INFO...
  function DUPL_RETURN (line 3741) | DUPL_RETURN OutputManager::MakeRTV()
  function DUPL_RETURN (line 3761) | DUPL_RETURN OutputManager::InitShaders()
  function DUPL_RETURN (line 3805) | DUPL_RETURN OutputManager::CreateTextures(INT SingleOutput, _Out_ UINT* ...
  function DUPL_RETURN (line 4031) | DUPL_RETURN OutputManager::DrawMouseToOverlayTex(_In_ PTR_INFO* PtrInfo)
  function DUPL_RETURN_UPD (line 4230) | DUPL_RETURN_UPD OutputManager::RefreshOpenVROverlayTexture(DPRect& Dirty...

FILE: src/DesktopPlus/OutputManager.h
  function class (line 30) | class OutputManager

FILE: src/DesktopPlus/Overlays.cpp
  function Overlay (line 34) | Overlay& Overlay::operator=(Overlay&& b)
  function DPRect (line 331) | const DPRect& Overlay::GetValidatedCropRect() const
  function OverlayTextureSource (line 417) | OverlayTextureSource Overlay::GetTextureSource() const
  function RadialFollowCore (line 430) | RadialFollowCore& Overlay::GetSmootherPos()
  function RadialFollowCore (line 435) | RadialFollowCore& Overlay::GetSmootherRot()

FILE: src/DesktopPlus/Overlays.h
  type OverlayTextureSource (line 17) | enum OverlayTextureSource
  function class (line 28) | class Overlay

FILE: src/DesktopPlus/RadialFollowSmoothing.cpp
  function Vector2 (line 142) | Vector2 RadialFollowCore::Filter(const Vector2& target)
  function Vector3 (line 158) | Vector3 RadialFollowCore::Filter(const Vector3& target)
  function Vector3 (line 174) | Vector3 RadialFollowCore::FilterWrapped(const Vector3& target, float val...

FILE: src/DesktopPlus/RadialFollowSmoothing.h
  function class (line 12) | class RadialFollowCore

FILE: src/DesktopPlus/SoftwareCursorGrabber.cpp
  function PTR_INFO (line 257) | PTR_INFO& SoftwareCursorGrabber::GetDDPCursorInfo()

FILE: src/DesktopPlus/SoftwareCursorGrabber.h
  function class (line 8) | class SoftwareCursorGrabber

FILE: src/DesktopPlus/ThreadManager.cpp
  function DUPL_RETURN (line 95) | DUPL_RETURN THREADMANAGER::Initialize(INT SingleOutput, UINT OutputCount...
  function DUPL_RETURN (line 155) | DUPL_RETURN THREADMANAGER::InitializeDx(_Out_ DX_RESOURCES* Data, IDXGIA...
  function PTR_INFO (line 241) | PTR_INFO* THREADMANAGER::GetPointerInfo()
  function DPRect (line 246) | DPRect& THREADMANAGER::GetDirtyRegionTotal()

FILE: src/DesktopPlus/ThreadManager.h
  function class (line 6) | class THREADMANAGER

FILE: src/DesktopPlus/VRInput.cpp
  function VRInputScrollMode (line 517) | VRInputScrollMode VRInput::GetLaserPointerScrollMode() const

FILE: src/DesktopPlus/VRInput.h
  type VRInputScrollMode (line 16) | enum VRInputScrollMode
  function class (line 24) | class VRInput

FILE: src/DesktopPlusUI/AuxUI.cpp
  function AuxUIID (line 1297) | AuxUIID AuxUI::GetActiveUI() const
  function WindowDragHint (line 1320) | WindowDragHint& AuxUI::GetDragHintWindow()
  function WindowGazeFadeAutoHint (line 1325) | WindowGazeFadeAutoHint& AuxUI::GetGazeFadeAutoHintWindow()
  function WindowCaptureWindowSelect (line 1330) | WindowCaptureWindowSelect& AuxUI::GetCaptureWindowSelectWindow()
  function WindowQuickStart (line 1335) | WindowQuickStart& AuxUI::GetQuickStartWindow()

FILE: src/DesktopPlusUI/AuxUI.h
  type AuxUIID (line 14) | enum AuxUIID
  function class (line 23) | class AuxUIWindow
  function class (line 50) | class WindowDragHint : public AuxUIWindow
  function class (line 78) | class WindowGazeFadeAutoHint : public AuxUIWindow
  function class (line 98) | class WindowQuickStart : public AuxUIWindow
  function class (line 149) | class WindowCaptureWindowSelect : public AuxUIWindow
  function class (line 168) | class AuxUI

FILE: src/DesktopPlusUI/DesktopPlusUI.cpp
  function WinMain (line 52) | int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevIns...
  function CreateDeviceD3D (line 578) | bool CreateDeviceD3D(HWND hWnd, bool desktop_mode)
  function CleanupDeviceD3D (line 688) | void CleanupDeviceD3D()
  function CreateRenderTarget (line 697) | void CreateRenderTarget(bool desktop_mode)
  function CleanupRenderTarget (line 747) | void CleanupRenderTarget()
  function RefreshOverlayTextureSharing (line 754) | void RefreshOverlayTextureSharing()
  function LRESULT (line 770) | LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
  function InitImGui (line 832) | void InitImGui(HWND hwnd, bool desktop_mode)
  function ProcessCmdline (line 859) | void ProcessCmdline(bool& force_desktop_mode, bool& open_keyboard_editor)

FILE: src/DesktopPlusUI/FloatingUI.cpp
  function WindowFloatingUIMainBar (line 391) | WindowFloatingUIMainBar& FloatingUI::GetMainBarWindow()
  function WindowFloatingUIActionBar (line 396) | WindowFloatingUIActionBar& FloatingUI::GetActionBarWindow()

FILE: src/DesktopPlusUI/FloatingUI.h
  function class (line 8) | class FloatingUI

FILE: src/DesktopPlusUI/FloatingWindow.cpp
  function FloatingWindowOverlayState (line 1477) | FloatingWindowOverlayState& FloatingWindow::GetOverlayState(FloatingWind...
  function FloatingWindowOverlayStateID (line 1488) | FloatingWindowOverlayStateID FloatingWindow::GetOverlayStateCurrentID()
  function Matrix4 (line 1493) | Matrix4& FloatingWindow::GetTransform()
  function ImVec2 (line 1587) | const ImVec2& FloatingWindow::GetPos() const
  function ImVec2 (line 1592) | const ImVec2& FloatingWindow::GetSize() const

FILE: src/DesktopPlusUI/FloatingWindow.h
  type FloatingWindowOverlayStateID (line 9) | enum FloatingWindowOverlayStateID
  type FloatingWindowOverlayState (line 15) | struct FloatingWindowOverlayState
  type FloatingWindowInputOverlayTagsState (line 24) | struct FloatingWindowInputOverlayTagsState
  type FloatingWindowActionOrderListState (line 45) | struct FloatingWindowActionOrderListState
  type FloatingWindowActionAddSelectorState (line 55) | struct FloatingWindowActionAddSelectorState
  function class (line 63) | class FloatingWindow

FILE: src/DesktopPlusUI/ImGuiExt.cpp
  type ImGui (line 20) | namespace ImGui
    function SliderWithButtonsFloat (line 23) | bool SliderWithButtonsFloat(const char* str_id, float& value, float st...
    function SliderWithButtonsInt (line 133) | bool SliderWithButtonsInt(const char* str_id, int& value, int step, in...
    function SliderWithButtonsFloatPercentage (line 229) | bool SliderWithButtonsFloatPercentage(const char* str_id, float& value...
    function ImGuiID (line 258) | ImGuiID SliderWithButtonsGetSliderID(const char* str_id)
    function FixedHelpMarker (line 268) | void FixedHelpMarker(const char* desc, const char* marker_str)
    function ButtonWithWrappedLabel (line 321) | bool ButtonWithWrappedLabel(const char* label, const ImVec2& size)
    function RenderButtonMultilineLabel (line 358) | void RenderButtonMultilineLabel(const char* label, float line_height_s...
    function RenderButtonMultilineLabel (line 364) | void RenderButtonMultilineLabel(const char* label, const ImRect& bb, f...
    function BeginComboWithInputText (line 440) | bool BeginComboWithInputText(const char* str_id, char* str_buffer, siz...
    function ComboWithInputTextActivationCheck (line 492) | void ComboWithInputTextActivationCheck(bool& persist_input_visible)
    function CalcMaxPopupHeightFromItemCount (line 503) | static float CalcMaxPopupHeightFromItemCount(int items_count)
    function BeginComboAnimated (line 511) | bool BeginComboAnimated(const char* label, const char* preview_value, ...
    function TextRight (line 760) | void TextRight(float offset_x, float fixed_w, const char* fmt, ...)
    function TextRightV (line 768) | void TextRightV(float offset_x, float fixed_w, const char* fmt, va_lis...
    function TextRightUnformatted (line 781) | void TextRightUnformatted(float offset_x, float fixed_w, const char* t...
    function TextColoredUnformatted (line 794) | void TextColoredUnformatted(const ImVec4& col, const char* text, const...
    function TextOutlined (line 801) | void TextOutlined(const char* fmt, ...)
    function TextOutlinedV (line 809) | void TextOutlinedV(const char* fmt, va_list args)
    function TextUnformattedOutlined (line 820) | void TextUnformattedOutlined(const char* text, const char* text_end)
    function TextRightOutlined (line 894) | void TextRightOutlined(float offset_x, float fixed_w, const char* fmt,...
    function TextRightOutlinedV (line 902) | void TextRightOutlinedV(float offset_x, float fixed_w, const char* fmt...
    function TextRightUnformattedOutlined (line 913) | void TextRightUnformattedOutlined(float offset_x, float fixed_w, const...
    function RenderTextClippedUnclamped (line 926) | void RenderTextClippedUnclamped(const ImVec2& pos_min, const ImVec2& p...
    function RenderTextClippedUnclampedEx (line 942) | void RenderTextClippedUnclampedEx(ImDrawList* draw_list, const ImVec2&...
    function BeginStretched (line 972) | void BeginStretched()
    function EndStretched (line 977) | void EndStretched(float scale_x)
    function ColorPicker4Simple (line 989) | bool ColorPicker4Simple(const char* str_id, float col[4], float ref_co...
    function CollapsingHeaderPadded (line 1094) | bool CollapsingHeaderPadded(const char* label, ImGuiTreeNodeFlags flags)
    type CollapsingAreaState (line 1109) | struct CollapsingAreaState
    function BeginCollapsingArea (line 1119) | void BeginCollapsingArea(const char* str_id, bool show_content, float&...
    function EndCollapsingArea (line 1154) | void EndCollapsingArea()
    function PushItemDisabled (line 1176) | void PushItemDisabled()
    function PopItemDisabled (line 1183) | void PopItemDisabled()
    function PushItemDisabledNoVisual (line 1189) | void PushItemDisabledNoVisual()
    function PopItemDisabledNoVisual (line 1194) | void PopItemDisabledNoVisual()
    function ConfigDisableCtrlTab (line 1199) | void ConfigDisableCtrlTab()
    function PopupContextMenuInputText (line 1205) | bool PopupContextMenuInputText(const char* str_id, char* str_buffer, s...
    function ImGuiKey (line 1249) | ImGuiKey MapNavToKey(ImGuiNavInput nav_input, ImGuiInputSource input_s...
    function IsNavInputDown (line 1289) | bool IsNavInputDown(ImGuiNavInput nav_input)
    function SetPreviousLineHeight (line 1309) | void SetPreviousLineHeight(float height)
    function HasHoveredNewItem (line 1314) | bool HasHoveredNewItem()
    function IsAnyItemActiveOrDeactivated (line 1322) | bool IsAnyItemActiveOrDeactivated()
    function IsAnyItemDeactivated (line 1328) | bool IsAnyItemDeactivated()
    function IsAnyInputTextActive (line 1334) | bool IsAnyInputTextActive()
    function IsAnyTempInputTextActive (line 1340) | bool IsAnyTempInputTextActive()
    function IsAnyMouseClicked (line 1346) | bool IsAnyMouseClicked()
    function BlockWidgetInput (line 1355) | void BlockWidgetInput()
    function HScrollWindowFromMouseWheelV (line 1366) | void HScrollWindowFromMouseWheelV()
    function ScrollBeginStackParentWindow (line 1386) | void ScrollBeginStackParentWindow()
    function IsAnyScrollBarVisible (line 1416) | bool IsAnyScrollBarVisible()
    function ImVec4 (line 1422) | ImVec4 BeginTitleBar()
    function EndTitleBar (line 1434) | void EndTitleBar()
    function StringContainsUnmappedCharacter (line 1443) | bool StringContainsUnmappedCharacter(const char* str)
    function StringEllipsis (line 1473) | std::string StringEllipsis(const char* str, float width_max)
    function DraggableRectArea (line 1514) | bool DraggableRectArea(const char* str_id, const ImVec2& area_size, Im...

FILE: src/DesktopPlusUI/ImGuiExt.h
  type ImGuiNavInput (line 19) | enum ImGuiNavInput
  type IMGUI_API (line 49) | struct IMGUI_API
  function namespace (line 51) | namespace ImGui

FILE: src/DesktopPlusUI/NotificationIcon.cpp
  function LRESULT (line 18) | LRESULT __stdcall NotificationIcon::WndProc(HWND hWnd, UINT msg, WPARAM ...

FILE: src/DesktopPlusUI/NotificationIcon.h
  function class (line 10) | class NotificationIcon

FILE: src/DesktopPlusUI/TextureManager.cpp
  type Gdiplus (line 9) | namespace Gdiplus
  function TextureManager (line 94) | TextureManager& TextureManager::Get()
  type ActionIconTextureData (line 329) | struct ActionIconTextureData
  function wchar_t (line 567) | const wchar_t* TextureManager::GetTextureFilename(TMNGRTexID texid) const
  function TMNGRTexID (line 806) | TMNGRTexID TextureManager::GetOverlayIconTextureID(const OverlayConfigDa...

FILE: src/DesktopPlusUI/TextureManager.h
  type Action (line 16) | struct Action
  type TMNGRTexID (line 18) | enum TMNGRTexID
  type TMNGRWindowIcon (line 79) | struct TMNGRWindowIcon
  function class (line 90) | class TextureManager

FILE: src/DesktopPlusUI/TranslationManager.cpp
  function TranslationManager (line 700) | TranslationManager& TranslationManager::Get()
  function TRMGRStrID (line 710) | TRMGRStrID TranslationManager::GetStringID(const char* str)

FILE: src/DesktopPlusUI/TranslationManager.h
  type TRMGRStrID (line 8) | enum TRMGRStrID
  function class (line 689) | class TranslationManager

FILE: src/DesktopPlusUI/UIManager.cpp
  function UITextureSpaces (line 23) | UITextureSpaces& UITextureSpaces::Get()
  function DPRect (line 89) | const DPRect& UITextureSpaces::GetRect(UITexspaceID texspace_id) const
  function ImVec4 (line 94) | ImVec4 UITextureSpaces::GetRectAsVec4(UITexspaceID texspace_id) const
  function UITexspaceID (line 401) | UITexspaceID UIManager::GetTexspaceIDForOverlayHandle(vr::VROverlayHandl...
  function UIManager (line 445) | UIManager* UIManager::Get()
  function FloatingUI (line 1169) | FloatingUI& UIManager::GetFloatingUI()
  function VRKeyboard (line 1174) | VRKeyboard& UIManager::GetVRKeyboard()
  function AuxUI (line 1179) | AuxUI& UIManager::GetAuxUI()
  function WindowOverlayBar (line 1184) | WindowOverlayBar& UIManager::GetOverlayBarWindow()
  function WindowSettings (line 1189) | WindowSettings& UIManager::GetSettingsWindow()
  function WindowOverlayProperties (line 1194) | WindowOverlayProperties& UIManager::GetOverlayPropertiesWindow()
  function WindowPerformance (line 1199) | WindowPerformance& UIManager::GetPerformanceWindow()
  function WindowDesktopMode (line 1204) | WindowDesktopMode& UIManager::GetDesktopModeWindow()
  function HWND (line 1218) | HWND UIManager::GetWindowHandle() const
  function NotificationIcon (line 1223) | NotificationIcon& UIManager::GetNotificationIcon()
  function ID3D11Resource (line 1233) | ID3D11Resource* UIManager::GetSharedTextureRef() const
  function OverlayDragger (line 1238) | OverlayDragger& UIManager::GetOverlayDragger()
  function DPRect (line 1319) | DPRect UIManager::CalcRectForActiveTexspace()
  function ImFont (line 1683) | ImFont* UIManager::GetFontCompact() const
  function ImFont (line 1688) | ImFont* UIManager::GetFontLarge() const
  function HRESULT (line 1908) | HRESULT UIManager::GetWinRTErrorLast() const
  function Matrix4 (line 2428) | Matrix4 UIManager::GetOverlay2DPointTransform(Vector2 point_2d, vr::VROv...

FILE: src/DesktopPlusUI/UIManager.h
  type UITexspaceID (line 38) | enum UITexspaceID
  function class (line 51) | class UITextureSpaces
  function class (line 67) | class UIManager

FILE: src/DesktopPlusUI/VRKeyboard.cpp
  function WindowKeyboard (line 57) | WindowKeyboard& VRKeyboard::GetWindow()
  function KeyboardEditor (line 62) | KeyboardEditor& VRKeyboard::GetEditor()
  function KeyboardLayoutMetadata (line 408) | const KeyboardLayoutMetadata& VRKeyboard::GetLayoutMetadata() const
  function KeyboardInputTarget (line 433) | KeyboardInputTarget VRKeyboard::GetInputTarget() const
  function KeyboardLayoutMetadata (line 856) | KeyboardLayoutMetadata VRKeyboard::LoadLayoutMetadataFromFile(const std:...

FILE: src/DesktopPlusUI/VRKeyboard.h
  function class (line 11) | class VRKeyboard

FILE: src/DesktopPlusUI/VRKeyboardCommon.h
  type KeyboardLayoutSubLayout (line 6) | enum KeyboardLayoutSubLayout : unsigned char
  type KeyboardLayoutKeyType (line 15) | enum KeyboardLayoutKeyType
  type KeyboardLayoutCluster (line 27) | enum KeyboardLayoutCluster
  type KeyboardLayoutMetadata (line 37) | struct KeyboardLayoutMetadata
  type KeyboardLayoutKey (line 46) | struct KeyboardLayoutKey
  type KeyboardInputTarget (line 64) | enum KeyboardInputTarget

FILE: src/DesktopPlusUI/Win32PerformanceData.cpp
  function LUID (line 7) | LUID Win32PerformanceData::GetLUIDFromFormattedCounterNameString(const s...

FILE: src/DesktopPlusUI/Win32PerformanceData.h
  function class (line 8) | class Win32PerformanceData

FILE: src/DesktopPlusUI/WindowDesktopMode.cpp
  function ImVec4 (line 912) | ImVec4 WindowDesktopMode::GetTitleBarRect() const

FILE: src/DesktopPlusUI/WindowDesktopMode.h
  type WindowDesktopModePage (line 8) | enum WindowDesktopModePage
  function class (line 21) | class FloatingWindowDesktopModeInterop
  function class (line 32) | class WindowDesktopMode

FILE: src/DesktopPlusUI/WindowFloatingUIBar.cpp
  function ImVec2 (line 395) | const ImVec2& WindowFloatingUIMainBar::GetPos() const
  function ImVec2 (line 400) | const ImVec2& WindowFloatingUIMainBar::GetSize() const
  function ImVec2 (line 782) | const ImVec2& WindowFloatingUIActionBar::GetPos() const
  function ImVec2 (line 787) | const ImVec2& WindowFloatingUIActionBar::GetSize() const
  function ImVec2 (line 942) | ImVec2 WindowFloatingUIOverlayStats::CalcPos(const WindowFloatingUIMainB...

FILE: src/DesktopPlusUI/WindowFloatingUIBar.h
  type Action (line 5) | struct Action
  function ImVec2 (line 56) | const ImVec2& GetPos() const;

FILE: src/DesktopPlusUI/WindowKeyboard.cpp
  function LaserInputState (line 1113) | LaserInputState& WindowKeyboard::GetLaserInputState(vr::TrackedDeviceInd...

FILE: src/DesktopPlusUI/WindowKeyboard.h
  type LaserInputState (line 7) | struct LaserInputState
  type ButtonLaserState (line 14) | struct ButtonLaserState
  type KeyboardLayoutSubLayout (line 25) | enum KeyboardLayoutSubLayout : unsigned char
  function class (line 27) | class WindowKeyboard : public FloatingWindow

FILE: src/DesktopPlusUI/WindowKeyboardEditor.h
  function class (line 6) | class KeyboardEditor

FILE: src/DesktopPlusUI/WindowOverlayBar.cpp
  type OverlayButtonState (line 93) | struct OverlayButtonState
  function ImVec2 (line 1004) | const ImVec2 & WindowOverlayBar::GetPos() const
  function ImVec2 (line 1009) | const ImVec2 & WindowOverlayBar::GetSize() const

FILE: src/DesktopPlusUI/WindowOverlayBar.h
  function class (line 9) | class WindowOverlayBar

FILE: src/DesktopPlusUI/WindowOverlayProperties.h
  type WindowOverlayPropertiesPage (line 6) | enum WindowOverlayPropertiesPage

FILE: src/DesktopPlusUI/WindowPerformance.cpp
  function Win32PerformanceData (line 1831) | Win32PerformanceData& WindowPerformance::GetPerformanceData()
  function ImVec2 (line 1841) | const ImVec2 & WindowPerformance::GetPos() const
  function ImVec2 (line 1846) | const ImVec2 & WindowPerformance::GetSize() const

FILE: src/DesktopPlusUI/WindowPerformance.h
  function AddFrame (line 24) | void AddFrame(float frame_number, float ms)
  function Erase (line 37) | void Erase()
  type TrackerInfo (line 47) | struct TrackerInfo
  function class (line 55) | class WindowPerformance

FILE: src/DesktopPlusUI/WindowSettings.cpp
  type CommandUIState (line 4008) | struct CommandUIState
  type app_sublist_entry (line 6270) | struct app_sublist_entry

FILE: src/DesktopPlusUI/WindowSettings.h
  type WindowSettingsPage (line 6) | enum WindowSettingsPage

FILE: src/DesktopPlusUI/imgui/imgui.cpp
  type ImGui (line 1216) | namespace ImGui
  function FreeWrapper (line 1312) | static void    FreeWrapper(void* ptr, void* user_data)        { IM_UNUSE...
  function FreeWrapper (line 1315) | static void    FreeWrapper(void* ptr, void* user_data)        { IM_UNUSE...
  function ImGuiInputEvent (line 1622) | static ImGuiInputEvent* FindLatestInputEvent(ImGuiContext* ctx, ImGuiInp...
  function ImVec2 (line 1846) | ImVec2 ImBezierCubicClosestPoint(const ImVec2& p1, const ImVec2& p2, con...
  function ImBezierCubicClosestPointCasteljauStep (line 1869) | static void ImBezierCubicClosestPointCasteljauStep(const ImVec2& p, ImVe...
  function ImVec2 (line 1904) | ImVec2 ImBezierCubicClosestPointCasteljau(const ImVec2& p1, const ImVec2...
  function ImVec2 (line 1914) | ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2...
  function ImTriangleContainsPoint (line 1927) | bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImV...
  function ImTriangleBarycentricCoords (line 1935) | void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const...
  function ImVec2 (line 1946) | ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const Im...
  function ImStricmp (line 1967) | int ImStricmp(const char* str1, const char* str2)
  function ImStrnicmp (line 1974) | int ImStrnicmp(const char* str1, const char* str2, size_t count)
  function ImStrncpy (line 1981) | void ImStrncpy(char* dst, const char* src, size_t count)
  function ImStrlenW (line 2017) | int ImStrlenW(const ImWchar* str)
  function ImStrTrimBlanks (line 2063) | void ImStrTrimBlanks(char* buf)
  function ImFormatString (line 2109) | int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...)
  function ImFormatStringV (line 2127) | int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list...
  function ImFormatStringToTempBuffer (line 2143) | void ImFormatStringToTempBuffer(const char** out_buf, const char** out_b...
  function ImFormatStringToTempBufferV (line 2155) | void ImFormatStringToTempBufferV(const char** out_buf, const char** out_...
  function ImGuiID (line 2235) | ImGuiID ImHashData(const void* data_p, size_t data_size, ImGuiID seed)
  function ImGuiID (line 2263) | ImGuiID ImHashStr(const char* data_p, size_t data_size, ImGuiID seed)
  function ImFileHandle (line 2308) | ImFileHandle ImFileOpen(const char* filename, const char* mode)
  function ImFileClose (line 2333) | bool    ImFileClose(ImFileHandle f)     { return fclose(f) == 0; }
  function ImU64 (line 2334) | ImU64   ImFileGetSize(ImFileHandle f)   { long off = 0, sz = 0; return (...
  function ImU64 (line 2335) | ImU64   ImFileRead(void* data, ImU64 sz, ImU64 count, ImFileHandle f)   ...
  function ImU64 (line 2336) | ImU64   ImFileWrite(const void* data, ImU64 sz, ImU64 count, ImFileHandl...
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 2385) | IM_MSVC_RUNTIME_CHECKS_OFF
  function ImTextStrFromUtf8 (line 2442) | int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, c...
  function ImTextCountCharsFromUtf8 (line 2458) | int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end)
  function ImTextCharToUtf8_inline (line 2471) | static inline int ImTextCharToUtf8_inline(char* buf, int buf_size, unsig...
  function ImTextCountUtf8BytesFromChar (line 2514) | int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_tex...
  function ImTextCountUtf8BytesFromChar (line 2520) | static inline int ImTextCountUtf8BytesFromChar(unsigned int c)
  function ImTextStrToUtf8 (line 2529) | int ImTextStrToUtf8(char* out_buf, int out_buf_size, const ImWchar* in_t...
  function ImTextCountUtf8BytesFromStr (line 2545) | int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* i...
  function ImTextCountLines (line 2570) | int ImTextCountLines(const char* in_text, const char* in_text_end)
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 2584) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  function ImVec4 (line 2600) | ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
  function ImU32 (line 2610) | ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
  function ImGuiStoragePair (line 2677) | ImGuiStoragePair* ImLowerBound(ImGuiStoragePair* in_begin, ImGuiStorageP...
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 2697) | IM_MSVC_RUNTIME_CHECKS_OFF
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 2809) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  function GetSkipItemForListClipping (line 2997) | static bool GetSkipItemForListClipping()
  function ImGuiListClipper_SortAndFuseRanges (line 3003) | static void ImGuiListClipper_SortAndFuseRanges(ImVector<ImGuiListClipper...
  function ImGuiListClipper_SeekCursorAndSetupPrevLine (line 3027) | static void ImGuiListClipper_SeekCursorAndSetupPrevLine(float pos_y, flo...
  function ImGuiListClipper_StepInternal (line 3134) | static bool ImGuiListClipper_StepInternal(ImGuiListClipper* clipper)
  function ImGuiStyle (line 3308) | ImGuiStyle& ImGui::GetStyle()
  function ImU32 (line 3314) | ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
  function ImU32 (line 3322) | ImU32 ImGui::GetColorU32(const ImVec4& col)
  function ImVec4 (line 3330) | const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
  function ImU32 (line 3336) | ImU32 ImGui::GetColorU32(ImU32 col, float alpha_mul)
  function ImGuiStyleVarInfo (line 3425) | const ImGuiStyleVarInfo* ImGui::GetStyleVarInfo(ImGuiStyleVar idx)
  function ImGuiContext (line 3844) | ImGuiContext* ImGui::GetCurrentContext()
  function ImGuiContext (line 3873) | ImGuiContext* ImGui::CreateContext(ImFontAtlas* shared_font_atlas)
  function ImGuiID (line 4261) | ImGuiID ImGui::AddContextHook(ImGuiContext* ctx, const ImGuiContextHook*...
  function SetCurrentWindow (line 4328) | static void SetCurrentWindow(ImGuiWindow* window)
  function ImGuiID (line 4457) | ImGuiID ImGui::GetHoveredID()
  function CalcDelayFromHoveredFlags (line 4512) | static inline float CalcDelayFromHoveredFlags(ImGuiHoveredFlags flags)
  function ImGuiHoveredFlags (line 4522) | static ImGuiHoveredFlags ApplyHoverFlagsForTooltip(ImGuiHoveredFlags use...
  function ImGuiIO (line 4842) | ImGuiIO& ImGui::GetIO()
  function ImGuiIO (line 4849) | ImGuiIO& ImGui::GetIO(ImGuiContext* ctx)
  function ImGuiPlatformIO (line 4855) | ImGuiPlatformIO& ImGui::GetPlatformIO()
  function ImGuiPlatformIO (line 4862) | ImGuiPlatformIO& ImGui::GetPlatformIO(ImGuiContext* ctx)
  function ImDrawData (line 4869) | ImDrawData* ImGui::GetDrawData()
  function ImDrawList (line 4886) | static ImDrawList* GetViewportBgFgDrawList(ImGuiViewportP* viewport, siz...
  function ImDrawList (line 4910) | ImDrawList* ImGui::GetBackgroundDrawList(ImGuiViewport* viewport)
  function ImDrawList (line 4915) | ImDrawList* ImGui::GetBackgroundDrawList()
  function ImDrawList (line 4921) | ImDrawList* ImGui::GetForegroundDrawList(ImGuiViewport* viewport)
  function ImDrawList (line 4926) | ImDrawList* ImGui::GetForegroundDrawList()
  function ImDrawListSharedData (line 4932) | ImDrawListSharedData* ImGui::GetDrawListSharedData()
  function IsWindowActiveAndVisible (line 5054) | static bool IsWindowActiveAndVisible(ImGuiWindow* window)
  function SetupDrawListSharedData (line 5146) | static void SetupDrawListSharedData()
  function AddWindowToSortBuffer (line 5444) | static void AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_win...
  function AddWindowToDrawData (line 5460) | static void AddWindowToDrawData(ImGuiWindow* window, int layer)
  function GetWindowDisplayLayer (line 5473) | static inline int GetWindowDisplayLayer(ImGuiWindow* window)
  function AddRootWindowToDrawData (line 5479) | static inline void AddRootWindowToDrawData(ImGuiWindow* window)
  function FlattenDrawDataIntoSingleLayer (line 5484) | static void FlattenDrawDataIntoSingleLayer(ImDrawDataBuilder* builder)
  function InitViewportDrawData (line 5502) | static void InitViewportDrawData(ImGuiViewportP* viewport)
  function ImGuiWindow (line 5570) | ImGuiWindow* ImGui::FindBottomMostVisibleWindowWithinBeginStack(ImGuiWin...
  function ImVec2 (line 5789) | ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool ...
  function ImGuiID (line 6008) | ImGuiID ImGui::GetItemID()
  function ImVec2 (line 6014) | ImVec2 ImGui::GetItemRectMin()
  function ImVec2 (line 6020) | ImVec2 ImGui::GetItemRectMax()
  function ImVec2 (line 6026) | ImVec2 ImGui::GetItemRectSize()
  function SetWindowConditionAllowFlags (line 6225) | static void SetWindowConditionAllowFlags(ImGuiWindow* window, ImGuiCond ...
  function ImGuiWindow (line 6232) | ImGuiWindow* ImGui::FindWindowByID(ImGuiID id)
  function ImGuiWindow (line 6238) | ImGuiWindow* ImGui::FindWindowByName(const char* name)
  function ApplyWindowSettings (line 6244) | static void ApplyWindowSettings(ImGuiWindow* window, ImGuiWindowSettings...
  function InitOrLoadWindowSettings (line 6252) | static void InitOrLoadWindowSettings(ImGuiWindow* window, ImGuiWindowSet...
  function ImGuiWindow (line 6283) | static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags f...
  function ImVec2 (line 6307) | static inline ImVec2 CalcWindowMinSize(ImGuiWindow* window)
  function ImVec2 (line 6331) | static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, const I...
  function CalcWindowContentSizes (line 6360) | static void CalcWindowContentSizes(ImGuiWindow* window, ImVec2* content_...
  function ImVec2 (line 6380) | static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& s...
  function ImVec2 (line 6421) | ImVec2 ImGui::CalcWindowNextAutoFitSize(ImGuiWindow* window)
  function ImGuiCol (line 6431) | static ImGuiCol GetWindowBgColorIdx(ImGuiWindow* window)
  function CalcResizePosSizeFromAnyCorner (line 6440) | static void CalcResizePosSizeFromAnyCorner(ImGuiWindow* window, const Im...
  type ImGuiResizeGripDef (line 6455) | struct ImGuiResizeGripDef
  type ImGuiResizeBorderDef (line 6470) | struct ImGuiResizeBorderDef
  function ImRect (line 6484) | static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, flo...
  function ImGuiID (line 6498) | ImGuiID ImGui::GetWindowResizeCornerID(ImGuiWindow* window, int n)
  function ImGuiID (line 6508) | ImGuiID ImGui::GetWindowResizeBorderID(ImGuiWindow* window, ImGuiDir dir)
  function ClampWindowPos (line 6733) | static inline void ClampWindowPos(ImGuiWindow* window, const ImRect& vis...
  function RenderWindowOuterSingleBorder (line 6742) | static void RenderWindowOuterSingleBorder(ImGuiWindow* window, int borde...
  function SetWindowActiveForSkipRefresh (line 7003) | static void SetWindowActiveForSkipRefresh(ImGuiWindow* window)
  function ImGuiWindow (line 8012) | static ImGuiWindow* GetCombinedRootWindow(ImGuiWindow* window, bool popu...
  function ImVec2 (line 8135) | ImVec2 ImGui::GetWindowPos()
  function ImVec2 (line 8177) | ImVec2 ImGui::GetWindowSize()
  function ImDrawList (line 8342) | ImDrawList* ImGui::GetWindowDrawList()
  function ImFont (line 8348) | ImFont* ImGui::GetFont()
  function ImVec2 (line 8358) | ImVec2 ImGui::GetFontTexUvWhitePixel()
  function ImGuiStorage (line 8507) | ImGuiStorage* ImGui::GetStateStorage()
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 8531) | IM_MSVC_RUNTIME_CHECKS_OFF
  function ImGuiID (line 8544) | ImGuiID ImGuiWindow::GetID(const void* ptr)
  function ImGuiID (line 8556) | ImGuiID ImGuiWindow::GetID(int n)
  function ImGuiID (line 8570) | ImGuiID ImGuiWindow::GetIDFromPos(const ImVec2& p_abs)
  function ImGuiID (line 8579) | ImGuiID ImGuiWindow::GetIDFromRectangle(const ImRect& r_abs)
  function ImGuiID (line 8634) | ImGuiID ImGui::GetIDWithSeed(const char* str, const char* str_end, ImGui...
  function ImGuiID (line 8645) | ImGuiID ImGui::GetIDWithSeed(int n, ImGuiID seed)
  function ImGuiID (line 8667) | ImGuiID ImGui::GetID(const char* str_id)
  function ImGuiID (line 8673) | ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end)
  function ImGuiID (line 8679) | ImGuiID ImGui::GetID(const void* ptr_id)
  function ImGuiID (line 8685) | ImGuiID ImGui::GetID(int int_id)
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 8690) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  function ImGuiKeyChord (line 8771) | ImGuiKeyChord ImGui::FixupKeyChord(ImGuiKeyChord key_chord)
  function ImGuiKeyData (line 8780) | ImGuiKeyData* ImGui::GetKeyData(ImGuiContext* ctx, ImGuiKey key)
  function ImVec2 (line 8896) | ImVec2 ImGui::GetKeyMagnitude2d(ImGuiKey key_left, ImGuiKey key_right, I...
  function ImGuiID (line 8948) | static inline ImGuiID GetRoutingIdFromOwnerId(ImGuiID owner_id)
  function ImGuiKeyRoutingData (line 8954) | ImGuiKeyRoutingData* ImGui::GetShortcutRoutingData(ImGuiKeyChord key_chord)
  function CalcRoutingScore (line 8998) | static int CalcRoutingScore(ImGuiID focus_scope_id, ImGuiID owner_id, Im...
  function IsKeyChordPotentiallyCharInput (line 9043) | static bool IsKeyChordPotentiallyCharInput(ImGuiKeyChord key_chord)
  function ImVec2 (line 9361) | ImVec2 ImGui::GetMousePos()
  function ImVec2 (line 9379) | ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup()
  function ImVec2 (line 9411) | ImVec2 ImGui::GetMouseDragDelta(ImGuiMouseButton button, float lock_thre...
  function ImGuiMouseCursor (line 9436) | ImGuiMouseCursor ImGui::GetMouseCursor()
  function UpdateAliasKey (line 9451) | static void UpdateAliasKey(ImGuiKey key, bool v, float analog_value)
  function ImGuiKeyChord (line 9460) | static ImGuiKeyChord GetMergedModsFromKeys()
  function LockWheelingWindow (line 9613) | static void LockWheelingWindow(ImGuiWindow* window, float wheel_amount)
  function ImGuiWindow (line 9632) | static ImGuiWindow* FindBestWheelingWindow(const ImVec2& wheel)
  function DebugPrintInputEvent (line 9785) | static void DebugPrintInputEvent(const char* prefix, const ImGuiInputEve...
  function ImGuiID (line 9933) | ImGuiID ImGui::GetKeyOwner(ImGuiKey key)
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 10572) | IM_MSVC_RUNTIME_CHECKS_OFF
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 10660) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 10731) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  function ImVec2 (line 10764) | ImVec2 ImGui::GetCursorScreenPos()
  function ImVec2 (line 10780) | ImVec2 ImGui::GetCursorPos()
  function ImVec2 (line 10822) | ImVec2 ImGui::GetCursorStartPos()
  function ImVec2 (line 10918) | ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h)
  function ImVec2 (line 10961) | ImVec2 ImGui::GetContentRegionAvail()
  function ImVec2 (line 10973) | ImVec2 ImGui::GetContentRegionMax()
  function ImVec2 (line 10978) | ImVec2 ImGui::GetWindowContentRegionMin()
  function ImVec2 (line 10984) | ImVec2 ImGui::GetWindowContentRegionMax()
  function CalcScrollEdgeSnap (line 11098) | static float CalcScrollEdgeSnap(float target, float snap_min, float snap...
  function ImVec2 (line 11107) | static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window)
  function ImVec2 (line 11145) | ImVec2 ImGui::ScrollToRectEx(ImGuiWindow* window, const ImRect& item_rec...
  function ImGuiWindow (line 11479) | ImGuiWindow* ImGui::GetTopMostPopupModal()
  function ImGuiWindow (line 11490) | ImGuiWindow* ImGui::GetTopMostAndVisiblePopupModal()
  function ImGuiWindow (line 11514) | ImGuiWindow* ImGui::FindBlockingModal(ImGuiWindow* window)
  function ImVec2 (line 11914) | ImVec2 ImGui::FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const I...
  function ImRect (line 11989) | ImRect ImGui::GetPopupAllowedExtentRect(ImGuiWindow* window)
  function ImVec2 (line 11999) | ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window)
  function ImGuiDir (line 12417) | static ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy)
  function NavScoreItemDistInterval (line 12424) | static float inline NavScoreItemDistInterval(float cand_min, float cand_...
  function ImGuiWindow (line 12843) | static ImGuiWindow* ImGui::NavRestoreLastChildNavWindow(ImGuiWindow* win...
  function ImGuiInputSource (line 12913) | static ImGuiInputSource ImGui::NavCalcPreferredRefPosSource()
  function ImVec2 (line 12926) | static ImVec2 ImGui::NavCalcPreferredRefPos()
  function NavBiasScoringRect (line 13190) | static void NavBiasScoringRect(ImRect& r, ImVec2& preferred_pos_rel, ImG...
  function ImGuiWindow (line 13686) | static ImGuiWindow* FindWindowNavFocusable(int i_start, int i_stop, int ...
  function NavUpdateWindowingTarget (line 13695) | static void NavUpdateWindowingTarget(int focus_change_dir)
  function ImGuiPayload (line 14255) | const ImGuiPayload* ImGui::AcceptDragDropPayload(const char* type, ImGui...
  function ImGuiPayload (line 14312) | const ImGuiPayload* ImGui::GetDragDropPayload()
  function LogTextV (line 14338) | static inline void LogTextV(ImGuiContext& g, const char* fmt, va_list args)
  function ImGuiSettingsHandler (line 14654) | ImGuiSettingsHandler* ImGui::FindSettingsHandler(const char* type_name)
  function ImGuiWindowSettings (line 14787) | ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
  function ImGuiWindowSettings (line 14812) | ImGuiWindowSettings* ImGui::FindWindowSettingsByID(ImGuiID id)
  function ImGuiWindowSettings (line 14822) | ImGuiWindowSettings* ImGui::FindWindowSettingsByWindow(ImGuiWindow* window)
  function WindowSettingsHandler_ClearAll (line 14844) | static void WindowSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSetti...
  function WindowSettingsHandler_ReadLine (line 14865) | static void WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsH...
  function WindowSettingsHandler_ApplyAll (line 14877) | static void WindowSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSetti...
  function WindowSettingsHandler_WriteAll (line 14889) | static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSetti...
  function ImGuiViewport (line 14958) | ImGuiViewport* ImGui::GetMainViewport()
  function ScaleWindow (line 14969) | static void ScaleWindow(ImGuiWindow* window, float scale)
  function Platform_SetClipboardTextFn_DefaultImpl (line 15058) | static void Platform_SetClipboardTextFn_DefaultImpl(ImGuiContext*, const...
  function Platform_SetClipboardTextFn_DefaultImpl (line 15085) | static void Platform_SetClipboardTextFn_DefaultImpl(ImGuiContext*, const...
  function Platform_SetClipboardTextFn_DefaultImpl (line 15140) | static void Platform_SetClipboardTextFn_DefaultImpl(ImGuiContext* ctx, c...
  function Platform_OpenInShellFn_DefaultImpl (line 15172) | static bool Platform_OpenInShellFn_DefaultImpl(ImGuiContext*, const char...
  function Platform_OpenInShellFn_DefaultImpl (line 15183) | static bool Platform_OpenInShellFn_DefaultImpl(ImGuiContext*, const char...
  function Platform_OpenInShellFn_DefaultImpl (line 15207) | static bool Platform_OpenInShellFn_DefaultImpl(ImGuiContext*, const char...
  function Platform_SetImeDataFn_DefaultImpl (line 15220) | static void Platform_SetImeDataFn_DefaultImpl(ImGuiContext*, ImGuiViewpo...
  function Platform_SetImeDataFn_DefaultImpl (line 15246) | static void Platform_SetImeDataFn_DefaultImpl(ImGuiContext*, ImGuiViewpo...
  function RenderViewportsThumbnails (line 15306) | static void RenderViewportsThumbnails()
  type KeyLayoutData (line 15342) | struct KeyLayoutData { int Row, Col; const char* Label; ImGuiKey Key; }
  function DebugFlashStyleColorStop (line 15411) | static void DebugFlashStyleColorStop()
  function MetricsHelpMarker (line 15452) | static void MetricsHelpMarker(const char* desc)
  type Funcs (line 15526) | struct Funcs
    method ImRect (line 15528) | static ImRect GetTableRect(ImGuiTable* table, int rect_type, int n)
    method ImRect (line 15548) | static ImRect GetWindowRect(ImGuiWindow* window, int rect_type)
  type Func (line 15683) | struct Func { static int IMGUI_CDECL WindowComparerByBeginOrder(const vo...
    method WindowComparerByBeginOrder (line 15683) | WindowComparerByBeginOrder(const void* lhs, const void* rhs) { return ...
  function SameLineOrWrap (line 16597) | static void SameLineOrWrap(const ImVec2& size)
  function ShowDebugLogFlag (line 16606) | static void ShowDebugLogFlag(const char* name, ImGuiDebugLogFlags flags)
  function StackToolFormatLevelInfo (line 16933) | static int StackToolFormatLevelInfo(ImGuiIDStackTool* tool, int n, bool ...

FILE: src/DesktopPlusUI/imgui/imgui.h
  type ImGuiID (line 152) | typedef unsigned int        ImGuiID;
  type ImS8 (line 153) | typedef signed char         ImS8;
  type ImU8 (line 154) | typedef unsigned char       ImU8;
  type ImS16 (line 155) | typedef signed short        ImS16;
  type ImU16 (line 156) | typedef unsigned short      ImU16;
  type ImS32 (line 157) | typedef signed int          ImS32;
  type ImU32 (line 158) | typedef unsigned int        ImU32;
  type ImS64 (line 159) | typedef signed   long long  ImS64;
  type ImU64 (line 160) | typedef unsigned long long  ImU64;
  type ImDrawChannel (line 163) | struct ImDrawChannel
  type ImDrawCmd (line 164) | struct ImDrawCmd
  type ImDrawData (line 165) | struct ImDrawData
  type ImDrawList (line 166) | struct ImDrawList
  type ImDrawListSharedData (line 167) | struct ImDrawListSharedData
  type ImDrawListSplitter (line 168) | struct ImDrawListSplitter
  type ImDrawVert (line 169) | struct ImDrawVert
  type ImFont (line 170) | struct ImFont
  type ImFontAtlas (line 171) | struct ImFontAtlas
  type ImFontBuilderIO (line 172) | struct ImFontBuilderIO
  type ImFontConfig (line 173) | struct ImFontConfig
  type ImFontGlyph (line 174) | struct ImFontGlyph
  type ImFontGlyphRangesBuilder (line 175) | struct ImFontGlyphRangesBuilder
  type ImColor (line 176) | struct ImColor
  type ImGuiContext (line 179) | struct ImGuiContext
  type ImGuiIO (line 180) | struct ImGuiIO
  type ImGuiInputTextCallbackData (line 181) | struct ImGuiInputTextCallbackData
  type ImGuiKeyData (line 182) | struct ImGuiKeyData
  type ImGuiListClipper (line 183) | struct ImGuiListClipper
  type ImGuiMultiSelectIO (line 184) | struct ImGuiMultiSelectIO
  type ImGuiOnceUponAFrame (line 185) | struct ImGuiOnceUponAFrame
  type ImGuiPayload (line 186) | struct ImGuiPayload
  type ImGuiPlatformIO (line 187) | struct ImGuiPlatformIO
  type ImGuiPlatformImeData (line 188) | struct ImGuiPlatformImeData
  type ImGuiSelectionBasicStorage (line 189) | struct ImGuiSelectionBasicStorage
  type ImGuiSelectionExternalStorage (line 190) | struct ImGuiSelectionExternalStorage
  type ImGuiSelectionRequest (line 191) | struct ImGuiSelectionRequest
  type ImGuiSizeCallbackData (line 192) | struct ImGuiSizeCallbackData
  type ImGuiStorage (line 193) | struct ImGuiStorage
  type ImGuiStoragePair (line 194) | struct ImGuiStoragePair
  type ImGuiStyle (line 195) | struct ImGuiStyle
  type ImGuiTableSortSpecs (line 196) | struct ImGuiTableSortSpecs
  type ImGuiTableColumnSortSpecs (line 197) | struct ImGuiTableColumnSortSpecs
  type ImGuiTextBuffer (line 198) | struct ImGuiTextBuffer
  type ImGuiTextFilter (line 199) | struct ImGuiTextFilter
  type ImGuiViewport (line 200) | struct ImGuiViewport
  type ImGuiDir (line 208) | enum ImGuiDir : int
  type ImGuiKey (line 209) | enum ImGuiKey : int
  type ImGuiMouseSource (line 210) | enum ImGuiMouseSource : int
  type ImGuiSortDirection (line 211) | enum ImGuiSortDirection
  type ImGuiCol (line 212) | typedef int ImGuiCol;
  type ImGuiCond (line 213) | typedef int ImGuiCond;
  type ImGuiDataType (line 214) | typedef int ImGuiDataType;
  type ImGuiMouseButton (line 215) | typedef int ImGuiMouseButton;
  type ImGuiMouseCursor (line 216) | typedef int ImGuiMouseCursor;
  type ImGuiStyleVar (line 217) | typedef int ImGuiStyleVar;
  type ImGuiTableBgTarget (line 218) | typedef int ImGuiTableBgTarget;
  type ImDrawFlags (line 225) | typedef int ImDrawFlags;
  type ImDrawListFlags (line 226) | typedef int ImDrawListFlags;
  type ImFontAtlasFlags (line 227) | typedef int ImFontAtlasFlags;
  type ImGuiBackendFlags (line 228) | typedef int ImGuiBackendFlags;
  type ImGuiButtonFlags (line 229) | typedef int ImGuiButtonFlags;
  type ImGuiChildFlags (line 230) | typedef int ImGuiChildFlags;
  type ImGuiColorEditFlags (line 231) | typedef int ImGuiColorEditFlags;
  type ImGuiConfigFlags (line 232) | typedef int ImGuiConfigFlags;
  type ImGuiComboFlags (line 233) | typedef int ImGuiComboFlags;
  type ImGuiDragDropFlags (line 234) | typedef int ImGuiDragDropFlags;
  type ImGuiFocusedFlags (line 235) | typedef int ImGuiFocusedFlags;
  type ImGuiHoveredFlags (line 236) | typedef int ImGuiHoveredFlags;
  type ImGuiInputFlags (line 237) | typedef int ImGuiInputFlags;
  type ImGuiInputTextFlags (line 238) | typedef int ImGuiInputTextFlags;
  type ImGuiItemFlags (line 239) | typedef int ImGuiItemFlags;
  type ImGuiKeyChord (line 240) | typedef int ImGuiKeyChord;
  type ImGuiPopupFlags (line 241) | typedef int ImGuiPopupFlags;
  type ImGuiMultiSelectFlags (line 242) | typedef int ImGuiMultiSelectFlags;
  type ImGuiSelectableFlags (line 243) | typedef int ImGuiSelectableFlags;
  type ImGuiSliderFlags (line 244) | typedef int ImGuiSliderFlags;
  type ImGuiTabBarFlags (line 245) | typedef int ImGuiTabBarFlags;
  type ImGuiTabItemFlags (line 246) | typedef int ImGuiTabItemFlags;
  type ImGuiTableFlags (line 247) | typedef int ImGuiTableFlags;
  type ImGuiTableColumnFlags (line 248) | typedef int ImGuiTableColumnFlags;
  type ImGuiTableRowFlags (line 249) | typedef int ImGuiTableRowFlags;
  type ImGuiTreeNodeFlags (line 250) | typedef int ImGuiTreeNodeFlags;
  type ImGuiViewportFlags (line 251) | typedef int ImGuiViewportFlags;
  type ImGuiWindowFlags (line 252) | typedef int ImGuiWindowFlags;
  type ImWchar32 (line 256) | typedef unsigned int ImWchar32;
  type ImWchar16 (line 257) | typedef unsigned short ImWchar16;
  type ImWchar32 (line 259) | typedef ImWchar32 ImWchar;
  type ImWchar16 (line 261) | typedef ImWchar16 ImWchar;
  type ImS64 (line 267) | typedef ImS64 ImGuiSelectionUserData;
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 278) | IM_MSVC_RUNTIME_CHECKS_OFF
  type ImGuiWindowFlags_ (line 1069) | enum ImGuiWindowFlags_
  type ImGuiChildFlags_ (line 1118) | enum ImGuiChildFlags_
  type ImGuiItemFlags_ (line 1139) | enum ImGuiItemFlags_
  type ImGuiInputTextFlags_ (line 1152) | enum ImGuiInputTextFlags_
  type ImGuiTreeNodeFlags_ (line 1194) | enum ImGuiTreeNodeFlags_
  type ImGuiPopupFlags_ (line 1231) | enum ImGuiPopupFlags_
  type ImGuiSelectableFlags_ (line 1249) | enum ImGuiSelectableFlags_
  type ImGuiComboFlags_ (line 1266) | enum ImGuiComboFlags_
  type ImGuiTabBarFlags_ (line 1281) | enum ImGuiTabBarFlags_
  type ImGuiTabItemFlags_ (line 1298) | enum ImGuiTabItemFlags_
  type ImGuiFocusedFlags_ (line 1313) | enum ImGuiFocusedFlags_
  type ImGuiHoveredFlags_ (line 1327) | enum ImGuiHoveredFlags_
  type ImGuiDragDropFlags_ (line 1365) | enum ImGuiDragDropFlags_
  type ImGuiDataType_ (line 1393) | enum ImGuiDataType_
  type ImGuiDir (line 1411) | enum ImGuiDir : int
  function ImU8 (line 1422) | enum ImGuiSortDirection : ImU8
  function clear (line 2090) | inline void         clear()                             { if (Data) { Si...
  function clear_delete (line 2091) | inline void         clear_delete()                      { for (int n = 0...
  function clear_destruct (line 2092) | inline void         clear_destruct()                    { for (int n = 0...
  function size_in_bytes (line 2096) | inline int          size_in_bytes() const               { return Size * ...
  function T (line 2099) | inline T&           operator[](int i)                   { IM_ASSERT(i >=...
  function T (line 2100) | inline const T&     operator[](int i) const             { IM_ASSERT(i >=...
  function T (line 2102) | inline T*           begin()                             { return Data; }
  function T (line 2103) | inline const T*     begin() const                       { return Data; }
  function T (line 2104) | inline T*           end()                               { return Data + ...
  function T (line 2105) | inline const T*     end() const                         { return Data + ...
  function T (line 2106) | inline T&           front()                             { IM_ASSERT(Size...
  function T (line 2107) | inline const T&     front() const                       { IM_ASSERT(Size...
  function T (line 2109) | inline const T&     back() const                        { IM_ASSERT(Size...
  function _grow_capacity (line 2112) | inline int          _grow_capacity(int sz) const        { int new_capaci...
  function resize (line 2113) | inline void         resize(int new_size)                { if (new_size >...
  function resize (line 2114) | inline void         resize(int new_size, const T& v)    { if (new_size >...
  function shrink (line 2115) | inline void         shrink(int new_size)                { IM_ASSERT(new_...
  function reserve (line 2116) | inline void         reserve(int new_capacity)           { if (new_capaci...
  function reserve_discard (line 2117) | inline void         reserve_discard(int new_capacity)   { if (new_capaci...
  function push_back (line 2120) | inline void         push_back(const T& v)               { if (Size == Ca...
  function pop_back (line 2121) | inline void         pop_back()                          { IM_ASSERT(Size...
  function push_front (line 2122) | inline void         push_front(const T& v)              { if (Size == 0)...
  function T (line 2123) | inline T*           erase(const T* it)                  { IM_ASSERT(it >...
  function T (line 2124) | inline T*           erase(const T* it, const T* it_last){ IM_ASSERT(it >...
  function T (line 2125) | inline T*           erase_unsorted(const T* it)         { IM_ASSERT(it >...
  function T (line 2126) | inline T*           insert(const T* it, const T& v)     { IM_ASSERT(it >...
  function contains (line 2127) | inline bool         contains(const T& v) const          { const T* data ...
  function T (line 2128) | inline T*           find(const T& v)                    { T* data = Data...
  function T (line 2129) | inline const T*     find(const T& v) const              { const T* data ...
  function find_index (line 2130) | inline int          find_index(const T& v) const        { const T* data_...
  function find_erase (line 2131) | inline bool         find_erase(const T& v)              { const T* it = ...
  function find_erase_unsorted (line 2132) | inline bool         find_erase_unsorted(const T& v)     { const T* it = ...
  function index_from_ptr (line 2133) | inline int          index_from_ptr(const T* it) const   { IM_ASSERT(it >...
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 2135) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  type ImGuiKeyData (line 2232) | struct ImGuiKeyData
  type ImGuiIO (line 2240) | struct ImGuiIO
  function ClearSelection (line 2481) | struct ImGuiInputTextCallbackData
  type ImGuiSizeCallbackData (line 2515) | struct ImGuiSizeCallbackData
  function Clear (line 2524) | struct ImGuiPayload
  function IsDataType (line 2540) | bool IsDataType(const char* type) const { return DataFrameCount != -1 &&...
  type ImGuiOnceUponAFrame (line 2559) | struct ImGuiOnceUponAFrame
  function IsActive (line 2567) | struct ImGuiTextFilter
  type ImGuiTextBuffer (line 2594) | struct ImGuiTextBuffer
  function clear (line 2605) | void                clear()                 { Buf.clear(); }
  function resize (line 2606) | void                resize(int size)        { if (Buf.Size > size) Buf.D...
  function reserve (line 2607) | void                reserve(int capacity)   { Buf.reserve(capacity); }
  function ImGuiStoragePair (line 2615) | struct ImGuiStoragePair
  type ImGuiStorage (line 2632) | struct ImGuiStorage
  type ImGuiListClipper (line 2689) | struct ImGuiListClipper
  function IncludeRangeByIndices (line 2719) | inline void IncludeRangeByIndices(int item_begin, int item_end)      { I...
  function ForceDisplayRangeByIndices (line 2720) | inline void ForceDisplayRangeByIndices(int item_begin, int item_end) { I...
  function ImColor (line 2783) | struct ImColor
  function Value (line 2791) | constexpr ImColor(ImU32 rgba)                                   : Value(...
  function operator (line 2792) | inline operator ImU32() const                                   { return...
  type ImGuiMultiSelectFlags_ (line 2841) | enum ImGuiMultiSelectFlags_
  type ImGuiMultiSelectIO (line 2868) | struct ImGuiMultiSelectIO
  type ImGuiSelectionRequestType (line 2880) | enum ImGuiSelectionRequestType
  type ImGuiSelectionRequest (line 2888) | struct ImGuiSelectionRequest
  type ImGuiSelectionBasicStorage (line 2914) | struct ImGuiSelectionBasicStorage
  type ImGuiSelectionExternalStorage (line 2937) | struct ImGuiSelectionExternalStorage
  type ImDrawIdx (line 2962) | typedef unsigned short ImDrawIdx;
  function GetTexID (line 2987) | struct ImDrawCmd
  type ImDrawFlags_ (line 3055) | enum ImDrawFlags_
  type ImDrawListFlags_ (line 3075) | enum ImDrawListFlags_
  function GetClipRectMax (line 3093) | struct ImDrawList
  function PathLineTo (line 3173) | inline    void  PathLineTo(const ImVec2& pos)                           ...
  function PathLineToMergeDuplicate (line 3174) | inline    void  PathLineToMergeDuplicate(const ImVec2& pos)             ...
  function PathFillConvex (line 3175) | inline    void  PathFillConvex(ImU32 col)                               ...
  function PathFillConcave (line 3176) | inline    void  PathFillConcave(ImU32 col)                              ...
  function ChannelsSplit (line 3206) | inline void     ChannelsSplit(int count)    { _Splitter.Split(this, coun...
  function ChannelsMerge (line 3207) | inline void     ChannelsMerge()             { _Splitter.Merge(this); }
  function ChannelsSetCurrent (line 3208) | inline void     ChannelsSetCurrent(int n)   { _Splitter.SetCurrentChanne...
  function PrimWriteVtx (line 3218) | inline    void  PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 ...
  function PrimWriteIdx (line 3219) | inline    void  PrimWriteIdx(ImDrawIdx idx)                             ...
  function PrimVtx (line 3220) | inline    void  PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) ...
  type ImDrawData (line 3246) | struct ImDrawData
  type ImFontConfig (line 3271) | struct ImFontConfig
  type ImFontGlyph (line 3302) | struct ImFontGlyph
  function Clear (line 3314) | struct ImFontGlyphRangesBuilder
  function GetBit (line 3320) | inline bool     GetBit(size_t n) const  { int off = (int)(n >> 5); ImU32...
  function SetBit (line 3321) | inline void     SetBit(size_t n)        { int off = (int)(n >> 5); ImU32...
  function AddChar (line 3322) | inline void     AddChar(ImWchar c)      { SetBit(c); }
  type ImFontAtlasFlags_ (line 3345) | enum ImFontAtlasFlags_
  function SetTexID (line 3370) | struct ImFontAtlas
  function ImFontAtlasCustomRect (line 3427) | ImFontAtlasCustomRect*      GetCustomRectByIndex(int index) { IM_ASSERT(...
  type ImFont (line 3474) | struct ImFont
  type ImGuiViewportFlags_ (line 3533) | enum ImGuiViewportFlags_
  function GetCenter (line 3548) | struct ImGuiViewport
  function PushTabStop (line 3634) | static inline void  PushTabStop(bool tab_stop)                          ...
  function PopTabStop (line 3635) | static inline void  PopTabStop()                                        ...
  function EndChildFrame (line 3641) | static inline void  EndChildFrame()                                     ...
  function PushAllowKeyboardFocus (line 3650) | static inline void  PushAllowKeyboardFocus(bool tab_stop)               ...
  function PopAllowKeyboardFocus (line 3651) | static inline void  PopAllowKeyboardFocus()                             ...

FILE: src/DesktopPlusUI/imgui/imgui_demo.cpp
  type ImGuiDemoWindowData (line 234) | struct ImGuiDemoWindowData
  type ExampleTreeNode (line 262) | struct ExampleTreeNode
  function HelpMarker (line 272) | static void HelpMarker(const char* desc)
  type ImGuiDemoWindowData (line 297) | struct ImGuiDemoWindowData
  function DemoWindowMenuBar (line 640) | static void DemoWindowMenuBar(ImGuiDemoWindowData* demo_data)
  type ExampleTreeNode (line 717) | struct ExampleTreeNode
  type ExampleMemberInfo (line 735) | struct ExampleMemberInfo
  function ExampleTreeNode (line 752) | static ExampleTreeNode* ExampleTree_CreateNode(const char* name, int uid...
  function ExampleTree_DestroyNode (line 764) | static void ExampleTree_DestroyNode(ExampleTreeNode* node)
  function ExampleTreeNode (line 773) | static ExampleTreeNode* ExampleTree_CreateDemoTree()
  function DemoWindowWidgetsBasic (line 806) | static void DemoWindowWidgetsBasic()
  function DemoWindowWidgetsBullets (line 1017) | static void DemoWindowWidgetsBullets()
  function DemoWindowWidgetsCollapsingHeaders (line 1039) | static void DemoWindowWidgetsCollapsingHeaders()
  function DemoWindowWidgetsColorAndPickers (line 1070) | static void DemoWindowWidgetsColorAndPickers()
  function DemoWindowWidgetsComboBoxes (line 1270) | static void DemoWindowWidgetsComboBoxes()
  function DemoWindowWidgetsDataTypes (line 1367) | static void DemoWindowWidgetsDataTypes()
  function DemoWindowWidgetsDisableBlocks (line 1502) | static void DemoWindowWidgetsDisableBlocks(ImGuiDemoWindowData* demo_data)
  function DemoWindowWidgetsDragAndDrop (line 1517) | static void DemoWindowWidgetsDragAndDrop()
  function DemoWindowWidgetsDragsAndSliders (line 1675) | static void DemoWindowWidgetsDragsAndSliders()
  function DemoWindowWidgetsImages (line 1726) | static void DemoWindowWidgetsImages()
  function DemoWindowWidgetsListBoxes (line 1815) | static void DemoWindowWidgetsListBoxes()
  function DemoWindowWidgetsMultiComponents (line 1880) | static void DemoWindowWidgetsMultiComponents()
  function DemoWindowWidgetsPlotting (line 1927) | static void DemoWindowWidgetsPlotting()
  function DemoWindowWidgetsProgressBars (line 2003) | static void DemoWindowWidgetsProgressBars()
  function DemoWindowWidgetsQueryingStatuses (line 2039) | static void DemoWindowWidgetsQueryingStatuses()
  function DemoWindowWidgetsSelectables (line 2240) | static void DemoWindowWidgetsSelectables()
  type ExampleSelectionWithDeletion (line 2388) | struct ExampleSelectionWithDeletion : ImGuiSelectionBasicStorage
    method ApplyDeletionPreLoop (line 2397) | int ApplyDeletionPreLoop(ImGuiMultiSelectIO* ms_io, int items_count)
    method ApplyDeletionPostLoop (line 2427) | void ApplyDeletionPostLoop(ImGuiMultiSelectIO* ms_io, ImVector<ITEM_TY...
  type ExampleDualListBox (line 2451) | struct ExampleDualListBox
    method MoveAll (line 2457) | void MoveAll(int src, int dst)
    method MoveSelected (line 2467) | void MoveSelected(int src, int dst)
    method ApplySelectionRequests (line 2483) | void ApplySelectionRequests(ImGuiMultiSelectIO* ms_io, int side)
    method CompareItemsByValue (line 2490) | CompareItemsByValue(const void* lhs, const void* rhs)
    method SortItems (line 2496) | void SortItems(int n)
    method Show (line 2500) | void Show()
  function DemoWindowWidgetsSelectionAndMultiSelect (line 2605) | static void DemoWindowWidgetsSelectionAndMultiSelect(ImGuiDemoWindowData...
  function DemoWindowWidgetsTabs (line 3344) | static void DemoWindowWidgetsTabs()
  function DemoWindowWidgetsText (line 3497) | static void DemoWindowWidgetsText()
  function DemoWindowWidgetsTextFilter (line 3579) | static void DemoWindowWidgetsTextFilter()
  function DemoWindowWidgetsTextInput (line 3606) | static void DemoWindowWidgetsTextInput()
  function DemoWindowWidgetsTooltips (line 3819) | static void DemoWindowWidgetsTooltips()
  function DemoWindowWidgetsTreeNodes (line 3918) | static void DemoWindowWidgetsTreeNodes()
  function DemoWindowWidgetsVerticalSliders (line 4051) | static void DemoWindowWidgetsVerticalSliders()
  function DemoWindowWidgets (line 4123) | static void DemoWindowWidgets(ImGuiDemoWindowData* demo_data)
  function DemoWindowLayout (line 4173) | static void DemoWindowLayout()
  function DemoWindowPopups (line 5039) | static void DemoWindowPopups()
  type MyItemColumnID (line 5345) | enum MyItemColumnID
  type MyItem (line 5354) | struct MyItem
    method SortWithSortSpecs (line 5369) | static void SortWithSortSpecs(ImGuiTableSortSpecs* sort_specs, MyItem*...
    method CompareWithSortSpecs (line 5378) | CompareWithSortSpecs(const void* lhs, const void* rhs)
  function PushStyleCompact (line 5412) | static void PushStyleCompact()
  function PopStyleCompact (line 5419) | static void PopStyleCompact()
  function EditTableSizingFlags (line 5425) | static void EditTableSizingFlags(ImGuiTableFlags* p_flags)
  function EditTableColumnsFlags (line 5466) | static void EditTableColumnsFlags(ImGuiTableColumnFlags* p_flags)
  function ShowTableColumnsStatusFlags (line 5491) | static void ShowTableColumnsStatusFlags(ImGuiTableColumnFlags flags)
  function DemoWindowTables (line 5503) | static void DemoWindowTables()
  function ShowExampleAppConsole (line 8943) | static void ShowExampleAppConsole(bool* p_open)
  function Draw (line 8957) | struct ExampleAppLog
  function ShowExampleAppLog (line 9081) | static void ShowExampleAppLog(bool* p_open)
  function ShowExampleAppLayout (line 9116) | static void ShowExampleAppLayout(bool* p_open)
  type ExampleAppPropertyEditor (line 9187) | struct ExampleAppPropertyEditor
    method Draw (line 9192) | void Draw(ExampleTreeNode* root_node)
    method DrawTreeNode (line 9282) | void DrawTreeNode(ExampleTreeNode* node)
  function ShowExampleAppPropertyEditor (line 9312) | static void ShowExampleAppPropertyEditor(bool* p_open, ImGuiDemoWindowDa...
  function ShowExampleAppLongText (line 9335) | static void ShowExampleAppLongText(bool* p_open)
  function ShowExampleAppAutoResize (line 9398) | static void ShowExampleAppAutoResize(bool* p_open)
  function ShowExampleAppConstrainedResize (line 9424) | static void ShowExampleAppConstrainedResize(bool* p_open)
  function ShowExampleAppSimpleOverlay (line 9523) | static void ShowExampleAppSimpleOverlay(bool* p_open)
  function ShowExampleAppFullscreen (line 9578) | static void ShowExampleAppFullscreen(bool* p_open)
  function ShowExampleAppWindowTitles (line 9616) | static void ShowExampleAppWindowTitles(bool*)
  function PathConcaveShape (line 9650) | static void PathConcaveShape(ImDrawList* draw_list, float x, float y, fl...
  function ShowExampleAppCustomRendering (line 9658) | static void ShowExampleAppCustomRendering(bool* p_open)
  type MyDocument (line 9964) | struct MyDocument
    method MyDocument (line 9973) | MyDocument(int uid, const char* name, bool open = true, const ImVec4& ...
    method DoOpen (line 9981) | void DoOpen()       { Open = true; }
    method DoForceClose (line 9982) | void DoForceClose() { Open = false; Dirty = false; }
    method DoSave (line 9983) | void DoSave()       { Dirty = false; }
  type ExampleAppDocuments (line 9986) | struct ExampleAppDocuments
    method ExampleAppDocuments (line 9993) | ExampleAppDocuments()
    method GetTabName (line 10004) | void GetTabName(MyDocument* doc, char* out_buf, size_t out_buf_size)
    method DisplayDocContents (line 10010) | void DisplayDocContents(MyDocument* doc)
    method DisplayDocContextMenu (line 10044) | void DisplayDocContextMenu(MyDocument* doc)
    method NotifyOfDocumentsClosedElsewhere (line 10068) | void NotifyOfDocumentsClosedElsewhere()
  function ShowExampleAppDocuments (line 10079) | void ShowExampleAppDocuments(bool* p_open)
  type ExampleAsset (line 10282) | struct ExampleAsset
    method ExampleAsset (line 10287) | ExampleAsset(ImGuiID id, int type) { ID = id; Type = type; }
    method SortWithSortSpecs (line 10291) | static void SortWithSortSpecs(ImGuiTableSortSpecs* sort_specs, Example...
    method CompareWithSortSpecs (line 10300) | CompareWithSortSpecs(const void* lhs, const void* rhs)
  type ExampleAssetsBrowser (line 10322) | struct ExampleAssetsBrowser
    method ExampleAssetsBrowser (line 10352) | ExampleAssetsBrowser()
    method AddItems (line 10356) | void AddItems(int count)
    method ClearItems (line 10365) | void ClearItems()
    method UpdateLayoutSizes (line 10373) | void UpdateLayoutSizes(float avail_width)
    method Draw (line 10394) | void Draw(const char* title, bool* p_open)
  function ShowExampleAppAssetsBrowser (line 10667) | void ShowExampleAppAssetsBrowser(bool* p_open)

FILE: src/DesktopPlusUI/imgui/imgui_draw.cpp
  function ImDrawList (line 458) | ImDrawList* ImDrawList::CloneOutput() const
  function ImVec2 (line 1297) | ImVec2 ImBezierCubicCalc(const ImVec2& p1, const ImVec2& p2, const ImVec...
  function ImVec2 (line 1307) | ImVec2 ImBezierQuadraticCalc(const ImVec2& p1, const ImVec2& p2, const I...
  function PathBezierCubicCurveToCasteljau (line 1317) | static void PathBezierCubicCurveToCasteljau(ImVector<ImVec2>* path, floa...
  function PathBezierQuadraticCurveToCasteljau (line 1342) | static void PathBezierQuadraticCurveToCasteljau(ImVector<ImVec2>* path, ...
  function ImDrawFlags (line 1392) | static inline ImDrawFlags FixRectCornerFlags(ImDrawFlags flags)
  type ImTriangulatorNodeType (line 1770) | enum ImTriangulatorNodeType
  type ImTriangulatorNode (line 1777) | struct ImTriangulatorNode
    method Unlink (line 1785) | void    Unlink()        { Next->Prev = Prev; Prev->Next = Next; }
  type ImTriangulatorNodeSpan (line 1788) | struct ImTriangulatorNodeSpan
    method push_back (line 1793) | void    push_back(ImTriangulatorNode* node) { Data[Size++] = node; }
    method find_erase_unsorted (line 1794) | void    find_erase_unsorted(int idx)        { for (int i = Size - 1; i...
  type ImTriangulator (line 1797) | struct ImTriangulator
    method EstimateTriangleCount (line 1799) | static int EstimateTriangleCount(int points_count)      { return (poin...
    method EstimateScratchBufferSize (line 1800) | static int EstimateScratchBufferSize(int points_count)  { return sizeo...
  function ImFont (line 2576) | ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
  function Decode85Byte (line 2618) | static unsigned int Decode85Byte(char c)                                ...
  function Decode85 (line 2619) | static void         Decode85(const unsigned char* src, unsigned char* dst)
  function ImFont (line 2634) | ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template)
  function ImFont (line 2662) | ImFont* ImFontAtlas::AddFontFromFileTTF(const char* filename, float size...
  function ImFont (line 2684) | ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* font_data, int font_data...
  function ImFont (line 2698) | ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compress...
  function ImFont (line 2710) | ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* co...
  function ImFontAtlasGetMouseCursorTexData (line 2759) | bool ImFontAtlasGetMouseCursorTexData(ImFontAtlas* atlas, ImGuiMouseCurs...
  function ImFontAtlasBuildMultiplyCalcLookupTable (line 2809) | void    ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[...
  function ImFontAtlasBuildMultiplyRectAlpha8 (line 2818) | void    ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256...
  function ImFontAtlasBuildGetOversampleFactors (line 2827) | void ImFontAtlasBuildGetOversampleFactors(const ImFontConfig* src, int* ...
  type ImFontBuildSrcData (line 2837) | struct ImFontBuildSrcData
  type ImFontBuildDstData (line 2852) | struct ImFontBuildDstData
  function UnpackBitVectorToFlatIndexList (line 2860) | static void UnpackBitVectorToFlatIndexList(const ImBitVector* in, ImVect...
  function ImFontAtlasBuildWithStbTruetype (line 2872) | static bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
  function ImFontBuilderIO (line 3143) | const ImFontBuilderIO* ImFontAtlasGetBuilderForStbTruetype()
  function ImFontAtlasUpdateSourcesPointers (line 3152) | void ImFontAtlasUpdateSourcesPointers(ImFontAtlas* atlas)
  function ImFontAtlasBuildSetupFont (line 3166) | void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontC...
  function ImFontAtlasBuildPackCustomRects (line 3179) | void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_con...
  function ImFontAtlasBuildRender8bppRectFromString (line 3210) | void ImFontAtlasBuildRender8bppRectFromString(ImFontAtlas* atlas, int x,...
  function ImFontAtlasBuildRender32bppRectFromString (line 3220) | void ImFontAtlasBuildRender32bppRectFromString(ImFontAtlas* atlas, int x...
  function ImFontAtlasBuildRenderDefaultTexData (line 3230) | static void ImFontAtlasBuildRenderDefaultTexData(ImFontAtlas* atlas)
  function ImFontAtlasBuildRenderLinesTexData (line 3270) | static void ImFontAtlasBuildRenderLinesTexData(ImFontAtlas* atlas)
  function ImFontAtlasBuildInit (line 3322) | void ImFontAtlasBuildInit(ImFontAtlas* atlas)
  function ImFontAtlasBuildFinish (line 3343) | void ImFontAtlasBuildFinish(ImFontAtlas* atlas)
  function ImWchar (line 3389) | const ImWchar*   ImFontAtlas::GetGlyphRangesDefault()
  function ImWchar (line 3399) | const ImWchar*   ImFontAtlas::GetGlyphRangesGreek()
  function ImWchar (line 3410) | const ImWchar*  ImFontAtlas::GetGlyphRangesKorean()
  function ImWchar (line 3423) | const ImWchar*  ImFontAtlas::GetGlyphRangesChineseFull()
  function UnpackAccumulativeOffsetsIntoRanges (line 3439) | static void UnpackAccumulativeOffsetsIntoRanges(int base_codepoint, cons...
  function ImWchar (line 3449) | const ImWchar*  ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon()
  function ImWchar (line 3517) | const ImWchar*  ImFontAtlas::GetGlyphRangesJapanese()
  function ImWchar (line 3607) | const ImWchar*  ImFontAtlas::GetGlyphRangesCyrillic()
  function ImWchar (line 3620) | const ImWchar*  ImFontAtlas::GetGlyphRangesThai()
  function ImWchar (line 3632) | const ImWchar*  ImFontAtlas::GetGlyphRangesVietnamese()
  function ImWchar (line 3717) | static ImWchar FindFirstExistingGlyph(ImFont* font, const ImWchar* candi...
  function ImFontGlyph (line 3898) | ImFontGlyph* ImFont::FindGlyph(ImWchar c)
  function ImFontGlyph (line 3908) | ImFontGlyph* ImFont::FindGlyphNoFallback(ImWchar c)
  function ImVec2 (line 4031) | ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_wid...
  function ImAcos01 (line 4392) | static inline float ImAcos01(float x)
  function stb_decompress_length (line 4527) | static unsigned int stb_decompress_length(const unsigned char *input)
  function stb__match (line 4535) | static void stb__match(const unsigned char *data, unsigned int length)
  function stb__lit (line 4544) | static void stb__lit(const unsigned char *data, unsigned int length)
  function stb_adler32 (line 4574) | static unsigned int stb_adler32(unsigned int adler32, unsigned char *buf...
  function stb_decompress (line 4605) | static unsigned int stb_decompress(unsigned char *output, const unsigned...

FILE: src/DesktopPlusUI/imgui/imgui_internal.h
  type ImBitVector (line 136) | struct ImBitVector
  type ImRect (line 137) | struct ImRect
  type ImGuiTextIndex (line 138) | struct ImGuiTextIndex
  type ImDrawDataBuilder (line 141) | struct ImDrawDataBuilder
  type ImDrawListSharedData (line 142) | struct ImDrawListSharedData
  type ImGuiBoxSelectState (line 145) | struct ImGuiBoxSelectState
  type ImGuiColorMod (line 146) | struct ImGuiColorMod
  type ImGuiContext (line 147) | struct ImGuiContext
  type ImGuiContextHook (line 148) | struct ImGuiContextHook
  type ImGuiDataTypeInfo (line 149) | struct ImGuiDataTypeInfo
  type ImGuiDeactivatedItemData (line 150) | struct ImGuiDeactivatedItemData
  type ImGuiErrorRecoveryState (line 151) | struct ImGuiErrorRecoveryState
  type ImGuiGroupData (line 152) | struct ImGuiGroupData
  type ImGuiInputTextState (line 153) | struct ImGuiInputTextState
  type ImGuiInputTextDeactivateData (line 154) | struct ImGuiInputTextDeactivateData
  type ImGuiLastItemData (line 155) | struct ImGuiLastItemData
  type ImGuiLocEntry (line 156) | struct ImGuiLocEntry
  type ImGuiMenuColumns (line 157) | struct ImGuiMenuColumns
  type ImGuiMultiSelectState (line 158) | struct ImGuiMultiSelectState
  type ImGuiMultiSelectTempData (line 159) | struct ImGuiMultiSelectTempData
  type ImGuiNavItemData (line 160) | struct ImGuiNavItemData
  type ImGuiMetricsConfig (line 161) | struct ImGuiMetricsConfig
  type ImGuiNextWindowData (line 162) | struct ImGuiNextWindowData
  type ImGuiNextItemData (line 163) | struct ImGuiNextItemData
  type ImGuiOldColumnData (line 164) | struct ImGuiOldColumnData
  type ImGuiOldColumns (line 165) | struct ImGuiOldColumns
  type ImGuiPopupData (line 166) | struct ImGuiPopupData
  type ImGuiSettingsHandler (line 167) | struct ImGuiSettingsHandler
  type ImGuiStyleMod (line 168) | struct ImGuiStyleMod
  type ImGuiStyleVarInfo (line 169) | struct ImGuiStyleVarInfo
  type ImGuiTabBar (line 170) | struct ImGuiTabBar
  type ImGuiTabItem (line 171) | struct ImGuiTabItem
  type ImGuiTable (line 172) | struct ImGuiTable
  type ImGuiTableHeaderData (line 173) | struct ImGuiTableHeaderData
  type ImGuiTableColumn (line 174) | struct ImGuiTableColumn
  type ImGuiTableInstanceData (line 175) | struct ImGuiTableInstanceData
  type ImGuiTableTempData (line 176) | struct ImGuiTableTempData
  type ImGuiTableSettings (line 177) | struct ImGuiTableSettings
  type ImGuiTableColumnsSettings (line 178) | struct ImGuiTableColumnsSettings
  type ImGuiTreeNodeStackData (line 179) | struct ImGuiTreeNodeStackData
  type ImGuiTypingSelectState (line 180) | struct ImGuiTypingSelectState
  type ImGuiTypingSelectRequest (line 181) | struct ImGuiTypingSelectRequest
  type ImGuiWindow (line 182) | struct ImGuiWindow
  type ImGuiWindowTempData (line 183) | struct ImGuiWindowTempData
  type ImGuiWindowSettings (line 184) | struct ImGuiWindowSettings
  type ImGuiLocKey (line 188) | enum ImGuiLocKey : int
  type ImGuiLayoutType (line 189) | typedef int ImGuiLayoutType;
  type ImGuiActivateFlags (line 192) | typedef int ImGuiActivateFlags;
  type ImGuiDebugLogFlags (line 193) | typedef int ImGuiDebugLogFlags;
  type ImGuiFocusRequestFlags (line 194) | typedef int ImGuiFocusRequestFlags;
  type ImGuiItemStatusFlags (line 195) | typedef int ImGuiItemStatusFlags;
  type ImGuiOldColumnFlags (line 196) | typedef int ImGuiOldColumnFlags;
  type ImGuiLogFlags (line 197) | typedef int ImGuiLogFlags;
  type ImGuiNavRenderCursorFlags (line 198) | typedef int ImGuiNavRenderCursorFlags;
  type ImGuiNavMoveFlags (line 199) | typedef int ImGuiNavMoveFlags;
  type ImGuiNextItemDataFlags (line 200) | typedef int ImGuiNextItemDataFlags;
  type ImGuiNextWindowDataFlags (line 201) | typedef int ImGuiNextWindowDataFlags;
  type ImGuiScrollFlags (line 202) | typedef int ImGuiScrollFlags;
  type ImGuiSeparatorFlags (line 203) | typedef int ImGuiSeparatorFlags;
  type ImGuiTextFlags (line 204) | typedef int ImGuiTextFlags;
  type ImGuiTooltipFlags (line 205) | typedef int ImGuiTooltipFlags;
  type ImGuiTypingSelectFlags (line 206) | typedef int ImGuiTypingSelectFlags;
  type ImGuiWindowRefreshFlags (line 207) | typedef int ImGuiWindowRefreshFlags;
  function ImQsort (line 363) | static inline void      ImQsort(void* base, size_t count, size_t size_of...
  function ImIsPowerOfTwo (line 370) | static inline bool      ImIsPowerOfTwo(int v)               { return v !...
  function ImIsPowerOfTwo (line 371) | static inline bool      ImIsPowerOfTwo(ImU64 v)             { return v !...
  function ImUpperPowerOfTwo (line 372) | static inline int       ImUpperPowerOfTwo(int v)            { v--; v |= ...
  function ImCountSetBits (line 373) | static inline unsigned int ImCountSetBits(unsigned int v)   { unsigned i...
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 390) | IM_MSVC_RUNTIME_CHECKS_OFF
  function ImCharIsBlankA (line 392) | static inline bool      ImCharIsBlankA(char c)          { return c == ' ...
  function ImCharIsBlankW (line 393) | static inline bool      ImCharIsBlankW(unsigned int c)  { return c == ' ...
  function ImCharIsXdigitA (line 394) | static inline bool      ImCharIsXdigitA(char c)         { return (c >= '...
  function ImFileHandle (line 424) | static inline ImFileHandle  ImFileOpen(const char*, const char*)        ...
  function ImFileClose (line 425) | static inline bool          ImFileClose(ImFileHandle)                   ...
  function ImU64 (line 426) | static inline ImU64         ImFileGetSize(ImFileHandle)                 ...
  function ImU64 (line 427) | static inline ImU64         ImFileRead(void*, ImU64, ImU64, ImFileHandle...
  function ImU64 (line 428) | static inline ImU64         ImFileWrite(const void*, ImU64, ImU64, ImFil...
  type FILE (line 431) | typedef FILE* ImFileHandle;
  function ImPow (line 455) | static inline float  ImPow(float x, float y)    { return powf(x, y); }
  function ImPow (line 456) | static inline double ImPow(double x, double y)  { return pow(x, y); }
  function ImLog (line 457) | static inline float  ImLog(float x)             { return logf(x); }
  function ImLog (line 458) | static inline double ImLog(double x)            { return log(x); }
  function ImAbs (line 459) | static inline int    ImAbs(int x)               { return x < 0 ? -x : x; }
  function ImAbs (line 460) | static inline float  ImAbs(float x)             { return fabsf(x); }
  function ImAbs (line 461) | static inline double ImAbs(double x)            { return fabs(x); }
  function ImSign (line 462) | static inline float  ImSign(float x)            { return (x < 0.0f) ? -1...
  function ImSign (line 463) | static inline double ImSign(double x)           { return (x < 0.0) ? -1....
  function ImRsqrt (line 465) | static inline float  ImRsqrt(float x)           { return _mm_cvtss_f32(_...
  function ImRsqrt (line 467) | static inline float  ImRsqrt(float x)           { return 1.0f / sqrtf(x); }
  function ImRsqrt (line 469) | static inline double ImRsqrt(double x)          { return 1.0 / sqrt(x); }
  function T (line 473) | inline T ImMin(T lhs, T rhs)                        { return lhs < rhs ?...
  function T (line 474) | inline T ImMax(T lhs, T rhs)                        { return lhs >= rhs ...
  function T (line 475) | inline T ImClamp(T v, T mn, T mx)                   { return (v < mn) ? ...
  function T (line 476) | inline T ImLerp(T a, T b, float t)                  { return (T)(a + (b ...
  function ImSwap (line 477) | inline void ImSwap(T& a, T& b)                      { T tmp = a; a = b; ...
  function T (line 478) | inline T ImAddClampOverflow(T a, T b, T mn, T mx)   { if (b < 0 && (a < ...
  function T (line 479) | inline T ImSubClampOverflow(T a, T b, T mn, T mx)   { if (b > 0 && (a < ...
  function ImVec2 (line 481) | static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImVec2 (line 482) | static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImVec2 (line 483) | static inline ImVec2 ImClamp(const ImVec2& v, const ImVec2&mn, const ImV...
  function ImVec2 (line 484) | static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t)  ...
  function ImVec2 (line 485) | static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVe...
  function ImVec4 (line 486) | static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t)  ...
  function ImSaturate (line 487) | static inline float  ImSaturate(float f)                                ...
  function ImLengthSqr (line 488) | static inline float  ImLengthSqr(const ImVec2& lhs)                     ...
  function ImLengthSqr (line 489) | static inline float  ImLengthSqr(const ImVec4& lhs)                     ...
  function ImInvLength (line 490) | static inline float  ImInvLength(const ImVec2& lhs, float fail_value)   ...
  function ImTrunc (line 491) | static inline float  ImTrunc(float f)                                   ...
  function ImVec2 (line 492) | static inline ImVec2 ImTrunc(const ImVec2& v)                           ...
  function ImFloor (line 493) | static inline float  ImFloor(float f)                                   ...
  function ImVec2 (line 494) | static inline ImVec2 ImFloor(const ImVec2& v)                           ...
  function ImModPositive (line 495) | static inline int    ImModPositive(int a, int b)                        ...
  function ImDot (line 496) | static inline float  ImDot(const ImVec2& a, const ImVec2& b)            ...
  function ImVec2 (line 497) | static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a)...
  function ImLinearSweep (line 498) | static inline float  ImLinearSweep(float current, float target, float sp...
  function ImLinearRemapClamp (line 499) | static inline float  ImLinearRemapClamp(float s0, float s1, float d0, fl...
  function ImVec2 (line 500) | static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImIsFloatAboveGuaranteedIntegerPrecision (line 501) | static inline bool   ImIsFloatAboveGuaranteedIntegerPrecision(float f)  ...
  function ImExponentialMovingAverage (line 502) | static inline float  ImExponentialMovingAverage(float avg, float sample,...
  function ImTriangleArea (line 514) | inline float         ImTriangleArea(const ImVec2& a, const ImVec2& b, co...
  function ImTriangleIsClockwise (line 515) | inline bool          ImTriangleIsClockwise(const ImVec2& a, const ImVec2...
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 519) | IM_MSVC_RUNTIME_CHECKS_OFF
  function Contains (line 557) | bool        Contains(const ImVec2& p) const     { return p.x     >= Min....
  function Contains (line 558) | bool        Contains(const ImRect& r) const     { return r.Min.x >= Min....
  function ContainsWithPad (line 559) | bool        ContainsWithPad(const ImVec2& p, const ImVec2& pad) const { ...
  function Overlaps (line 560) | bool        Overlaps(const ImRect& r) const     { return r.Min.y <  Max....
  function Add (line 561) | void        Add(const ImVec2& p)                { if (Min.x > p.x)     M...
  function Add (line 562) | void        Add(const ImRect& r)                { if (Min.x > r.Min.x) M...
  function Expand (line 563) | void        Expand(const float amount)          { Min.x -= amount;   Min...
  function Expand (line 564) | void        Expand(const ImVec2& amount)        { Min.x -= amount.x; Min...
  function Translate (line 565) | void        Translate(const ImVec2& d)          { Min.x += d.x; Min.y +=...
  function TranslateX (line 566) | void        TranslateX(float dx)                { Min.x += dx; Max.x += ...
  function TranslateY (line 567) | void        TranslateY(float dy)                { Min.y += dy; Max.y += ...
  function ClipWith (line 568) | void        ClipWith(const ImRect& r)           { Min = ImMax(Min, r.Min...
  function ClipWithFull (line 569) | void        ClipWithFull(const ImRect& r)       { Min = ImClamp(Min, r.M...
  function Floor (line 570) | void        Floor()                             { Min.x = IM_TRUNC(Min.x...
  function ImBitArrayGetStorageSizeInBytes (line 578) | inline size_t   ImBitArrayGetStorageSizeInBytes(int bitcount)   { return...
  function ImBitArrayClearAllBits (line 579) | inline void     ImBitArrayClearAllBits(ImU32* arr, int bitcount){ memset...
  function ImBitArrayTestBit (line 580) | inline bool     ImBitArrayTestBit(const ImU32* arr, int n)      { ImU32 ...
  function ImBitArrayClearBit (line 581) | inline void     ImBitArrayClearBit(ImU32* arr, int n)           { ImU32 ...
  function ImBitArraySetBit (line 582) | inline void     ImBitArraySetBit(ImU32* arr, int n)             { ImU32 ...
  function ImBitArraySetBitRange (line 583) | inline void     ImBitArraySetBitRange(ImU32* arr, int n, int n2) // Work...
  type ImU32 (line 596) | typedef ImU32* ImBitArrayPtr;
  function ClearAllBits (line 605) | void            ClearAllBits()              { memset(Storage, 0, sizeof(...
  function SetAllBits (line 606) | void            SetAllBits()                { memset(Storage, 255, sizeo...
  function TestBit (line 607) | bool            TestBit(int n) const        { n += OFFSET; IM_ASSERT(n >...
  function SetBit (line 608) | void            SetBit(int n)               { n += OFFSET; IM_ASSERT(n >...
  function ClearBit (line 609) | void            ClearBit(int n)             { n += OFFSET; IM_ASSERT(n >...
  function SetBitRange (line 610) | void            SetBitRange(int n, int n2)  { n += OFFSET; n2 += OFFSET;...
  function const (line 611) | bool            operator[](int n) const     { n += OFFSET; IM_ASSERT(n >...
  function ImBitVector (line 616) | struct IMGUI_API ImBitVector
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 625) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  function set (line 640) | inline void         set(T* data, int size)      { Data = data; DataEnd =...
  function set (line 641) | inline void         set(T* data, T* data_end)   { Data = data; DataEnd =...
  function T (line 644) | inline T&           operator[](int i)           { T* p = Data + i; IM_AS...
  function T (line 645) | inline const T&     operator[](int i) const     { const T* p = Data + i;...
  function T (line 647) | inline T*           begin()                     { return Data; }
  function T (line 648) | inline const T*     begin() const               { return Data; }
  function T (line 649) | inline T*           end()                       { return DataEnd; }
  function T (line 650) | inline const T*     end() const                 { return DataEnd; }
  function index_from_ptr (line 653) | inline int  index_from_ptr(const T* it) const   { IM_ASSERT(it >= Data &...
  function GetArenaSizeInBytes (line 670) | inline int   GetArenaSizeInBytes()              { return CurrOff; }
  function SetArenaBasePtr (line 671) | inline void  SetArenaBasePtr(void* base_ptr)    { BasePtr = (char*)base_...
  function GetSpan (line 675) | void  GetSpan(int n, ImSpan<T>* span)    { span->set((T*)GetSpanPtrBegin...
  type ImPoolIdx (line 681) | typedef int ImPoolIdx;
  function T (line 692) | T*          GetByKey(ImGuiID key)               { int idx = Map.GetInt(k...
  function T (line 693) | T*          GetByIndex(ImPoolIdx n)             { return &Buf[n]; }
  function ImPoolIdx (line 694) | ImPoolIdx   GetIndex(const T* p) const          { IM_ASSERT(p >= Buf.Dat...
  function T (line 695) | T*          GetOrAddByKey(ImGuiID key)          { int* p_idx = Map.GetIn...
  function Contains (line 696) | bool        Contains(const T* p) const          { return (p >= Buf.Data ...
  function Clear (line 697) | void        Clear()                             { for (int n = 0; n < Ma...
  function T (line 698) | T*          Add()                               { int idx = FreeIdx; if ...
  function Remove (line 699) | void        Remove(ImGuiID key, const T* p)     { Remove(key, GetIndex(p...
  function Remove (line 700) | void        Remove(ImGuiID key, ImPoolIdx idx)  { Buf[idx].~T(); *(int*)...
  function Reserve (line 701) | void        Reserve(int capacity)               { Buf.reserve(capacity);...
  function T (line 708) | T*          TryGetMapData(ImPoolIdx n)          { int idx = Map.Data[n]....
  function clear (line 721) | void    clear()                     { Buf.clear(); }
  function T (line 724) | T*      alloc_chunk(size_t sz)      { size_t HDR_SZ = 4; sz = IM_MEMALIG...
  function T (line 725) | T*      begin()                     { size_t HDR_SZ = 4; if (!Buf.Data) ...
  function T (line 726) | T*      next_chunk(T* p)            { size_t HDR_SZ = 4; IM_ASSERT(p >= ...
  function chunk_size (line 727) | int     chunk_size(const T* p)      { return ((const int*)p)[-1]; }
  function T (line 728) | T*      end()                       { return (T*)(void*)(Buf.Data + Buf....
  function offset_from_ptr (line 729) | int     offset_from_ptr(const T* p) { IM_ASSERT(p >= begin() && p < end(...
  function T (line 730) | T*      ptr_from_offset(int off)    { IM_ASSERT(off >= 4 && off < Buf.Si...
  function swap (line 731) | void    swap(ImChunkStream<T>& rhs) { rhs.Buf.swap(Buf); }
  function size (line 736) | struct ImGuiTextIndex
  function ImDrawListSharedData (line 784) | struct IMGUI_API ImDrawListSharedData
  type ImDrawDataBuilder (line 807) | struct ImDrawDataBuilder
  type ImGuiStyleVarInfo (line 819) | struct ImGuiStyleVarInfo
  type ImGuiColorMod (line 828) | struct ImGuiColorMod
  function ImGuiStyleMod (line 835) | struct ImGuiStyleMod
  type ImGuiDataTypeStorage (line 848) | struct ImGuiDataTypeStorage
  type ImGuiDataTypeInfo (line 854) | struct ImGuiDataTypeInfo
  type ImGuiDataTypePrivate_ (line 863) | enum ImGuiDataTypePrivate_
  type ImGuiItemFlagsPrivate_ (line 876) | enum ImGuiItemFlagsPrivate_
  type ImGuiItemStatusFlags_ (line 900) | enum ImGuiItemStatusFlags_
  type ImGuiHoveredFlagsPrivate_ (line 926) | enum ImGuiHoveredFlagsPrivate_
  type ImGuiInputTextFlagsPrivate_ (line 934) | enum ImGuiInputTextFlagsPrivate_
  type ImGuiButtonFlagsPrivate_ (line 943) | enum ImGuiButtonFlagsPrivate_
  type ImGuiComboFlagsPrivate_ (line 968) | enum ImGuiComboFlagsPrivate_
  type ImGuiSliderFlagsPrivate_ (line 974) | enum ImGuiSliderFlagsPrivate_
  type ImGuiSelectableFlagsPrivate_ (line 981) | enum ImGuiSelectableFlagsPrivate_
  type ImGuiTreeNodeFlagsPrivate_ (line 995) | enum ImGuiTreeNodeFlagsPrivate_
  type ImGuiSeparatorFlags_ (line 1002) | enum ImGuiSeparatorFlags_
  type ImGuiFocusRequestFlags_ (line 1013) | enum ImGuiFocusRequestFlags_
  type ImGuiTextFlags_ (line 1020) | enum ImGuiTextFlags_
  type ImGuiTooltipFlags_ (line 1026) | enum ImGuiTooltipFlags_
  type ImGuiLayoutType_ (line 1034) | enum ImGuiLayoutType_
  type ImGuiLogFlags_ (line 1041) | enum ImGuiLogFlags_
  type ImGuiAxis (line 1053) | enum ImGuiAxis
  type ImGuiPlotType (line 1060) | enum ImGuiPlotType
  function ImGuiComboPreviewData (line 1067) | struct IMGUI_API ImGuiComboPreviewData
  function ImGuiGroupData (line 1080) | struct IMGUI_API ImGuiGroupData
  function ImGuiMenuColumns (line 1098) | struct IMGUI_API ImGuiMenuColumns
  function ImGuiInputTextDeactivatedState (line 1116) | struct IMGUI_API ImGuiInputTextDeactivatedState
  function namespace (line 1133) | namespace ImStb { struct STB_TexteditState; }
  type ImStb (line 1134) | typedef ImStb::STB_TexteditState ImStbTexteditState;
  function ImGuiInputTextState (line 1138) | struct IMGUI_API ImGuiInputTextState
  type ImGuiDeactivatedItemData (line 1342) | struct ImGuiDeactivatedItemData
  type ImGuiPopupPositionPolicy (line 1354) | enum ImGuiPopupPositionPolicy
  type ImGuiPopupData (line 1362) | struct ImGuiPopupData
  type ImGuiInputEventType (line 1405) | enum ImGuiInputEventType
  type ImGuiInputSource (line 1417) | enum ImGuiInputSource
  type ImGuiInputEventMousePos (line 1428) | struct ImGuiInputEventMousePos      { float PosX, PosY; ImGuiMouseSource...
  type ImGuiInputEventMouseWheel (line 1429) | struct ImGuiInputEventMouseWheel    { float WheelX, WheelY; ImGuiMouseSo...
  type ImGuiInputEventMouseButton (line 1430) | struct ImGuiInputEventMouseButton   { int Button; bool Down; ImGuiMouseS...
  type ImGuiInputEventKey (line 1431) | struct ImGuiInputEventKey           { ImGuiKey Key; bool Down; float Ana...
  type ImGuiInputEventText (line 1432) | struct ImGuiInputEventText          { unsigned int Char; }
  type ImGuiInputEventAppFocused (line 1433) | struct ImGuiInputEventAppFocused    { bool Focused; }
  type ImGuiInputEvent (line 1435) | struct ImGuiInputEvent
  type ImS16 (line 1459) | typedef ImS16 ImGuiKeyRoutingIndex;
  function Clear (line 1476) | struct ImGuiKeyRoutingTable
  type ImGuiKeyOwnerData (line 1488) | struct ImGuiKeyOwnerData
  type ImGuiInputFlagsPrivate_ (line 1501) | enum ImGuiInputFlagsPrivate_
  function FromPositions (line 1545) | struct ImGuiListClipperRange
  function Reset (line 1558) | struct ImGuiListClipperData
  type ImGuiActivateFlags_ (line 1574) | enum ImGuiActivateFlags_
  type ImGuiScrollFlags_ (line 1585) | enum ImGuiScrollFlags_
  type ImGuiNavRenderCursorFlags_ (line 1599) | enum ImGuiNavRenderCursorFlags_
  type ImGuiNavMoveFlags_ (line 1613) | enum ImGuiNavMoveFlags_
  type ImGuiNavLayer (line 1635) | enum ImGuiNavLayer
  function Clear (line 1643) | struct ImGuiNavItemData
  type ImGuiFocusScopeData (line 1660) | struct ImGuiFocusScopeData
  type ImGuiTypingSelectFlags_ (line 1671) | enum ImGuiTypingSelectFlags_
  function ImGuiTypingSelectRequest (line 1679) | struct IMGUI_API ImGuiTypingSelectRequest
  function ImGuiTypingSelectState (line 1690) | struct IMGUI_API ImGuiTypingSelectState
  type ImGuiOldColumnFlags_ (line 1708) | enum ImGuiOldColumnFlags_
  type ImGuiOldColumnData (line 1728) | struct ImGuiOldColumnData
  type ImGuiOldColumns (line 1738) | struct ImGuiOldColumns
  type ImGuiBoxSelectState (line 1763) | struct ImGuiBoxSelectState
  function ImGuiMultiSelectTempData (line 1795) | struct IMGUI_API ImGuiMultiSelectTempData
  function ImGuiMultiSelectState (line 1820) | struct IMGUI_API ImGuiMultiSelectState
  function ImGuiViewport (line 1848) | struct ImGuiViewportP : public ImGuiViewport
  type ImGuiWindowSettings (line 1885) | struct ImGuiWindowSettings
  type ImGuiSettingsHandler (line 1899) | struct ImGuiSettingsHandler
  type ImGuiLocKey (line 1919) | enum ImGuiLocKey : int
  type ImGuiLocEntry (line 1934) | struct ImGuiLocEntry
  type ImGuiDebugLogFlags_ (line 1961) | enum ImGuiDebugLogFlags_
  type ImGuiDebugAllocEntry (line 1983) | struct ImGuiDebugAllocEntry
  type ImGuiDebugAllocInfo (line 1990) | struct ImGuiDebugAllocInfo
  type ImGuiMetricsConfig (line 2000) | struct ImGuiMetricsConfig
  type ImGuiStackLevelInfo (line 2016) | struct ImGuiStackLevelInfo
  type ImGuiIDStackTool (line 2028) | struct ImGuiIDStackTool
  type ImGuiContextHookType (line 2046) | enum ImGuiContextHookType { ImGuiContextHookType_NewFramePre, ImGuiConte...
  type ImGuiContextHook (line 2048) | struct ImGuiContextHook
  type ImGuiContext (line 2063) | struct ImGuiContext
  function ImGuiWindowTempData (line 2434) | struct IMGUI_API ImGuiWindowTempData
  function ImGuiWindow (line 2486) | struct IMGUI_API ImGuiWindow
  type ImGuiTabBarFlagsPrivate_ (line 2619) | enum ImGuiTabBarFlagsPrivate_
  type ImGuiTabItemFlagsPrivate_ (line 2627) | enum ImGuiTabItemFlagsPrivate_
  function ImGuiTabBar (line 2656) | struct IMGUI_API ImGuiTabBar
  type ImS16 (line 2704) | typedef ImS16 ImGuiTableColumnIdx;
  type ImU16 (line 2705) | typedef ImU16 ImGuiTableDrawChannelIdx;
  type ImGuiTableCellData (line 2771) | struct ImGuiTableCellData
  type ImGuiTableHeaderData (line 2780) | struct ImGuiTableHeaderData
  type ImGuiTableInstanceData (line 2790) | struct ImGuiTableInstanceData
  function ImGuiTable (line 2803) | struct IMGUI_API ImGuiTable
  function ImGuiTableTempData (line 2928) | struct IMGUI_API ImGuiTableTempData
  type ImGuiTableSettings (line 2975) | struct ImGuiTableSettings
  function namespace (line 2993) | namespace ImGui
  function IsNamedKey (line 3198) | inline bool             IsNamedKey(ImGuiKey key)                    { re...
  function IsNamedKeyOrMod (line 3199) | inline bool             IsNamedKeyOrMod(ImGuiKey key)               { re...
  function IsLegacyKey (line 3200) | inline bool             IsLegacyKey(ImGuiKey key)                   { re...
  function IsKeyboardKey (line 3201) | inline bool             IsKeyboardKey(ImGuiKey key)                 { re...
  function IsGamepadKey (line 3202) | inline bool             IsGamepadKey(ImGuiKey key)                  { re...
  function IsMouseKey (line 3203) | inline bool             IsMouseKey(ImGuiKey key)                    { re...
  function IsAliasKey (line 3204) | inline bool             IsAliasKey(ImGuiKey key)                    { re...
  function IsLRModKey (line 3205) | inline bool             IsLRModKey(ImGuiKey key)                    { re...
  function ImGuiKey (line 3207) | inline ImGuiKey         ConvertSingleModFlagToKey(ImGuiKey key)
  function ImGuiKeyData (line 3217) | inline ImGuiKeyData*    GetKeyData(ImGuiKey key)                        ...
  function ImGuiKey (line 3219) | inline ImGuiKey         MouseButtonToKey(ImGuiMouseButton button)       ...
  function IsActiveIdUsingNavDir (line 3227) | inline bool             IsActiveIdUsingNavDir(ImGuiDir dir)             ...
  function ImGuiKeyOwnerData (line 3245) | inline ImGuiKeyOwnerData* GetKeyOwnerData(ImGuiContext* ctx, ImGuiKey ke...
  function ImGuiID (line 3291) | inline ImGuiID          GetCurrentFocusScope() { ImGuiContext& g = *GImG...
  function ImGuiBoxSelectState (line 3317) | inline ImGuiBoxSelectState*     GetBoxSelectState(ImGuiID id)   { ImGuiC...
  function ImGuiMultiSelectState (line 3318) | inline ImGuiMultiSelectState*   GetMultiSelectState(ImGuiID id) { ImGuiC...
  function ImGuiTable (line 3344) | inline    ImGuiTable*   GetCurrentTable() { ImGuiContext& g = *GImGui; r...
  function ImGuiTableInstanceData (line 3357) | inline ImGuiTableInstanceData*  TableGetInstanceData(ImGuiTable* table, ...
  function ImGuiID (line 3358) | inline ImGuiID                  TableGetInstanceID(ImGuiTable* table, in...
  function ImGuiTabBar (line 3389) | inline    ImGuiTabBar*  GetCurrentTabBar() { ImGuiContext& g = *GImGui; ...
  function TabBarGetTabOrder (line 3394) | inline int              TabBarGetTabOrder(ImGuiTabBar* tab_bar, ImGuiTab...
  function RenderNavHighlight (line 3423) | inline    void          RenderNavHighlight(const ImRect& bb, ImGuiID id,...
  function TempInputIsActive (line 3493) | inline bool             TempInputIsActive(ImGuiID id)       { ImGuiConte...
  function ImGuiInputTextState (line 3494) | inline ImGuiInputTextState* GetInputTextState(ImGuiID id)   { ImGuiConte...
  function IsItemActiveAsInputText (line 3496) | inline bool             IsItemActiveAsInputText() { ImGuiContext& g = *G...
  type ImFontBuilderIO (line 3583) | struct ImFontBuilderIO

FILE: src/DesktopPlusUI/imgui/imgui_tables.cpp
  function ImGuiTableFlags (line 271) | inline ImGuiTableFlags TableFixFlags(ImGuiTableFlags flags, ImGuiWindow*...
  function ImGuiTable (line 304) | ImGuiTable* ImGui::TableFindByID(ImGuiID id)
  function TableSetupColumnFlags (line 743) | static void TableSetupColumnFlags(ImGuiTable* table, ImGuiTableColumn* c...
  function TableInitColumnDefaults (line 1572) | static void TableInitColumnDefaults(ImGuiTable* table, ImGuiTableColumn*...
  function ImGuiTableColumnFlags (line 1757) | ImGuiTableColumnFlags ImGui::TableGetColumnFlags(int column_n)
  function ImRect (line 1776) | ImRect ImGui::TableGetCellBgRect(const ImGuiTable* table, int column_n)
  function ImGuiID (line 1791) | ImGuiID ImGui::TableGetColumnResizeID(ImGuiTable* table, int column_n, i...
  type MergeGroup (line 2567) | struct MergeGroup
  function ImU32 (line 2728) | static ImU32 TableGetColumnBorderCol(ImGuiTable* table, int order_n, int...
  function ImGuiTableSortSpecs (line 2841) | ImGuiTableSortSpecs* ImGui::TableGetSortSpecs()
  function ImGuiSortDirection (line 2858) | static inline ImGuiSortDirection TableGetColumnAvailSortDirection(ImGuiT...
  function ImGuiSortDirection (line 2877) | ImGuiSortDirection ImGui::TableGetColumnNextSortDirection(ImGuiTableColu...
  function TableSettingsInit (line 3595) | static void TableSettingsInit(ImGuiTableSettings* settings, ImGuiID id, ...
  function TableSettingsCalcChunkSize (line 3607) | static size_t TableSettingsCalcChunkSize(int columns_count)
  function ImGuiTableSettings (line 3612) | ImGuiTableSettings* ImGui::TableSettingsCreate(ImGuiID id, int columns_c...
  function ImGuiTableSettings (line 3621) | ImGuiTableSettings* ImGui::TableSettingsFindByID(ImGuiID id)
  function ImGuiTableSettings (line 3632) | ImGuiTableSettings* ImGui::TableGetBoundSettings(ImGuiTable* table)
  function TableSettingsHandler_ClearAll (line 3781) | static void TableSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSettin...
  function TableSettingsHandler_ApplyAll (line 3791) | static void TableSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSettin...
  function TableSettingsHandler_ReadLine (line 3821) | static void TableSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHa...
  function TableSettingsHandler_WriteAll (line 3847) | static void TableSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettin...
  function GetDraggedColumnOffset (line 4139) | static float GetDraggedColumnOffset(ImGuiOldColumns* columns, int column...
  function GetColumnWidthEx (line 4172) | static float GetColumnWidthEx(ImGuiOldColumns* columns, int column_index...
  function ImGuiOldColumns (line 4268) | ImGuiOldColumns* ImGui::FindOrCreateColumns(ImGuiWindow* window, ImGuiID...
  function ImGuiID (line 4281) | ImGuiID ImGui::GetColumnsID(const char* str_id, int columns_count)

FILE: src/DesktopPlusUI/imgui/imgui_widgets.cpp
  function ImGuiID (line 906) | ImGuiID ImGui::GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis)
  function ImRect (line 912) | ImRect ImGui::GetWindowScrollbarRect(ImGuiWindow* window, ImGuiAxis axis)
  function CalcMaxPopupHeightFromItemCount (line 1841) | static float CalcMaxPopupHeightFromItemCount(int items_count)
  type ImGuiGetNameFromIndexOldToNewCallbackData (line 2146) | struct ImGuiGetNameFromIndexOldToNewCallbackData { void* UserData; bool ...
  function ImGuiDataTypeInfo (line 2203) | const ImGuiDataTypeInfo* ImGui::DataTypeGetInfo(ImGuiDataType data_type)
  function DataTypeCompareT (line 2334) | static int DataTypeCompareT(const T* lhs, const T* rhs)
  function DataTypeClampT (line 2362) | static bool DataTypeClampT(T* v, const T* v_min, const T* v_max)
  function GetMinimumStepAtDecimalPrecision (line 2396) | static float GetMinimumStepAtDecimalPrecision(int decimal_precision)
  function TYPE (line 2405) | TYPE ImGui::RoundScalarWithFormatT(const char* format, ImGuiDataType dat...
  function TYPE (line 2942) | TYPE ImGui::ScaleValueFromRatioT(ImGuiDataType data_type, float t, TYPE ...
  function ImParseFormatSanitizeForPrinting (line 3540) | void ImParseFormatSanitizeForPrinting(const char* fmt_in, char* fmt_out,...
  function ImParseFormatPrecision (line 3590) | int ImParseFormatPrecision(const char* fmt, int default_precision)
  type ImStb (line 3871) | namespace ImStb
    function STB_TEXTEDIT_STRINGLEN (line 3971) | static int     STB_TEXTEDIT_STRINGLEN(const ImGuiInputTextState* obj) ...
    function STB_TEXTEDIT_GETCHAR (line 3972) | static char    STB_TEXTEDIT_GETCHAR(const ImGuiInputTextState* obj, in...
    function STB_TEXTEDIT_GETWIDTH (line 3973) | static float   STB_TEXTEDIT_GETWIDTH(ImGuiInputTextState* obj, int lin...
    function STB_TEXTEDIT_LAYOUTROW (line 3975) | static void    STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, ImGuiInputTex...
    function IMSTB_TEXTEDIT_GETNEXTCHARINDEX_IMPL (line 3991) | static int IMSTB_TEXTEDIT_GETNEXTCHARINDEX_IMPL(ImGuiInputTextState* o...
    function IMSTB_TEXTEDIT_GETPREVCHARINDEX_IMPL (line 3999) | static int IMSTB_TEXTEDIT_GETPREVCHARINDEX_IMPL(ImGuiInputTextState* o...
    function ImCharIsSeparatorW (line 4007) | static bool ImCharIsSeparatorW(unsigned int c)
    function is_word_boundary_from_right (line 4021) | static int is_word_boundary_from_right(ImGuiInputTextState* obj, int idx)
    function is_word_boundary_from_left (line 4038) | static int is_word_boundary_from_left(ImGuiInputTextState* obj, int idx)
    function STB_TEXTEDIT_MOVEWORDLEFT_IMPL (line 4054) | static int  STB_TEXTEDIT_MOVEWORDLEFT_IMPL(ImGuiInputTextState* obj, i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_MAC (line 4061) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_MAC(ImGuiInputTextState* obj, i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_WIN (line 4069) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_WIN(ImGuiInputTextState* obj, i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_IMPL (line 4077) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(ImGuiInputTextState* obj, ...
    function STB_TEXTEDIT_DELETECHARS (line 4081) | static void STB_TEXTEDIT_DELETECHARS(ImGuiInputTextState* obj, int pos...
    function STB_TEXTEDIT_INSERTCHARS (line 4092) | static bool STB_TEXTEDIT_INSERTCHARS(ImGuiInputTextState* obj, int pos...
    function stb_textedit_replace (line 4148) | static void stb_textedit_replace(ImGuiInputTextState* str, STB_Textedi...
  function InputTextCalcTextLenAndLineCount (line 3894) | static int InputTextCalcTextLenAndLineCount(const char* text_begin, cons...
  function ImVec2 (line 3914) | static ImVec2 InputTextCalcTextSize(ImGuiContext* ctx, const char* text_...
  type ImStb (line 3969) | namespace ImStb
    function STB_TEXTEDIT_STRINGLEN (line 3971) | static int     STB_TEXTEDIT_STRINGLEN(const ImGuiInputTextState* obj) ...
    function STB_TEXTEDIT_GETCHAR (line 3972) | static char    STB_TEXTEDIT_GETCHAR(const ImGuiInputTextState* obj, in...
    function STB_TEXTEDIT_GETWIDTH (line 3973) | static float   STB_TEXTEDIT_GETWIDTH(ImGuiInputTextState* obj, int lin...
    function STB_TEXTEDIT_LAYOUTROW (line 3975) | static void    STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, ImGuiInputTex...
    function IMSTB_TEXTEDIT_GETNEXTCHARINDEX_IMPL (line 3991) | static int IMSTB_TEXTEDIT_GETNEXTCHARINDEX_IMPL(ImGuiInputTextState* o...
    function IMSTB_TEXTEDIT_GETPREVCHARINDEX_IMPL (line 3999) | static int IMSTB_TEXTEDIT_GETPREVCHARINDEX_IMPL(ImGuiInputTextState* o...
    function ImCharIsSeparatorW (line 4007) | static bool ImCharIsSeparatorW(unsigned int c)
    function is_word_boundary_from_right (line 4021) | static int is_word_boundary_from_right(ImGuiInputTextState* obj, int idx)
    function is_word_boundary_from_left (line 4038) | static int is_word_boundary_from_left(ImGuiInputTextState* obj, int idx)
    function STB_TEXTEDIT_MOVEWORDLEFT_IMPL (line 4054) | static int  STB_TEXTEDIT_MOVEWORDLEFT_IMPL(ImGuiInputTextState* obj, i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_MAC (line 4061) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_MAC(ImGuiInputTextState* obj, i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_WIN (line 4069) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_WIN(ImGuiInputTextState* obj, i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_IMPL (line 4077) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(ImGuiInputTextState* obj, ...
    function STB_TEXTEDIT_DELETECHARS (line 4081) | static void STB_TEXTEDIT_DELETECHARS(ImGuiInputTextState* obj, int pos...
    function STB_TEXTEDIT_INSERTCHARS (line 4092) | static bool STB_TEXTEDIT_INSERTCHARS(ImGuiInputTextState* obj, int pos...
    function stb_textedit_replace (line 4148) | static void stb_textedit_replace(ImGuiInputTextState* str, STB_Textedi...
  function InputTextFilterCharacter (line 4290) | static bool InputTextFilterCharacter(ImGuiContext* ctx, unsigned int* p_...
  function InputTextReconcileUndoState (line 4399) | static void InputTextReconcileUndoState(ImGuiInputTextState* state, cons...
  function ColorEditRestoreH (line 5476) | static void ColorEditRestoreH(const float* col, float* H)
  function ColorEditRestoreHS (line 5487) | static void ColorEditRestoreHS(const float* col, float* H, float* S, flo...
  function RenderArrowsForVerticalBar (line 5765) | static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos...
  function TreeNodeStoreStackData (line 6550) | static void TreeNodeStoreStackData(ImGuiTreeNodeFlags flags)
  function ImGuiTypingSelectRequest (line 7170) | ImGuiTypingSelectRequest* ImGui::GetTypingSelectRequest(ImGuiTypingSelec...
  function ImStrimatchlen (line 7266) | static int ImStrimatchlen(const char* s1, const char* s1_end, const char...
  function BoxSelectPreStartDrag (line 7364) | static void BoxSelectPreStartDrag(ImGuiID id, ImGuiSelectionUserData cli...
  function BoxSelectActivateDrag (line 7377) | static void BoxSelectActivateDrag(ImGuiBoxSelectState* bs, ImGuiWindow* ...
  function BoxSelectDeactivateDrag (line 7390) | static void BoxSelectDeactivateDrag(ImGuiBoxSelectState* bs)
  function BoxSelectScrollWithMouseDrag (line 7402) | static void BoxSelectScrollWithMouseDrag(ImGuiBoxSelectState* bs, ImGuiW...
  function DebugLogMultiSelectRequests (line 7516) | static void DebugLogMultiSelectRequests(const char* function, const ImGu...
  function ImRect (line 7527) | static ImRect CalcScopeRect(ImGuiMultiSelectTempData* ms, ImGuiWindow* w...
  function ImGuiMultiSelectIO (line 7556) | ImGuiMultiSelectIO* ImGui::BeginMultiSelect(ImGuiMultiSelectFlags flags,...
  function ImGuiMultiSelectIO (line 7679) | ImGuiMultiSelectIO* ImGui::EndMultiSelect()
  function ImGuiSelectionBasicStorage_BatchSetItemSelected (line 8163) | static void ImGuiSelectionBasicStorage_BatchSetItemSelected(ImGuiSelecti...
  function ImGuiSelectionBasicStorage_BatchFinish (line 8177) | static void ImGuiSelectionBasicStorage_BatchFinish(ImGuiSelectionBasicSt...
  type ImGuiPlotArrayGetterData (line 8530) | struct ImGuiPlotArrayGetterData
    method ImGuiPlotArrayGetterData (line 8535) | ImGuiPlotArrayGetterData(const float* values, int stride) { Values = v...
  function Plot_ArrayGetter (line 8538) | static float Plot_ArrayGetter(void* data, int idx)
  function IsRootOfOpenMenuSet (line 8831) | static bool IsRootOfOpenMenuSet()
  type ImGuiTabBarSection (line 9208) | struct ImGuiTabBarSection
    method ImGuiTabBarSection (line 9214) | ImGuiTabBarSection() { memset(this, 0, sizeof(*this)); }
  type ImGui (line 9217) | namespace ImGui
  function TabItemGetSectionIdx (line 9235) | static inline int TabItemGetSectionIdx(const ImGuiTabItem* tab)
  function ImGuiTabBar (line 9258) | static ImGuiTabBar* GetTabBarFromTabBarRef(const ImGuiPtrOrIndex& ref)
  function ImGuiPtrOrIndex (line 9264) | static ImGuiPtrOrIndex GetTabBarRefFromTabBar(ImGuiTabBar* tab_bar)
  function TabBarCalcScrollableWidth (line 9392) | static float TabBarCalcScrollableWidth(ImGuiTabBar* tab_bar, ImGuiTabBar...
  function ImU32 (line 9642) | static ImU32   ImGui::TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* ...
  function ImGuiTabItem (line 9665) | ImGuiTabItem* ImGui::TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab...
  function ImGuiTabItem (line 9675) | ImGuiTabItem* ImGui::TabBarFindTabByOrder(ImGuiTabBar* tab_bar, int order)
  function ImGuiTabItem (line 9682) | ImGuiTabItem* ImGui::TabBarGetCurrentTab(ImGuiTabBar* tab_bar)
  function ImGuiTabItem (line 9859) | static ImGuiTabItem* ImGui::TabBarScrollingButtons(ImGuiTabBar* tab_bar)
  function ImGuiTabItem (line 9922) | static ImGuiTabItem* ImGui::TabBarTabListPopupButton(ImGuiTabBar* tab_bar)
  function ImVec2 (line 10312) | ImVec2 ImGui::TabItemCalcSize(const char* label, bool has_close_button_o...
  function ImVec2 (line 10324) | ImVec2 ImGui::TabItemCalcSize(ImGuiWindow*)

FILE: src/DesktopPlusUI/imgui/imstb_rectpack.h
  type stbrp_context (line 85) | typedef struct stbrp_context stbrp_context;
  type stbrp_node (line 86) | typedef struct stbrp_node    stbrp_node;
  type stbrp_rect (line 87) | typedef struct stbrp_rect    stbrp_rect;
  type stbrp_coord (line 89) | typedef int            stbrp_coord;
  type stbrp_rect (line 119) | struct stbrp_rect
  type stbrp_node (line 179) | struct stbrp_node
  type stbrp_context (line 185) | struct stbrp_context
  function STBRP_DEF (line 233) | STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
  function STBRP_DEF (line 245) | STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int ...
  function STBRP_DEF (line 265) | STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int ...
  function stbrp__skyline_find_min_y (line 291) | static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first...
  type stbrp__findresult (line 341) | typedef struct
  function stbrp__findresult (line 347) | static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, ...
  function stbrp__findresult (line 449) | static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *co...
  function rect_height_compare (line 528) | static int STBRP__CDECL rect_height_compare(const void *a, const void *b)
  function rect_original_order (line 539) | static int STBRP__CDECL rect_original_order(const void *a, const void *b)
  function STBRP_DEF (line 546) | STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects...

FILE: src/DesktopPlusUI/imgui/imstb_textedit.h
  type StbUndoRecord (line 311) | typedef struct
  type StbUndoState (line 320) | typedef struct
  type STB_TexteditState (line 329) | typedef struct STB_TexteditState
  type StbTexteditRow (line 376) | typedef struct
  function stb_text_locate_coord (line 410) | static int stb_text_locate_coord(IMSTB_TEXTEDIT_STRING *str, float x, fl...
  function stb_textedit_click (line 470) | static void stb_textedit_click(IMSTB_TEXTEDIT_STRING *str, STB_TexteditS...
  function stb_textedit_drag (line 488) | static void stb_textedit_drag(IMSTB_TEXTEDIT_STRING *str, STB_TexteditSt...
  type StbFindState (line 520) | typedef struct
  function stb_textedit_find_charpos (line 530) | static void stb_textedit_find_charpos(StbFindState *find, IMSTB_TEXTEDIT...
  function stb_textedit_clamp (line 581) | static void stb_textedit_clamp(IMSTB_TEXTEDIT_STRING *str, STB_TexteditS...
  function stb_textedit_delete (line 595) | static void stb_textedit_delete(IMSTB_TEXTEDIT_STRING *str, STB_Textedit...
  function stb_textedit_delete_selection (line 603) | static void stb_textedit_delete_selection(IMSTB_TEXTEDIT_STRING *str, ST...
  function stb_textedit_sortselection (line 619) | static void stb_textedit_sortselection(STB_TexteditState *state)
  function stb_textedit_move_to_first (line 629) | static void stb_textedit_move_to_first(STB_TexteditState *state)
  function stb_textedit_move_to_last (line 640) | static void stb_textedit_move_to_last(IMSTB_TEXTEDIT_STRING *str, STB_Te...
  function is_word_boundary (line 663) | static int is_word_boundary( IMSTB_TEXTEDIT_STRING *str, int idx )
  function stb_textedit_move_to_word_previous (line 669) | static int stb_textedit_move_to_word_previous( IMSTB_TEXTEDIT_STRING *st...
  function stb_textedit_move_to_word_next (line 684) | static int stb_textedit_move_to_word_next( IMSTB_TEXTEDIT_STRING *str, i...
  function stb_textedit_prep_selection_at_cursor (line 702) | static void stb_textedit_prep_selection_at_cursor(STB_TexteditState *state)
  function stb_textedit_cut (line 711) | static int stb_textedit_cut(IMSTB_TEXTEDIT_STRING *str, STB_TexteditStat...
  function stb_textedit_paste_internal (line 722) | static int stb_textedit_paste_internal(IMSTB_TEXTEDIT_STRING *str, STB_T...
  function stb_textedit_text (line 743) | static void stb_textedit_text(IMSTB_TEXTEDIT_STRING* str, STB_TexteditSt...
  function stb_textedit_key (line 768) | static void stb_textedit_key(IMSTB_TEXTEDIT_STRING *str, STB_TexteditSta...
  function stb_textedit_flush_redo (line 1142) | static void stb_textedit_flush_redo(StbUndoState *state)
  function stb_textedit_discard_undo (line 1149) | static void stb_textedit_discard_undo(StbUndoState *state)
  function stb_textedit_discard_redo (line 1171) | static void stb_textedit_discard_redo(StbUndoState *state)
  function StbUndoRecord (line 1201) | static StbUndoRecord *stb_text_create_undo_record(StbUndoState *state, i...
  function IMSTB_TEXTEDIT_CHARTYPE (line 1225) | static IMSTB_TEXTEDIT_CHARTYPE *stb_text_createundo(StbUndoState *state,...
  function stb_text_undo (line 1245) | static void stb_text_undo(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState ...
  function stb_text_redo (line 1313) | static void stb_text_redo(IMSTB_TEXTEDIT_STRING *str, STB_TexteditState ...
  function stb_text_makeundo_insert (line 1364) | static void stb_text_makeundo_insert(STB_TexteditState *state, int where...
  function stb_text_makeundo_delete (line 1369) | static void stb_text_makeundo_delete(IMSTB_TEXTEDIT_STRING *str, STB_Tex...
  function stb_text_makeundo_replace (line 1379) | static void stb_text_makeundo_replace(IMSTB_TEXTEDIT_STRING *str, STB_Te...
  function stb_textedit_clear_state (line 1390) | static void stb_textedit_clear_state(STB_TexteditState *state, int is_si...
  function stb_textedit_initialize_state (line 1408) | static void stb_textedit_initialize_state(STB_TexteditState *state, int ...
  function stb_textedit_paste (line 1418) | static int stb_textedit_paste(IMSTB_TEXTEDIT_STRING *str, STB_TexteditSt...

FILE: src/DesktopPlusUI/imgui/imstb_truetype.h
  function my_stbtt_initfont (line 292) | void my_stbtt_initfont(void)
  function my_stbtt_print (line 304) | void my_stbtt_print(float x, float y, char *text)
  function main (line 339) | int main(int argc, char **argv)
  function main (line 380) | int main(int arg, char **argv)
  type stbtt_uint8 (line 433) | typedef unsigned char   stbtt_uint8;
  type stbtt_int8 (line 434) | typedef signed   char   stbtt_int8;
  type stbtt_uint16 (line 435) | typedef unsigned short  stbtt_uint16;
  type stbtt_int16 (line 436) | typedef signed   short  stbtt_int16;
  type stbtt_uint32 (line 437) | typedef unsigned int    stbtt_uint32;
  type stbtt_int32 (line 438) | typedef signed   int    stbtt_int32;
  type stbtt__buf (line 518) | typedef struct
  type stbtt_bakedchar (line 532) | typedef struct
  type stbtt_aligned_quad (line 548) | typedef struct
  type stbtt_packedchar (line 580) | typedef struct
  type stbtt_pack_context (line 587) | typedef struct stbtt_pack_context stbtt_pack_context;
  type stbtt_fontinfo (line 588) | typedef struct stbtt_fontinfo stbtt_fontinfo;
  type stbrp_rect (line 590) | typedef struct stbrp_rect stbrp_rect;
  type stbtt_pack_range (line 624) | typedef struct
  type stbtt_pack_context (line 683) | struct stbtt_pack_context {
  type stbtt_fontinfo (line 718) | struct stbtt_fontinfo
  type stbtt_kerningentry (line 809) | typedef struct stbtt_kerningentry
  type stbtt_vertex (line 840) | typedef struct
  type stbtt__bitmap (line 929) | typedef struct
  function stbtt_uint8 (line 1138) | static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b)
  function stbtt_uint8 (line 1145) | static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b)
  function stbtt__buf_seek (line 1152) | static void stbtt__buf_seek(stbtt__buf *b, int o)
  function stbtt__buf_skip (line 1158) | static void stbtt__buf_skip(stbtt__buf *b, int o)
  function stbtt_uint32 (line 1163) | static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n)
  function stbtt__buf (line 1173) | static stbtt__buf stbtt__new_buf(const void *p, size_t size)
  function stbtt__buf (line 1186) | static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s)
  function stbtt__buf (line 1195) | static stbtt__buf stbtt__cff_get_index(stbtt__buf *b)
  function stbtt_uint32 (line 1209) | static stbtt_uint32 stbtt__cff_int(stbtt__buf *b)
  function stbtt__cff_skip_operand (line 1221) | static void stbtt__cff_skip_operand(stbtt__buf *b) {
  function stbtt__buf (line 1236) | static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key)
  function stbtt__dict_get_ints (line 1251) | static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, s...
  function stbtt__cff_index_count (line 1259) | static int stbtt__cff_index_count(stbtt__buf *b)
  function stbtt__buf (line 1265) | static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i)
  function stbtt_uint16 (line 1291) | static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
  function stbtt_int16 (line 1292) | static stbtt_int16 ttSHORT(stbtt_uint8 *p)   { return p[0]*256 + p[1]; }
  function stbtt_uint32 (line 1293) | static stbtt_uint32 ttULONG(stbtt_uint8 *p)  { return (p[0]<<24) + (p[1]...
  function stbtt_int32 (line 1294) | static stbtt_int32 ttLONG(stbtt_uint8 *p)    { return (p[0]<<24) + (p[1]...
  function stbtt__isfont (line 1299) | static int stbtt__isfont(stbtt_uint8 *font)
  function stbtt_uint32 (line 1311) | static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fo...
  function stbtt_GetFontOffsetForIndex_internal (line 1324) | static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_coll...
  function stbtt_GetNumberOfFonts_internal (line 1343) | static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection)
  function stbtt__buf (line 1359) | static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict)
  function stbtt__get_svg (line 1373) | static int stbtt__get_svg(stbtt_fontinfo *info)
  function stbtt_InitFont_internal (line 1388) | static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *...
  function STBTT_DEF (line 1501) | STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unico...
  function STBTT_DEF (line 1594) | STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int un...
  function stbtt_setvertex (line 1599) | static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int...
  function stbtt__GetGlyfOffset (line 1608) | static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_in...
  function STBTT_DEF (line 1630) | STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_in...
  function STBTT_DEF (line 1646) | STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int code...
  function STBTT_DEF (line 1651) | STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_i...
  function stbtt__close_shape (line 1663) | static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, ...
  function stbtt__GetGlyphShapeTT (line 1679) | static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_...
  type stbtt__csctx (line 1902) | typedef struct
  function stbtt__track_vertex (line 1916) | static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_in...
  function stbtt__csctx_v (line 1925) | static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int3...
  function stbtt__csctx_close_shape (line 1941) | static void stbtt__csctx_close_shape(stbtt__csctx *ctx)
  function stbtt__csctx_rmove_to (line 1947) | static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy)
  function stbtt__csctx_rline_to (line 1955) | static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy)
  function stbtt__csctx_rccurve_to (line 1962) | static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float ...
  function stbtt__buf (line 1973) | static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n)
  function stbtt__buf (line 1987) | static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info,...
  function stbtt__run_charstring (line 2015) | static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_i...
  function stbtt__GetGlyphShapeT2 (line 2274) | static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_...
  function stbtt__GetGlyphInfoT2 (line 2291) | static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_i...
  function STBTT_DEF (line 2302) | STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_...
  function STBTT_DEF (line 2310) | STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int gl...
  function STBTT_DEF (line 2322) | STBTT_DEF int  stbtt_GetKerningTableLength(const stbtt_fontinfo *info)
  function STBTT_DEF (line 2337) | STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_ke...
  function stbtt__GetGlyphKernInfoAdvance (line 2364) | static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, in...
  function stbtt_int32 (line 2394) | static stbtt_int32 stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, i...
  function stbtt_int32 (line 2452) | static stbtt_int32  stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int...
  function stbtt_int32 (line 2501) | static stbtt_int32 stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo *...
  function STBTT_DEF (line 2615) | STBTT_DEF int  stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int...
  function STBTT_DEF (line 2627) | STBTT_DEF int  stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info,...
  function STBTT_DEF (line 2634) | STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, in...
  function STBTT_DEF (line 2639) | STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *as...
  function STBTT_DEF (line 2646) | STBTT_DEF int  stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int ...
  function STBTT_DEF (line 2657) | STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int ...
  function STBTT_DEF (line 2665) | STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, fl...
  function STBTT_DEF (line 2671) | STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *in...
  function STBTT_DEF (line 2677) | STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v)
  function STBTT_DEF (line 2682) | STBTT_DEF stbtt_uint8 *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl)
  function STBTT_DEF (line 2699) | STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, cons...
  function STBTT_DEF (line 2716) | STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unic...
  function STBTT_DEF (line 2726) | STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *fon...
  function STBTT_DEF (line 2744) | STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int g...
  function STBTT_DEF (line 2749) | STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo ...
  function STBTT_DEF (line 2754) | STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, i...
  type stbtt__hheap_chunk (line 2763) | typedef struct stbtt__hheap_chunk
  type stbtt__hheap (line 2768) | typedef struct stbtt__hheap
  function stbtt__hheap_free (line 2796) | static void stbtt__hheap_free(stbtt__hheap *hh, void *p)
  function stbtt__hheap_cleanup (line 2802) | static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata)
  type stbtt__edge (line 2812) | typedef struct stbtt__edge {
  type stbtt__active_edge (line 2818) | typedef struct stbtt__active_edge
  function stbtt__active_edge (line 2840) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
  function stbtt__active_edge (line 2862) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
  function stbtt__fill_active_edges (line 2887) | static void stbtt__fill_active_edges(unsigned char *scanline, int len, s...
  function stbtt__rasterize_sorted_edges (line 2929) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
  function stbtt__handle_clipped_edge (line 3033) | static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__ac...
  function stbtt__sized_trapezoid_area (line 3070) | static float stbtt__sized_trapezoid_area(float height, float top_width, ...
  function stbtt__position_trapezoid_area (line 3077) | static float stbtt__position_trapezoid_area(float height, float tx0, flo...
  function stbtt__sized_triangle_area (line 3082) | static float stbtt__sized_triangle_area(float height, float width)
  function stbtt__fill_active_edges_new (line 3087) | static void stbtt__fill_active_edges_new(float *scanline, float *scanlin...
  function stbtt__rasterize_sorted_edges (line 3305) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
  function stbtt__sort_edges_ins_sort (line 3407) | static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n)
  function stbtt__sort_edges_quicksort (line 3425) | static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n)
  function stbtt__sort_edges (line 3487) | static void stbtt__sort_edges(stbtt__edge *p, int n)
  type stbtt__point (line 3493) | typedef struct
  function stbtt__rasterize (line 3498) | static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, i...
  function stbtt__add_point (line 3555) | static void stbtt__add_point(stbtt__point *points, int n, float x, float y)
  function stbtt__tesselate_curve (line 3563) | static int stbtt__tesselate_curve(stbtt__point *points, int *num_points,...
  function stbtt__tesselate_cubic (line 3583) | static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points...
  function stbtt__point (line 3626) | static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num...
  function STBTT_DEF (line 3703) | STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_...
  function STBTT_DEF (line 3716) | STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata)
  function STBTT_DEF (line 3766) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info,...
  function STBTT_DEF (line 3785) | STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigne...
  function STBTT_DEF (line 3795) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fo...
  function STBTT_DEF (line 3800) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *i...
  function STBTT_DEF (line 3810) | STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, uns...
  function stbtt_BakeFontBitmap_internal (line 3821) | static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset...
  function STBTT_DEF (line 3867) | STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int p...
  type stbrp_coord (line 3895) | typedef int stbrp_coord;
  type stbrp_context (line 3908) | typedef struct
  type stbrp_node (line 3914) | typedef struct
  type stbrp_rect (line 3919) | struct stbrp_rect
  function stbrp_init_target (line 3925) | static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_...
  function stbrp_pack_rects (line 3936) | static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int ...
  function STBTT_DEF (line 3965) | STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pi...
  function STBTT_DEF (line 3997) | STBTT_DEF void stbtt_PackEnd  (stbtt_pack_context *spc)
  function STBTT_DEF (line 4003) | STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsign...
  function STBTT_DEF (line 4013) | STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *sp...
  function stbtt__h_prefilter (line 4020) | static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int ...
  function stbtt__v_prefilter (line 4082) | static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int ...
  function stbtt__oversample_shift (line 4144) | static float stbtt__oversample_shift(int oversample)
  function STBTT_DEF (line 4157) | STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, c...
  function STBTT_DEF (line 4192) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontin...
  function STBTT_DEF (line 4216) | STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *sp...
  function STBTT_DEF (line 4305) | STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, st...
  function STBTT_DEF (line 4310) | STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsign...
  function STBTT_DEF (line 4346) | STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigne...
  function STBTT_DEF (line 4358) | STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata...
  function STBTT_DEF (line 4371) | STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int...
  function stbtt__ray_intersect_bezier (line 4406) | static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], floa...
  function equal (line 4470) | static int equal(float *a, float *b)
  function stbtt__compute_crossings_x (line 4475) | static int stbtt__compute_crossings_x(float x, float y, int nverts, stbt...
  function stbtt__cuberoot (line 4543) | static float stbtt__cuberoot( float x )
  function stbtt__solve_cubic (line 4552) | static int stbtt__solve_cubic(float a, float b, float c, float* r)
  function STBTT_DEF (line 4773) | STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata)
  function stbtt_int32 (line 4784) | static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint...
  function stbtt_CompareUTF8toUTF16_bigendian_internal (line 4823) | static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len...
  function STBTT_DEF (line 4830) | STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font...
  function stbtt__matchpair (line 4851) | static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint...
  function stbtt__matches (line 4898) | static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_ui...
  function stbtt_FindMatchingFont_internal (line 4927) | static int stbtt_FindMatchingFont_internal(unsigned char *font_collectio...
  function STBTT_DEF (line 4943) | STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
  function STBTT_DEF (line 4950) | STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int...
  function STBTT_DEF (line 4955) | STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
  function STBTT_DEF (line 4960) | STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *...
  function STBTT_DEF (line 4965) | STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, cons...
  function STBTT_DEF (line 4970) | STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len...

FILE: src/DesktopPlusUI/imgui_win32_dx11_openvr/imgui_impl_dx11_openvr.cpp
  type ImGui_ImplDX11_Data (line 53) | struct ImGui_ImplDX11_Data
    method ImGui_ImplDX11_Data (line 72) | ImGui_ImplDX11_Data()       { memset((void*)this, 0, sizeof(*this)); V...
  type VERTEX_CONSTANT_BUFFER_DX11 (line 75) | struct VERTEX_CONSTANT_BUFFER_DX11
  function ImGui_ImplDX11_Data (line 82) | static ImGui_ImplDX11_Data* ImGui_ImplDX11_GetBackendData()
    method ImGui_ImplDX11_Data (line 72) | ImGui_ImplDX11_Data()       { memset((void*)this, 0, sizeof(*this)); V...
  function ImGui_ImplDX11_SetupRenderState (line 88) | static void ImGui_ImplDX11_SetupRenderState(ImDrawData* draw_data, ID3D1...
  function ImGui_ImplDX11_RenderDrawData (line 146) | void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data)
  function ImGui_ImplDX11_CreateFontsTexture (line 321) | static void ImGui_ImplDX11_CreateFontsTexture()
  function ImGui_ImplDX11_DestroyFontsTexture (line 367) | static void ImGui_ImplDX11_DestroyFontsTexture()
  function ImGui_ImplDX11_CreateDeviceObjects (line 378) | bool    ImGui_ImplDX11_CreateDeviceObjects()
  function ImGui_ImplDX11_InvalidateDeviceObjects (line 481) | void    ImGui_ImplDX11_InvalidateDeviceObjects()
  function ImGui_ImplDX11_Init (line 501) | bool    ImGui_ImplDX11_Init(ID3D11Device* device, ID3D11DeviceContext* d...
  function ImGui_ImplDX11_Shutdown (line 534) | void ImGui_ImplDX11_Shutdown()
  function ImGui_ImplDX11_NewFrame (line 550) | void ImGui_ImplDX11_NewFrame()

FILE: src/DesktopPlusUI/imgui_win32_dx11_openvr/imgui_impl_dx11_openvr.h
  type ID3D11Device (line 23) | struct ID3D11Device
  type ID3D11DeviceContext (line 24) | struct ID3D11DeviceContext
  type ID3D11SamplerState (line 25) | struct ID3D11SamplerState
  type ID3D11Buffer (line 26) | struct ID3D11Buffer
  type ImGui_ImplDX11_RenderState (line 41) | struct ImGui_ImplDX11_RenderState

FILE: src/DesktopPlusUI/imgui_win32_dx11_openvr/imgui_impl_win32_openvr.cpp
  type ImGui_ImplWin32_Data (line 118) | struct ImGui_ImplWin32_Data
    method ImGui_ImplWin32_Data (line 137) | ImGui_ImplWin32_Data()      { memset((void*)this, 0, sizeof(*this)); }
  function ImGui_ImplWin32_Data (line 144) | static ImGui_ImplWin32_Data* ImGui_ImplWin32_GetBackendData()
    method ImGui_ImplWin32_Data (line 137) | ImGui_ImplWin32_Data()      { memset((void*)this, 0, sizeof(*this)); }
  function ImGui_ImplWin32_Data (line 148) | static ImGui_ImplWin32_Data* ImGui_ImplWin32_GetBackendData(ImGuiIO& io)
    method ImGui_ImplWin32_Data (line 137) | ImGui_ImplWin32_Data()      { memset((void*)this, 0, sizeof(*this)); }
  function ImGui_ImplWin32_UpdateKeyboardCodePage (line 160) | static void ImGui_ImplWin32_UpdateKeyboardCodePage(ImGuiIO& io)
  function ImGui_ImplWin32_InitEx (line 170) | static bool ImGui_ImplWin32_InitEx(void* hwnd, bool platform_has_own_dc)
  function IMGUI_IMPL_API (line 224) | IMGUI_IMPL_API bool     ImGui_ImplWin32_Init(void* hwnd)
  function IMGUI_IMPL_API (line 229) | IMGUI_IMPL_API bool     ImGui_ImplWin32_InitForOpenGL(void* hwnd)
  function ImGui_ImplWin32_Shutdown (line 235) | void    ImGui_ImplWin32_Shutdown()
  function ImGui_ImplWin32_UpdateMouseCursor (line 253) | static bool ImGui_ImplWin32_UpdateMouseCursor(ImGuiIO& io, ImGuiMouseCur...
  function IsVkDown (line 286) | static bool IsVkDown(int vk)
  function ImGui_ImplWin32_AddKeyEvent (line 291) | static void ImGui_ImplWin32_AddKeyEvent(ImGuiIO& io, ImGuiKey key, bool ...
  function ImGui_ImplWin32_ProcessKeyEventsWorkarounds (line 298) | static void ImGui_ImplWin32_ProcessKeyEventsWorkarounds(ImGuiIO& io)
  function ImGui_ImplWin32_UpdateKeyModifiers (line 313) | static void ImGui_ImplWin32_UpdateKeyModifiers(ImGuiIO& io)
  function ImGui_ImplWin32_UpdateMouseData (line 321) | static void ImGui_ImplWin32_UpdateMouseData(ImGuiIO& io)
  function ImGui_ImplWin32_UpdateGamepads (line 350) | static void ImGui_ImplWin32_UpdateGamepads(ImGuiIO& io)
  function ImGui_ImplWin32_NewFrame (line 407) | void    ImGui_ImplWin32_NewFrame()
  function ImGuiKey (line 445) | ImGuiKey ImGui_ImplWin32_KeyEventToImGuiKey(uint64_t wParam, int64_t lPa...
  function ImGuiMouseSource (line 607) | static ImGuiMouseSource ImGui_ImplWin32_GetMouseSourceFromMessageExtraIn...
  function IMGUI_IMPL_API (line 629) | IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT ms...
  function IMGUI_IMPL_API (line 639) | IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandlerEx(HWND hwnd, UINT ...
  function BOOL (line 831) | static BOOL _IsWindowsVersionOrGreater(WORD major, WORD minor, WORD)
  function ImGui_ImplWin32_EnableDpiAwareness (line 872) | void ImGui_ImplWin32_EnableDpiAwareness()
  function ImGui_ImplWin32_GetDpiScaleForMonitor (line 901) | float ImGui_ImplWin32_GetDpiScaleForMonitor(void* monitor)
  function ImGui_ImplWin32_GetDpiScaleForHwnd (line 927) | float ImGui_ImplWin32_GetDpiScaleForHwnd(void* hwnd)
  function ImGui_ImplWin32_EnableAlphaCompositing (line 944) | void ImGui_ImplWin32_EnableAlphaCompositing(void* hwnd)
  function IMGUI_IMPL_API (line 975) | IMGUI_IMPL_API void ImGui_ImplOpenVR_NewFrame()
  function IMGUI_IMPL_API (line 1013) | IMGUI_IMPL_API bool ImGui_ImplOpenVR_InputEventHandler(const vr::VREvent...
  function IMGUI_IMPL_API (line 1088) | IMGUI_IMPL_API vr::EVROverlayError ImGui_ImplOpenVR_InputResetVRKeyboard...
  function IMGUI_IMPL_API (line 1131) | IMGUI_IMPL_API void ImGui_ImplOpenVR_InputOnVRKeyboardClosed()
  function IMGUI_IMPL_API (line 1145) | IMGUI_IMPL_API void ImGui_ImplOpenVR_SetIntersectionMaskFromWindows(vr::...
  function ImGui_ImplOpenVR_AddInputFromOSK (line 1182) | void ImGui_ImplOpenVR_AddInputFromOSK(const char* input)

FILE: src/DesktopPlusUI/implot/implot.cpp
  type ImPlot (line 212) | namespace ImPlot {
    function ImVec4 (line 258) | ImVec4 GetAutoColor(ImPlotCol idx) {
    type ImPlotStyleVarInfo (line 286) | struct ImPlotStyleVarInfo {
    function ImPlotStyleVarInfo (line 326) | static const ImPlotStyleVarInfo* GetPlotStyleVarInfo(ImPlotStyleVar id...
    function AddTextVertical (line 336) | void AddTextVertical(ImDrawList *DrawList, ImVec2 pos, ImU32 col, cons...
    function AddTextCentered (line 379) | void AddTextCentered(ImDrawList* DrawList, ImVec2 top_center, ImU32 co...
    function NiceNum (line 394) | double NiceNum(double x, bool round) {
    function SetImGuiContext (line 423) | void SetImGuiContext(ImGuiContext* ctx) {
    function ImPlotContext (line 427) | ImPlotContext* CreateContext() {
    function DestroyContext (line 435) | void DestroyContext(ImPlotContext* ctx) {
    function ImPlotContext (line 443) | ImPlotContext* GetCurrentContext() {
    function SetCurrentContext (line 447) | void SetCurrentContext(ImPlotContext* ctx) {
    function Initialize (line 454) | void Initialize(ImPlotContext* ctx) {
    function ResetCtxForNextPlot (line 494) | void ResetCtxForNextPlot(ImPlotContext* ctx) {
    function ResetCtxForNextAlignedPlots (line 516) | void ResetCtxForNextAlignedPlots(ImPlotContext* ctx) {
    function ResetCtxForNextSubplot (line 521) | void ResetCtxForNextSubplot(ImPlotContext* ctx) {
    function ImPlotPlot (line 531) | ImPlotPlot* GetPlot(const char* title) {
    function ImPlotPlot (line 537) | ImPlotPlot* GetCurrentPlot() {
    function BustPlotCache (line 541) | void BustPlotCache() {
    function ImVec2 (line 551) | ImVec2 GetLocationPos(const ImRect& outer_rect, const ImVec2& inner_si...
    function ImVec2 (line 571) | ImVec2 CalcLegendSize(ImPlotItemGroup& items, const ImVec2& pad, const...
    function LegendSortingComp (line 592) | int LegendSortingComp(const void* _a, const void* _b) {
    function ShowLegendEntries (line 601) | bool ShowLegendEntries(ImPlotItemGroup& items, const ImRect& legend_bb...
    function Locator_Default (line 695) | void Locator_Default(ImPlotTicker& ticker, const ImPlotRange& range, f...
    function CalcLogarithmicExponents (line 735) | bool CalcLogarithmicExponents(const ImPlotRange& range, float pix, boo...
    function AddTicksLogarithmic (line 754) | void AddTicksLogarithmic(const ImPlotRange& range, int exp_min, int ex...
    function Locator_Log10 (line 775) | void Locator_Log10(ImPlotTicker& ticker, const ImPlotRange& range, flo...
    function CalcSymLogPixel (line 781) | float CalcSymLogPixel(double plt, const ImPlotRange& range, float pixe...
    function Locator_SymLog (line 792) | void Locator_SymLog(ImPlotTicker& ticker, const ImPlotRange& range, fl...
    function AddTicksCustom (line 815) | void AddTicksCustom(const double* values, const char* const labels[], ...
    function ImPlotTimeUnit (line 840) | inline ImPlotTimeUnit GetUnitForRange(double range) {
    function LowerBoundStep (line 849) | inline int LowerBoundStep(int max_divs, const int* divs, const int* st...
    function GetTimeStep (line 859) | inline int GetTimeStep(int max_divs, ImPlotTimeUnit unit) {
    function ImPlotTime (line 888) | ImPlotTime MkGmtTime(struct tm *ptm) {
    function tm (line 900) | tm* GetGmtTime(const ImPlotTime& t, tm* ptm)
    function ImPlotTime (line 912) | ImPlotTime MkLocTime(struct tm *ptm) {
    function tm (line 920) | tm* GetLocTime(const ImPlotTime& t, tm* ptm) {
    function ImPlotTime (line 931) | inline ImPlotTime MkTime(struct tm *ptm) {
    function tm (line 938) | inline tm* GetTime(const ImPlotTime& t, tm* ptm) {
    function ImPlotTime (line 945) | ImPlotTime MakeTime(int year, int month, int day, int hour, int min, i...
    function GetYear (line 968) | int GetYear(const ImPlotTime& t) {
    function ImPlotTime (line 974) | ImPlotTime AddTime(const ImPlotTime& t, ImPlotTimeUnit unit, int count) {
    function ImPlotTime (line 1006) | ImPlotTime FloorTime(const ImPlotTime& t, ImPlotTimeUnit unit) {
    function ImPlotTime (line 1023) | ImPlotTime CeilTime(const ImPlotTime& t, ImPlotTimeUnit unit) {
    function ImPlotTime (line 1027) | ImPlotTime RoundTime(const ImPlotTime& t, ImPlotTimeUnit unit) {
    function ImPlotTime (line 1035) | ImPlotTime CombineDateTime(const ImPlotTime& date_part, const ImPlotTi...
    function FormatTime (line 1056) | int FormatTime(const ImPlotTime& t, char* buffer, int size, ImPlotTime...
    function FormatDate (line 1096) | int FormatDate(const ImPlotTime& t, char* buffer, int size, ImPlotDate...
    function FormatDateTime (line 1125) | int FormatDateTime(const ImPlotTime& t, char* buffer, int size, ImPlot...
    function GetDateTimeWidth (line 1137) | inline float GetDateTimeWidth(ImPlotDateTimeSpec fmt) {
    function TimeLabelSame (line 1144) | inline bool TimeLabelSame(const char* l1, const char* l2) {
    function ImPlotDateTimeSpec (line 1195) | inline ImPlotDateTimeSpec GetDateTimeFmt(const ImPlotDateTimeSpec* ctx...
    function Locator_Time (line 1203) | void Locator_Time(ImPlotTicker& ticker, const ImPlotRange& range, floa...
    function DragFloat (line 1300) | bool DragFloat(const char*, F*, float, F, F) {
    function BeginDisabledControls (line 1314) | inline void BeginDisabledControls(bool cond) {
    function EndDisabledControls (line 1321) | inline void EndDisabledControls(bool cond) {
    function ShowAxisContextMenu (line 1328) | void ShowAxisContextMenu(ImPlotAxis& axis, ImPlotAxis* equal_axis, boo...
    function ShowLegendContextMenu (line 1443) | bool ShowLegendContextMenu(ImPlotLegend& legend, bool visible) {
    function ShowSubplotsContextMenu (line 1469) | void ShowSubplotsContextMenu(ImPlotSubplot& subplot) {
    function ShowPlotContextMenu (line 1496) | void ShowPlotContextMenu(ImPlotPlot& plot) {
    function AxisPrecision (line 1571) | static inline int AxisPrecision(const ImPlotAxis& axis) {
    function RoundAxisValue (line 1576) | static inline double RoundAxisValue(const ImPlotAxis& axis, double val...
    function LabelAxisValue (line 1580) | void LabelAxisValue(const ImPlotAxis& axis, double value, char* buff, ...
    function UpdateAxisColors (line 1598) | void UpdateAxisColors(ImPlotAxis& axis) {
    function PadAndDatumAxesX (line 1610) | void PadAndDatumAxesX(ImPlotPlot& plot, float& pad_T, float& pad_B, Im...
    function PadAndDatumAxesY (line 1675) | void PadAndDatumAxesY(ImPlotPlot& plot, float& pad_L, float& pad_R, Im...
    function RenderGridLinesX (line 1761) | static inline void RenderGridLinesX(ImDrawList& DrawList, const ImPlot...
    function RenderGridLinesY (line 1779) | static inline void RenderGridLinesY(ImDrawList& DrawList, const ImPlot...
    function RenderSelectionRect (line 1795) | static inline void RenderSelectionRect(ImDrawList& DrawList, const ImV...
    function UpdateInput (line 1809) | bool UpdateInput(ImPlotPlot& plot) {
    function ApplyNextPlotData (line 2072) | void ApplyNextPlotData(ImAxis idx) {
    function SetupAxis (line 2098) | void SetupAxis(ImAxis idx, const char* label, ImPlotAxisFlags flags) {
    function SetupAxisLimits (line 2119) | void SetupAxisLimits(ImAxis idx, double min_lim, double max_lim, ImPlo...
    function SetupAxisFormat (line 2132) | void SetupAxisFormat(ImAxis idx, const char* fmt) {
    function SetupAxisLinks (line 2144) | void SetupAxisLinks(ImAxis idx, double* min_lnk, double* max_lnk) {
    function SetupAxisFormat (line 2156) | void SetupAxisFormat(ImAxis idx, ImPlotFormatter formatter, void* data) {
    function SetupAxisTicks (line 2167) | void SetupAxisTicks(ImAxis idx, const double* values, int n_ticks, con...
    function SetupAxisTicks (line 2183) | void SetupAxisTicks(ImAxis idx, double v_min, double v_max, int n_tick...
    function SetupAxisScale (line 2192) | void SetupAxisScale(ImAxis idx, ImPlotScale scale) {
    function SetupAxisScale (line 2234) | void SetupAxisScale(ImAxis idx, ImPlotTransform fwd, ImPlotTransform i...
    function SetupAxisLimitsConstraints (line 2247) | void SetupAxisLimitsConstraints(ImAxis idx, double v_min, double v_max) {
    function SetupAxisZoomConstraints (line 2258) | void SetupAxisZoomConstraints(ImAxis idx, double z_min, double z_max) {
    function SetupAxes (line 2269) | void SetupAxes(const char* x_label, const char* y_label, ImPlotAxisFla...
    function SetupAxesLimits (line 2274) | void SetupAxesLimits(double x_min, double x_max, double y_min, double ...
    function SetupLegend (line 2279) | void SetupLegend(ImPlotLocation location, ImPlotLegendFlags flags) {
    function SetupMouseText (line 2296) | void SetupMouseText(ImPlotLocation location, ImPlotMouseTextFlags flag...
    function SetNextAxisLimits (line 2308) | void SetNextAxisLimits(ImAxis axis, double v_min, double v_max, ImPlot...
    function SetNextAxisLinks (line 2318) | void SetNextAxisLinks(ImAxis axis, double* link_min, double* link_max) {
    function SetNextAxisToFit (line 2325) | void SetNextAxisToFit(ImAxis axis) {
    function SetNextAxesLimits (line 2331) | void SetNextAxesLimits(double x_min, double x_max, double y_min, doubl...
    function SetNextAxesToFit (line 2336) | void SetNextAxesToFit() {
    function BeginPlot (line 2345) | bool BeginPlot(const char* title_id, const ImVec2& size, ImPlotFlags f...
    function SetupFinish (line 2455) | void SetupFinish() {
    function EndPlot (line 2755) | void EndPlot() {
    function SubplotSetCell (line 3229) | void SubplotSetCell(int row, int col) {
    function SubplotSetCell (line 3270) | void SubplotSetCell(int idx) {
    function SubplotNextCell (line 3287) | void SubplotNextCell() {
    function BeginSubplots (line 3293) | bool BeginSubplots(const char* title, int rows, int cols, const ImVec2...
    function EndSubplots (line 3495) | void EndSubplots() {
    function SetAxis (line 3563) | void SetAxis(ImAxis axis) {
    function SetAxes (line 3575) | void SetAxes(ImAxis x_idx, ImAxis y_idx) {
    function ImPlotPoint (line 3587) | ImPlotPoint PixelsToPlot(float x, float y, ImAxis x_idx, ImAxis y_idx) {
    function ImPlotPoint (line 3599) | ImPlotPoint PixelsToPlot(const ImVec2& pix, ImAxis x_idx, ImAxis y_idx) {
    function ImVec2 (line 3603) | ImVec2 PlotToPixels(double x, double y, ImAxis x_idx, ImAxis y_idx) {
    function ImVec2 (line 3615) | ImVec2 PlotToPixels(const ImPlotPoint& plt, ImAxis x_idx, ImAxis y_idx) {
    function ImVec2 (line 3619) | ImVec2 GetPlotPos() {
    function ImVec2 (line 3626) | ImVec2 GetPlotSize() {
    function ImPlotPoint (line 3633) | ImPlotPoint GetPlotMousePos(ImAxis x_idx, ImAxis y_idx) {
    function ImPlotRect (line 3639) | ImPlotRect GetPlotLimits(ImAxis x_idx, ImAxis y_idx) {
    function IsPlotHovered (line 3654) | bool IsPlotHovered() {
    function IsAxisHovered (line 3661) | bool IsAxisHovered(ImAxis axis) {
    function IsSubplotsHovered (line 3668) | bool IsSubplotsHovered() {
    function IsPlotSelected (line 3674) | bool IsPlotSelected() {
    function ImPlotRect (line 3681) | ImPlotRect GetPlotSelection(ImAxis x_idx, ImAxis y_idx) {
    function CancelPlotSelection (line 3698) | void CancelPlotSelection() {
    function HideNextItem (line 3707) | void HideNextItem(bool hidden, ImPlotCond cond) {
    function Annotation (line 3718) | void Annotation(double x, double y, const ImVec4& col, const ImVec2& o...
    function AnnotationV (line 3731) | void AnnotationV(double x, double y, const ImVec4& col, const ImVec2& ...
    function Annotation (line 3741) | void Annotation(double x, double y, const ImVec4& col, const ImVec2& o...
    function TagV (line 3748) | void TagV(ImAxis axis, double v, const ImVec4& col, const char* fmt, v...
    function Tag (line 3756) | void Tag(ImAxis axis, double v, const ImVec4& col, const char* fmt, .....
    function Tag (line 3763) | void Tag(ImAxis axis, double v, const ImVec4& color, bool round) {
    function IMPLOT_API (line 3772) | IMPLOT_API void TagX(double x, const ImVec4& color, bool round) {
    function IMPLOT_API (line 3778) | IMPLOT_API void TagX(double x, const ImVec4& color, const char* fmt, ....
    function IMPLOT_API (line 3787) | IMPLOT_API void TagXV(double x, const ImVec4& color, const char* fmt, ...
    function IMPLOT_API (line 3793) | IMPLOT_API void TagY(double y, const ImVec4& color, bool round) {
    function IMPLOT_API (line 3799) | IMPLOT_API void TagY(double y, const ImVec4& color, const char* fmt, ....
    function IMPLOT_API (line 3808) | IMPLOT_API void TagYV(double y, const ImVec4& color, const char* fmt, ...
    function DragPoint (line 3816) | bool DragPoint(int n_id, double* x, double* y, const ImVec4& col, floa...
    function DragLineX (line 3861) | bool DragLineX(int n_id, double* value, const ImVec4& col, float thick...
    function DragLineY (line 3912) | bool DragLineY(int n_id, double* value, const ImVec4& col, float thick...
    function DragRect (line 3964) | bool DragRect(int n_id, double* x_min, double* y_min, double* x_max, d...
    function DragRect (line 4086) | bool DragRect(int id, ImPlotRect* bounds, const ImVec4& col, ImPlotDra...
    function IsLegendEntryHovered (line 4094) | bool IsLegendEntryHovered(const char* label_id) {
    function BeginLegendPopup (line 4103) | bool BeginLegendPopup(const char* label_id, ImGuiMouseButton mouse_but...
    function EndLegendPopup (line 4119) | void EndLegendPopup() {
    function ShowAltLegend (line 4124) | void ShowAltLegend(const char* title_id, bool vertical, const ImVec2 s...
    function BeginDragDropTargetPlot (line 4164) | bool BeginDragDropTargetPlot() {
    function BeginDragDropTargetAxis (line 4171) | bool BeginDragDropTargetAxis(ImAxis axis) {
    function BeginDragDropTargetLegend (line 4180) | bool BeginDragDropTargetLegend() {
    function EndDragDropTarget (line 4187) | void EndDragDropTarget() {
    function BeginDragDropSourcePlot (line 4192) | bool BeginDragDropSourcePlot(ImGuiDragDropFlags flags) {
    function BeginDragDropSourceAxis (line 4201) | bool BeginDragDropSourceAxis(ImAxis idx, ImGuiDragDropFlags flags) {
    function BeginDragDropSourceItem (line 4210) | bool BeginDragDropSourceItem(const char* label_id, ImGuiDragDropFlags ...
    function EndDragDropSource (line 4222) | void EndDragDropSource() {
    function BeginAlignedPlots (line 4231) | bool BeginAlignedPlots(const char* group_id, bool vertical) {
    function EndAlignedPlots (line 4252) | void EndAlignedPlots() {
    function ImPlotStyle (line 4266) | ImPlotStyle& GetStyle() {
    function PushStyleColor (line 4272) | void PushStyleColor(ImPlotCol idx, ImU32 col) {
    function PushStyleColor (line 4281) | void PushStyleColor(ImPlotCol idx, const ImVec4& col) {
    function PopStyleColor (line 4290) | void PopStyleColor(int count) {
    function PushStyleVar (line 4302) | void PushStyleVar(ImPlotStyleVar idx, float val) {
    function PushStyleVar (line 4314) | void PushStyleVar(ImPlotStyleVar idx, int val) {
    function PushStyleVar (line 4332) | void PushStyleVar(ImPlotStyleVar idx, const ImVec2& val)
    function PopStyleVar (line 4346) | void PopStyleVar(int count) {
    function ImPlotColormap (line 4372) | ImPlotColormap AddColormap(const char* name, const ImVec4* colormap, i...
    function ImPlotColormap (line 4383) | ImPlotColormap AddColormap(const char* name, const ImU32*  colormap, i...
    function GetColormapCount (line 4390) | int GetColormapCount() {
    function ImPlotColormap (line 4400) | ImPlotColormap GetColormapIndex(const char* name) {
    function PushColormap (line 4405) | void PushColormap(ImPlotColormap colormap) {
    function PushColormap (line 4412) | void PushColormap(const char* name) {
    function PopColormap (line 4419) | void PopColormap(int count) {
    function ImU32 (line 4430) | ImU32 NextColormapColorU32() {
    function ImVec4 (line 4439) | ImVec4 NextColormapColor() {
    function GetColormapSize (line 4443) | int GetColormapSize(ImPlotColormap cmap) {
    function ImU32 (line 4450) | ImU32 GetColormapColorU32(int idx, ImPlotColormap cmap) {
    function ImVec4 (line 4458) | ImVec4 GetColormapColor(int idx, ImPlotColormap cmap) {
    function ImU32 (line 4462) | ImU32  SampleColormapU32(float t, ImPlotColormap cmap) {
    function ImVec4 (line 4469) | ImVec4 SampleColormap(float t, ImPlotColormap cmap) {
    function RenderColorBar (line 4473) | void RenderColorBar(const ImU32* colors, int size, ImDrawList& DrawLis...
    function ColormapScale (line 4510) | void ColormapScale(const char* label, double scale_min, double scale_m...
    function ColormapSlider (line 4599) | bool ColormapSlider(const char* label, float* t, ImVec4* out, const ch...
    function ColormapButton (line 4633) | bool ColormapButton(const char* label, const ImVec2& size_arg, ImPlotC...
    function ImPlotInputMap (line 4666) | ImPlotInputMap& GetInputMap() {
    function MapInputDefault (line 4672) | void MapInputDefault(ImPlotInputMap* dst) {
    function MapInputReverse (line 4688) | void MapInputReverse(ImPlotInputMap* dst) {
    function ItemIcon (line 4708) | void ItemIcon(const ImVec4& col) {
    function ItemIcon (line 4712) | void ItemIcon(ImU32 col) {
    function ColormapIcon (line 4721) | void ColormapIcon(ImPlotColormap cmap) {
    function ImDrawList (line 4733) | ImDrawList* GetPlotDrawList() {
    function PushPlotClipRect (line 4737) | void PushPlotClipRect(float expand) {
    function PopPlotClipRect (line 4746) | void PopPlotClipRect() {
    function HelpMarker (line 4751) | static void HelpMarker(const char* desc) {
    function ShowStyleSelector (line 4762) | bool ShowStyleSelector(const char* label)
    function ShowColormapSelector (line 4779) | bool ShowColormapSelector(const char* label) {
    function ShowInputMapSelector (line 4796) | bool ShowInputMapSelector(const char* label) {
    function ShowStyleEditor (line 4811) | void ShowStyleEditor(ImPlotStyle* ref) {
    function ShowUserGuide (line 5055) | void ShowUserGuide() {
    function ShowTicksMetrics (line 5081) | void ShowTicksMetrics(const ImPlotTicker& ticker) {
    function ShowAxisMetrics (line 5086) | void ShowAxisMetrics(const ImPlotPlot& plot, const ImPlotAxis& axis) {
    function ShowMetricsWindow (line 5113) | void ShowMetricsWindow(bool* p_popen) {
    function ShowDatePicker (line 5313) | bool ShowDatePicker(const char* id, int* level, ImPlotTime* t, const I...
    function ShowTimePicker (line 5524) | bool ShowTimePicker(const char* id, ImPlotTime* t) {
    function StyleColorsAuto (line 5621) | void StyleColorsAuto(ImPlotStyle* dst) {
    function StyleColorsClassic (line 5651) | void StyleColorsClassic(ImPlotStyle* dst) {
    function StyleColorsDark (line 5680) | void StyleColorsDark(ImPlotStyle* dst) {
    function StyleColorsLight (line 5709) | void StyleColorsLight(ImPlotStyle* dst) {
    function BeginPlot (line 5744) | bool BeginPlot(const char* title, const char* x_label, const char* y1_...

FILE: src/DesktopPlusUI/implot/implot.h
  type ImPlotContext (line 76) | struct ImPlotContext
  type ImAxis (line 79) | typedef int ImAxis;
  type ImPlotFlags (line 80) | typedef int ImPlotFlags;
  type ImPlotAxisFlags (line 81) | typedef int ImPlotAxisFlags;
  type ImPlotSubplotFlags (line 82) | typedef int ImPlotSubplotFlags;
  type ImPlotLegendFlags (line 83) | typedef int ImPlotLegendFlags;
  type ImPlotMouseTextFlags (line 84) | typedef int ImPlotMouseTextFlags;
  type ImPlotDragToolFlags (line 85) | typedef int ImPlotDragToolFlags;
  type ImPlotColormapScaleFlags (line 86) | typedef int ImPlotColormapScaleFlags;
  type ImPlotItemFlags (line 88) | typedef int ImPlotItemFlags;
  type ImPlotLineFlags (line 89) | typedef int ImPlotLineFlags;
  type ImPlotScatterFlags (line 90) | typedef int ImPlotScatterFlags;
  type ImPlotStairsFlags (line 91) | typedef int ImPlotStairsFlags;
  type ImPlotShadedFlags (line 92) | typedef int ImPlotShadedFlags;
  type ImPlotBarsFlags (line 93) | typedef int ImPlotBarsFlags;
  type ImPlotBarGroupsFlags (line 94) | typedef int ImPlotBarGroupsFlags;
  type ImPlotErrorBarsFlags (line 95) | typedef int ImPlotErrorBarsFlags;
  type ImPlotStemsFlags (line 96) | typedef int ImPlotStemsFlags;
  type ImPlotInfLinesFlags (line 97) | typedef int ImPlotInfLinesFlags;
  type ImPlotPieChartFlags (line 98) | typedef int ImPlotPieChartFlags;
  type ImPlotHeatmapFlags (line 99) | typedef int ImPlotHeatmapFlags;
  type ImPlotHistogramFlags (line 100) | typedef int ImPlotHistogramFlags;
  type ImPlotDigitalFlags (line 101) | typedef int ImPlotDigitalFlags;
  type ImPlotImageFlags (line 102) | typedef int ImPlotImageFlags;
  type ImPlotTextFlags (line 103) | typedef int ImPlotTextFlags;
  type ImPlotDummyFlags (line 104) | typedef int ImPlotDummyFlags;
  type ImPlotCond (line 106) | typedef int ImPlotCond;
  type ImPlotCol (line 107) | typedef int ImPlotCol;
  type ImPlotStyleVar (line 108) | typedef int ImPlotStyleVar;
  type ImPlotScale (line 109) | typedef int ImPlotScale;
  type ImPlotMarker (line 110) | typedef int ImPlotMarker;
  type ImPlotColormap (line 111) | typedef int ImPlotColormap;
  type ImPlotLocation (line 112) | typedef int ImPlotLocation;
  type ImPlotBin (line 113) | typedef int ImPlotBin;
  type ImAxis_ (line 116) | enum ImAxis_ {
  type ImPlotFlags_ (line 130) | enum ImPlotFlags_ {
  type ImPlotAxisFlags_ (line 146) | enum ImPlotAxisFlags_ {
  type ImPlotSubplotFlags_ (line 170) | enum ImPlotSubplotFlags_ {
  type ImPlotLegendFlags_ (line 186) | enum ImPlotLegendFlags_ {
  type ImPlotMouseTextFlags_ (line 198) | enum ImPlotMouseTextFlags_ {
  type ImPlotDragToolFlags_ (line 206) | enum ImPlotDragToolFlags_ {
  type ImPlotColormapScaleFlags_ (line 215) | enum ImPlotColormapScaleFlags_ {
  type ImPlotItemFlags_ (line 223) | enum ImPlotItemFlags_ {
  type ImPlotLineFlags_ (line 230) | enum ImPlotLineFlags_ {
  type ImPlotScatterFlags_ (line 240) | enum ImPlotScatterFlags_ {
  type ImPlotStairsFlags_ (line 246) | enum ImPlotStairsFlags_ {
  type ImPlotShadedFlags_ (line 253) | enum ImPlotShadedFlags_ {
  type ImPlotBarsFlags_ (line 258) | enum ImPlotBarsFlags_ {
  type ImPlotBarGroupsFlags_ (line 264) | enum ImPlotBarGroupsFlags_ {
  type ImPlotErrorBarsFlags_ (line 271) | enum ImPlotErrorBarsFlags_ {
  type ImPlotStemsFlags_ (line 277) | enum ImPlotStemsFlags_ {
  type ImPlotInfLinesFlags_ (line 283) | enum ImPlotInfLinesFlags_ {
  type ImPlotPieChartFlags_ (line 289) | enum ImPlotPieChartFlags_ {
  type ImPlotHeatmapFlags_ (line 295) | enum ImPlotHeatmapFlags_ {
  type ImPlotHistogramFlags_ (line 301) | enum ImPlotHistogramFlags_ {
  type ImPlotDigitalFlags_ (line 311) | enum ImPlotDigitalFlags_ {
  type ImPlotImageFlags_ (line 316) | enum ImPlotImageFlags_ {
  type ImPlotTextFlags_ (line 321) | enum ImPlotTextFlags_ {
  type ImPlotDummyFlags_ (line 327) | enum ImPlotDummyFlags_ {
  type ImPlotCond_ (line 332) | enum ImPlotCond_
  type ImPlotCol_ (line 340) | enum ImPlotCol_ {
  type ImPlotStyleVar_ (line 368) | enum ImPlotStyleVar_ {
  type ImPlotScale_ (line 402) | enum ImPlotScale_ {
  type ImPlotMarker_ (line 410) | enum ImPlotMarker_ {
  type ImPlotColormap_ (line 426) | enum ImPlotColormap_ {
  type ImPlotLocation_ (line 446) | enum ImPlotLocation_ {
  type ImPlotBin_ (line 459) | enum ImPlotBin_ {
  function ImPlotPoint (line 467) | struct ImPlotPoint {
  function const (line 472) | double  operator[] (size_t idx) const { return (&x)[idx]; }
  function ImPlotRange (line 481) | struct ImPlotRange {
  function Contains (line 485) | bool Contains(double value) const     { return value >= Min && value <= ...
  function Clamp (line 487) | double Clamp(double value) const      { return (value < Min) ? Min : (va...
  function ImPlotRect (line 491) | struct ImPlotRect {
  function Contains (line 495) | bool Contains(const ImPlotPoint& p) const                          { ret...
  function Contains (line 496) | bool Contains(double x, double y) const                            { ret...
  function ImPlotPoint (line 498) | ImPlotPoint Clamp(const ImPlotPoint& p)                            { ret...
  function ImPlotPoint (line 499) | ImPlotPoint Clamp(double x, double y)                              { ret...
  type ImPlotStyle (line 505) | struct ImPlotStyle {
  type ImPlotInputMap (line 562) | struct ImPlotInputMap {
  type ImPlotPoint (line 586) | typedef ImPlotPoint (*ImPlotGetter)(int idx, void* user_data);
  function namespace (line 591) | namespace ImPlot {
  type ImPlotFlagsObsolete_ (line 1270) | enum ImPlotFlagsObsolete_ {
  function namespace (line 1275) | namespace ImPlot {

FILE: src/DesktopPlusUI/implot/implot_internal.h
  type ImPlotTick (line 80) | struct ImPlotTick
  type ImPlotAxis (line 81) | struct ImPlotAxis
  type ImPlotAxisColor (line 82) | struct ImPlotAxisColor
  type ImPlotItem (line 83) | struct ImPlotItem
  type ImPlotLegend (line 84) | struct ImPlotLegend
  type ImPlotPlot (line 85) | struct ImPlotPlot
  type ImPlotNextPlotData (line 86) | struct ImPlotNextPlotData
  type ImPlotTicker (line 87) | struct ImPlotTicker
  function ImLog10 (line 102) | static inline float  ImLog10(float x)  { return log10f(x); }
  function ImLog10 (line 103) | static inline double ImLog10(double x) { return log10(x);  }
  function ImSinh (line 104) | static inline float  ImSinh(float x)   { return sinhf(x);  }
  function ImSinh (line 105) | static inline double ImSinh(double x)  { return sinh(x);   }
  function ImAsinh (line 106) | static inline float  ImAsinh(float x)  { return asinhf(x); }
  function ImAsinh (line 107) | static inline double ImAsinh(double x) { return asinh(x);  }
  function ImHasFlag (line 110) | bool ImHasFlag(TSet set, TFlag flag) { return (set & flag) == flag; }
  function ImPosMod (line 121) | static inline int ImPosMod(int l, int r) { return (l % r + r) % r; }
  function ImNan (line 123) | static inline bool ImNan(double val) { return isnan(val); }
  function ImNanOrInf (line 125) | static inline bool ImNanOrInf(double val) { return !(val >= -DBL_MAX && ...
  function ImConstrainNan (line 127) | static inline double ImConstrainNan(double val) { return ImNan(val) ? 0 ...
  function ImConstrainInf (line 129) | static inline double ImConstrainInf(double val) { return val >= DBL_MAX ...
  function ImConstrainLog (line 131) | static inline double ImConstrainLog(double val) { return val <= 0 ? 0.00...
  function ImConstrainTime (line 133) | static inline double ImConstrainTime(double val) { return val < IMPLOT_M...
  function ImMinMaxArray (line 144) | void ImMinMaxArray(const T* values, int count, T* min_out, T* max_out) {
  function ImMean (line 162) | double ImMean(const T* values, int count) {
  function ImStdDev (line 171) | double ImStdDev(const T* values, int count) {
  function ImU32 (line 180) | static inline ImU32 ImMixU32(ImU32 a, ImU32 b, ImU32 s) {
  function ImU32 (line 202) | static inline ImU32 ImLerpU32(const ImU32* colors, int size, float t) {
  function ImU32 (line 215) | static inline ImU32 ImAlphaU32(ImU32 col, float alpha) {
  function ImOverlaps (line 221) | bool ImOverlaps(T min_a, T max_a, T min_b, T max_b) {
  type ImPlotTimeUnit (line 229) | typedef int ImPlotTimeUnit;
  type ImPlotDateFmt (line 230) | typedef int ImPlotDateFmt;
  type ImPlotTimeFmt (line 231) | typedef int ImPlotTimeFmt;
  type ImPlotTimeUnit_ (line 233) | enum ImPlotTimeUnit_ {
  type ImPlotDateFmt_ (line 245) | enum ImPlotDateFmt_ {              // default        [ ISO 8601     ]
  type ImPlotTimeFmt_ (line 254) | enum ImPlotTimeFmt_ {              // default        [ 24 Hour Clock ]
  type ImPlotDateTimeSpec (line 278) | struct ImPlotDateTimeSpec {
  type ImPlotTime (line 293) | struct ImPlotTime {
  function RollOver (line 298) | void RollOver() { S  = S + Us / 1000000;  Us = Us % 1000000; }
  function ImPlotTime (line 300) | static ImPlotTime FromDouble(double t) { return ImPlotTime((time_t)t, (i...
  function _AppendTable (line 319) | struct ImPlotColormapData {
  function RebuildTables (line 391) | void RebuildTables() {
  function IsQual (line 399) | inline bool           IsQual(ImPlotColormap cmap) const                 ...
  function ImPlotColormap (line 401) | inline ImPlotColormap GetIndex(const char* name) const                  ...
  function ImU32 (line 403) | inline const ImU32*   GetKeys(ImPlotColormap cmap) const                ...
  function GetKeyCount (line 404) | inline int            GetKeyCount(ImPlotColormap cmap) const            ...
  function ImU32 (line 405) | inline ImU32          GetKeyColor(ImPlotColormap cmap, int idx) const   ...
  function SetKeyColor (line 406) | inline void           SetKeyColor(ImPlotColormap cmap, int idx, ImU32 va...
  function ImU32 (line 408) | inline const ImU32*   GetTable(ImPlotColormap cmap) const               ...
  function GetTableSize (line 409) | inline int            GetTableSize(ImPlotColormap cmap) const           ...
  function ImU32 (line 410) | inline ImU32          GetTableColor(ImPlotColormap cmap, int idx) const ...
  function ImU32 (line 412) | inline ImU32 LerpTable(ImPlotColormap cmap, float t) const {
  type ImPlotPointError (line 421) | struct ImPlotPointError {
  type ImPlotAnnotation (line 429) | struct ImPlotAnnotation {
  function AppendV (line 444) | struct ImPlotAnnotationCollection {
  function Append (line 465) | void Append(const ImVec2& pos, const ImVec2& off, ImU32 bg, ImU32 fg, bo...
  function Reset (line 476) | void Reset() {
  type ImPlotTag (line 483) | struct ImPlotTag {
  function AppendV (line 491) | struct ImPlotTagCollection {
  function Append (line 513) | void Append(ImAxis axis, double value, ImU32 bg, ImU32 fg, const char* f...
  function Reset (line 524) | void Reset() {
  type ImPlotTick (line 532) | struct ImPlotTick
  function AddTick (line 554) | struct ImPlotTicker {
  function ImPlotTick (line 587) | inline ImPlotTick& AddTick(ImPlotTick tick) {
  function OverrideSizeLate (line 605) | void OverrideSizeLate(const ImVec2& size) {
  function Reset (line 610) | void Reset() {
  function Reset (line 697) | inline void Reset() {
  function SetRange (line 755) | inline void SetRange(double v1, double v2) {
  function SetRange (line 764) | inline void SetRange(const ImPlotRange& range) {
  function SetAspect (line 768) | inline void SetAspect(double unit_per_pix) {
  function Constrain (line 785) | inline void Constrain() {
  function UpdateTransformCache (line 807) | inline void UpdateTransformCache() {
  function PlotToPixels (line 819) | inline float PlotToPixels(double plt) const {
  function PixelsToPlot (line 829) | inline double PixelsToPlot(float pix) const {
  function ExtendFit (line 839) | inline void ExtendFit(double v) {
  function ExtendFitWith (line 846) | inline void ExtendFitWith(ImPlotAxis& alt, double v, double v_alt) {
  function ApplyFit (line 855) | inline void ApplyFit(float padding) {
  function IsPanLocked (line 890) | inline bool IsPanLocked(bool increasing) {
  function PushLinks (line 904) | void PushLinks() {
  function PullLinks (line 909) | void PullLinks() {
  type ImPlotAlignmentData (line 917) | struct ImPlotAlignmentData {
  function End (line 935) | void End()   { PadA = PadAMax; PadB = PadBMax;      }
  function Reset (line 936) | void Reset() { PadA = PadB = PadAMax = PadBMax = 0; }
  function Reset (line 983) | void Reset() { Indices.shrink(0); Labels.Buf.shrink(0); }
  function GetItemID (line 987) | struct ImPlotItemGroup
  function ImPlotItem (line 998) | ImPlotItem* GetItem(ImGuiID id)              { return ItemPool.GetByKey(...
  function ImPlotItem (line 999) | ImPlotItem* GetItem(const char* label_id)    { return GetItem(GetItemID(...
  function ImPlotItem (line 1000) | ImPlotItem* GetOrAddItem(ImGuiID id)         { return ItemPool.GetOrAddB...
  function ImPlotItem (line 1001) | ImPlotItem* GetItemByIndex(int i)            { return ItemPool.GetByInde...
  function GetItemIndex (line 1002) | int         GetItemIndex(ImPlotItem* item)   { return ItemPool.GetIndex(...
  function ImPlotItem (line 1004) | ImPlotItem* GetLegendItem(int i)             { return ItemPool.GetByInde...
  function Reset (line 1006) | void        Reset()                          { ItemPool.Clear(); Legend....
  type ImPlotPlot (line 1010) | struct ImPlotPlot
  function ClearTextBuffer (line 1068) | inline void ClearTextBuffer() { TextBuffer.Buf.shrink(0); }
  function SetTitle (line 1070) | inline void SetTitle(const char* title) {
  function ImPlotAxis (line 1082) | inline       ImPlotAxis& XAxis(int i)       { return Axes[ImAxis_X1 + i]; }
  function ImPlotAxis (line 1083) | inline const ImPlotAxis& XAxis(int i) const { return Axes[ImAxis_X1 + i]; }
  function ImPlotAxis (line 1084) | inline       ImPlotAxis& YAxis(int i)       { return Axes[ImAxis_Y1 + i]; }
  function ImPlotAxis (line 1085) | inline const ImPlotAxis& YAxis(int i) const { return Axes[ImAxis_Y1 + i]; }
  function EnabledAxesX (line 1087) | inline int EnabledAxesX() {
  function EnabledAxesY (line 1094) | inline int EnabledAxesY() {
  function SetAxisLabel (line 1101) | inline void SetAxisLabel(ImPlotAxis& axis, const char* label) {
  function Reset (line 1150) | struct ImPlotNextPlotData
  function Reset (line 1172) | struct ImPlotNextItemData {
  type ImPlotContext (line 1201) | struct ImPlotContext {
  function namespace (line 1256) | namespace ImPlot {
  function AnyAxesInputLocked (line 1343) | static inline bool AnyAxesInputLocked(ImPlotAxis* axes, int count) {
  function AllAxesInputLocked (line 1352) | static inline bool AllAxesInputLocked(ImPlotAxis* axes, int count) {
  function AnyAxesHeld (line 1360) | static inline bool AnyAxesHeld(ImPlotAxis* axes, int count) {
  function AnyAxesHovered (line 1368) | static inline bool AnyAxesHovered(ImPlotAxis* axes, int count) {
  function FitThisFrame (line 1377) | static inline bool FitThisFrame() {
  function FitPointX (line 1382) | static inline void FitPointX(double x) {
  function FitPointY (line 1389) | static inline void FitPointY(double y) {
  function FitPoint (line 1396) | static inline void FitPoint(const ImPlotPoint& p) {
  function RangesOverlap (line 1405) | static inline bool RangesOverlap(const ImPlotRange& r1, const ImPlotRang...
  function ImPlotNextItemData (line 1438) | static inline const ImPlotNextItemData& GetItemData() { return GImPlot->...
  function IsColorAuto (line 1441) | static inline bool IsColorAuto(const ImVec4& col) { return col.w == -1; }
  function IsColorAuto (line 1443) | static inline bool IsColorAuto(ImPlotCol idx) { return IsColorAuto(GImPl...
  function ImVec4 (line 1448) | static inline ImVec4 GetStyleColorVec4(ImPlotCol idx) { return IsColorAu...
  function ImU32 (line 1449) | static inline ImU32  GetStyleColorU32(ImPlotCol idx)  { return ImGui::Co...
  function ImVec2 (line 1456) | static inline ImVec2 CalcTextSizeVertical(const char *text) {
  function ImU32 (line 1461) | static inline ImU32 CalcTextColor(const ImVec4& bg) { return (bg.x * 0.2...
  function ImU32 (line 1462) | static inline ImU32 CalcTextColor(ImU32 bg)         { return CalcTextCol...
  function ImU32 (line 1464) | static inline ImU32 CalcHoverColor(ImU32 col)       {  return ImMixU32(c...
  function ImVec2 (line 1467) | static inline ImVec2 ClampLabelPos(ImVec2 pos, const ImVec2& size, const...
  function OrderOfMagnitude (line 1492) | static inline int OrderOfMagnitude(double val) { return val == 0 ? 0 : (...
  function OrderToPrecision (line 1494) | static inline int OrderToPrecision(int order) { return order > 0 ? 0 : 1...
  function Precision (line 1496) | static inline int Precision(double val) { return OrderToPrecision(OrderO...
  function RoundTo (line 1498) | static inline double RoundTo(double val, int prec) { double p = pow(10,(...
  function ImVec2 (line 1501) | static inline ImVec2 Intersection(const ImVec2& a1, const ImVec2& a2, co...
  function CalculateBins (line 1519) | void CalculateBins(const T* values, int count, ImPlotBin meth, const ImP...
  function IsLeapYear (line 1543) | static inline bool IsLeapYear(int year) {
  function GetDaysInMonth (line 1547) | static inline int GetDaysInMonth(int year, int month) {
  type tm (line 1553) | struct tm
  type tm (line 1558) | struct tm
  function TransformForward_Log10 (line 1602) | static inline double TransformForward_Log10(double v, void*) {
  function TransformInverse_Log10 (line 1607) | static inline double TransformInverse_Log10(double v, void*) {
  function TransformForward_SymLog (line 1611) | static inline double TransformForward_SymLog(double v, void*) {
  function TransformInverse_SymLog (line 1615) | static inline double TransformInverse_SymLog(double v, void*) {
  function TransformForward_Logit (line 1619) | static inline double TransformForward_Logit(double v, void*) {
  function TransformInverse_Logit (line 1624) | static inline double TransformInverse_Logit(double v, void*) {
  function Formatter_Default (line 1632) | static inline int Formatter_Default(double value, char* buff, int size, ...
  function Formatter_Logit (line 1637) | static inline int Formatter_Logit(double value, char* buff, int size, vo...
  type Formatter_Time_Data (line 1646) | struct Formatter_Time_Data {
  function Formatter_Time (line 1653) | static inline int Formatter_Time(double, char* buff, int size, void* dat...

FILE: src/DesktopPlusUI/implot/implot_items.cpp
  function IMPLOT_INLINE (line 58) | static IMPLOT_INLINE float  ImInvSqrt(float x) { return _mm_cvtss_f32(_m...
  function IMPLOT_INLINE (line 60) | static IMPLOT_INLINE float  ImInvSqrt(float x) { return 1.0f / sqrtf(x); }
  type ImPlot (line 107) | namespace ImPlot {
    type MaxIdx (line 115) | struct MaxIdx { static const unsigned int Value; }
    function IMPLOT_INLINE (line 119) | IMPLOT_INLINE void GetLineRenderProps(const ImDrawList& draw_list, flo...
    function IMPLOT_INLINE (line 133) | IMPLOT_INLINE void PrimLine(ImDrawList& draw_list, const ImVec2& P1, c...
    function IMPLOT_INLINE (line 166) | IMPLOT_INLINE void PrimRectFill(ImDrawList& draw_list, const ImVec2& P...
    function IMPLOT_INLINE (line 192) | IMPLOT_INLINE void PrimRectLine(ImDrawList& draw_list, const ImVec2& P...
    function ImPlotItem (line 284) | ImPlotItem* RegisterOrGetItem(const char* label_id, ImPlotItemFlags fl...
    function ImPlotItem (line 307) | ImPlotItem* GetItem(const char* label_id) {
    function IsItemHidden (line 312) | bool IsItemHidden(const char* label_id) {
    function ImPlotItem (line 317) | ImPlotItem* GetCurrentItem() {
    function SetNextLineStyle (line 322) | void SetNextLineStyle(const ImVec4& col, float weight) {
    function SetNextFillStyle (line 328) | void SetNextFillStyle(const ImVec4& col, float alpha) {
    function SetNextMarkerStyle (line 334) | void SetNextMarkerStyle(ImPlotMarker marker, float size, const ImVec4&...
    function SetNextErrorBarStyle (line 343) | void SetNextErrorBarStyle(const ImVec4& col, float size, float weight) {
    function ImVec4 (line 350) | ImVec4 GetLastItemColor() {
    function BustItemCache (line 357) | void BustItemCache() {
    function BustColorCache (line 369) | void BustColorCache(const char* plot_title_id) {
    function BeginItem (line 395) | bool BeginItem(const char* label_id, ImPlotItemFlags flags, ImPlotCol ...
    function EndItem (line 476) | void EndItem() {
    function IMPLOT_INLINE (line 492) | IMPLOT_INLINE T IndexData(const T* data, int idx, int count, int offse...
    type IndexerIdx (line 504) | struct IndexerIdx {
      method IndexerIdx (line 505) | IndexerIdx(const T* data, int count, int offset = 0, int stride = si...
      method IMPLOT_INLINE (line 511) | IMPLOT_INLINE double operator()(I idx) const {
    type IndexerAdd (line 521) | struct IndexerAdd {
      method IndexerAdd (line 522) | IndexerAdd(const _Indexer1& indexer1, const _Indexer2& indexer2, dou...
      method IMPLOT_INLINE (line 529) | IMPLOT_INLINE double operator()(I idx) const {
    type IndexerLin (line 539) | struct IndexerLin {
      method IndexerLin (line 540) | IndexerLin(double m, double b) : M(m), B(b) { }
      method IMPLOT_INLINE (line 541) | IMPLOT_INLINE double operator()(I idx) const {
    type IndexerConst (line 548) | struct IndexerConst {
      method IndexerConst (line 549) | IndexerConst(double ref) : Ref(ref) { }
      method IMPLOT_INLINE (line 550) | IMPLOT_INLINE double operator()(I) const { return Ref; }
    type GetterXY (line 559) | struct GetterXY {
      method GetterXY (line 560) | GetterXY(_IndexerX x, _IndexerY y, int count) : IndxerX(x), IndxerY(...
      method IMPLOT_INLINE (line 561) | IMPLOT_INLINE ImPlotPoint operator()(I idx) const {
    type GetterFuncPtr (line 570) | struct GetterFuncPtr {
      method GetterFuncPtr (line 571) | GetterFuncPtr(ImPlotGetter getter, void* data, int count) :
      method IMPLOT_INLINE (line 576) | IMPLOT_INLINE ImPlotPoint operator()(I idx) const {
    type GetterOverrideX (line 585) | struct GetterOverrideX {
      method GetterOverrideX (line 586) | GetterOverrideX(_Getter getter, double x) : Getter(getter), X(x), Co...
      method IMPLOT_INLINE (line 587) | IMPLOT_INLINE ImPlotPoint operator()(I idx) const {
    type GetterOverrideY (line 598) | struct GetterOverrideY {
      method GetterOverrideY (line 599) | GetterOverrideY(_Getter getter, double y) : Getter(getter), Y(y), Co...
      method IMPLOT_INLINE (line 600) | IMPLOT_INLINE ImPlotPoint operator()(I idx) const {
    type GetterLoop (line 611) | struct GetterLoop {
      method GetterLoop (line 612) | GetterLoop(_Getter getter) : Getter(getter), Count(getter.Count + 1)...
      method IMPLOT_INLINE (line 613) | IMPLOT_INLINE ImPlotPoint operator()(I idx) const {
    type GetterError (line 622) | struct GetterError {
      method GetterError (line 623) | GetterError(const T* xs, const T* ys, const T* neg, const T* pos, in...
      method IMPLOT_INLINE (line 632) | IMPLOT_INLINE ImPlotPointError operator()(I idx) const {
    type Fitter1 (line 652) | struct Fitter1 {
      method Fitter1 (line 653) | Fitter1(const _Getter1& getter) : Getter(getter) { }
      method Fit (line 654) | void Fit(ImPlotAxis& x_axis, ImPlotAxis& y_axis) const {
    type FitterX (line 665) | struct FitterX {
      method FitterX (line 666) | FitterX(const _Getter1& getter) : Getter(getter) { }
      method Fit (line 667) | void Fit(ImPlotAxis& x_axis, ImPlotAxis&) const {
    type FitterY (line 677) | struct FitterY {
      method FitterY (line 678) | FitterY(const _Getter1& getter) : Getter(getter) { }
      method Fit (line 679) | void Fit(ImPlotAxis&, ImPlotAxis& y_axis) const {
    type Fitter2 (line 689) | struct Fitter2 {
      method Fitter2 (line 690) | Fitter2(const _Getter1& getter1, const _Getter2& getter2) : Getter1(...
      method Fit (line 691) | void Fit(ImPlotAxis& x_axis, ImPlotAxis& y_axis) const {
    type FitterBarV (line 708) | struct FitterBarV {
      method FitterBarV (line 709) | FitterBarV(const _Getter1& getter1, const _Getter2& getter2, double ...
      method Fit (line 714) | void Fit(ImPlotAxis& x_axis, ImPlotAxis& y_axis) const {
    type FitterBarH (line 731) | struct FitterBarH {
      method FitterBarH (line 732) | FitterBarH(const _Getter1& getter1, const _Getter2& getter2, double ...
      method Fit (line 737) | void Fit(ImPlotAxis& x_axis, ImPlotAxis& y_axis) const {
    type FitterRect (line 753) | struct FitterRect {
      method FitterRect (line 754) | FitterRect(const ImPlotPoint& pmin, const ImPlotPoint& pmax) :
      method FitterRect (line 758) | FitterRect(const ImPlotRect& rect) :
      method Fit (line 761) | void Fit(ImPlotAxis& x_axis, ImPlotAxis& y_axis) const {
    type Transformer1 (line 775) | struct Transformer1 {
      method Transformer1 (line 776) | Transformer1(double pixMin, double pltMin, double pltMax, double m, ...
      method IMPLOT_INLINE (line 787) | IMPLOT_INLINE float operator()(T p) const {
    type Transformer2 (line 801) | struct Transformer2 {
      method Transformer2 (line 802) | Transformer2(const ImPlotAxis& x_axis, const ImPlotAxis& y_axis) :
      method Transformer2 (line 821) | Transformer2(const ImPlotPlot& plot) :
      method Transformer2 (line 825) | Transformer2() :
      method IMPLOT_INLINE (line 829) | IMPLOT_INLINE ImVec2 operator()(const P& plt) const {
      method IMPLOT_INLINE (line 836) | IMPLOT_INLINE ImVec2 operator()(T x, T y) const {
    type RendererBase (line 851) | struct RendererBase {
      method RendererBase (line 852) | RendererBase(int prims, int idx_consumed, int vtx_consumed) :
    type RendererLineStrip (line 864) | struct RendererLineStrip : RendererBase {
      method RendererLineStrip (line 865) | RendererLineStrip(const _Getter& getter, ImU32 col, float weight) :
      method Init (line 873) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 876) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererLineStripSkip (line 895) | struct RendererLineStripSkip : RendererBase {
      method RendererLineStripSkip (line 896) | RendererLineStripSkip(const _Getter& getter, ImU32 col, float weight) :
      method Init (line 904) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 907) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererLineSegments1 (line 928) | struct RendererLineSegments1 : RendererBase {
      method RendererLineSegments1 (line 929) | RendererLineSegments1(const _Getter& getter, ImU32 col, float weight) :
      method Init (line 935) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 938) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererLineSegments2 (line 954) | struct RendererLineSegments2 : RendererBase {
      method RendererLineSegments2 (line 955) | RendererLineSegments2(const _Getter1& getter1, const _Getter2& gette...
      method Init (line 962) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 965) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererBarsFillV (line 982) | struct RendererBarsFillV : RendererBase {
      method RendererBarsFillV (line 983) | RendererBarsFillV(const _Getter1& getter1, const _Getter2& getter2, ...
      method Init (line 990) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 993) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererBarsFillH (line 1020) | struct RendererBarsFillH : RendererBase {
      method RendererBarsFillH (line 1021) | RendererBarsFillH(const _Getter1& getter1, const _Getter2& getter2, ...
      method Init (line 1028) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 1031) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererBarsLineV (line 1058) | struct RendererBarsLineV : RendererBase {
      method RendererBarsLineV (line 1059) | RendererBarsLineV(const _Getter1& getter1, const _Getter2& getter2, ...
      method Init (line 1067) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 1070) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererBarsLineH (line 1098) | struct RendererBarsLineH : RendererBase {
      method RendererBarsLineH (line 1099) | RendererBarsLineH(const _Getter1& getter1, const _Getter2& getter2, ...
      method Init (line 1107) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 1110) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererStairsPre (line 1139) | struct RendererStairsPre : RendererBase {
      method RendererStairsPre (line 1140) | RendererStairsPre(const _Getter& getter, ImU32 col, float weight) :
      method Init (line 1148) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 1151) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererStairsPost (line 1170) | struct RendererStairsPost : RendererBase {
      method RendererStairsPost (line 1171) | RendererStairsPost(const _Getter& getter, ImU32 col, float weight) :
      method Init (line 1179) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 1182) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererStairsPreShaded (line 1201) | struct RendererStairsPreShaded : RendererBase {
      method RendererStairsPreShaded (line 1202) | RendererStairsPreShaded(const _Getter& getter, ImU32 col) :
      method Init (line 1210) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 1213) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererStairsPostShaded (line 1233) | struct RendererStairsPostShaded : RendererBase {
      method RendererStairsPostShaded (line 1234) | RendererStairsPostShaded(const _Getter& getter, ImU32 col) :
      method Init (line 1242) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 1245) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererShaded (line 1267) | struct RendererShaded : RendererBase {
      method RendererShaded (line 1268) | RendererShaded(const _Getter1& getter1, const _Getter2& getter2, ImU...
      method Init (line 1277) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 1280) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RectC (line 1327) | struct RectC {
    type RendererRectC (line 1334) | struct RendererRectC : RendererBase {
      method RendererRectC (line 1335) | RendererRectC(const _Getter& getter) :
      method Init (line 1339) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 1342) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    function RenderPrimitivesEx (line 1361) | void RenderPrimitivesEx(const _Renderer& renderer, ImDrawList& draw_li...
    function RenderPrimitives1 (line 1400) | void RenderPrimitives1(const _Getter& getter, Args... args) {
    function RenderPrimitives2 (line 1407) | void RenderPrimitives2(const _Getter1& getter1, const _Getter2& getter...
    type RendererMarkersFill (line 1418) | struct RendererMarkersFill : RendererBase {
      method RendererMarkersFill (line 1419) | RendererMarkersFill(const _Getter& getter, const ImVec2* marker, int...
      method Init (line 1427) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 1430) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    type RendererMarkersLine (line 1461) | struct RendererMarkersLine : RendererBase {
      method RendererMarkersLine (line 1462) | RendererMarkersLine(const _Getter& getter, const ImVec2* marker, int...
      method Init (line 1471) | void Init(ImDrawList& draw_list) const {
      method IMPLOT_INLINE (line 1474) | IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_...
    function RenderMarkers (line 1537) | void RenderMarkers(const _Getter& getter, ImPlotMarker marker, float s...
    function PlotLineEx (line 1570) | void PlotLineEx(const char* label_id, const _Getter& getter, ImPlotLin...
    function PlotLine (line 1613) | void PlotLine(const char* label_id, const T* values, int count, double...
    function PlotLine (line 1619) | void PlotLine(const char* label_id, const T* xs, const T* ys, int coun...
    function PlotLineG (line 1631) | void PlotLineG(const char* label_id, ImPlotGetter getter_func, void* d...
    function PlotScatterEx (line 1641) | void PlotScatterEx(const char* label_id, const Getter& getter, ImPlotS...
    function PlotScatter (line 1659) | void PlotScatter(const char* label_id, const T* values, int count, dou...
    function PlotScatter (line 1665) | void PlotScatter(const char* label_id, const T* xs, const T* ys, int c...
    function PlotScatterG (line 1677) | void PlotScatterG(const char* label_id, ImPlotGetter getter_func, void...
    function PlotStairsEx (line 1687) | void PlotStairsEx(const char* label_id, const Getter& getter, ImPlotSt...
    function PlotStairs (line 1719) | void PlotStairs(const char* label_id, const T* values, int count, doub...
    function PlotStairs (line 1725) | void PlotStairs(const char* label_id, const T* xs, const T* ys, int co...
    function PlotStairsG (line 1737) | void PlotStairsG(const char* label_id, ImPlotGetter getter_func, void*...
    function PlotShadedEx (line 1747) | void PlotShadedEx(const char* label_id, const Getter1& getter1, const ...
    function PlotShaded (line 1759) | void PlotShaded(const char* label_id, const T* values, int count, doub...
    function PlotShaded (line 1770) | void PlotShaded(const char* label_id, const T* xs, const T* ys, int co...
    function PlotShaded (line 1782) | void PlotShaded(const char* label_id, const T* xs, const T* ys1, const...
    function PlotShadedG (line 1796) | void PlotShadedG(const char* label_id, ImPlotGetter getter_func1, void...
    function PlotBarsVEx (line 1807) | void PlotBarsVEx(const char* label_id, const Getter1& getter1, const G...
    function PlotBarsHEx (line 1827) | void PlotBarsHEx(const char* label_id, const Getter1& getter1, const G...
    function PlotBars (line 1847) | void PlotBars(const char* label_id, const T* values, int count, double...
    function PlotBars (line 1861) | void PlotBars(const char* label_id, const T* xs, const T* ys, int coun...
    function PlotBarsG (line 1880) | void PlotBarsG(const char* label_id, ImPlotGetter getter_func, void* d...
    function PlotBarGroups (line 1898) | void PlotBarGroups(const char* const label_ids[], const T* values, int...
    function PlotErrorBarsVEx (line 1983) | void PlotErrorBarsVEx(const char* label_id, const _GetterPos& getter_p...
    function PlotErrorBarsHEx (line 2004) | void PlotErrorBarsHEx(const char* label_id, const _GetterPos& getter_p...
    function PlotErrorBars (line 2025) | void PlotErrorBars(const char* label_id, const T* xs, const T* ys, con...
    function PlotErrorBars (line 2030) | void PlotErrorBars(const char* label_id, const T* xs, const T* ys, con...
    function PlotStemsEx (line 2063) | void PlotStemsEx(const char* label_id, const _GetterM& get_mark, const...
    function PlotStems (line 2084) | void PlotStems(const char* label_id, const T* values, int count, doubl...
    function PlotStems (line 2098) | void PlotStems(const char* label_id, const T* xs, const T* ys, int cou...
    function PlotInfLines (line 2123) | void PlotInfLines(const char* label_id, const T* values, int count, Im...
    function IMPLOT_INLINE (line 2156) | IMPLOT_INLINE void RenderPieSlice(ImDrawList& draw_list, const ImPlotP...
    function PlotPieChart (line 2175) | void PlotPieChart(const char* const label_ids[], const T* values, int ...
    type GetterHeatmapRowMaj (line 2234) | struct GetterHeatmapRowMaj {
      method GetterHeatmapRowMaj (line 2235) | GetterHeatmapRowMaj(const T* values, int rows, int cols, double scal...
      method IMPLOT_INLINE (line 2249) | IMPLOT_INLINE RectC operator()(I idx) const {
    type GetterHeatmapColMaj (line 2269) | struct GetterHeatmapColMaj {
      method GetterHeatmapColMaj (line 2270) | GetterHeatmapColMaj(const T* values, int rows, int cols, double scal...
      method IMPLOT_INLINE (line 2284) | IMPLOT_INLINE RectC operator()(I idx) const {
    function RenderHeatmap (line 2304) | void RenderHeatmap(ImDrawList& draw_list, const T* values, int rows, i...
    function PlotHeatmap (line 2376) | void PlotHeatmap(const char* label_id, const T* values, int rows, int ...
    function PlotHistogram (line 2393) | double PlotHistogram(const char* label_id, const T* values, int count,...
    function PlotHistogram2D (line 2479) | double PlotHistogram2D(const char* label_id, const T* xs, const T* ys,...
    function PlotDigitalEx (line 2559) | void PlotDigitalEx(const char* label_id, Getter getter, ImPlotDigitalF...
    function PlotDigital (line 2619) | void PlotDigital(const char* label_id, const T* xs, const T* ys, int c...
    function PlotDigitalG (line 2628) | void PlotDigitalG(const char* label_id, ImPlotGetter getter_func, void...
    function PlotImage (line 2637) | void PlotImage(const char* label_id, ImTextureID user_texture_id, cons...
    function PlotText (line 2655) | void PlotText(const char* text, double x, double y, const ImVec2& pixe...
    function PlotDummy (line 2687) | void PlotDummy(const char* label_id, ImPlotDummyFlags flags) {

FILE: src/DesktopPlusWinRT/CaptureManager.cpp
  type
Condensed preview — 211 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,215K chars).
[
  {
    "path": ".github/FUNDING.yml",
    "chars": 20,
    "preview": "ko_fi: elvissteinjr\n"
  },
  {
    "path": ".github/workflows/nightly.yml",
    "chars": 1156,
    "preview": "name: Nightly Build\n\non:\n  push:\n    paths-ignore:\n      - 'README.md'\n      - 'CONTRIBUTING'\n      - 'LICENSE'\n      - "
  },
  {
    "path": "CONTRIBUTING",
    "chars": 1713,
    "preview": "Short version:\nAny contribution is welcomed with open arms. In the rare case something would be off, it'll be taken care"
  },
  {
    "path": "LICENSE",
    "chars": 35147,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "README.md",
    "chars": 4213,
    "preview": "# Desktop+ VR Overlay\nAdvanced desktop access for OpenVR.\n\n![VR Interface](docs/screenshot.jpg)\n\n## Features\n\n- User int"
  },
  {
    "path": "assets/action_manifest.json",
    "chars": 6021,
    "preview": "{\n  \"actions\": [\n    {\n      \"name\": \"/actions/shortcuts/in/EnableGlobalLaserPointer\",\n      \"requirement\": \"optional\",\n"
  },
  {
    "path": "assets/actions_default.ini",
    "chars": 1098,
    "preview": "[1]\nName=tstr_DefActionShowKeyboard\nCommandCount=1\nCommand0Type=ShowKeyboard\nCommand0UIntArg=0\nIconFilename=keyboard.png"
  },
  {
    "path": "assets/config_default.ini",
    "chars": 7009,
    "preview": ";Lines starting with ; are comments\n;Boolean settings allow use of \"true\"/\"false\" or 1/0\n;Do not include the quotation "
  },
  {
    "path": "assets/input/action_bindings_frame_controller.json",
    "chars": 4373,
    "preview": "{\n   \"action_manifest_version\" : 5,\n   \"alias_info\" : {},\n   \"app_key\" : \"steam.overlay.1494460\",\n   \"bindings\" : {\n    "
  },
  {
    "path": "assets/input/action_bindings_gamepad.json",
    "chars": 2345,
    "preview": "{\n   \"action_manifest_version\" : 5,\n   \"alias_info\" : {},\n   \"app_key\" : \"steam.overlay.1494460\",\n   \"bindings\" : {\n    "
  },
  {
    "path": "assets/input/action_bindings_generic.json",
    "chars": 5984,
    "preview": "{\n   \"action_manifest_version\" : 5,\n   \"alias_info\" : {},\n   \"app_key\" : \"steam.overlay.1494460\",\n   \"bindings\" : {\n    "
  },
  {
    "path": "assets/input/action_bindings_holographic.json",
    "chars": 6337,
    "preview": "{\n   \"action_manifest_version\" : 5,\n   \"alias_info\" : {},\n   \"app_key\" : \"steam.overlay.1494460\",\n   \"bindings\" : {\n    "
  },
  {
    "path": "assets/input/action_bindings_hpmotioncontroller.json",
    "chars": 4297,
    "preview": "{\n   \"action_manifest_version\" : 5,\n   \"alias_info\" : {},\n   \"app_key\" : \"steam.overlay.1494460\",\n   \"bindings\" : {\n    "
  },
  {
    "path": "assets/input/action_bindings_knuckles.json",
    "chars": 8949,
    "preview": "{\n   \"action_manifest_version\" : 5,\n   \"alias_info\" : {},\n   \"app_key\" : \"steam.overlay.1494460\",\n   \"bindings\" : {\n    "
  },
  {
    "path": "assets/input/action_bindings_knuckles_ev1.json",
    "chars": 5958,
    "preview": "{\n   \"action_manifest_version\" : 5,\n   \"alias_info\" : {},\n   \"app_key\" : \"steam.overlay.1494460\",\n   \"bindings\" : {\n    "
  },
  {
    "path": "assets/input/action_bindings_playstation_vr2_sense_controller.json",
    "chars": 4286,
    "preview": "{\n   \"action_manifest_version\" : 5,\n   \"alias_info\" : {},\n   \"app_key\" : \"steam.overlay.1494460\",\n   \"bindings\" : {\n    "
  },
  {
    "path": "assets/input/action_bindings_svl_hand_interaction_augmented.json",
    "chars": 2471,
    "preview": "{\n   \"action_manifest_version\" : 5,\n   \"alias_info\" : {},\n   \"app_key\" : \"steam.overlay.1494460\",\n   \"bindings\" : {\n    "
  },
  {
    "path": "assets/input/action_bindings_touch.json",
    "chars": 4814,
    "preview": "{\n   \"action_manifest_version\" : 5,\n   \"alias_info\" : {},\n   \"app_key\" : \"steam.overlay.1494460\",\n   \"bindings\" : {\n    "
  },
  {
    "path": "assets/input/action_bindings_vive_controller.json",
    "chars": 6309,
    "preview": "{\n   \"action_manifest_version\" : 5,\n   \"alias_info\" : {},\n   \"app_key\" : \"steam.overlay.1494460\",\n   \"bindings\" : {\n    "
  },
  {
    "path": "assets/input/action_bindings_vive_cosmos.json",
    "chars": 4226,
    "preview": "{\n   \"action_manifest_version\" : 5,\n   \"alias_info\" : {},\n   \"app_key\" : \"steam.overlay.1494460\",\n   \"bindings\" : {\n    "
  },
  {
    "path": "assets/input/action_manifest_de.json",
    "chars": 2421,
    "preview": "{\n    \"language_tag\": \"de_DE\",\n\n    \"/actions/shortcuts\" : \"Globale Kürzel\",\n\n    \"/actions/shortcuts/in/EnableGlobalLas"
  },
  {
    "path": "assets/input/action_manifest_en.json",
    "chars": 2284,
    "preview": "{\n    \"language_tag\": \"en_US\",\n\n    \"/actions/shortcuts\" : \"Global Shortcuts\",\n\n    \"/actions/shortcuts/in/EnableGlobalL"
  },
  {
    "path": "assets/input/action_manifest_ja.json",
    "chars": 2096,
    "preview": "{\n    \"language_tag\": \"ja_JP\",\n\n    \"/actions/shortcuts\" : \"グローバルショートカット\",\n\n    \"/actions/shortcuts/in/EnableGlobalLaser"
  },
  {
    "path": "assets/input/action_manifest_ko.json",
    "chars": 2002,
    "preview": "{\n    \"language_tag\": \"ko_KR\",\n\n    \"/actions/shortcuts\" : \"전역 단축키\",\n\n    \"/actions/shortcuts/in/EnableGlobalLaserPointe"
  },
  {
    "path": "assets/input/action_manifest_zh_CN.json",
    "chars": 1926,
    "preview": "{\n    \"language_tag\": \"zh_CN\",\n\n    \"/actions/shortcuts\" : \"全局快捷键\",\n\n    \"/actions/shortcuts/in/EnableGlobalLaserPointer"
  },
  {
    "path": "assets/keyboards/azerty_be.ini",
    "chars": 25069,
    "preview": "[LayoutInfo]\nName=AZERTY (Belgium)\nAuthor=\nHasAltGr=true\nHasClusterFunction=true\nHasClusterNavigation=true\nHasClusterNum"
  },
  {
    "path": "assets/keyboards/azerty_fr.ini",
    "chars": 24893,
    "preview": "[LayoutInfo]\nName=AZERTY (France)\nAuthor=\nHasAltGr=true\nHasClusterFunction=true\nHasClusterNavigation=true\nHasClusterNump"
  },
  {
    "path": "assets/keyboards/qwerty_dk.ini",
    "chars": 26840,
    "preview": "[LayoutInfo]\nName=QWERTY (Denmark)\nAuthor=BOTAlex\nHasAltGr=true\nHasClusterFunction=true\nHasClusterNavigation=true\nHasClu"
  },
  {
    "path": "assets/keyboards/qwerty_es.ini",
    "chars": 24872,
    "preview": "[LayoutInfo]\nName=QWERTY (Spain)\nAuthor=\nHasAltGr=true\nHasClusterFunction=true\nHasClusterNavigation=true\nHasClusterNumpa"
  },
  {
    "path": "assets/keyboards/qwerty_ja.ini",
    "chars": 20906,
    "preview": "[LayoutInfo]\r\nName=QWERTY (Japanese JIS-set)\r\nAuthor=Shimotuki Rieru\r\nHasAltGr=false\r\nHasClusterFunction=true\r\nHasCluste"
  },
  {
    "path": "assets/keyboards/qwerty_ko_2-set.ini",
    "chars": 18904,
    "preview": "[LayoutInfo]\nName=QWERTY (Korean 2-set)\nAuthor=HisaCat\nHasAltGr=false\nHasClusterFunction=true\nHasClusterNavigation=true\n"
  },
  {
    "path": "assets/keyboards/qwerty_latam.ini",
    "chars": 24566,
    "preview": "[LayoutInfo]\nName=QWERTY (Latin America)\nAuthor=\nHasAltGr=true\nHasClusterFunction=true\nHasClusterNavigation=true\nHasClus"
  },
  {
    "path": "assets/keyboards/qwerty_th_kedmanee.ini",
    "chars": 18969,
    "preview": "[LayoutInfo]\nName=QWERTY (Thai Kedmanee)\nAuthor=TangMo\nHasAltGr=false\nHasClusterFunction=true\nHasClusterNavigation=true\n"
  },
  {
    "path": "assets/keyboards/qwerty_uk.ini",
    "chars": 24344,
    "preview": "[LayoutInfo]\nName=QWERTY (United Kingdom)\nAuthor=\nHasAltGr=true\nHasClusterFunction=true\nHasClusterNavigation=true\nHasClu"
  },
  {
    "path": "assets/keyboards/qwerty_usa.ini",
    "chars": 20545,
    "preview": "[LayoutInfo]\nName=QWERTY (USA)\nHasAltGr=false\nHasClusterFunction=true\nHasClusterNavigation=true\nHasClusterNumpad=true\nHa"
  },
  {
    "path": "assets/keyboards/qwertz_ger.ini",
    "chars": 25644,
    "preview": "[LayoutInfo]\nName=QWERTZ (Germany)\nHasAltGr=true\nHasClusterFunction=true\nHasClusterNavigation=true\nHasClusterNumpad=true"
  },
  {
    "path": "assets/keyboards/qwertz_hu.ini",
    "chars": 28700,
    "preview": "[LayoutInfo]\r\nName=QWERTZ (Hungary)\r\nAuthor=Lenr\r\nHasAltGr=true\r\nHasClusterFunction=true\r\nHasClusterNavigation=true\r\nHas"
  },
  {
    "path": "assets/lang/de.ini",
    "chars": 50596,
    "preview": "[TranslationInfo]\nName=Deutsch (German)\nLocale=de-DE\n\n[Strings]\n;Settings Window\ntstr_SettingsWindowTitle=Desktop+ Einst"
  },
  {
    "path": "assets/lang/en.ini",
    "chars": 47779,
    "preview": "[TranslationInfo]\nName=English\nLocale=en-US\n\n;If this language has issues with the default fonts or their loading order,"
  },
  {
    "path": "assets/lang/ja.ini",
    "chars": 37725,
    "preview": "[TranslationInfo]\nName=日本語 (Japanese)\nAuthor=まるまさ\nLocale=ja-JP\n\n[Strings]\n;Settings Window\ntstr_SettingsWindowTitle=Desk"
  },
  {
    "path": "assets/lang/ko.ini",
    "chars": 36482,
    "preview": "[TranslationInfo]\nName=한국어 (Korean)\nAuthor=HisaCat\nLocale=ko-KR\n\n[Strings]\n;Settings Window\ntstr_SettingsWindowTitle=Des"
  },
  {
    "path": "assets/lang/zh_CN.ini",
    "chars": 33413,
    "preview": "[TranslationInfo]\nName=简体中文 (Simplified Chinese)\nAuthor=Xuan25_瑄\nLocale=zh-CN\n\n;如果该语言在默认字体或其加载顺序上存在问题,则可以在此处定义一个不同的字体,该字"
  },
  {
    "path": "assets/license.txt",
    "chars": 35147,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "assets/manifest.vrmanifest",
    "chars": 734,
    "preview": "{\n\t\"source\": \"builtin\",\n\t\"applications\": [\n\t{\n\t\t\"app_key\": \"steam.overlay.1494460\",\n\t\t\n\t\t\"launch_type\": \"binary\",\n\t\t\"bin"
  },
  {
    "path": "assets/misc/!About this folder.txt",
    "chars": 2626,
    "preview": "This folder contains scripts enabling Desktop+ to gain higher access rights.\nThe scripts are provided for convenience. C"
  },
  {
    "path": "assets/misc/CreateElevatedTask.bat",
    "chars": 231,
    "preview": "@echo off\n\npushd %~dp0\necho Launching script with administrator privileges...\npowershell -command \"   Start-Process Powe"
  },
  {
    "path": "assets/misc/CreateElevatedTask.ps1",
    "chars": 3625,
    "preview": "#Requires -RunAsAdministrator\n\n$msg = \"Desktop+ Elevated Scheduled Task Creation Script\n--------------------------------"
  },
  {
    "path": "assets/misc/EnableUIAccess.bat",
    "chars": 227,
    "preview": "@echo off\n\npushd %~dp0\necho Launching script with administrator privileges...\npowershell -command \"   Start-Process Powe"
  },
  {
    "path": "assets/misc/EnableUIAccess.ps1",
    "chars": 3078,
    "preview": "#Requires -RunAsAdministrator\n\n$msg = \"Desktop+ UIAccess Setup Script\n------------------------------\nThis enables UIAcce"
  },
  {
    "path": "assets/misc/EnableUIAccessDesktopPlus.manifest",
    "chars": 803,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVers"
  },
  {
    "path": "assets/misc/UndoSystemChanges.bat",
    "chars": 230,
    "preview": "@echo off\n\npushd %~dp0\necho Launching script with administrator privileges...\npowershell -command \"   Start-Process Powe"
  },
  {
    "path": "assets/misc/UndoSystemChanges.ps1",
    "chars": 1743,
    "preview": "#Requires -RunAsAdministrator\n\n$msg = \"Desktop+ Cleanup Script\n-----------------------\nThis reverts system-wide changes "
  },
  {
    "path": "assets/profiles/Sample Profile.ini",
    "chars": 3478,
    "preview": "[Overlay0]\nName=Dashboard\nNameIsCustom=true\nEnabled=true\nDesktopID=0\nCaptureSource=0\nWidth=165\nCurvature=17\nOpacity=100\n"
  },
  {
    "path": "assets/readme.txt",
    "chars": 15309,
    "preview": "Desktop+, an advanced SteamVR Desktop Overlay, by elvissteinjr\n---------------------------------------------------------"
  },
  {
    "path": "assets/third-party_licenses.txt",
    "chars": 21966,
    "preview": "Desktop+ includes work of the following third-party projects:\n\nOpenVR, which is covered by the following license:\n-\nCopy"
  },
  {
    "path": "docs/user_guide.md",
    "chars": 79297,
    "preview": "# Desktop+ User Guide\n\nThis document explains the options in Desktop+ and possible usage scenarios in greater detail. It"
  },
  {
    "path": "src/DesktopPlus/BackgroundOverlay.cpp",
    "chars": 3803,
    "preview": "#include \"BackgroundOverlay.h\"\n\n#include \"ConfigManager.h\"\n#include \"OutputManager.h\"\n\nBackgroundOverlay::BackgroundOver"
  },
  {
    "path": "src/DesktopPlus/BackgroundOverlay.h",
    "chars": 215,
    "preview": "#pragma once\n\n#include \"openvr.h\"\n\nclass BackgroundOverlay\n{\n    private:\n        vr::VROverlayHandle_t m_OvrlHandle;\n\n "
  },
  {
    "path": "src/DesktopPlus/CommonTypes.h",
    "chars": 3887,
    "preview": "#ifndef _COMMONTYPES_H_\n#define _COMMONTYPES_H_\n\n\n//If NTDDI_WIN11_GA is available, use it (optional requirement by Outp"
  },
  {
    "path": "src/DesktopPlus/DesktopPlus.cpp",
    "chars": 35770,
    "preview": "//This code belongs to the Desktop+ OpenVR overlay application, licensed under GPL 3.0\n//\n//Desktop+ is heavily based on"
  },
  {
    "path": "src/DesktopPlus/DesktopPlus.manifest",
    "chars": 472,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersi"
  },
  {
    "path": "src/DesktopPlus/DesktopPlus.ruleset",
    "chars": 6017,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RuleSet Name=\"Rules for DesktopPlus\" Description=\"Code analysis rules for Deskt"
  },
  {
    "path": "src/DesktopPlus/DesktopPlus.vcxproj",
    "chars": 13337,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "src/DesktopPlus/DesktopPlus.vcxproj.filters",
    "chars": 5378,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "src/DesktopPlus/DesktopPlus.vcxproj.user",
    "chars": 606,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "src/DesktopPlus/DisplayManager.cpp",
    "chars": 19670,
    "preview": "#include \"DisplayManager.h\"\nusing namespace DirectX;\n\n#include \"DPRect.h\"\n\n//\n// Constructor NULLs out vars\n//\nDISPLAYMA"
  },
  {
    "path": "src/DesktopPlus/DisplayManager.h",
    "chars": 1995,
    "preview": "#ifndef _DISPLAYMANAGER_H_\n#define _DISPLAYMANAGER_H_\n\n#include \"CommonTypes.h\"\n\n//\n// Handles the task of processing fr"
  },
  {
    "path": "src/DesktopPlus/DuplicationManager.cpp",
    "chars": 12529,
    "preview": "#include \"DuplicationManager.h\"\n#include <wrl/client.h>\n\n#include <sdkddkver.h>\n\n//Keep building with 10.0.17763.0 / 180"
  },
  {
    "path": "src/DesktopPlus/DuplicationManager.h",
    "chars": 1034,
    "preview": "#ifndef _DUPLICATIONMANAGER_H_\n#define _DUPLICATIONMANAGER_H_\n\n#include \"CommonTypes.h\"\n\n//\n// Handles the task of dupli"
  },
  {
    "path": "src/DesktopPlus/ElevatedMode.cpp",
    "chars": 10594,
    "preview": "#include \"ElevatedMode.h\"\n\n#include <windowsx.h>\n\n#include \"InterprocessMessaging.h\"\n#include \"InputSimulator.h\"\n#includ"
  },
  {
    "path": "src/DesktopPlus/ElevatedMode.h",
    "chars": 1121,
    "preview": "#pragma once\n\n#define NOMINMAX\n#include <windows.h>\n\n//This runs the process in elevated input command mode, in which it"
  },
  {
    "path": "src/DesktopPlus/InputSimulator.cpp",
    "chars": 31834,
    "preview": "#include \"InputSimulator.h\"\n\n#include \"InterprocessMessaging.h\"\n#include \"OutputManager.h\"\n#include \"Util.h\"\n\nenum Keybo"
  },
  {
    "path": "src/DesktopPlus/InputSimulator.h",
    "chars": 3917,
    "preview": "#ifndef _INPUTSIMULATOR_H_\n#define _INPUTSIMULATOR_H_\n\n#define NOMINMAX\n#include <windows.h>\n\n#include <vector>\n\n//Dashb"
  },
  {
    "path": "src/DesktopPlus/LaserPointer.cpp",
    "chars": 44595,
    "preview": "#include \"LaserPointer.h\"\n\n#include \"ConfigManager.h\"\n#include \"OverlayManager.h\"\n#include \"OutputManager.h\"\n#include \"U"
  },
  {
    "path": "src/DesktopPlus/LaserPointer.h",
    "chars": 3999,
    "preview": "#pragma once\n\n#include \"DPRect.h\"\n#include \"Overlays.h\"\n#include \"openvr.h\"\n\n#include <vector>\n\nstruct LaserPointerDevic"
  },
  {
    "path": "src/DesktopPlus/OutputManager.cpp",
    "chars": 357034,
    "preview": "#include \"OutputManager.h\"\n\n//Keep building with 10.0.17763.0 / 1809 SDK optional\n#ifdef NTDDI_WIN10_RS5\n    #include <d"
  },
  {
    "path": "src/DesktopPlus/OutputManager.h",
    "chars": 13910,
    "preview": "#ifndef _OUTPUTMANAGER_H_\n#define _OUTPUTMANAGER_H_\n\n#include <stdio.h>\n\n#include \"CommonTypes.h\"\n#include \"warning.h\"\n\n"
  },
  {
    "path": "src/DesktopPlus/Overlays.cpp",
    "chars": 14959,
    "preview": "#include \"Overlays.h\"\n\n#include <sstream>\n\n#include \"CommonTypes.h\"\n#include \"OpenVRExt.h\"\n#include \"OverlayManager.h\"\n#"
  },
  {
    "path": "src/DesktopPlus/Overlays.h",
    "chars": 3543,
    "preview": "#pragma once\n\n#include \"openvr.h\"\n#include \"DPRect.h\"\n#include \"OUtoSBSConverter.h\"\n#include \"RadialFollowSmoothing.h\"\n\n"
  },
  {
    "path": "src/DesktopPlus/PixelShader.hlsl",
    "chars": 594,
    "preview": "Texture2D tx : register( t0 );\nSamplerState samLinear : register( s0 );\n\nstruct PS_INPUT\n{\n    float4 Pos : SV_POSITION;"
  },
  {
    "path": "src/DesktopPlus/PixelShaderCursor.hlsl",
    "chars": 434,
    "preview": "Texture2D tx : register( t0 );\nSamplerState samLinear : register( s0 );\n\nstruct PS_INPUT\n{\n    float4 Pos : SV_POSITION;"
  },
  {
    "path": "src/DesktopPlus/RadialFollowSmoothing.cpp",
    "chars": 8633,
    "preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n* License, v. 2.0. If a copy of the MPL was not d"
  },
  {
    "path": "src/DesktopPlus/RadialFollowSmoothing.h",
    "chars": 2547,
    "preview": "/* This Source Code Form is subject to the terms of the Mozilla Public\n* License, v. 2.0. If a copy of the MPL was not d"
  },
  {
    "path": "src/DesktopPlus/SoftwareCursorGrabber.cpp",
    "chars": 11006,
    "preview": "#include \"SoftwareCursorGrabber.h\"\n#include \"Logging.h\"\n\nbool SoftwareCursorGrabber::CopyMonoMask(const ICONINFO& icon_i"
  },
  {
    "path": "src/DesktopPlus/SoftwareCursorGrabber.h",
    "chars": 937,
    "preview": "#pragma once\n\n#include <unordered_map>\n#include \"CommonTypes.h\"\n\n//Alternative method to grab the cursor image data\n//St"
  },
  {
    "path": "src/DesktopPlus/ThreadManager.cpp",
    "chars": 7647,
    "preview": "#include \"ThreadManager.h\"\n\nDWORD WINAPI CaptureThreadEntry(_In_ void* Param);\n\nTHREADMANAGER::THREADMANAGER() : m_Threa"
  },
  {
    "path": "src/DesktopPlus/ThreadManager.h",
    "chars": 1262,
    "preview": "#ifndef _THREADMANAGER_H_\n#define _THREADMANAGER_H_\n\n#include \"CommonTypes.h\"\n\nclass THREADMANAGER\n{\n    public:\n       "
  },
  {
    "path": "src/DesktopPlus/VRInput.cpp",
    "chars": 23638,
    "preview": "#include \"VRInput.h\"\n#include \"VRInput.h\"\n\n#define NOMINMAX\n#include <string>\n#include <sstream>\n#include <windows.h>\n\n#"
  },
  {
    "path": "src/DesktopPlus/VRInput.h",
    "chars": 4040,
    "preview": "#ifndef _VRINPUT_H_\n#define _VRINPUT_H_\n\n#include \"openvr.h\"\n\n#include <array>\n#include <vector>\n\nclass OutputManager;\n\n"
  },
  {
    "path": "src/DesktopPlus/VertexShader.hlsl",
    "chars": 402,
    "preview": "struct VS_INPUT\n{\n    float4 Pos : POSITION;\n    float2 Tex : TEXCOORD;\n};\n\nstruct VS_OUTPUT\n{\n    float4 Pos : SV_POSIT"
  },
  {
    "path": "src/DesktopPlus/resource.h",
    "chars": 482,
    "preview": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by DesktopPlus.rc\n//\n#define IDI_ICON1    "
  },
  {
    "path": "src/DesktopPlus.sln",
    "chars": 2289,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.2951"
  },
  {
    "path": "src/DesktopPlusUI/AuxUI.cpp",
    "chars": 48548,
    "preview": "#include \"AuxUI.h\"\n\n#include \"UIManager.h\"\n#include \"InterprocessMessaging.h\"\n#include \"WindowManager.h\"\n#include \"OpenV"
  },
  {
    "path": "src/DesktopPlusUI/AuxUI.h",
    "chars": 6074,
    "preview": "#pragma once\n\n#define NOMINMAX\n#include <windows.h>\n\n#include \"imgui.h\"\n#include \"openvr.h\"\n#include \"Matrices.h\"\n\n//Hos"
  },
  {
    "path": "src/DesktopPlusUI/DesktopPlusUI.cpp",
    "chars": 35602,
    "preview": "//This code belongs to the Desktop+ OpenVR overlay application, licensed under GPL 3.0\n//\n//Much of the code here is ba"
  },
  {
    "path": "src/DesktopPlusUI/DesktopPlusUI.vcxproj",
    "chars": 12713,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "src/DesktopPlusUI/DesktopPlusUI.vcxproj.filters",
    "chars": 8086,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "src/DesktopPlusUI/DesktopPlusUI.vcxproj.user",
    "chars": 835,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "src/DesktopPlusUI/FloatingUI.cpp",
    "chars": 17963,
    "preview": "#include \"FloatingUI.h\"\n\n#include \"UIManager.h\"\n#include \"OverlayManager.h\"\n#include \"InterprocessMessaging.h\"\n#include "
  },
  {
    "path": "src/DesktopPlusUI/FloatingUI.h",
    "chars": 912,
    "preview": "#pragma once\n\n#include \"WindowFloatingUIBar.h\"\n\n#include \"openvr.h\"\n#include \"Matrices.h\"\n\nclass FloatingUI\n{\n    privat"
  },
  {
    "path": "src/DesktopPlusUI/FloatingWindow.cpp",
    "chars": 60288,
    "preview": "#include \"FloatingWindow.h\"\n\n#include \"UIManager.h\"\n#include \"OverlayManager.h\"\n#include \"InterprocessMessaging.h\"\n#incl"
  },
  {
    "path": "src/DesktopPlusUI/FloatingWindow.h",
    "chars": 7786,
    "preview": "#pragma once\n\n#include \"OverlayDragger.h\"\n#include \"TextureManager.h\"\n#include \"TranslationManager.h\"\n#include \"OverlayM"
  },
  {
    "path": "src/DesktopPlusUI/ImGuiExt.cpp",
    "chars": 89240,
    "preview": "#include \"ImGuiExt.h\"\n\n#include <string>\n\n#ifndef IMGUI_DEFINE_MATH_OPERATORS\n    #define IMGUI_DEFINE_MATH_OPERATORS\n#e"
  },
  {
    "path": "src/DesktopPlusUI/ImGuiExt.h",
    "chars": 16296,
    "preview": "//Some extra functions extending ImGui\n//Hopefully nothing here breaks when updating ImGui\n\n#pragma once\n\n#include \"imgu"
  },
  {
    "path": "src/DesktopPlusUI/NotificationIcon.cpp",
    "chars": 4963,
    "preview": "#include \"NotificationIcon.h\"\n\n#include <windowsx.h>\n#include <shellapi.h>\n#include <cwchar>\n\n#include \"UIManager.h\"\n#in"
  },
  {
    "path": "src/DesktopPlusUI/NotificationIcon.h",
    "chars": 799,
    "preview": "//Provides a notification area/tray icon\n//Technically a singleton, but is designed to have its one instance live in UIM"
  },
  {
    "path": "src/DesktopPlusUI/TextureManager.cpp",
    "chars": 33768,
    "preview": "#include \"TextureManager.h\"\n\n#define NOMINMAX\n#include <windows.h>\n#include <algorithm>\n#include <vector>\n\n//Make GDI+ "
  },
  {
    "path": "src/DesktopPlusUI/TextureManager.h",
    "chars": 4969,
    "preview": "//Desktop+UI loads all textures into Dear ImGui's font texture atlas\n//Bigger texture sizes are well supported on VR-run"
  },
  {
    "path": "src/DesktopPlusUI/TranslationManager.cpp",
    "chars": 39728,
    "preview": "#include \"TranslationManager.h\"\n\n#include \"ConfigManager.h\"\n#include \"Ini.h\"\n#include \"Util.h\"\n#include \"Logging.h\"\n\n#in"
  },
  {
    "path": "src/DesktopPlusUI/TranslationManager.h",
    "chars": 32061,
    "preview": "#pragma once\n\n#include <string>\n#include <vector>\n\n#include \"imgui.h\"\n\nenum TRMGRStrID\n{\n    tstr_SettingsWindowTitle,\n "
  },
  {
    "path": "src/DesktopPlusUI/UIManager.cpp",
    "chars": 102979,
    "preview": "#include \"UIManager.h\"\n\n#include <windowsx.h>\n\n#include \"imgui.h\"\n#include \"imgui_impl_win32_openvr.h\"\n#include \"implot."
  },
  {
    "path": "src/DesktopPlusUI/UIManager.h",
    "chars": 11879,
    "preview": "//Manages the UI state and stuffs\n//Since this whole thing is the UI, it's the default place for things\n//Basic ImGui an"
  },
  {
    "path": "src/DesktopPlusUI/VRKeyboard.cpp",
    "chars": 32215,
    "preview": "#include \"VRKeyboard.h\"\n\n#include <sstream>\n#include \"UIManager.h\"\n#include \"InterprocessMessaging.h\"\n#include \"Util.h\"\n"
  },
  {
    "path": "src/DesktopPlusUI/VRKeyboard.h",
    "chars": 3193,
    "preview": "#pragma once\n\n#include \"VRKeyboardCommon.h\"\n#include \"WindowKeyboard.h\"\n#include \"WindowKeyboardEditor.h\"\n\n#include <vec"
  },
  {
    "path": "src/DesktopPlusUI/VRKeyboardCommon.h",
    "chars": 1728,
    "preview": "#pragma once\n\n#include \"Actions.h\"\n#include <string>\n\nenum KeyboardLayoutSubLayout : unsigned char\n{\n    kbdlayout_sub_b"
  },
  {
    "path": "src/DesktopPlusUI/Win32PerformanceData.cpp",
    "chars": 9397,
    "preview": "#include \"Win32PerformanceData.h\"\n\n#include <memory>\n\n#include <PdhMsg.h>\n\nLUID Win32PerformanceData::GetLUIDFromFormatt"
  },
  {
    "path": "src/DesktopPlusUI/Win32PerformanceData.h",
    "chars": 1180,
    "preview": "#pragma once\n\n#include <string>\n\n#define NOMINMAX\n#include <pdh.h>\n\nclass Win32PerformanceData\n{\n    private:\n        PD"
  },
  {
    "path": "src/DesktopPlusUI/WindowDesktopMode.cpp",
    "chars": 35645,
    "preview": "#include \"WindowDesktopMode.h\"\n\n#include \"imgui.h\"\n#include \"UIManager.h\"\n#include \"InterprocessMessaging.h\"\n#include \"W"
  },
  {
    "path": "src/DesktopPlusUI/WindowDesktopMode.h",
    "chars": 2623,
    "preview": "#pragma once\n\n#include <vector>\n#include \"imgui.h\"\n\n#include \"OverlayManager.h\"\n\nenum WindowDesktopModePage\n{\n    wnddes"
  },
  {
    "path": "src/DesktopPlusUI/WindowFloatingUIBar.cpp",
    "chars": 43598,
    "preview": "#include \"WindowFloatingUIBar.h\"\n\n#include \"ImGuiExt.h\"\n#include \"TextureManager.h\"\n#include \"InterprocessMessaging.h\"\n#"
  },
  {
    "path": "src/DesktopPlusUI/WindowFloatingUIBar.h",
    "chars": 2640,
    "preview": "#pragma once\n\n#include \"imgui.h\"\n\nstruct Action;\n\n//The main bar visible in the floating UI, containing buttons to hide "
  },
  {
    "path": "src/DesktopPlusUI/WindowKeyboard.cpp",
    "chars": 69601,
    "preview": "#include \"WindowKeyboard.h\"\n\n#include \"ImGuiExt.h\"\n#include \"TextureManager.h\"\n#include \"TranslationManager.h\"\n#include "
  },
  {
    "path": "src/DesktopPlusUI/WindowKeyboard.h",
    "chars": 4955,
    "preview": "#pragma once\n\n#include \"FloatingWindow.h\"\n#include \"ImGuiExt.h\"\n#include \"openvr.h\"\n\nstruct LaserInputState\n{\n    vr::Tr"
  },
  {
    "path": "src/DesktopPlusUI/WindowKeyboardEditor.cpp",
    "chars": 68439,
    "preview": "#include \"WindowKeyboardEditor.h\"\n\n#include \"UIManager.h\"\n\nvoid KeyboardEditor::UpdateWindowKeyList()\n{\n    ImGuiIO& io "
  },
  {
    "path": "src/DesktopPlusUI/WindowKeyboardEditor.h",
    "chars": 1740,
    "preview": "#pragma once\n\n#include \"VRKeyboardCommon.h\"\n#include <utility>\n\nclass KeyboardEditor\n{\n    //Not exactly space efficient"
  },
  {
    "path": "src/DesktopPlusUI/WindowOverlayBar.cpp",
    "chars": 42921,
    "preview": "#include \"WindowOverlayBar.h\"\n\n#include \"ImGuiExt.h\"\n#include \"TextureManager.h\"\n#include \"InterprocessMessaging.h\"\n#inc"
  },
  {
    "path": "src/DesktopPlusUI/WindowOverlayBar.h",
    "chars": 1471,
    "preview": "#pragma once\n\n#include \"imgui.h\"\n#include \"OverlayManager.h\"\n\nclass WindowSettings;\n\n//The bar visible below the dashboa"
  },
  {
    "path": "src/DesktopPlusUI/WindowOverlayProperties.cpp",
    "chars": 139580,
    "preview": "#include \"WindowOverlayProperties.h\"\n\n#include \"ImGuiExt.h\"\n#include \"UIManager.h\"\n#include \"TranslationManager.h\"\n#incl"
  },
  {
    "path": "src/DesktopPlusUI/WindowOverlayProperties.h",
    "chars": 4823,
    "preview": "#pragma once\n\n#include \"FloatingWindow.h\"\n#include \"WindowDesktopMode.h\"\n\nenum WindowOverlayPropertiesPage\n{\n    wndovrl"
  },
  {
    "path": "src/DesktopPlusUI/WindowPerformance.cpp",
    "chars": 75375,
    "preview": "#include \"WindowPerformance.h\"\n\n#include <fstream>\n#include <codecvt>\n\n#include \"implot.h\"\n#include \"ImGuiExt.h\"\n#includ"
  },
  {
    "path": "src/DesktopPlusUI/WindowPerformance.h",
    "chars": 4674,
    "preview": "#pragma once\n\n#include <vector>\n\n#include \"imgui.h\"\n#include \"openvr.h\"\n\n#include \"Win32PerformanceData.h\"\n\n//Taken from"
  },
  {
    "path": "src/DesktopPlusUI/WindowSettings.cpp",
    "chars": 257802,
    "preview": "#include \"WindowSettings.h\"\n\n#include <sstream>\n#include <unordered_set>\n#include <shlwapi.h>\n\n#include \"ImGuiExt.h\"\n#in"
  },
  {
    "path": "src/DesktopPlusUI/WindowSettings.h",
    "chars": 5806,
    "preview": "#pragma once\n\n#include \"FloatingWindow.h\"\n#include \"WindowDesktopMode.h\"\n\nenum WindowSettingsPage\n{\n    wndsettings_page"
  },
  {
    "path": "src/DesktopPlusUI/imgui/imconfig.h",
    "chars": 11777,
    "preview": "//-----------------------------------------------------------------------------\n// DEAR IMGUI COMPILE-TIME OPTIONS\n// Ru"
  },
  {
    "path": "src/DesktopPlusUI/imgui/imgui.cpp",
    "chars": 882057,
    "preview": "// dear imgui, v1.91.9b\n// (main code and documentation)\n\n// Help:\n// - See links below.\n// - Call and read ImGui::ShowD"
  },
  {
    "path": "src/DesktopPlusUI/imgui/imgui.h",
    "chars": 378236,
    "preview": "// dear imgui, v1.91.9b\n// (headers)\n\n// Help:\n// - See links below.\n// - Call and read ImGui::ShowDemoWindow() in imgui"
  },
  {
    "path": "src/DesktopPlusUI/imgui/imgui_demo.cpp",
    "chars": 557654,
    "preview": "// dear imgui, v1.91.9b\n// (demo code)\n\n// Help:\n// - Read FAQ at http://dearimgui.com/faq\n// - Call and read ImGui::Sho"
  },
  {
    "path": "src/DesktopPlusUI/imgui/imgui_draw.cpp",
    "chars": 258761,
    "preview": "// dear imgui, v1.91.9b\n// (drawing and font code)\n\n/*\n\nIndex of this file:\n\n// [SECTION] STB libraries implementation\n/"
  },
  {
    "path": "src/DesktopPlusUI/imgui/imgui_internal.h",
    "chars": 272833,
    "preview": "// dear imgui, v1.91.9b\n// (internal structures/api)\n\n// You may use this file to debug, understand or extend Dear ImGui"
  },
  {
    "path": "src/DesktopPlusUI/imgui/imgui_tables.cpp",
    "chars": 247597,
    "preview": "// dear imgui, v1.91b\n// (tables and columns code)\n\n/*\n\nIndex of this file:\n\n// [SECTION] Commentary\n// [SECTION] Header"
  },
  {
    "path": "src/DesktopPlusUI/imgui/imgui_widgets.cpp",
    "chars": 517769,
    "preview": "// dear imgui, v1.91b\n// (widgets code)\n\n/*\n\nIndex of this file:\n\n// [SECTION] Forward Declarations\n// [SECTION] Widgets"
  },
  {
    "path": "src/DesktopPlusUI/imgui/imstb_rectpack.h",
    "chars": 20344,
    "preview": "// [DEAR IMGUI]\n// This is a slightly modified version of stb_rect_pack.h 1.01.\n// Grep for [DEAR IMGUI] to find the cha"
  },
  {
    "path": "src/DesktopPlusUI/imgui/imstb_textedit.h",
    "chars": 57128,
    "preview": "// [DEAR IMGUI]\n// This is a slightly modified version of stb_textedit.h 1.14.\n// Those changes would need to be pushed "
  },
  {
    "path": "src/DesktopPlusUI/imgui/imstb_truetype.h",
    "chars": 199485,
    "preview": "// [DEAR IMGUI]\n// This is a slightly modified version of stb_truetype.h 1.26.\n// Mostly fixing for compiler and static "
  },
  {
    "path": "src/DesktopPlusUI/imgui_win32_dx11_openvr/PixelShaderImGui.hlsl",
    "chars": 233,
    "preview": "struct PS_INPUT\n{\n\tfloat4 pos : SV_POSITION;\n\tfloat4 col : COLOR0;\n\tfloat2 uv  : TEXCOORD0;\n};\n\nsampler sampler0;\nTextur"
  },
  {
    "path": "src/DesktopPlusUI/imgui_win32_dx11_openvr/VertexShaderImGui.hlsl",
    "chars": 442,
    "preview": "cbuffer vertexBuffer : register(b0)\n{\n\tfloat4x4 ProjectionMatrix;\n};\n\nstruct VS_INPUT\n{\n\tfloat2 pos : POSITION;\n\tfloat4 "
  },
  {
    "path": "src/DesktopPlusUI/imgui_win32_dx11_openvr/imgui_impl_dx11_openvr.cpp",
    "chars": 27743,
    "preview": "// Desktop+UI: Modified for OpenVR compatibility\n\n// dear imgui: Renderer Backend for DirectX11\n// This needs to be used"
  },
  {
    "path": "src/DesktopPlusUI/imgui_win32_dx11_openvr/imgui_impl_dx11_openvr.h",
    "chars": 2385,
    "preview": "// Desktop+UI: Modified for OpenVR compatibility\n\n// dear imgui: Renderer Backend for DirectX11\n// This needs to be used"
  },
  {
    "path": "src/DesktopPlusUI/imgui_win32_dx11_openvr/imgui_impl_win32_openvr.cpp",
    "chars": 58427,
    "preview": "// Desktop+UI: Modified for OpenVR compatibility\n\n// dear imgui: Platform Backend for Windows (standard windows API for "
  },
  {
    "path": "src/DesktopPlusUI/imgui_win32_dx11_openvr/imgui_impl_win32_openvr.h",
    "chars": 5396,
    "preview": "// Desktop+UI: Modified for OpenVR compatibility\n\n// dear imgui: Platform Backend for Windows (standard windows API for "
  },
  {
    "path": "src/DesktopPlusUI/implot/implot.cpp",
    "chars": 266095,
    "preview": "// MIT License\n\n// Copyright (c) 2023 Evan Pezent\n\n// Permission is hereby granted, free of charge, to any person obtain"
  },
  {
    "path": "src/DesktopPlusUI/implot/implot.h",
    "chars": 78860,
    "preview": "// MIT License\n\n// Copyright (c) 2023 Evan Pezent\n\n// Permission is hereby granted, free of charge, to any person obtain"
  },
  {
    "path": "src/DesktopPlusUI/implot/implot_internal.h",
    "chars": 67266,
    "preview": "// MIT License\n\n// Copyright (c) 2023 Evan Pezent\n\n// Permission is hereby granted, free of charge, to any person obtain"
  },
  {
    "path": "src/DesktopPlusUI/implot/implot_items.cpp",
    "chars": 119106,
    "preview": "// MIT License\n\n// Copyright (c) 2023 Evan Pezent\n\n// Permission is hereby granted, free of charge, to any person obtain"
  },
  {
    "path": "src/DesktopPlusUI/resource.h",
    "chars": 484,
    "preview": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by DesktopPlusUI.rc\n//\n#define IDI_ICON1  "
  },
  {
    "path": "src/DesktopPlusWinRT/CaptureManager.cpp",
    "chars": 5131,
    "preview": "#ifndef DPLUSWINRT_STUB\n\n#include \"CommonHeaders.h\"\n#include \"CaptureManager.h\"\n\n#include \"DesktopPlusWinRT.h\"\n\nnamespac"
  },
  {
    "path": "src/DesktopPlusWinRT/CaptureManager.h",
    "chars": 1658,
    "preview": "#pragma once\n#include \"OverlayCapture.h\"\n\nclass CaptureManager\n{\n    public:\n        CaptureManager(DPWinRTThreadData& t"
  },
  {
    "path": "src/DesktopPlusWinRT/CommonHeaders.h",
    "chars": 847,
    "preview": "#pragma once\n\n#include <Unknwn.h>\n#include <inspectable.h>\n\n#include <wil/cppwinrt.h>\n\n// WinRT\n#include <winrt/Windows."
  },
  {
    "path": "src/DesktopPlusWinRT/DesktopPlusWinRT.cpp",
    "chars": 23000,
    "preview": "#include \"DesktopPlusWinRT.h\"\n\n#ifndef DPLUSWINRT_STUB\n\n#pragma comment (lib, \"windowsapp.lib\")\n\n#include <mutex>\n#inclu"
  },
  {
    "path": "src/DesktopPlusWinRT/DesktopPlusWinRT.h",
    "chars": 4964,
    "preview": "#pragma once\n\n//This is the part of Desktop+ using Windows Runtime functions, separated from rest of the codebase as a D"
  },
  {
    "path": "src/DesktopPlusWinRT/DesktopPlusWinRT.vcxproj",
    "chars": 8674,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "src/DesktopPlusWinRT/DesktopPlusWinRT.vcxproj.filters",
    "chars": 2287,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "src/DesktopPlusWinRT/DesktopPlusWinRT.vcxproj.user",
    "chars": 763,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"Current\" xmlns=\"http://schemas.microsoft.com/developer/ms"
  },
  {
    "path": "src/DesktopPlusWinRT/OverlayCapture.cpp",
    "chars": 15224,
    "preview": "#ifndef DPLUSWINRT_STUB\n\n#include \"CommonHeaders.h\"\n#include \"OverlayCapture.h\"\n\n#include \"DesktopPlusWinRT.h\"\n#include "
  },
  {
    "path": "src/DesktopPlusWinRT/OverlayCapture.h",
    "chars": 3198,
    "preview": "#pragma once\n\n#include <mutex>\n\n#include \"ThreadData.h\"\n#include \"OUtoSBSConverter.h\"\n\nclass OverlayCapture\n{\npublic:\n  "
  },
  {
    "path": "src/DesktopPlusWinRT/ThreadData.h",
    "chars": 661,
    "preview": "#pragma once\n\n#define WIN32_LEAN_AND_MEAN\n#define NOMINMAX\n#include <windows.h>\n\n#include <vector>\n#include \"openvr.h\"\n\n"
  },
  {
    "path": "src/DesktopPlusWinRT/packages.config",
    "chars": 264,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Microsoft.Windows.CppWinRT\" version=\"2.0.240405.15\" ta"
  },
  {
    "path": "src/DesktopPlusWinRT/resource.h",
    "chars": 396,
    "preview": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by DesktopPlusWinRT.rc\n\n// Next default va"
  },
  {
    "path": "src/DesktopPlusWinRT/util/DesktopWindow.h",
    "chars": 1865,
    "preview": "#pragma once\n#include \"hwnd.interop.h\"\n\nnamespace util::desktop\n{\n    // adapted from https://gist.github.com/kennykerr/"
  },
  {
    "path": "src/DesktopPlusWinRT/util/capture.desktop.interop.h",
    "chars": 1136,
    "preview": "#pragma once\n#include <winrt/Windows.Graphics.Capture.h>\n#include <windows.graphics.capture.interop.h>\n#include <windows"
  },
  {
    "path": "src/DesktopPlusWinRT/util/direct3d11.interop.h",
    "chars": 1459,
    "preview": "#pragma once\n#include <winrt/windows.graphics.directx.direct3d11.h>\n\nextern \"C\"\n{\n    HRESULT __stdcall CreateDirect3D11"
  },
  {
    "path": "src/DesktopPlusWinRT/util/dispatcherqueue.desktop.interop.h",
    "chars": 657,
    "preview": "#pragma once\n#include <winrt/Windows.System.h>\n#include <dispatcherqueue.h>\n\nnamespace util::desktop\n{\n    inline auto C"
  },
  {
    "path": "src/DesktopPlusWinRT/util/hwnd.interop.h",
    "chars": 281,
    "preview": "#pragma once\n#include <Unknwn.h>\n\nnamespace util::desktop\n{\n    // Taken from shobjidl_core.h\n    struct __declspec(uuid"
  },
  {
    "path": "src/Shared/Actions.cpp",
    "chars": 40724,
    "preview": "#include \"Actions.h\"\n\n#include <sstream>\n#include <random>\n#include <ctime>\n\n#ifndef NOMINMAX\n    #define NOMINMAX\n#endi"
  },
  {
    "path": "src/Shared/Actions.h",
    "chars": 6419,
    "preview": "#pragma once\n\n#include <string>\n#include <vector>\n#include <unordered_map>\n\n#ifdef DPLUS_UI\n    #include \"imgui.h\"\n    #"
  },
  {
    "path": "src/Shared/AppProfiles.cpp",
    "chars": 12459,
    "preview": "#include \"AppProfiles.h\"\n\n#include <sstream>\n\n#ifndef DPLUS_UI\n    #include \"OutputManager.h\"\n#endif\n\n#include \"ConfigMa"
  },
  {
    "path": "src/Shared/AppProfiles.h",
    "chars": 2254,
    "preview": "#pragma once\n\n#include <unordered_map>\n#include <vector>\n#include \"Actions.h\"\n\nstruct AppProfile\n{\n    bool IsEnabled = "
  },
  {
    "path": "src/Shared/ConfigManager.cpp",
    "chars": 110533,
    "preview": "#include \"ConfigManager.h\"\n\n#include <algorithm>\n#include <sstream>\n#include <fstream>\n\n#include \"Util.h\"\n#include \"Open"
  },
  {
    "path": "src/Shared/ConfigManager.h",
    "chars": 23844,
    "preview": "//Both the Desktop+ dashboard app and the UI hold a copy of the current configuration\n//Both load the initial state from"
  },
  {
    "path": "src/Shared/DPBrowserAPI.h",
    "chars": 9347,
    "preview": "#pragma once\n\n#ifndef NOMINMAX\n    #define NOMINMAX\n#endif\n#include <windows.h>\n\n#include \"openvr.h\"\n\nstatic const int k"
  },
  {
    "path": "src/Shared/DPBrowserAPIClient.cpp",
    "chars": 25377,
    "preview": "#include \"DPBrowserAPIClient.h\"\n\n#include \"ConfigManager.h\"\n#include \"InterprocessMessaging.h\"\n#include \"Util.h\"\n#includ"
  },
  {
    "path": "src/Shared/DPBrowserAPIClient.h",
    "chars": 4368,
    "preview": "#pragma once\n\n#include \"DPBrowserAPI.h\"\n\nclass DPBrowserAPIClient : public DPBrowserAPI\n{\n    private:\n        bool m_Is"
  },
  {
    "path": "src/Shared/DPRect.h",
    "chars": 3923,
    "preview": "//This is pretty much a straight adaption of Dear ImGui's internal ImRect class\n\n#pragma once\n\n#include \"Util.h\"\n#includ"
  },
  {
    "path": "src/Shared/Ini.cpp",
    "chars": 46295,
    "preview": "//Main implementation based on ini.h (https://github.com/mattiasgustavsson/libs)\n//C++ interface may be licensed under t"
  },
  {
    "path": "src/Shared/Ini.h",
    "chars": 1343,
    "preview": "//Small Ini class to make handling settings a bit less painful, see Ini.cpp for details\n\n#pragma once\n\n#include <string>"
  },
  {
    "path": "src/Shared/InterprocessMessaging.cpp",
    "chars": 6807,
    "preview": "#include \"InterprocessMessaging.h\"\n\n#include \"Util.h\"\n#include \"DPBrowserAPIClient.h\"\n\nstatic IPCManager g_IPCManager;\n\n"
  },
  {
    "path": "src/Shared/InterprocessMessaging.h",
    "chars": 14691,
    "preview": "//Desktop+ uses custom Win32 messages sent across processes for interprocess communication\n//It's generally expected to "
  },
  {
    "path": "src/Shared/Logging.cpp",
    "chars": 4969,
    "preview": "#include \"Logging.h\"\n\n#include <string>\n\n#include \"openvr.h\"\n#include \"Util.h\"\n\n#include \"DesktopPlusWinRT.h\"\n\nvoid DPLo"
  },
  {
    "path": "src/Shared/Logging.h",
    "chars": 852,
    "preview": "//Just log rotation/unified init plus some common info logs on top of Loguru\n\n#pragma once\n\n#include \"loguru.hpp\"\n\n//Ver"
  },
  {
    "path": "src/Shared/Matrices.cpp",
    "chars": 21321,
    "preview": "// Desktop+: Modified for OpenVR compatibility and more\n\n///////////////////////////////////////////////////////////////"
  },
  {
    "path": "src/Shared/Matrices.h",
    "chars": 30912,
    "preview": "// Desktop+: Modified for OpenVR compatibility and more\n\n///////////////////////////////////////////////////////////////"
  },
  {
    "path": "src/Shared/OUtoSBSConverter.cpp",
    "chars": 4808,
    "preview": "#include \"OUtoSBSConverter.h\"\n\n#include \"Util.h\"\n\nID3D11Texture2D* OUtoSBSConverter::GetTexture() const\n{\n    return (m_"
  },
  {
    "path": "src/Shared/OUtoSBSConverter.h",
    "chars": 1067,
    "preview": "#pragma once\n\n#ifndef NOMINMAX\n    #define NOMINMAX\n#endif\n#include <d3d11.h>\n#include <wrl/client.h>\n\n#include \"Vectors"
  },
  {
    "path": "src/Shared/OpenVRExt.cpp",
    "chars": 18941,
    "preview": "#include \"OpenVRExt.h\"\n\n#include <wrl/client.h>\n\n#include \"openvr.h\"\n#include \"Matrices.h\"\n\nnamespace vr\n{\n    ID3D11Sha"
  },
  {
    "path": "src/Shared/OpenVRExt.h",
    "chars": 6339,
    "preview": "//Extra functions extending/wrapping OpenVR APIs\n//Interfaces are supposed to be thread-safe\n//Assumes OpenVR is initial"
  },
  {
    "path": "src/Shared/OverlayDragger.cpp",
    "chars": 46699,
    "preview": "#include \"OverlayDragger.h\"\n\n#ifdef DPLUS_UI\n    #include \"UIManager.h\"\n#else\n    #include \"OutputManager.h\"\n#endif\n\n#in"
  },
  {
    "path": "src/Shared/OverlayDragger.h",
    "chars": 3966,
    "preview": "#pragma once\n\n#include \"Matrices.h\"\n#include \"ConfigManager.h\"\n\n//Class handling dragging overlays with motion controlle"
  },
  {
    "path": "src/Shared/OverlayManager.cpp",
    "chars": 53977,
    "preview": "#include \"OverlayManager.h\"\n\n#ifndef DPLUS_UI\n    #include \"OutputManager.h\"\n    #include \"DesktopPlusWinRT.h\"\n    #incl"
  },
  {
    "path": "src/Shared/OverlayManager.h",
    "chars": 5841,
    "preview": "#pragma once\n\n#include <algorithm>\n\n#include \"ConfigManager.h\"\n\n#ifndef DPLUS_UI\n    #include \"Overlays.h\"   //UI app on"
  },
  {
    "path": "src/Shared/Util.cpp",
    "chars": 28690,
    "preview": "#include \"Util.h\"\n\n#include <vector>\n#include <cassert>\n\n#include <d3d11.h>\n#include <wrl/client.h>\n#include <shldisp.h>"
  }
]

// ... and 11 more files (download for full content)

About this extraction

This page contains the full source code of the elvissteinjr/DesktopPlus GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 211 files (7.6 MB), approximately 2.0M tokens, and a symbol index with 2568 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!