{"id":18470841,"url":"https://github.com/inria/libpointing","last_synced_at":"2025-04-05T17:06:28.130Z","repository":{"id":46115435,"uuid":"53657711","full_name":"INRIA/libpointing","owner":"INRIA","description":"An open-source cross-platform library to get raw events from pointing devices and master transfer functions.","archived":false,"fork":false,"pushed_at":"2024-12-15T17:26:11.000Z","size":18250,"stargazers_count":54,"open_issues_count":8,"forks_count":14,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-29T16:11:07.105Z","etag":null,"topics":["pointing-device","raw-input","subpixel","transfer-functions"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/INRIA.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-03-11T10:00:49.000Z","updated_at":"2025-02-18T03:40:08.000Z","dependencies_parsed_at":"2022-09-26T21:31:30.905Z","dependency_job_id":"8d4c3691-30c2-4e38-a9a6-d8850a1946f2","html_url":"https://github.com/INRIA/libpointing","commit_stats":{"total_commits":354,"total_committers":12,"mean_commits":29.5,"dds":0.4180790960451978,"last_synced_commit":"6895505b620a74e23a008b6b75018ff562e6ace1"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/INRIA%2Flibpointing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/INRIA%2Flibpointing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/INRIA%2Flibpointing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/INRIA%2Flibpointing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/INRIA","download_url":"https://codeload.github.com/INRIA/libpointing/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247369952,"owners_count":20927928,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pointing-device","raw-input","subpixel","transfer-functions"],"created_at":"2024-11-06T10:14:58.972Z","updated_at":"2025-04-05T17:06:28.110Z","avatar_url":"https://github.com/INRIA.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![PyPI Version](https://img.shields.io/pypi/v/libpointing)](https://pypi.org/project/libpointing/)\n[![Downloads](https://static.pepy.tech/badge/libpointing)](https://pepy.tech/project/libpointing)\n[![NPM Version](https://badge.fury.io/js/libpointing.svg?style=flat)](https://npmjs.org/package/libpointing)\n[![Homebrew Version](https://img.shields.io/homebrew/v/libpointing.svg)](https://formulae.brew.sh/formula/libpointing)\n[![choco-shield](https://img.shields.io/chocolatey/v/libpointing)](https://community.chocolatey.org/packages/libpointing)\n\n[![CI](https://github.com/INRIA/libpointing/actions/workflows/CI.yml/badge.svg)](https://github.com/INRIA/libpointing/actions/workflows/CI.yml)\n\n# Libpointing\n\nAn open-source cross-platform library to get raw events from pointing devices and master transfer functions.\n\n## Description\n\nLibpointing is an open-source cross-platform library written in C++ that provides direct access to HID pointing devices and supports the design of pointing transfer functions. External contributions as pull requests are welcome!\n\n- If you use libpointing for industrial purposes, please consider funding libpointing through a research contract with Inria (contact Géry Casiez or Nicolas Roussel for this).\n\n- If you use libpointing for academic purposes, please cite: Casiez, G. \u0026 Roussel, N. (2011). No more bricolage! Methods and tools to characterize, replicate and compare pointing transfer functions. In proceedings of UIST'11, the 24th ACM Symposium on User Interface Software and Technology, 603-614. ACM Press. [DOI](http://dx.doi.org/10.1145/2047196.2047276)\n\n[![DOI](https://img.shields.io/badge/doi-10.1145%2F2047196.2047276-blue)](https://doi.org/10.1145/2047196.2047276)\n\n```\n@inproceedings{Casiez:2011:NMB:2047196.2047276,\n author = {Casiez, G{\\'e}ry and Roussel, Nicolas},\n title = {No More Bricolage!: Methods and Tools to Characterize, Replicate and Compare Pointing Transfer Functions},\n booktitle = {Proceedings of the 24th Annual ACM Symposium on User Interface Software and Technology},\n series = {UIST '11},\n year = {2011},\n isbn = {978-1-4503-0716-1},\n location = {Santa Barbara, California, USA},\n pages = {603--614},\n numpages = {12},\n url = {http://doi.acm.org/10.1145/2047196.2047276},\n doi = {10.1145/2047196.2047276},\n acmid = {2047276},\n publisher = {ACM},\n address = {New York, NY, USA},\n keywords = {CD gain, control-display gain functions, pointer acceleration, pointing, toolkit, transfer functions},\n} \n```\n\n## Installation\n\nVisit [installation page](https://github.com/INRIA/libpointing/wiki/Installation) or build it from source.\n\n## Documentation\n\nPlease visit our [wiki](https://github.com/INRIA/libpointing/wiki).\n\n## Features\n\n* runs on Windows, Mac OS X and Linux,\n* makes it easy to choose the devices at run-time through the use of URIs,\n* provides raw information from input devices,\n* provides resolution and frequency information for the available pointing and display devices,\n* supports hot-plugging\n* allows to bypass the system's transfer functions to receive raw asynchronous events from one or more pointing devices.\n* replicates as faithfully as possible the transfer functions used by **Microsoft Windows**, **Apple OS X** and **Xorg** (the X.Org Foundation server).\n* running on these three platforms, it makes it possible to compare the replicated functions to the genuine ones as well as custom ones.\n* provides the functionality to use existing transfer functions, custom ones or even build your own functions.\n* supports [subpixel interaction](http://dx.doi.org/10.1145/2380116.2380162).\n* Java, Python, Node.js bindings are available.\n\n## Minimalistic example\n\nOnce you correctly installed *libpointing* and linked it to your project, simply write `#include \u003cpointing/pointing.h\u003e` and start coding. Here is the console example which applies system specific transfer function to an input device and outputs the results to console:\n\n```C++\n#include \u003ciostream\u003e\n#include \u003cpointing/pointing.h\u003e\n\nusing namespace pointing;\n\nTransferFunction *func = 0;\n\n// context is user data, timestamp is a moment at which the event was received\n// input_dx, input_dy are displacements in horizontal and vertical directions\n// buttons is a variable indicating which buttons of the pointing device were pressed.\nvoid pointingCallback(void *, TimeStamp::inttime timestamp, int input_dx, int input_dy, int buttons) {\n\tif (!func) return;\n\n\tint output_dx = 0, output_dy = 0;\n\t// In order to use a particular transfer function, its applyi method must be called.\n\tfunc-\u003eapplyi(input_dx, input_dy, \u0026output_dx, \u0026output_dy, timestamp);\n\n\tstd::cout \u003c\u003c \"Displacements in x and y: \" \u003c\u003c input_dx \u003c\u003c \" \" \u003c\u003c input_dy \u003c\u003c std::endl;\n\tstd::cout \u003c\u003c \"Corresponding pixel displacements: \" \u003c\u003c output_dx \u003c\u003c \" \" \u003c\u003c output_dy \u003c\u003c std::endl;\n}\n\nint main() {\n\t// Basically, to start using main functionality of libpointing\n\t// one needs to create objects of PointingDevice, DisplayDevice classes,\n\t// connect them passing to TransferFunction class object.\n\n\t// Any available pointing and display devices\n\t// if debugLevel \u003e 0, the list of available devices\n\t// and extended information will be output.\n\tPointingDevice *input = PointingDevice::create(\"any:?debugLevel=1\");\n\tDisplayDevice *output = DisplayDevice::create(\"any:?debugLevel=1\");\n\n\tfunc = TransferFunction::create(\"sigmoid:?debugLevel=2\", input, output);\n\n\t// To receive events from PointingDevice object, a callback function must be set.\n\tinput-\u003esetPointingCallback(pointingCallback);\n\twhile (1)\n\t\tPointingDevice::idle(100); // milliseconds\n\n\tdelete input;\n\tdelete output;\n\tdelete func;\n\n\treturn 0;\n}\n```\n\n## Contributors\n\n* [Nicolas Roussel](http://direction.bordeaux.inria.fr/~roussel/)\n* [Géry Casiez](https://gery.casiez.net/)\n* [Izzatbek Mukhanov](https://www.linkedin.com/in/izzat-mukhanov-26a93b63)\n\n## License\n\nThis software may be used and distributed according to the terms of the GNU General Public License version 2 or any later version.\n\nAd-hoc licences can be granted upon request.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finria%2Flibpointing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finria%2Flibpointing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finria%2Flibpointing/lists"}