Release Date

Anklang 0.1.0.nightly2308232124

Development version - may contain bugs or compatibility issues.

Merge branch 'b-propinput-litcomponent' # 2023-08-23 Tim Janik a7ab348 * b-propinput-litcomponent: UI: b/propinput.js: port to LitComponent UI: b/choiceinput.js: support label attribute as choice tip UI: little.js: add LitComponent.request_update_() UI: util.js: add addnotify_() and delnotify_() to extended properties UI: b/pro-group.vue: use <b-propinput/> UI: b/knob.js: simplify MISC: extend nodemon delay to reduce conflicts with lint rules Sometimes when ui/lint is triggered, files are written and make serve also runs rebuild rules due to nodemon. Merge branch 'fix-raw-tex' # 2023-08-19 Tim Janik 64882dc * fix-raw-tex: UI: xbcomments.js: properly quote special characters in docs DOC: do not parse source comments as raw_tex Merge branch 'anklang-internals+jsdocs' # 2023-08-19 Tim Janik b554e80 * anklang-internals+jsdocs: UI: b/basics.js: small docu update DOC: integrate JS component docs into internal manual DOC: jsdoc2md.js: skip extra subsection indentation UI: optimize *.jscss build, fix anklang-internals.html dependency UI: b/*.js: use three hashes '###' to indent docu subsections Merge branch 'swesterfeld-piano-roll-move', closes #16 # 2023-08-03 Tim Janik ec26905 * swesterfeld-piano-roll-move: UI: b/piano-ctrl.js: support moving/copying notes with the mouse UI: b/cliplist.js: restore user manual docs Merge branch 'jsdoc-elements' # 2023-08-03 Tim Janik 9d0c8de * jsdoc-elements: DOC: poxystyle.css: fix dark theme colors DOC: jsdoc2md.js: use pandoc anchors everywhere with data-4search hints DOC: forbid raw-html and support data-4search on <span/> UI: b/*.js: reformat documentation to use @class and @description commands See also: DOC: parallelize JsDoc processing DOC: fix exit code and compact markdown DOC: add ui/ch-*.md files to poxy docs DOC: jsdoc2md.js: allow descriptions of virtual classes as docu sections DOC: copyright.ini: assign MPL-2 to ch-*.md documentation files DOC: integrate ui/ add html/ to CLEANDIRS clean poxy/ and assets/ DOC: explicitely describe ASE UI: describe lit components UI: rename from ui/b/ add Star History Chart Merge branch 'toggle-as-lit' # 2023-08-03 Tim Janik 0eba7de * toggle-as-lit: UI: b/pro-input.vue: handle @valuechange on b-toggle UI: b/toggle.js: port to LitComponent Merge branch 'x11test-delay' # 2023-08-02 Tim Janik 8712b43 * x11test-delay: X11TEST: ereplay.cjs: add delay to mitigate a UI-reload race on project changes X11TEST: simplify AnklangSynthEngine executable check Merge branch 'poxy-on-jammy' # 2023-08-02 Tim Janik 3be13e1 * poxy-on-jammy: GITHUB: workflows/testing.yml: run poxy on ubuntu:22.04 MISC: docker_run: fix interactive invocations MISC: Dockerfile.jammy: setup development tools for ubuntu:22.04 builds Merge branch 'make-dist-and-assets' # 2023-07-31 Tim Janik 4694aa8 * make-dist-and-assets: GITHUB: workflows/release.yml: add Ping-IRC job GITHUB: workflows/release.yml: use misc/docker_run GITHUB: workflows/release.yml: add action to build & create releases from tags dist: assign release version to misc/ MISC: prepare BAKED_DESCRIBE variable to define baked in version MISC: support lightweight release tags via exact match UI: fix unintentional tscheck remakes DOC: add doc/ to internal manual ASE: rebuild ase/buildversion*.cc if GITCOMMITDEPS changes rebuild package.json if GITCOMMITDEPS changes MISC: take tags and packed-refs into account for GITCOMMITDEPS DOC: elaborate on releases and assets DOC: start describing versioning and the release process MISC: add development version disclaimer MISC: remove partial release build rules MISC: simplify to just make dist and trigger release asset builds MISC: build AppImage in assets/ MISC: use tools from appimagetools/ dir MISC: cache downloads of appimage tools make dist: also generate assets/ChangeLog MISC: create debian package in assets/ DOC: support building assets/pdf MISC: avoid depending on appimage-runtime-zstd for normal builds UI: tsconfig.json: remove exclude section grep-reminders: only inspect existing files add recent commits to build dist tarball in assets/ with high compression ASE: for --version, show short version and build id MISC: use version_short ELECTRON: use version_short ASE: use version_short extract version_hash, use version_short for brief version identifiers * Remove version_m.m.m use version_short instead * Remove version_buildid, that is actually version_short + version_hash MISC: remove unused release-news MISC: generate most recent section of MISC: parse hash from misc/ MISC: reduce logic to produce baked/git/fallback version/hash/date Merge branch 'docker_build_run_clean' # 2023-07-31 Tim Janik acafef2 * docker_build_run_clean: GITHUB: workflows/testing.yml: remove duplicate chown invokation GITHUB: workflows/testing.yml: use misc/docker_build, docker_run, docker_clean MISC: docker_clean: cleanup permissions and CI image tag MISC: docker_run: run in a CI image built by docker_build MISC: docker_build: build a Dockerfile CI image with cache support UI: make sure all JS files are built before running tscheck Merge branch 'swesterfeld-piano-roll-note-length', closes #15 # 2023-07-27 Tim Janik d115723 * swesterfeld-piano-roll-note-length: UI: b/piano-ctrl.js: cleanup note_duration_delta at the end of a drag UI: b/piano-ctrl.js: support resizing multiple notes in a selection Merge branch 'simple-vue-ports' # 2023-07-27 Tim Janik 1c13e75 * simple-vue-ports: UI: adapt make install wildcards UI: b/statusbar.js: port to LitComponent UI: b/databubble.js: port to native HTML component UI: b/partthumb.vue: retire partthumb which is superceded by clipview UI: b/hscrollbar.vue: retire hscrollbar code until we really need one UI: b/color-picker.vue: retire color picker code until we really need one Merge branch 'global-css-rename' # 2023-07-27 Tim Janik c402d5e * global-css-rename: UI: index.html: load global.css UI: generate global.css UI: b/shell.vue: fix comment UI: global.scss: rename (from globals.scss) b/c it now contains global CSS Merge branch 'globalscss-icon-fonts' # 2023-07-27 Tim Janik 7a7dd7e * globalscss-icon-fonts: UI: b/app.js: add comment for spinner testing UI: index.html: adjust font resource paths UI: globals.scss: import all icon SCSS defs UI: dom.js: properly quote font names ASE: use CACHE_AUTO since we do not handle conditional requests UI: b/menuseparator.js: fix customElements extends specification UI: b/icon.js: leave icon font loading to globals.scss, assert font presence UI: b/shell.vue: spinner.scss is already imported by globals.scss UI: move fonts into ui/ and merge globals.scss dependencies UI: globals.scss: rename normalize.scss for merging import UI: postcss.js: keep .css imports, include all others UI: b/icon.js: assert "Material Icons" font_family instead of loading material-icons.css UI: globals.scss: directly include material-icons.css UI: prepare ui/material-icons.css for globals.css UI: dom.js: add font_family_loaded() UI: dom.js: add file for DOM utilities Merge branch 'csshash-2fix-fouc' # 2023-07-27 Tim Janik 0b1e7e7 * csshash-2fix-fouc: UI: index.html: mark globals.css as data-4litcomponent UI: little.js: clone stylesheet links marked data-4litcomponent into shadowRoot UI: index.html: reload vue-styles.css and globals.css once the CSSHASH changes UI: support @--CSSHASH--@ insertions fro index.html ASE: send "forever" Cache-Control with text/css to reduce FOUC Merge branch 'globalscss-4-litcomponents' # 2023-07-27 Tim Janik 709f4e9 * globalscss-4-litcomponents: UI: run stylelint on ui/globals.css UI: b/positionview.js: add CSS to globals.css, avoid shadowRoot UI: b/playcontrols.js: add CSS to globals.css, avoid shadowRoot UI: b/pianoroll.js: add CSS to globals.css, avoid shadowRoot UI: b/partlist.js: add CSS to globals.css, avoid shadowRoot UI: globals.scss: only style button and push-button for LightDOM UI: b/objecteditor.js: add CSS to globals.css, avoid shadowRoot UI: b/switchinput.js: add CSS to globals.css, avoid shadowRoot UI: b/numberinput.js: add CSS to globals.css, avoid shadowRoot UI: b/textinput.js: add CSS to globals.css, avoid shadowRoot UI: b/more.js: add CSS to globals.css, avoid shadowRoot UI: b/tracklist.js: add CSS to globals.css, avoid shadowRoot UI: b/trackview.js: add CSS to globals.css, avoid shadowRoot UI: b/menubar.js: fix b-menuseparator UI: b/trackview.js: fix b-menuseparator UI: b/menutitle.js: add CSS to globals.css UI: b/menuseparator.js: make b-menuseparator a simple HTMLHRElement UI: b/menurow.js: add CSS to globals.css, avoid shadowRoot UI: b/menuitem.js: add CSS to globals.css UI: b/menubar.js: add CSS to globals.css, avoid shadowRoot UI: b/knob.js: add CSS to globals.css, avoid shadowRoot UI: b/icon.js: add CSS to globals.css UI: b/editable.js: add CSS to globals.css UI: b/contextmenu.js: add CSS to globals.css UI: b/clipview.js: add CSS to globals.css, avoid shadowRoot UI: b/cliplist.js: add CSS to globals.css, avoid shadowRoot UI: b/choiceinput.js: add CSS to globals.css, avoid shadowRoot UI: b/buttonbar.js: add CSS to globals.css, avoid shadowRoot UI: b/basics.js: add CSS to globals.css, cleanups UI: b/aboutdialog.js: add CSS to globals.css, avoid shadowRoot UI: globals.scss: merge contents of grid.scss UI: fix globals.scss cleanup UI: include *.jscss contents in globals.css Merge branch 'postcss-normalize-charset' # 2023-07-27 Tim Janik 746575f * postcss-normalize-charset: UI: postcss.js: postprocess CSS with postcss-normalize-charset MISC: install postcss-normalize-charset UI: postcss.js: add support for -I to add include paths Merge branch 'aboutdialog-lit' # 2023-07-27 Tim Janik 874535f * aboutdialog-lit: UI: index.html: add comments to start_view_transition() UI: globals.scss: add b-dialog styling UI: b/contextmenu.js: use transparent backdrop for menus UI: globals.scss: add view-transition-group defaults, add scale0 keyframes UI: dark.scss: add b-animation-duration and b-dialog-colors UI: tsconfig.json: avoid checks of postcss.js.tst.js UI: b/menubar.js: make use of Shell.show_about_dialog() UI: b/app.js: leave aboutdialog handling to Shell.show_about_dialog() UI: b/shell.vue: use b-aboutdialog.shown, add show_about_dialog(), handle close * Use proper internal state for showing b-aboutdialog * Expose showing/hiding through show_about_dialog() * Allow animated closing of b-aboutdialog with start_view_transition UI: b/aboutdialog.js: display Lit version number UI: b/aboutdialog.js: port to LitComponent UI: eslintrc.js: declare start_view_transition as global symbol UI: index.html: define start_view_transition() This is a Vue-aware wrapper around document.startViewTransition() (atm Chrome specific), that still does the right thing on Firefox and has a disable flag. UI: index.html: add lit_version to config_json Merge branch 'dark-palette' # 2023-07-24 Tim Janik 61e1ecd * dark-palette: UI: dark.scss, globals.scss: use palette for body colors UI: add palette.scss to scss files UI: palette.scss: add warm grey palette based on ZCAM Jz (lightness) steps Merge branch 'modern-normalize' # 2023-07-24 Tim Janik aa3a6b6 * modern-normalize: UI: little.js: load globals.css into every LitComponent UI: index.html: give globals.css precedence over vue-styles.css UI: index.html: remvoe shadow.css UI: remove ui/elements.scss ui/shadow.scss run 'lint' during `make check` UI: remove unused files elements.scss and shadow.scss UI: globals.scss: merge styles from elements.scss and shadow.scss UI: globals.scss: use normalize.css to normalize latest Chrome & Firefox UI: normalize.css: leave font-family setting to our own theme MISC: fix MIT License pattern to deal with case and 'd'-ending UI: normalize.css: insert MIT License and add Copyright notices UI: normalize.css: add renamed modern-normalize.css version 2.0.0 Add modern-normalize.css from licensed MIT. Merge branch 'poxystyle' # 2023-07-24 Tim Janik 7134954 * poxystyle: DOC: allow doc/poxystyle.css to fixup colors DOC: poxystyle.css: fix light theme colors and sizes UI: b/cliplist.js: minor edit update roadmap with items from Stefan Westerfeld Merge branch 'ts-check-lit-components', add ts-check and fix lint issues # 2023-07-03 Tim Janik a7ea5f4 * ts-check-lit-components: UI: b/app.js: reload UI on project changes UI: b/objecteditor.js: fix output UI: util.js: add missing type annotations UI: kbd.js: add missing type annotations UI: b/trackview.js: add @ts-check and missing type annotations UI: b/tracklist.js: add @ts-check and missing properties UI: b/playcontrols.js: add @ts-check UI: b/pianoroll.js: add @ts-check and missing type annotations UI: b/piano-ctrl.js: minor type fix UI: b/partlist.js: add @ts-check UI: b/more.js: add @ts-check UI: b/menutitle.js: add @ts-check UI: b/menuseparator.js: add @ts-check UI: b/menurow.js: add @ts-check UI: b/menuitem.js: add @ts-check UI: b/knob.js: add @ts-check and missing type annotations UI: b/editable.js: add @ts-check UI: b/contextmenu.js: add @ts-check and missing type annotations UI: b/clipview.js: add @ts-check and missing type UI: b/buttonbar.js: add @ts-check escape FIXME keywords UI: grep for reminders in ui/lint DEVICES: grep for reminders in devices/lint at the end of 'all', grep for reminder keywords in known sources ls-tree.d needs GITCOMMITDEPS, i.e. misc/ ASE: grep for reminders in ase/lint add 'lint' as toplevel phony rule UI: b/tracklist.js: cleanup CSS UI: b/textinput.js: cleanup CSS UI: b/switchinput.js: cleanup CSS UI: b/shell.vue: cleanup CSS UI: b/positionview.js: cleanup CSS UI: b/pianoroll.js: cleanup CSS UI: b/noteboard.vue: cleanup CSS UI: b/menutitle.js: cleanup CSS UI: b/menurow.js: cleanup CSS UI: b/menuitem.js: cleanup CSS UI: b/knob.js: cleanup CSS UI: b/icon.js: cleanup CSS UI: b/folderview.vue: cleanup CSS UI: b/filedialog.vue: cleanup CSS UI: b/editable.js: cleanup CSS UI: b/dialog.vue: cleanup CSS UI: b/databubble.vue: cleanup CSS UI: b/contextmenu.js: cleanup CSS UI: b/clipview.js: cleanup CSS UI: b/basics.js: inlcude v-flex mixin UI: theme.scss: fix color syntax UI: startup.js: fix import path UI: use stylelint with -f unix only inside emacs UI: add missing ui/spinner.scss dependency UI: stylelintrc.cjs: ignore whitespace rules UI: add Ase.server @type UI: mixins.scss: add v-flex mixin UI: mixins.scss: use $b-font-stack-kbd-mono UI: dark.scss: define $b-font-stack-kbd-mono for hotkey rendering UI: b/menubar.js: port to LitComponent * Cleanup <b-positionview/> markup * Cleanup CSS UI: b/positionview.js: port to LitComponent UI: b/basics.js: use h-flex() UI: mixins.scss: add h-flex() mixin MISC: Dockerfile.arch: install unzip Merge branch 'inputs-as-litelement' # 2023-06-27 Tim Janik 2ddfe22 * inputs-as-litelement: X11TEST: play-notes.json: adjust recording for new web components ASE: listen on "notify" emissions from properties ASE: fix notifications, emit notify:identifier UI: util.js: turn xprop.value_ into a reactive property UI: b/choiceinput.js: take b-objecteditor into account in CSS UI: b/pro-input.vue: use @valuechange on b-choiceinput UI: b/preferencesdialog.vue: use b-objecteditor UI: util.js: avoid extending the same property twice UI: util.js: export fullstop() UI: use tsc with --pretty false only inside emacs UI: b/objecteditor.js: port to LitComponent * Turn into shadowless component * Properly prefix CSS classes * Listen on and handle @valuechange events * Do not freeze extended properties that we keep mutating * Remove old resize blocker logic UI: startup.js: load basic custom components early on UI: b/basics.js: move h-flex, v-flex, c-grid, push-button here, shadowless Make these simple basic containers shadowless, i.e. without shadow root. UI: b/pro-input.vue: add support for b-choiceinput UI: little.js: export 'nothing' from Lit UI: types.d.ts: add debug() global UI: b/fed-object.vue: add support for b-choiceinput UI: b/choiceinput.js: port to LitComponent, render on demand only UI: b/tracklist.js: fix stacking of top border shadow UI: b/switchinput.js: allow LEFT/RIGHT/UP/DOWN to toggle UI: b/fed-object.vue: add support for b-switchinput UI: b/switchinput.js: port to LitComponent UI: types.d.ts: declare global CONFIG UI: b/fed-object.vue: add support for b-numberinput UI: b/numberinput.js: simplify and fix sizing UI: b/numberinput.js: port to LitComponent UI: b/textinput.js: dispatch value changes as valuechange "event" Merge branch 'fix-lit-html' # 2023-06-22 Tim Janik 31da2dd * fix-lit-html: UI: b/*.js: fix trailing-solidus in html`` markup UI: eslintrc.js: add plugin:lit/recommended to linting rules MISC: install eslint-plugin-lit Merge branch 'InterDisplay', based on InterVariable-4.0 font # 2023-06-22 Tim Janik 89c9d01 * InterDisplay: UI: dark.scss: add a fallback font stack UI: theme.scss: remove outdated font stuff UI: mixins.scss: move b-kbd-hotkey here UI: elements.scss: use b-font-weight-bold() and b-font-weight-bolder() UI: b/*.vue, b/*.js: use b-font-weight-bold() and its variants UI: dark.scss: define b-font-weight-{normal|bold|bolder} mixins UI: b/menutitle.js: use drop-caps while InterVariable-4.0 small-caps are broken See also: UI: elements.scss: leave font handling to theme, globals and shadow UI: b/pianoroll.js: use b-canvas-font UI: b/partthumb.vue: use b-canvas-font UI: b/clipview.js: use b-canvas-font UI: shadow.scss: use b-ui-font() inside shadow DOMs UI: globals.scss: make use of b-ui-font() UI: dark.scss: configure b-ui-font() for "InterVariable" in InterDisplay style UI: globals.scss: leave font-face defs to index.html UI: index.html: cleanup preloads, add @font-face for "InterVariable" UI: b/icon.js: add small comment UI: download InterVariable.woff2 UI: stylelintrc.cjs: disable "font-family-name-quotes" to allow quoted font names Merge branch 'component-styling' # 2023-06-21 Tim Janik 234bf99 * component-styling: UI: b/playcontrols.js: use JsExtract.css_url() UI: b/icon.js: use JsExtract.css_url() UI: b/textinput.js: make this a shadowless component UI: little.js: add JsExtract.css_url() UI: little.js: use cast to work around TS2425 UI: b/playcontrols.js: port to LitComponent UI: remove temporary file UI: b/*.vue: remove useless mixins import UI: index.html: import globals.css UI: globals.scss: import elements.scss which includes mixins UI: create globals.css and auto-import mixins.scss for vue styles UI: elements.scss: rename from domstyles.scss UI: b/button-bar.vue: port to LitComponent UI: b/*.js: access only LitComponent fields (not LitElement) UI: little.js: remove LitElement export UI: startup.js: derive from LitComponent (not LitElement) UI: b/*.js: derive from LitComponent (not LitElement) UI: b/partlist.js: embed and load CSS via JsExtract UI: fix dependenc for scss rebuilds UI: b/partlist.js: import Util UI: types.d.ts: declare __DEV__ global UI: b/pianoroll.js: extend LitComponent and use reactive_wrapper to track notes Also, merge multiple repaint requests into the same micro task. UI: b/clipview.js: leave width to parent UI: b/cliplist.js: set 'data-f1' only once suffices UI: b/trackview.js: render b-trackview context menu on demand UI: b/contextmenu.js: fix close() and synchronize updates * await this.updateComplete before showModal() * properly emit 'close', take nesting into account UI: b/partlist.js: port to LitElement UI: mixins.scss: add transparent-scrollbars mixin Merge branch 'clang-tidy' # 2023-06-18 Tim Janik 29cc5ff * clang-tidy: MISC: always use /tmp/anklang-mkassets/ for release builds GITHUB: workflows/testing.yml: fix key file permissions GITHUB: workflows/testing.yml: fixup permissions at CI end GITHUB: workflows/testing.yml: remove missing variable reference GITHUB: workflows/testing.yml: fix arch perms and focal redirection GITHUB: workflows/testing.yml: use $DOCKER_RUN and for all tasks * use $DOCKER_RUN and caching for Focal-Docs * adjusting is not needed for Lunar * use $DOCKER_RUN and caching for Arch-Replay MISC: Dockerfile.focal: remove unused RUNs, rename user to ubuntu * remove unused OOTBUILD, rename builder user to ubuntu * add a comment howto build and run this image * use fixed user and group id of 1000 MISC: Dockerfile.arch: use fixed user and group ids of 1000 MISC: Dockerfile.arch: remove unused OOTBUILD and unused poxy MISC: Dockerfile.lunar: remove unused OOTBUILD GITHUB: workflows/testing.yml: directly use docker run for lunar and fix perms MISC: Dockerfile.lunar: upgrade to nodejs-20 MISC: upgrade npm build tools and electron-25 MISC: remove unused rollup-plugin-node-resolve MISC: fix missing directory dependency GITHUB: workflows/testing.yml: add Lunar-Clang-Tidy, rename Focal-Docs MISC: Dockerfile.lunar: provide build environment with clang-17 on ubuntu:23.04 MISC: colorize error, warning, note and special case Emacs MISC: reimplement clang-tidy and clang-tidy-clean rules defined CLANG_TIDY create ls-tree.d and provide $(LS_TREE_LST) Merge branch 'sorted-vector' # 2023-06-08 Tim Janik 7b3b380 * sorted-vector: ASE: sortnet: implement SortedVector ASE: testing.hh: TFLOATS(): assert float equality within an apsilon ASE: add SPL link Merge branch 'swesterfeld-fix-pcg-ub' # 2023-06-07 Tim Janik 1d49d48 * swesterfeld-fix-pcg-ub: ASE: randomhash: fix undefined behaviour in Pcg32Rng Left shifting a 32bit value by 32 bits is UB. * Closes #14 Merge branch 'appimage-rpath-fix' # 2023-06-07 Tim Janik f609e1e * appimage-rpath-fix: MISC: avoid `linuxdeploy {-e|-l}` which change binary locations Avoid `linuxdeploy {-e|-l}`, these options change the binary locations by copying. The copies mess up ELF location detection and restoring the original locations causes wrong relative $ORIGIN paths. We just use --deploy-deps-only now, which keeps the binaries in place and correctly adjusts the relative $ORIGIN path. MISC: remove unused command Merge branch 'appimage-dependencies' # 2023-06-06 Tim Janik 1696a12 * appimage-dependencies: MISC: reduce workarounds by using linuxdeploy --deploy-deps-only MISC: add ELF dependencies for AnklangSynthEngine and gtk2wrap This adds,, and, to the AppImage. Closes #13. Merge branch 'fix-imports' # 2023-06-06 Tim Janik 1b47b9e * fix-imports: UI: util.js: add missing Kbd import UI: eslintrc.js: remove 'Util' global UI: b/*.vue: add missing Util imports UI: b/*.js: add missing Util imports Merge branch 'jsdoc-tsimport' # 2023-06-05 Tim Janik c184b5e * jsdoc-tsimport: UI: b/cliplist.js: jsdoc-tsimport-plugin does not support a blank after import DOC: jsdocrc.json: use jsdoc-tsimport-plugin to parse tsc file imports * Fix JsDoc choking on typescript import statements that import typed from other JS files. * See also: MISC: install jsdoc-tsimport-plugin Merge branch 'typescript-jsdoc-checks' # 2023-06-05 Tim Janik 819895c * typescript-jsdoc-checks: UI: types.d.ts: allow App, Data, Shell Ase globals UI: index.html: add importmap to allow lit module imports UI: tsconfig.json: configure typescript checks, allow JS type checks + imports UI: wrapper.js: add @param type UI: little.js: add @ts-check, add types, add explicit exports for tsc UI: b/app.js: add @ts-check and missing property decl UI: b/cliplist.js: add @ts-check, missing imports, exports and initializations UI: b/clipview.js: export class UI: wrapper.js: add @ts-check and type annotations UI: b/statusbar.vue: use material icons for info and instrument panel UI: b/icon.js: fix material-icons size UI: add 'tscheck', 'stylelint' and 'lint' rules * add 'lint' dependency to run all of stylelint eslint tscheck * add 'tscheck' rule to selectively run typescript checks * add explicit 'stylelint' rule * simplify lit.js rollup * ui/vue.js: leave eslint cache alone * install material-icons from npm * cleanup eslint rule * ui/rebuild: avoid bg jobs, no need to print dir in sub MAKE MISC: cleanup serve and rebuild scripts MISC: remove eslint script, use make eslint instead MISC: install material-icons@1.13.6 whitespace fix GITHUB: workflows/testing.yml: use git fetch --unshallow Apparently `git fetch --shallow-since` does not work with the merge commit created by PR checkouts. Using `git fetch --unshallow` might be less efficient for regular branches, but at least works with trunk and PRs. MISC: upgrade lit, electron, vue, postcss, etc UI: b/pianoroll.js: fix indicator interacting with the cursor MISC: install typescript to enable code checks Merge branch 'nightly-version' # 2023-05-20 Tim Janik 8459bbb * nightly-version: MISC: update Nightly releases to avoid excessive emails MISC: add script to delete all release assets via gh update documentation links MISC: use 0.1.2.dev3 for development versions for proper ordering Using .dev[0-9] postfixes properly sorts: 0.1.2 < 0.1.2.dev3 < 0.1.3 This works for sort -V, dpkg, rpm and PIP versions. See: MISC: fix typo Merge branch 'ci-build-updates' # 2023-05-19 Tim Janik 580cf66 * ci-build-updates: MISC: use gh, keed *-dev version number for Nightly releases * Use gh instead of hub to create releases * Keep the development version number for Nightly releases * Add a brief disclaimer about Nightly releases MISC: simplify, support --commit-date and $RELEASE_VERSION GITHUB: workflows/testing.yml: add named step "Fetch last release tag" GITHUB: workflows/testing.yml: fetch git history since last release tag GITHUB: workflows/testing.yml: update ping deps GITHUB: workflows/testing.yml: fix workflow names GITHUB: workflows/testing.yml: run (full) docu upload on Ubuntu GITHUB: workflows/testing.yml: run X11 tests on Arch DOC: include all Anklang docs in upload MISC: Dockerfile.focal: install pip, doxygen and poxy MISC: Dockerfile.focal: install twm for x11test MISC: Dockerfile.arch: install libgtk3 and libnss for Electron MISC: Dockerfile.arch: install xvfb ffmpeg twm for x11test-v X11TEST: switch to using twm with auto placement GITHUB: workflows/testing.yml: use full doc/ install dir as doc artifact GITHUB: workflows/testing.yml: test clang builds under Ubuntu GITHUB: workflows/testing.yml: remove unused env var from Arch build rule Merge branch 'g++-fixes' # 2023-05-17 Tim Janik 8404380 * g++-fixes: ASE: cxxaux.hh: fix internal member typedef name ASE: cxxaux.hh: use std::conditional_t<> for rebind::other, fix for g++-12 With template specializations, g++-11 and g++-12 error out with "explicit specialization in non-namespace scope", so we use std::conditional_t<> which seems to work with g++-12 and clnag++-15. Merge branch 'libstdc++-13' # 2023-05-17 Tim Janik c0f01a0 * libstdc++-13: ASE: cxxaux.hh: patch up make_shared() to make libstdc++13 happy * Move shared ptr allocator out of function scope (to allow template specialization) * Add rebind<> template to shared ptr allocator which derives from std::allocator * Specialize rebind<> so it yields the same allocator for only the shared ptr value type * This "fixes" two static assertions that were added in libstdc++13, see: ASE: cxxaux.hh: remove unused FriendAllocator<> ASE: cxxaux.hh: fix missing <string> include ASE: loop.hh: always use ASE_DEFINE_MAKE_SHARED() to implement make_shared() ASE: formatter.hh: include cstdint for int32_t ASE: add missing braces for clap_event_transport_t initializer UI: wrapper.js: add missing Util import add simple rule to generate +compile_commands.json Merge branch 'transportinfo', closes #5 # 2023-05-12 Tim Janik 3819f90 * transportinfo: ASE: clapplugin: provide transport information for the plugin MISC: link -shared: allow undefined symbols with sanitizers Merge branch 'build-time-postcss' # 2023-03-15 Tim Janik 54353a7 * build-time-postcss: UI: split styles into dark, grid, domstyles, mixins, shadow, globals SCSS files globals.scss: styles for the LightDOM only shadow.scss: styles only for ShadowDOM components domstyles.scss: common styles for the LightDOM and ShadowDOM grid.scss: provide <grid/> helpers mixins.scss: base to customize components dark.scss: basic theme, allow switching via import $themename_scss; cursors/cursors.css: provide CSS variables for custom cursors UI: cursors/cursors.css: fix quotes UI: cursors/cursors.css: introduce --svg-cursor-* variables at :root{} scope This is needed to make cursors.css actualy valid CSS. UI: index.html: remove postfix and css validator, load vue-styles.css, fix preloads UI: b/clipview.js: use zcam directly UI: b/*.js: embed and load CSS via JsExtract UI: b/positionview.vue: use $b-lcdscreen-fg, $b-lcdscreen-bg UI: b/: fix $b-button-radius $b-button-radius $b-track-meter-gap $b-track-meter-thickness UI: b/pianoroll.js: import grid.scss UI: b/positionview.vue: use t-lcdscreen-fg, t-lcdscreen-bg UI: b/trackview.js: add --track-meter-thickness, --track-meter-gap UI: b/*.vue: use --button-radius UI: b/*.js: use --button-radius UI: b/*.js: use var(--button-radius); UI: b/*.vue: use var(--button-radius); UI: b/deviceeditor.vue, b/pro-group.vue: use --device-radius UI: b/shell.vue: remove unused styles UI: b/pianoroll.js: remove useless color assignment UI: b/textinput.js: include mixins.scss to use SCSS variable UI: b/menuseparator.js: include mixins.scss to use SCSS variable UI: b/*.js: extend componenets from LitComponent instead of LitElement UI: b/dialog.vue: inline box-shadow styling UI: b/pianoroll.js: import grid helpers from grid.css UI: b/menubar.vue: specify 'justify-content: space-between' directly UI: b/pianoroll.js: rely on global cursors.css import UI: startup.js: remove unused postcss import UI: jsextract.js: document jsextract.js usage UI: jsextract.js: extract JsExtract.scss`` marker snippets into *.jscss files UI: little.js: document JsExtract usage UI: little.js: fix .css URL construction to always have an extension UI: little.js: load <link rel=stylesheet href=shadow.css> into shadow roots UI: little.js: add ./shadow.css to LitComponent UI: little.js: remove postcss UI: little.js: export JsExtract with scss`` and fetch_css() UI: little.js: add default define $themename_scss:dark.scss; Also, disable csstree-validator which yields outdated warnings. UI: little.js: load shadow.scss into all LitComponent elements UI: little.js: LitComponent: always adopt shadow.css in createRenderRoot() UI: little.js: CSS import: remove premature fetch + caching, always import all UI: little.js: remove cursors/cursors.css from memorized imports MISC: add stylelint MISC: remove perfectionist-dfd UI: sfc-compile.js: extract *.vuecss files UI: remove csstree-validator and postcss browserify bundling UI: run stylelint from output dir UI: stylelintrc.cjs: add stylelint config UI: extract, process and run stylelint on *.jscss files UI: process *.vuecss files UI: run stylelint on processed styles UI: generate vue-styles.css UI: remove Vue css rules UI: take quoted cursor urls into account UI: move theming into ui/dark.scss, build .css from .scss UI: use postcss.js with --map and -i UI: fix install pattern for ui/b/ UI: postcss.js: support stdout output UI: postcss.js: fix exit code by re-throwing errors UI: postcss.js: add -Dvar=value for predefined variables UI: postcss.js: add -C <working-dir> to find imports UI: postcss.js: directly print PostCSS exceptions to provide useful stacktraces UI: postcss.js: support fetching imports from network UI: postcss.js: remove perfectionist-dfd, auto-import *.scss unless -i is given UI: postcss.js: add zlerp() CSS function UI: postcss.js: add zmod4() CSS function UI: postcss.js: make source map configurable UI: colors.js: add zlerp() for color interpolation UI: colors.js: fix missing ZCAM attributes UI: colors.js: add zmod4() to debug ZCAM attributes for colors UI: colors.js: support missing first zmod() color argument DOC: jsdoc2md.js: fix @file docu being ignored in some cases DOC: jsdoc2md.js: add anchor to constants ASE: allow caching of duplicate requests within 1 second Merge branch 'reactive-render' # 2023-03-08 Tim Janik 6f6d3be * reactive-render: UI: startup.js: rerender all LitElements and known Vue components on resize UI: little.js: export LitComponent, which has reactive render() and updated() UI: little.js: add lit_update_all() UI: wrapper.js: improve error message for missing getters UI: wrapper.js: support reactive_wrapper() callbacks for wrap_ase_object() fields UI: wrapper.js: implement define_reactive() and reactive_wrapper() Merge branch 'jsdoc-search' # 2023-03-05 Tim Janik dc2f640 * jsdoc-search: DOC: ignore case during search UI: util.js: add PointerDrag comment DOC: extend searchdata-v2.js with token list from JS docs DOC: avoid fake 'Export' prefix for JS symbols DOC: jsdoc2md.js: use <a/> for anchors, add data-4search to anchors The old empty span anchors could be removed by some HTML processors. DOC: jsdoc2md will now directly generate markdown from JS Merge branch 'api-docs' # 2023-03-03 Tim Janik 63bd26e * api-docs: GITHUB: workflows/testing.yml: rename CI jobs GITHUB: workflows/testing.yml: add step to build and upload API docs MISC: Dockerfile.arch: provide doxygen openssh and poxy via pip MISC: Dockerfile.arch: first update archlinux-keyring This works around an outdated keyring in the archlinux:latest docker image. MISC: add support for the docker -p <PORTS> option DOC: setup AUTHOR/COMITTER EMAIL/NAME, GIT_SSH_COMMAND for uploads DOC: provide NODE_PATH DOC: add program doc/ dir to documentation output DOC: add README as main index page DOC: add project version to docs DOC: upload to the `publish` branch DOC: support conditional builds DOC: move build commands into poxy_build function DOC: add -u for upload DOC: support accesskey="f" for Search DOC: support -s to serve html/ contents DOC: add DOC: add to UI docs DOC: generate API reference documentation with Poxy UI: remove rules to build JS docs DOC: build scripting docs from ui/host.js and DOC: copyright.ini: fix doc/jsdocrc.json path DOC: move here from ui/ DOC: jsdoc2md.js: generate markdown from *.js via jsdoc-api DOC: jsdocrc.json: configure JsDoc to use doc/jsdoc-slashes.js DOC: jsdoc-slashes.js: move here from ui/slashcomment.js DOC: jsdoc2md.js: guard aganst doclets with non-string name I.e. can be an Integer. MISC: add jsdoc-api UI: b/shell.vue: add basic docs ASE: testing.hh: document Test namespace ASE: api.hh: add docu comment to Ase namespace fix github workflow badge URL Merge branch 'lit-tracklist' # 2023-01-10 Tim Janik 3e64716 * lit-tracklist: UI: b/tracklist.js: hide HEADER and FOOTER UI: b/tracklist.js: add scrollshadow at the top UI: theme.scss: remove fragile parts of scrollbar styling UI: b/tracklist.js: fix layout for few tracks UI: b/tracklist.js: support x/y scrolling UI: b/cliplist.js: clipview children must not shrink UI: b/tracklist.js: port <b-tracklist/> to LitElement UI: b/trackview.js: increase width of level meters UI: b/clipview.js: use track.$id for colorization UI: b/cliplist.js: fix setting of b-clipview.track property UI: b/app.js: provide App.project ASE: skip notifications for objects without shared_ptr ASE: api.hh: rename and notify Project.all_tracks() (former list_tracks) Merge branch 'lit-trackview' # 2023-01-08 Tim Janik 529af30 * lit-trackview: UI: b/trackview.js: render sound level meter from telemetry UI: b/cliplist.js: minor formatting ASE: add dbspl0 and dbspl1 to telemetry ASE: combo: add sound level probing in dB to AudioChain ASE: datautils: add square_max() ASE: reserve space to avoid malloc ASE: datautils: add square_sum() for FPU floats ASE: cxxaux.hh: add ASE_ALIGNED16() and ALIGNMENT16() UI: b/app.js: maintain App.current_track, notify <b-trackview/> accordingly ASE: track: support midi_channel changes UI: b/*.js: fix ${ref} syntax UI: b/trackview.js: port <b-trackview/> to LitElement Merge branch 'lit-editable' # 2023-01-08 Tim Janik b1b949d * lit-editable: UI: b/trackview.vue: adjust b-editable use UI: b/positionview.vue: adjust property editing ASE: add missing notifications UI: b/editable.js: port <b-editable/> to LitElement Merge branch 'lit-cliplist' # 2023-01-07 Tim Janik 2724283 * lit-cliplist: UI: b/partlist.vue: disable old code DOC: add docs from b/ ASE: api.hh: rename Track.launcher_clips() and ass 'notify:launcher_clips' UI: b/statusbar.vue: use Util.find_element_from_point() UI: b/shell.vue: determine F1 anchor from find_element_from_point() UI: util.js: add find_element_from_point(), supporting shadow DOMs UI: b/clipview.js: fix properties UI: b/cliplist.js: support F1 help for ClipList UI: b/cliplist.js: port to LitElement UI: b/app.js: add App.zmove_last() UI: b/pianoroll.js: minor rename Merge branch 'lit-clipview' # 2023-01-07 Tim Janik ee3d1f0 * lit-clipview: ASE: api.hh: add Clip.all_notes read-only property Enable property caching UI code for fetching notes and updates. UI: b/pianoroll.js: use Util.wrap_ase_object() to fetch Clip notes UI: b/piano-ctrl.js: use Util.wrap_ase_object() to fetch Clip notes UI: b/clipview.js: use wrap_ase_object() to access Clip properties UI: util.js: export the wrapper.js API UI: wrapper.js: add AseObject wrapper to cache properties UI: startup.js: add class name to GC debug messages UI: b/shell.vue: provide Shell.piano_roll UI: use Vue production build unless MODE=debug This avoids massive memory leaks of Vue components. UI: fix missing dependency MISC: upgrade to vue-3.2.45 and lit-2.5.0 UI: use 'npm --prefer-offline' only when rebuilding MISC: do not force '--prefer-offline' on npm MISC: define __UIDEBUG__=1 for MODE=debug UI: b/pianoroll.js: remove old debug() UI: b/contextmenu.js: remove useless performance hog UI: b/tracklist.vue: add new track on dblclick on track list only UI: b/pianoroll.js: fix stale play cursor on clip change UI: b/clipview.js: port BClipView to LitElement UI: b/: use Track.list_launcher_clips() ASE: api.hh. track: rename Track.list_launcher_clips() Merge branch 'fix-embed-fd-hangs' # 2022-12-28 Tim Janik ea7b53b * fix-embed-fd-hangs: ASE: map PollFD::NVAL to CLAP_POSIX_FD_ERROR ASE: loop.*: support POLLWRBAND, always pass on POLLNVAL, POLLERR and POLLHUP Merge branch 'build-fixes' # 2022-12-28 Tim Janik 215830f * build-fixes: UI: add missing dependency from ui/colors.js on ui/zcam-js.mjs This fixes postcss errors due to missing zcam-js.mjs. X11TEST: play-notes.json: adjust simlpe UI test to UI path changes UI: cursors/cursors.css: add MPL-2 copyright Merge branch 'documentation-sections' # 2022-12-22 Tim Janik 11d3cc2 * documentation-sections: DOC: link to and search for ui/cursors/ UI: b/pianoroll.js: add data-f1="#piano-roll" to link F1 to piano roll manual UI: b/shell.vue: popup manual on 'F1', support anchors via data-f1="#anchor" UI: kbd.js: allow event.keyCode filtering DOC: include docs from pianoroll and piano-ctrl DOC: add brief editing introduction UI: extract Markdown sections from JS files into doc/b/*.md UI: xbcomments.js: extract Markdown sections from JavaScript comment blocks Merge branch 'piano-roll-and-shell-grid-layout' # 2022-12-22 Tim Janik 5772625 * piano-roll-and-shell-grid-layout: UI: b/pianoroll.js: document piano-roll use and fix hover handling UI: b/piano-ctrl.js: add convenient tool registration helpers UI: eslintrc.js: allow empty blocks UI: util.js: allow PointerDrag cleanup handler UI: b/pianoroll.js: fix scroll and select notes_canvas tool on hover UI: b/piano-ctrl.js: implement note resize tool UI: b/piano-ctrl.js: implement select, paint, erase as dedicated tools UI: b/pianoroll.js: context menu cleanup UI: b/clipview.vue: let the canvas fill parentElement UI: styles.scss, startup.js: turn HFlex & VFlex into LitElement UI: b/pianoroll.js: use one source for DPR calculations UI: b/pianoroll.js: properly align toolmenu button UI: b/pianoroll.js: fix background color UI: b/pianoroll.js: add pianorollmenu items UI: b/treeselector-item.vue: fix 'event' reference UI: b/knob.js: fix 'event' reference UI: b/editable.vue: fix 'event' reference UI: eslintrc.js: warn if a global 'event' is referenced UI: b/piano-ctrl.js: fix merging of selection changes with note modifications UI: b/pianoroll.js: handle menu hotkeys UI: b/contextmenu.js: fix unmapping in map_kbd_hotkeys() UI: kbd.js: handle document.activeElement == null UI: b/piano-ctrl.js: stop event if a key was handled UI: b/pianoroll.js: grab focus UI: b/piano-ctrl.js: adjust piano_roll access patterns UI: b/pianoroll.js: provide .srect property, repaint upon changes UI: b/pianoroll.js: handle tool menu and hook up piano-ctrl UI: theme.scss: move scrollbar styling here to work inside shadow DOMs UI: startup.js: turn CGrid into a LitElement to work inside shadow DOMs UI: b/pianoroll.js: work around FireFox exception when ctx.font is assigned UI: b/shell.vue: allow notification callbacks on get_note_cache() UI: b/statusbar.vue: use elementsFromPoint() to find Tips inside shadowRoots UI: b/contextmenu.js: support @activate="handler" notifications UI: b/menubar.vue: move comment to work around Vue's template child handling UI: b/knob.js: ignore hscrolls to allow horizontal device panel scrolling UI: b/devicepanel.vue: adjust to b-shell grid layout UI: b/pianoroll.js: fix scrollbar style UI: b/pianoroll.js: add indicator to show the current tick UI: b/shell.vue: use <grid/> for the basic layout UI: b/pianoroll.js: implement <b-piano-roll/> as LitElement UI: b/pianoroll.js: add skeleton UI: b/piano-roll.vue: remove Vue based piano-roll Merge branch 'cursors' # 2022-12-22 Tim Janik 32b1518 * cursors: IMAGES: fixes for svgo 2.8.0 and Inkscape >= 1.0 IMAGES: remove unused cursor commands RAND: add simple script to debug hotspot coords in cursors UI: b/piano-roll.vue: remove AnklangCursors.scss references UI: remove AnklangCursors.scss copy UI: copy cursors/cursors.css and all cursor SVGs UI: little.js: allow runtime postcss imports from cursors/cursors.css UI: cursors/cursors.css: add CSS vars for: cross eraser hresize knife move pen UI: cursors/knife.svg: add 28x28 pixel "knife" cursor UI: cursors/hresize.svg: add 28x28 pixel "horizontal resize" cursor UI: cursors/cross.svg: add 28x28 pixel "cross" cursor UI: cursors/move.svg: add 28x28 pixel "move" cursor UI: cursors/eraser.svg: make cursor 28x28 pixels UI: cursors/pen.svg: make cursor 28x28 pixels UI: cursors/: move eraser.svg and pen.svg here Merge branch 'swesterfeld-blepsynth-adsr-time-fix' # 2022-11-17 Tim Janik 54726cd * swesterfeld-blepsynth-adsr-time-fix: DEVICES: blepsynth: use non-linear mapping for ADSR times ASE: sortnet.hh: update URLs in comments Merge branch 'sprite-knob' # 2022-11-16 Tim Janik 439c3b8 * sprite-knob: MISC: Dockerfile.focal: install librsvg2-bin for rsvg-convert UI: remove unused eknob.svg embedding UI: b/knob.vue: remove Vue based knob implementation UI: b/pro-input.vue: remove unused knob handling UI: b/pro-group.vue: use b-knob for scalar Property editing UI: b/knob.js: rewrite b-knob as LitElement with sprites UI: b/deviceeditor.vue: use Util.extend_property() to cache Property fields UI: provide control knob sprite assets include images/knobs/ IMAGES: knobs/cknob.svg: add MPL-2.0 license IMAGES: knobs/ build bi- and unidirectional control knob sprites IMAGES: knobs/ rotate svg knob and add level indicator IMAGES: knobs/cknob.svg: add rotatable control knob UI: util.js: wheel_delta: adjust factors for modern Firefox and Chrome versions UI: startup.js: set CONFIG.dpr_movement for Chrome<=100 and Gecko As of Firefox-106, dpr_movement is needed and for Chrome-107 it is not. UI: util.js: use internal Symbol for request_pointer_lock() state handling UI: util.js: fix value updates of extended properties Catch the right event and normalize the value in JS. UI: util.js: add methods to handle destroy callbacks on objects UI: b/shell.vue: comment fixup UI: b/databubble.vue: hook into App.zmove for all event handling Also, fix stuck bubbles when rehovering the same element. UI: b/app.js: generate zmove events for pointerdown, pointermove, pointerup UI: b/app.js: make sure "mousemove" triggers ZMove updates ASE: keep constant number of characters for % values ASE: processor: send property notifies early, account for inflight values ASE: api.hh: add missing const ASE: crawler: use emit_notify() and avoid emit during ctor ASE: *.cc: use emit_notify() where possible Merge branch 'zoom-ui' # 2022-11-16 Tim Janik 8e65adf * zoom-ui: UI: b/menubar.vue: support Zoom In/Out/Reset for Electron ELECTRON: main.js: export zoom_level() to allow UI zoom adjustments UI: kbd.js: match_key_event: split 'Ctrl++' only once DOC:, fix URL ASE: randomhash: fix URL ASE: fix MASTER_TRACK flag Merge branch 'swesterfeld-vcf-cutoff-fix' # 2022-11-03 Tim Janik 203c246 * swesterfeld-vcf-cutoff-fix: DEVICES: blepsynth: fix cutoff frequency modulation for filter Fix frequency scaling problems: the freq_in array now passes its frequency to the filter as plain Hz. Merge branch 'time-autostop' # 2022-11-03 Tim Janik 6d531e6 * time-autostop: GITHUB: workflows/testing.yml: add repository and gh-user to IRC notifications GITHUB: workflows/ support -R for initiating repository name GITHUB: workflows/testing.yml: skip IRC bot name GITHUB: workflows/ set "YYBOT" as bot name ASE: main: add autostop handling and implement -t <time> to trigger autostop ASE: project: start_playback(): pass autostop into engine ASE: engine: add autostop handling and delay capture until transport is running ASE: defs.hh: add D64MAX ASE: add string_to_seconds() ASE: test atomic<bool> which is a struct and needs %s UI: b/treeselector-item.vue: use ContextMenu.valid_uri() to check valid uri UI: b/contextmenu.js: always use valid_uri() for uri in boolean contexts Merge branch 'opus-wav-flac' - capture engine output # 2022-10-28 Tim Janik bb7a442 * opus-wav-flac: UI: b/aboutdialog.vue: display FLAC version ASE: api: export get_flac_version() UI: b/aboutdialog.vue: show Opus version Remove unused Vorbis version. ASE: api.hh: export Opus version Remove unused Vorbis and MP3 version export. MISC: Dockerfile.focal: provide libopus MISC: provide ogg-1.3.4 and opus-1.3.1 Remvoe Vorbis requirement, which is unused. ASE: exit with atquit_run() upon SIGINT ASE: loop: USignalSource::install_sigaction(): install unix signal handler ASE: utils: provide atquit handlers ASE: loop.hh: minimize latency of signal handlers by running at high priority ASE: main: add -o wavfile to the CLI ASE: engine: support engine output capturing into wave files Squashed commits of engine capturing development: ASE: engine: add queue_capture_start() and queue_capture_stop() ASE: stall engine once program is aborted (atquit_triggered) ASE: capture output via wave_writer_create_opus() ASE: capture output via wave_writer_create_wav() ASE: capture output via wave_writer_create_flac() ASE: wave: add wave file writer for WAV, OPUS, FLAC Squashed commits of wave file development: ASE: wave.hh: add WaveWriter interface ASE: wave: add writer for WAV files with support for PCM and FLOAT ASE: wave: implement Opus writer and export Opus version ASE: write extension header for FLOAT format For example SoX(1) complains about float WAV files 'missing extended part of fmt chunk' ASE: wave: add FLAC writer and export FLAC version ASE: wave: install atquit handlers to flush/finalize wave files ASE: main: load projects without '--preload' and support --play-autostart ASE: auto-load projects passed on the CLI Merge branch 'loft' # 2022-10-26 Tim Janik 84ff17e * loft: ASE: configure Loft and concurrently preallocate pages on demand ASE: tests/ benchmark loft_calloc() ASE: loft: add Loft - a lock- and obstruction-free thread memory allocator Squashed commits of Loft development: ASE: loft: implement mmap() based bump allocator ASE: loft: implement MpmcStack based bucket allocator ASE: loft: add loft_alloc() ASE: loft: add loft_make_unique() and LoftFree::operator()() ASE: loft: add loft_calloc() ASE: loft: add multithreaded allocator stress test ASE: loft: use FastRng for testing ASE: loft: add loft_bucket_size() ASE: loft: add loft_get_stats(), loft_stats_string() ASE: loft: add loft_get_config(), loft_set_config(), config flags ASE: loft: add loft_grow_preallocate(), loft_set_notifier() ASE: loft: issue a warning if allocations via syscall happen inline ASE: atomics.hh: add MpmcStack.peek ASE: fix signedness ASE: add test for MpmcStack<> ASE: atomics.hh: add MpmcStack<>, a lock-free stack for non-reclaimable memory Merge branch 'mwc256-prng' # 2022-10-26 Tim Janik 153071d * mwc256-prng: ASE: add FastRng jump ahead tests ASE: add --rand64 to generate 64bit FastRng numbers on stdout This can be used to test the PRNG quality with for example PractRand: AnklangSynthEngine --rand64 | RNG_test stdin64 -multithreaded ASE: randomhash: add FastRng, a multiply-with-carry PRNG with period 2^255 ASE: tests/ use 3k as max chunk size to avoid memset benchmarking ASE: speed up test by reducing the checked 10-element permutations Merge branch 'update-sanitizers' # 2022-10-26 Tim Janik a252fc9 * update-sanitizers: JSONIPC: jsonipc.hh: fix atexit memory leak ASE: formatter.hh: properly handle nullptr_t for %p ASE: fix signedness ASE: fix unit test memory leak UI: ignore asan when running AnklangSynthEngine DOC: ignore asan when running AnklangSynthEngine MISC: update sanitizer linkage GITHUB: workflows/testing.yml: upgrade actions/checkout and actions/cache to v3 MISC: Dockerfile.focal: comment fixups GITHUB: workflows/testing.yml: allow TeX installation during CI builds Merge branch 'pdf-artifacts' # 2022-10-25 Tim Janik e0272bd * pdf-artifacts: GITHUB: workflows/testing.yml: build PDF and upload 'docs' build artifact MISC: use 'pdf' shorthand in build rule DOC: require explicit 'pdf' rule to build PDF manuals via TeX By default, only the HTML manuals are built and installed (without TeX dependency). The PDF variants can be built explicitely with `make pdf`. The PDF manuals are installed if they are present at install time. GITHUB: workflows/testing.yml: enable CI for 'next' and PRs Merge branch 'litelement-menu' # 2022-10-21 Tim Janik 8032e64 * litelement-menu: X11TEST: play-notes.json: update UI test UI: b/*: assign aria-label where appropriate UI: b/*.vue: add html id to context menus UI: b/menuitem.js: always strip slot_label UI: util.js: remove unused dropdown() UI: b/color-picker.vue: fix menu and support click-drag selection UI: b/contextmenu.js: expose dialog via part=dialog to CSS rules UI: b/trackview.vue: popup context menu at cursor UI: b/piano-roll.vue: fix popup position UI: b/piano-ctrl.js: avoid stealing unhandled key presses UI: b/dialog.vue: close on regular Escape presses, avoid stealing Escape UI: b/contextmenu.js: stop handled dialog Escape key from bubbling further UI: util.js: allow shields without Escape key stealing UI: b/choice.vue: fix menu and key handling to work like all menus UI: b/contextmenu.js: provide .open read-only property UI: b/menuitem.js: remove unused code UI: b/contextmenu.js: fix data-contextmenu styling UI: b/fed-picklist.vue: remove unused component UI: b/devicepanel.vue: fix menu origin and insertion pos ASE: fix device insertion order UI: b/contextmenu.js: close menu on backdrop clicks UI: util.js: dialog_backdrop_mousedown(): close dialogs on backdrop clicks UI: b/menubar.vue: use b-contextmenu .activate and .isactive UI: b/piano-roll.vue: use b-contextmenu .activate and .isactive UI: b/deviceeditor.vue: use b-contextmenu .activate and .isactive UI: b/treeselector-item.vue: use frame stamp to ignore duplicate clicks UI: b/menubar.vue: use frame stamp to ignore duplicate clicks UI: b/contextmenu.js: make FF auto-focus an element on showModal(), like Chrome UI: b/contextmenu.js: use frame stamp to ignore duplicate clicks and popup()s Note that keyboard presses, mouse clicks, drag selections and event bubbling can all cause menu item clicks and contextmenu activation. In order to deduplicate multiple events that arise from the same user interaction, *one* popup request and *one* click activation is processed per animation frame. UI: util.js: add frame_stamp(), retrieve a timestamp unique per animation frame UI: kbd.js: move_focus(): fallback to move focus inside body UI: kbd.js: list_focusables(): take [open]:modal in shadow DOMs into account UI: kbd.js: list_focusables(): take [open]:modal dialogs into account UI: b/treeselector-item.vue: fix single-click menu activation and styling UI: b/trackview.vue: fix menu activation UI: b/piano-roll.vue: fix menu activation, allow click-drag menu selection UI: b/devicepanel.vue: fix menu activation UI: b/menubar.vue: allow click-drag menu selection UI: b/menuitem.js: use .activate and .isactive callbacks for item activation UI: b/contextmenu.js: use .activate and .isactive callbacks for menu activation ASE: fix some missing notify::dirty emissions UI: b/menubar.vue: adapt context menu clicks, popup menus early (mousedown) UI: b/menuitem.js: adjust for b-contextmenu as LitElement UI: kbd.js: fix keydown_move_focus() for shadow DOMs UI: util.js: add prevent_event() UI: b/contextmenu.js: port b-contextmenu to LitElement UI: b/menuitem.js: use 'b-menurow' CSS selector UI: b/menurow.js: port b-menurow to LitElement UI: b/menuitem.js: pass b-menurow turn / noturn attributes to button UI: util.js: add closest() for shadow DOMs UI: b/trackview.vue: always use the b-icon ic="" attribute UI: b/menuitem.js: export KeymapEntry as this.keymap_entry UI: b/contextmenu.vue: collect and register KeymapEntry props from descendants UI: kbd.js: support add+remove of global keymaps UI: b/menuitem.js: port b-menuitem to LitElement UI: util.js: add lrstrip() and collect_text_content() UI: kbd.js: make activeElement and list_focusables shadow DOM aware This allows transparent handling of custom focus navigation and hotkey activation in shadow DOMs. UI: util.js: extend has_ancestor() to support open shadow DOMs UI: b/contextmenu.vue: support click, keymap, b-contextmenu-menudata on Element UI: b/icon.js: port b-icon from vue to LitElement UI: util.js: add adopt_style() and add_style_sheet() UI: b/*.vue: always use the b-icon ic="" attribute GITHUB: workflows/testing.yml: update github actions Merge branch 'package-updates' # 2022-10-12 Tim Janik 84e7c32 * package-updates: ASE: fix macro clash MISC: update various npm packages clean x11test/ output dir Merge branch 'activate+deactivate' # 2022-10-12 Tim Janik 4e5ac8b * activate+deactivate: ASE: properly check Connection ptr before use ASE: remove over eager assertion ASE: start_playback(): switch current engine project on demand allow make default to configure INSN ASE: project: move activate/deactive to Project ASE: fix loss of "change:prefs" notification connection ASE: engine: add API to set up exclusive Engine + Project relation ASE: track: require Project as parent of track ASE: gadget: add flags field to be used for gadgets and derived types ASE: clapplugin: rename clap_deactivate() and variants ASE: api.hh: use GadgetImpl as parent pointer ASE: api.hh: derive Track from Device ASE: api.hh: derive Project from Device ASE: device: rename and move Device::extract_info() here ASE: fix call to inherited methods ASE: nativedevice: provide remove_all_devices(), implement activation ASE: api.hh: Device: provide _activate() _deactivate() is_active() ASE: clarify TODO ASE: split DeviceImpl into Device and NativeDevice ASE: engine: turn the engine into a global singleton ASE: engine: simnply wrap AudioEngineImpl calls into AudioEngine methods ASE: engine: rename AudioEngineImpl ASE: main: export main_loop_wakeup() Merge branch 'ci-job-split' # 2022-10-11 Tim Janik bd540be * ci-job-split: GITHUB: workflows/testing.yml: split jobs for Ubuntu, Arch, IRC DOC: copyright.ini: assume MPL-2 for x11test/*.json Merge branch 'x11test' # 2022-10-10 Tim Janik 662fd7a * x11test: X11TEST: play1note.json: add recording to play a single MIDI note GITHUB: workflows/testing.yml: run x11test-v on Ubuntu build and upload result docuemnt x11test and x11test-v add x11test, x11test-v to run (headless) end-to-end tests X11TEST: play Anklang DevTools recording in Electron via Puppetteer X11TEST: ereplay.cjs: use Electron and Puppetteer to replay DevTools recording X11TEST: run and record a command in a virtual or nested X11 session MISC: add puppeteer packages MISC: Dockerfile.focal: provide xvfb 9wm ffmpeg Merge branch 'print-class-tree' # 2022-09-28 Tim Janik 8bde98a * print-class-tree: DOC: anklang-internals: add "Ase Class Inheritance Tree" ASE: main: add --class-tree to print the class tree JSONIPC: jsonipc.hh: add ClassWalker ASE: internal.hh: add assert_unreached() ASE: engine: minor fixes Merge branch 'fix-vue-3.2.28' # 2022-09-28 Tim Janik 6628472 * fix-vue-3.2.28: UI: b/shell.vue: work around vue-3.2.38 breaking $forceUpdate() before mount() Avoid the Shell calling $forceUpdate() from created(). That used to work up until Vue-3.2.27, but with .28 and .29 results in: vue.js:1843 Uncaught (in promise) TypeError: Cannot read properties of null (reading 'id') at queueJob (vue.js:1843:17) at i.f.i.f (vue.js:4591:44) Aparently $forceUpdate() calls are now broken before mount(). UI: fix wildcard for lit.js to not catch little.js Merge branch 'fix-gc' - plugs a GC race condition # 2022-09-27 Tim Janik 6caa570 * fix-gc: JSONIPC: jsonipc.hh: InstanceMap: remove unused swap and move_into ASE: fix GC bookkeeping with mark_unused() and purge_unused() JSONIPC: jsonipc.hh: InstanceMap: add mark_unused() and purge_unused() JSONIPC: jsonipc.hh: add CallbackInfo::classname() to improve error messages Merge branch 'prefault-pages' # 2022-09-27 Tim Janik 9cf276d * prefault-pages: ASE: prefault heap and stack pages ASE: tune malloc via mallopt to reduce page fault probability Merge branch 'build-improvements' # 2022-09-27 Tim Janik 931a674 * build-improvements: MISC: enable link time optimization via -flto for MODE=production MISC: clean mkdeb/ if left over MISC: Dockerfile.focal: install libgtk-3-dev which also provides libdbus-1-dev Merge branch 'low-latency-sched' # 2022-09-14 Tim Janik 5184d18 * low-latency-sched: ASE: request low latency scheduling for the synthesis engine ASE: platform: add sched_{set|get|fast}_priority() ASE: dbus: add DBus methods rtkit_make_high_priority + rtkit_get_min_nice_level MISC: postinst: add cap_sys_nice to AnklangSynthEngine MISC: add dbus-1 to ase dependencies ASE: allow mixed case debug keys ASE: use ASEDEPS_CFLAGS and ASEDEPS_LIBS MISC: provide just ASEDEPS_CFLAGS and ASEDEPS_LIBS for ase/ Merge branch 'remote-gc' # 2022-09-14 Tim Janik f59890b * remote-gc: UI: startup.js: renew_gc() on object finalization, report_gc() when requested ASE: support renew_gc() and report_gc() to start new GC cycle The basic idea behind remote GB by the UI requesting renew_gc() and the Jsonapi server swapping wrapper tables in response is described here: ASE: test conscise erase() loop over std::map<> Checks the erase() loop used by Jsonipc over std::map<>, in particular ++end must be avoided for empty maps. JSONIPC: jsonipc.hh: support clear/swap/size/move_into for instance ptr map MISC: use -Og for debugging which improves debug info Using -Og is a better choice than -O0, because some compiler passes that collect debug information are disabled at -O0. (gcc docs) UI: startup.js: properly namespace Jsonapi/Trigger ASE: properly namespace Jsonapi/Trigger DOC: properly namespace Jsonapi/Trigger DOC: minor update UI: startup.js: request Ase.Server via Jsonapi/initialize after handshake ASE: provide Ase.Server object as Jsonapi/initialize reply JSONIPC: jsonipc.hh: reply to Jsonipc/handshake with protocol version 1 JSONIPC: jsonipc.js: require Jsonipc/handshake with protocol version 1 UI: startup.js: maintain $id GC list via Jsonipc.finalization_registration JSONIPC: jsonipc.js: call Jsonipc.finalization_registration hook from ctors UI: GNUmakefile: allow subdir builds Merge branch 'automatic-backup' # 2022-08-24 Tim Janik 72174fb * automatic-backup: ASE: automatically backup existing project files ASE: path: add glob() ASE: path: add rename() ASE: utils: add now_strftime() Merge branch 'clap-file-reference' # 2022-08-24 Tim Janik 031c81f * clap-file-reference: ASE: clapplugin: clean up load_state() and save_state() ASE: *.cc: use operator<< where needed for serialization ASE: serialize.hh: add operator>> and operator<< to support pure const serialization ASE: serialize.hh: operator&: catch serialization into const at compile time ASE: merge asset_hashes ASE: use Error::NO_PROJECT_DIR if anklang.project is missing ASE: api.hh: add Error::NO_PROJECT_DIR ASE: clapplugin: implement file collection ASE: save_state: request plugin_file_reference->save_resources() ASE: add CLAP_EXT_FILE_REFERENCE skeleton ASE: use TelemetryField for simple serialization tests ASE: serialize: support external serialize(T&,WritNode&) impls via ADL ASE: test tuple serialization ASE: loader_resolve: lookup and resolve files from project dir ASE: serialize file hashes as tuple array ASE: serialize.hh: serialize tuple<...> types UI: b/menubar.vue: use project.saved_filename() as "Save" location ASE: api.hh: add Project.saved_filename() ASE: upgrade to clap-1.1.1.tar.gz UI: b/app.js: use save_project() ASE: api.hh: rename Project.save_project() ASE: canonicalize project file name when saving ASE: project: properly implement writer_collect() ASE: project: add API to collect external files ASE: strings: add strings_version_sort() ASE: path: add dircontains() to check dir hierarchy and compute relative path ASE: path: add copy_file(), use FICLONE ioctl to create CoW clone if possible Currently, FICLONE is supported under Linux for XFS and BTRFS. Use `filefrag -v` to detext or debug shared file extents. ASE: path: add file_size(), gracefully handle errors ASE: clapplugin: derive ClapPluginHandle from GadgetImpl ASE: api.hh: print user notes and allow `rest` argument ASE: api.hh: introduce Gadget._project() ASE: strings: add string_to_hex() ASE: add --blake3 <FILE> to test Blake3 hashing ASE: compress: add blake3_hash_file() and blake3_hash_string() ASE: storage: add stream_reader_from_file() ASE: compile BLAKE3 with SSE and AVX variants ASE: provide blake3.h from BLAKE3-1.3.1.tar.gz ASE: use SOURCE2_O MISC: add $(call SOURCE2_O) to create object extensions ASE: fix warnings MISC: show sha256sum command used failing downloads Merge branch 'sse+fma-synth-engine' - build releases with SSE + FMA support # 2022-08-12 Tim Janik 5f77129 * sse+fma-synth-engine: ASE: build FMA variant iff MODE=production INSN=sse MISC: build releases with MODE=production INSN=sse MISC: remove INSN build remnants Merge branch 'fix-scripts' # 2022-08-12 Tim Janik a169887 * fix-scripts: MISC: handle unbound $V MISC: handle unbound $V MISC: handle unbound $V MISC: handle unbound $V Merge branch 'dockerize-asset-builds' # 2022-08-11 Tim Janik 2fd2f5f * dockerize-asset-builds: MISC: adjust release-message MISC: export $V for build scripts MISC: simplify builds, merge upload-nightly and upload-release fix ls-tree.lst generation in tarballs MISC: extract release info, make AppImage MISC: move AppImage build logic here MISC: build binary packages from tarball MISC: pass $V to make MISC: pass $V into docker env MISC: remove unused .dbuild/ handling MISC: Dockerfile.focal: reduce layers MISC: Dockerfile.focal: always become 'builder' user, prepare /ootbuild/ Merge branch 'arch-ci' # 2022-08-11 Tim Janik 76c6214 * arch-ci: .gitignore: add ignores GITHUB: workflows/testing.yml: cleanup after each platform build GITHUB: workflows/testing.yml: build and test on arch, cache arch docker image MISC: Dockerfile.arch: setup archlinux dependencies for building Anklang Use upstream CastXML, the AUR version seems outdated and broken. Merge branch 'docker-caching' # 2022-08-11 Tim Janik 433f9bd * docker-caching: MISC: skip TeX during docker image build with -T MISC: Dockerfile.focal: cleanup early to shrink docker image, possibly skip TeX MISC: use misc/Dockerfile.focal by default, remove -d, change -f MISC: Dockerfile.focal: rename from Dockerfile-apt, use FROM ubuntu:20.04 ASE: add missing dependencies for includes ASE: sortnet.hh: include <functional> for std::less use `ctags` executable GITHUB: workflows/testing.yml: fix cache-hit detection GITHUB: workflows/testing.yml: skip docker caching on cache miss GITHUB: workflows/testing.yml: invalidate cache if misc/ changes GITHUB: workflows/testing.yml: remove docker image test MISC: get rid of --no-tex and $NO_TEX (now unused) GITHUB: workflows/testing.yml: remove '--no-tex' Avoiding Tex installation was only needed without docker image caching. MISC: fix SIGPIPE when searching docker image for INITIALIZE MISC: debug wrong INITIALIZE setting MISC: use 'ubuntu:20.04' as base instead of 'ubuntu:focal' Both are tags for the same image, but the former is already present on Github's stock system. GITHUB: workflows/testing.yml: fix grep exit status GITHUB: workflows/testing.yml: invalidate cache if misc/Dockerfile-apt changes GITHUB: workflows/testing.yml: stop forcing a docker build step GITHUB: workflows/testing.yml: upgrade to actions/checkout@v2.4.2 GITHUB: workflows/testing.yml: cache docker image via github cache GITHUB: workflows/testing.yml: find version inside docker GITHUB: workflows/testing.yml: always use the same build arg for docker MISC: ignore missing tags in Format:%(describe) workaround Merge branch 'dist-tarball' - create distribution tarballs # 2022-08-06 Tim Janik 50d9c06 Adjust versioning and build rules to support proper distribution tarballs that will build without .git/ history. * dist-tarball: MISC: Dockerfile-apt: provide zstd MISC: re-enable nightly asset builds work around git 2.25.1 not handling Format:%(describe:match) Ubuntu 20.04 still runs git 2.25.1. MISC: work around git 2.25.1 not handling Format:%(describe:match) Ubuntu 20.04 still runs git 2.25.1. MISC: Dockerfile-apt: add universal-ctags MISC: recognize --help use wildcard for toplevel CLEANFILES MISC: list Nightly changes MISC: fix upload-release MISC: use TARBALL version for build-assets MISC: minor fixups MISC: only check-copyright if .git/ exists MISC: remove versioned ChangeLog generation ChangeLog: use slightly longer hashes fix ChangeLog range use ls-tree.lst to generate TAGS MISC: use ls-tree.lst DOC: use ls-tree.lst create and distribute ls-tree.lst MISC: provide only $(HAVE_GIT) which is true if .git/ exists Using the old WITHGIT or WITHOUTGIT did not really work. MISC: avoid -j, rely on MAKEFLAGS for parallel submakes MISC: build-nightly: create and build dist tarball MISC: use .dlcache subdir for dockerized ccache MISC: build-assets: build from sources in $(TARBALL) MISC: record and use artifacts in build-assets MISC: add 'build-version' rule MISC: call --make-nightly for nightly builds MISC: check nightly versions MISC: add 'versioned-manuals' rule DOC: use packaged doc/copyright if Git is missing GITHUB: workflows/testing.yml: build with --no-tex and SKIP_LATEX=true Only the PDF manuals need Tex, skipping LaTex installation significantly speeds up the CI builds. MISC: add --no-tex (replaces --tex) MISC: Dockerfile-apt: default to building with Tex DOC: build PDF manuals, unless SKIP_LATEX=true DOC: skip misc/ if .git is not present MISC: use `misc/ --commit-hash` instead of git MISC: add --commit-hash MISC: remove extra version printout for --make-nightly MISC: add --help and --make-nightly MISC: use the same COMMITINFO for archives and .git repos dist: allow packaging with worktree changes simplify make dist add hard dependency on ctags-universal Builds from Git need ctags-universal to reliably generate TAGS for make dist. provide $(builddir) and $>/ early on check misc/ execution ASE: add missing minizip/mz_zip.h dependency DOC: copyright.ini: list freeverb sources under Public Domain dedication DEVICES: freeverb/ license under MPL-2.0 Merge branch 'freeverb' # 2022-07-31 Tim Janik 554794d * freeverb: DEVICES: freeverb/ turn into a working AudioProcessor for Ase DEVICES: freeverb/ make query_info() const, i.e. MT-Safe DEVICES: freeverb/ move all code completely into Anon namespace DEVICES: freeverb/ use explicit add_param() IDs and fix arguments DEVICES: freeverb: implement STK and VLC damping Avoid reinforcing feedback loop in the original damping code, by providing VLC and STK damping modes. The latter is likely closest to the original intention so it is now the default. This also reorders some parameters and removes the original freezing mode, that does not really make sense for Processors. DEVICES: freeverb/ add Freeverb Processor DEVICES: freeverb/revmodel.cpp: fix missing `int i` decls DEVICES: freeverb/Freeverb*: remove unused vst files DEVICES: freeverb/: fix up whitespace and \n without \r everywhere DEVICES: freeverb/: Freeverb - free public domain reverb SOURCE CODE Freeverb - Free, studio-quality reverb SOURCE CODE in the public domain Written by Jezar at Dreampoint - DEVICES: freeverb/ add source file to devices/4ase.ccfiles DEVICES: freeverb/GNUmakefile: allow subdir builds DEVICES: add dependencies, clean rule, etc for devices/ sources DEVICES: blepsynth/ simply add source files to devices/4ase.ccfiles UI: b/contextmenu.vue: allow 0 as valid menuitem.uri value UI: b/cliplist.vue: only call non-null Shell.piano_current_tick() fix manual link Merge branch 'jack-driver' # 2022-07-29 Tim Janik cc1cb08 * jack-driver: DOC: merge jack howto into driver-setup section DOC: add chapter about download and installation ASE: print the real executable_name() for --version and usage ASE: load ASE: optionally build MISC: check if jack.pc >= 0.125.0 is present Jack 0.125.0 ships with Ubuntu-20.04. ASE: turn into a working PCM driver for Ase ASE: adapto to Ase namespace ASE: merge original Jack driver by Stefan Westerfeld Initial version of Jack driver using the new driver API Add minimal jack howto Block SIGPIPE to avoid crashes when jackd dies Driver: return read and write latency for a pcm driver separately For instance for synchronizing the play position pointer ui with the audio buffering, you want to know how much write latency you have, but don't care about the amount of read latency. Add list with possible improvements from PR 31 Add some minor fixes as requested in review ASE: consistently calculate buffer size for multiple channels ASE: datautils.hh: add fast_copy() for floats and ints ASE: adjust debug messages, remove unused variable ASE: require command line options to enable JSIPC logging Merge branch 'version-fixes' # 2022-07-29 Tim Janik 61e8d05 * version-fixes: ASE: remove unneeded version postfix from AnklangSynthEngine MISC: fix development postfix for shallow versions MISC: fix build id with development postfix MISC:, fix release tag missing 'v'-prefix