{"id":13731945,"url":"https://github.com/tesch1/turbobadger","last_synced_at":"2025-05-08T06:30:43.871Z","repository":{"id":56849152,"uuid":"60338655","full_name":"tesch1/turbobadger","owner":"tesch1","description":"Small footprint UI library for games \u0026 apps (branch)","archived":false,"fork":true,"pushed_at":"2024-05-04T17:19:38.000Z","size":17395,"stargazers_count":47,"open_issues_count":2,"forks_count":8,"subscribers_count":12,"default_branch":"hastybadger","last_synced_at":"2024-10-30T17:51:26.749Z","etag":null,"topics":["android","emscripten","gui","ios","opengl","sdl","sdl2","ui","widgets"],"latest_commit_sha":null,"homepage":"http://tesch1.github.io/turbobadger/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"fruxo/turbobadger","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tesch1.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-06-03T10:07:47.000Z","updated_at":"2024-09-24T18:02:20.000Z","dependencies_parsed_at":"2023-01-30T19:45:55.198Z","dependency_job_id":null,"html_url":"https://github.com/tesch1/turbobadger","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tesch1%2Fturbobadger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tesch1%2Fturbobadger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tesch1%2Fturbobadger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tesch1%2Fturbobadger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tesch1","download_url":"https://codeload.github.com/tesch1/turbobadger/tar.gz/refs/heads/hastybadger","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224707556,"owners_count":17356354,"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":["android","emscripten","gui","ios","opengl","sdl","sdl2","ui","widgets"],"created_at":"2024-08-03T02:01:42.088Z","updated_at":"2024-11-14T23:30:38.222Z","avatar_url":"https://github.com/tesch1.png","language":"C++","funding_links":[],"categories":["Graphics"],"sub_categories":[],"readme":"Branch Notice - HastyBadger\n---------------------------\n\nHasty is not Turbo.\n\nHastyBadger is a branch of the excellent widget and GUI library [Turbo\nBadger](https://github.com/fruxo/turbobadger).  Notabe additions are\nc++14 and out-of-the box SDL2 / GLES2 / GL3 / Emscripten demos, plus\ncontinuous integration to ease community contribution.  The aim is to\nbe super user friendly at the cost of being a bit more bloated than\nTurboBadger.\n\nThe HastyBadger is a work in progress, contributions and constructive\ncommentary are welcome!\n\nCurrent CircleCI build status: [![CircleCI](https://circleci.com/gh/tesch1/turbobadger/tree/hastybadger.svg?style=svg)](https://circleci.com/gh/tesch1/turbobadger/tree/hastybadger)\n\nCurrent Github Actions build status: ![Github Actions](https://github.com/tesch1/turbobadger/actions/workflows/cmake.yml/badge.svg)\n\nBinaries of the demo programs for most platforms (macOS, Linux,\nWindows) are available on the\n[Releases](https://github.com/tesch1/turbobadger/releases) page. An\nonline demo of the Emscripten port is here:\n[Emscripten](http://tesch1.github.io/turbobadger/TurboBadgerDemoSDL.html)\nport.\n\nDifferences from TurboBadger\n----------------------------\n\n- [Online Documentation](http://tesch1.github.io/turbobadger/)\n- [SDL2 Platform Demo](Demo/platform/port_sdl2.cpp)\n- [Android Studio Project](DemoAndroid2/)\n- [Emscripten Platform Demo](http://tesch1.github.io/turbobadger/TurboBadgerDemoSDL.html)\n- [Basic GL3 and GLES2 Renderers](src/tb/renderers/tb_renderer_gl.cpp)\n- [CircleCI Continuous Integration](https://circleci.com/gh/tesch1/turbobadger)\n\nCurrent TODOs\n-------------\n\n- create iOS demo\n- code test coverage measures\n- fix/text macos Xcode demo\n- fix Android Demo\n- fix Windows Demo\n- port over last few months of active TB development to HB\n- make the docs prettier, cleanup \n\nQuick Start\n-----------\n\n```sh\n$ ./build -h\nusage:\n ./build.sh [options]\n\n  -h       this help message\n  -o [dir] set build directory      \n\n  -gl      build for open gl\n  -gl3     build for open gl3\n  -gles2   build for open gles2\n\n  -em      build for emscripten\n  -sdl2    build for sdl2\n  -glfw    build for glfw\n\n  -v       be more verbose\n  -q       be less verbose\n```\n\nThe Turbo Badger README\n-----------------------\n\n```text\n\nTurbo Badger - Fast UI toolkit for hardware accelerated games \u0026 applications.\n-----------------------------------------------------------------------------------\n\nI created Turbo Badger because i wanted a small UI toolkit for use in games and\nhardware accelerated applications across multiple platforms (that target both\ndesktop and mobile).\n\nThe goal is a toolkit that can be easily integrated into an existing codebase to\nmake UI with skinning.\n\nIt has no dependency on stl, RTTI or exceptions. Compiling without these features\nmakes footprint very small. Utility classes (such as string, lists, hash table,\netc.) are quite minimal for the basic needs of Turbo Badger itself.\n\nSee [integration.txt](integration.txt) for details about integrating image loading,\nrenderer, font system etc.\n\n\nBETA notice\n-----------------------------------------------------------------------------------\n\nAPIs are changed, features improved \u0026 added. Be aware that if you use this right\nnow, you'll probably have to adjust your code to API changes sometimes after\npulling master. Documentation about API changes take place in the git commit\nchangelog for now ;)\n\n\nLicense\n-----------------------------------------------------------------------------------\n\nThis software is provided 'as-is', without any express or implied warranty. In no\nevent will the authors be held liable for any damages arising from the use of this\nsoftware.\n\nPermission is granted to anyone to use this software for any purpose, including\ncommercial applications, and to alter it and redistribute it freely, subject to the\nfollowing restrictions:\n\n  1. The origin of this software must not be misrepresented; you must not claim\n  that you wrote the original software. If you use this software in a product,\n  an acknowledgment in the product documentation would be appreciated but is not\n  required.\n\n  2. Altered source versions must be plainly marked as such, and must not be\n  misrepresented as being the original software.\n\n  3. This notice may not be removed or altered from any source distribution.\n\n\nWhat features does it have\n-----------------------------------------------------------------------------------\n\nCore:\n\n  * Widgets (many common standard widgets)\n  * Text editing widget (With clipboard, undo/redo, styling functionality,\n    embedded content (read only)...)\n  * Extendable skin system with automatic runtime atlas creation,\n    Expand (shadows \u0026 glow without nasty margin hacks),\n    conditions (simple selectors), overrides, overlays, children, multiple\n    pixel density support etc.\n  * Automatic widget layout (No need to specify widget dimensions by pixels)\n  * Text based UI resource format, supporting conditions etc.\n  * Keyboard friendly (tab focus etc.)\n  * Message handling, with delayed/timed messages.\n  * All containers are scrollable/pannable (automatically from mouse/finger\n    interaction, and following focus).\n  * Very failproof event handling.\n  * Widget connections (synchronize multiple widgets with \"widget-values\")\n  * Language string handling\n  * No dependency on stl, exceptions, RTTI\n  * Very portable \u0026 easy to implement new backends (Image loading, fonts,\n    renderer)\n  * Support 32/64bit architectures and tested on Windows/Linux/Mac/iOS/Android\n  * Uses constexpr by default for all ID comparisions on compilers that support\n    it.\n  * Unicode support (UTF8)\n  * Multiple font systems can be used (Implementations of TBBF, freetype and stbf\n    provided)\n  * Animation system.\n  * Unit tests.\n\n\nThe code design \u0026 developing Turbo Badger\n-----------------------------------------------------------------------------------\n\nIf you try to familiarize yourself with the code, you might notice the heavily used\nobject `TBID` that may seem like a string. It's actually an uint32 that can be set\nfrom a string (using the strings hash value). It's used for hash keys, as\nsubstitute for enums and all kind of things needing custom IDs.\n\nWith compilers supporting C++ 11 `constexpr`, the string to integer conversion is\ndone compile time.\n\nIf you want to add new stuff, here are some hints that will make it easier to get a\npull requests accepted:\n\n  * Do not make it dependant on exceptions, RTTI or stl (or boost or similar)\n\n  * It should not leak or crash if running out of memory.\n\n  * Follow the used code style (4 spaces wide tabs, indentation \u0026 whitespace style,\n    documentation etc.)\n\n  * Features that may be optional should be optional and not tied to the core.\n\n\nCreating custom widgets\n-----------------------------------------------------------------------------------\n\nWidgets are cheap to create and layout and using many widgets to get what you want\nis encouraged. A custom widget should typically not implement any layouting and\ndrawing of sub-elements if it can be solved by wrapping a TBLayout and other\nexisting widgets.\n\nAny widget may contain other widgets and may control into which sub-widget other\nwidgets are inflated from resources (using `TBWidget::GetContentRoot`).\n\nCustom widgets can be inflated from UI resources too. See the use of the\n`TB_WIDGET_FACTORY` macro in `tb_widgets_reader.cpp` for examples on how to do\nthis.\n\n\nBuilding the demo\n-----------------------------------------------------------------------------------\n\nThe demo use GLFW as a submodule for some platform window \u0026 input handling.\nAfter the first git clone, you need to run:\n\n\tgit submodule init\n\tgit submodule update\n\nThis will clone GLFW into the right directory.\n\nThere is project files for Visual Studio 2012 in Demo/VisualStudio.\nFor other platforms/compilers, you need to first run cmake to generate makefile or\nprojects for your favorite IDE.\n\nThere's a Sublime Text project for a small Android test app in DemoAndroid with a\ncustom build \u0026 deploy script (Windows .bat file. There's currently no Linux/Mac\nscripts).\n\n\nAuthor\n-----------------------------------------------------------------------------------\n\nEmil Segerås\nWeb: \u003chttp://fiffigt.com\u003e  \n\nTurbo Badger home: \u003chttps://github.com/fruxo/turbobadger\u003e\n\n\nScreenshot\n-----------------------------------------------------------------------------------\n\nSome of the windows in the Demo application for desktop, using the default skin.\n\n![Default skin](Demo/screenshot/screenshot_01.png)\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftesch1%2Fturbobadger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftesch1%2Fturbobadger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftesch1%2Fturbobadger/lists"}