diff --git a/.github/workflows/build-checks.yml b/.github/workflows/build-checks.yml index fb8bd2cfbda..eb77c92bcc1 100644 --- a/.github/workflows/build-checks.yml +++ b/.github/workflows/build-checks.yml @@ -11,50 +11,14 @@ jobs: include: - name: clazy - name: clang-tidy + - name: coverage runs-on: ubuntu-20.04 name: ${{ matrix.name }} steps: - name: Check out repository uses: actions/checkout@v2 - name: Install build dependencies - run: | - sudo apt-get update && sudo apt-get install -y --no-install-recommends \ - libavformat-dev \ - libchromaprint-dev \ - libebur128-dev \ - libfftw3-dev \ - libflac-dev \ - libid3tag0-dev \ - liblilv-dev \ - libmad0-dev \ - libmodplug-dev \ - libmp3lame-dev \ - libopus-dev \ - libopusfile-dev \ - libportmidi-dev \ - libprotobuf-dev \ - libqt5opengl5-dev \ - libqt5sql5-sqlite \ - libqt5svg5-dev \ - libqt5x11extras5-dev \ - librubberband-dev \ - libshout-idjc-dev \ - libsndfile1-dev \ - libsoundtouch-dev \ - libsqlite3-dev \ - libtag1-dev \ - libupower-glib-dev \ - libusb-1.0-0-dev \ - libwavpack-dev \ - portaudio19-dev \ - protobuf-compiler \ - qt5-default \ - qtdeclarative5-dev \ - qtscript5-dev \ - qt5keychain-dev \ - clazy \ - clang-tidy \ - cmake + run: tools/debian_buildenv.sh setup - name: Create build directory run: mkdir build - name: Configure (clazy) @@ -108,6 +72,31 @@ jobs: -DWAVPACK=ON \ .. working-directory: build + - name: Configure (coverage) + if: matrix.name == 'coverage' + run: | + cmake \ + -DCMAKE_BUILD_TYPE=Debug \ + -DOPTIMIZE=off \ + -DCOVERAGE=ON \ + -DWARNINGS_FATAL=OFF \ + -DDEBUG_ASSERTIONS_FATAL=OFF \ + -DBATTERY=ON \ + -DBROADCAST=ON \ + -DBULK=ON \ + -DHID=ON \ + -DLILV=ON \ + -DOPUS=ON \ + -DQTKEYCHAIN=ON \ + -DVINYLCONTROL=ON \ + -DFFMPEG=ON \ + -DKEYFINDER=ON \ + -DLOCALECOMPARE=ON \ + -DMAD=ON \ + -DMODPLUG=ON \ + -DWAVPACK=ON \ + .. + working-directory: build - name: Set up problem matcher uses: ammaraskar/gcc-problem-matcher@master - name: Build @@ -117,3 +106,34 @@ jobs: env: CLAZY_CHECKS: level2,no-rule-of-two-soft,no-non-pod-global-static,no-qproperty-without-notify,no-wrong-qevent-cast,no-qstring-allocations,no-function-args-by-value,no-copyable-polymorphic,no-ctor-missing-parent-argument,no-missing-qobject-macro,no-rule-of-three,no-returning-void-expression,no-missing-typeinfo,no-base-class-event CLAZY_IGNORE_DIRS: lib/.* + - name: "Test" + if: matrix.name == 'coverage' + run: ctest --timeout 45 + working-directory: build + env: + # Render analyzer waveform tests to an offscreen buffer + QT_QPA_PLATFORM: ${{ matrix.qt_qpa_platform }} + GTEST_COLOR: 1 + # Only use single thread to prevent *.gcna files from overwriting each other + CTEST_PARALLEL_LEVEL: 1 + CTEST_OUTPUT_ON_FAILURE: 1 + - name: "Generate Coverage Report" + if: matrix.name == 'coverage' + run: >- + lcov + --capture + --directory . + --base-directory .. + --include "${PWD%/*}/src/*" + --exclude "${PWD%/*}/src/test/*" + --exclude "${PWD%/*}/build/*" + --exclude "${PWD%/*}/lib/*" + --output-file lcov.info + working-directory: build + - name: "Upload Coverage Report to coveralls.io" + if: matrix.name == 'coverage' + uses: coverallsapp/github-action@master + with: + flag-name: ubuntu-20.04 + path-to-lcov: build/lcov.info + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2517a25337a..e3d13fb25ad 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -160,7 +160,7 @@ jobs: # Studio on Windows comes with its own CMake version anyway. if: runner.os == 'macOS' with: - # This should always match the mininum required version in + # This should always match the minimum required version in # our CMakeLists.txt cmake-version: '3.16.x' @@ -351,7 +351,7 @@ jobs: run: > if [[ "${GITHUB_REF}" =~ ^refs/tags/.* ]]; then - export DEPLOY_PATH='releases/mixxx-{git_describe}/mixxx-{git_describe}-{package_slug}{ext}'; + export DEPLOY_PATH='releases/{git_describe}/mixxx-{git_describe}-{package_slug}{ext}'; else export DEPLOY_PATH='snapshots/{git_branch}/mixxx-{git_describe}-{package_slug}{ext}'; fi; @@ -422,7 +422,7 @@ jobs: run: > if [[ "${GITHUB_REF}" =~ ^refs/tags/.* ]]; then - export DEPLOY_PATH='releases/mixxx-{git_describe}/manifest.json'; + export DEPLOY_PATH='releases/{git_describe}/manifest.json'; else export DEPLOY_PATH='snapshots/{git_branch}/manifest.json'; fi; diff --git a/CHANGELOG.md b/CHANGELOG.md index 506a888a863..85249678445 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ * Add Random Track Control to AutoDJ [#3076](https://github.com/mixxxdj/mixxx/pull/3076) * Add support for saving loops as hotcues [#2194](https://github.com/mixxxdj/mixxx/pull/2194) [lp:1367159](https://bugs.launchpad.net/mixxx/+bug/1367159) -## [2.3.0](https://launchpad.net/mixxx/+milestone/2.3.0) (Unreleased) +## [2.3.0](https://launchpad.net/mixxx/+milestone/2.3.0) ### Hotcues ### * Add hotcue colors and custom labels by right clicking hotcue buttons or right clicking hotcues on overview waveforms [#2016](https://github.com/mixxxdj/mixxx/pull/2016) [#2520](https://github.com/mixxxdj/mixxx/pull/2520) [#2238](https://github.com/mixxxdj/mixxx/pull/2238) [#2560](https://github.com/mixxxdj/mixxx/pull/2560) [#2557](https://github.com/mixxxdj/mixxx/pull/2557) [#2362](https://github.com/mixxxdj/mixxx/pull/2362) * Mouse hover cues on overview waveform to show time remaining until the cue [#2238](https://github.com/mixxxdj/mixxx/pull/2238) @@ -123,10 +123,10 @@ * Add macOS codesigning and notarization to fix startup warnings [#3281](https://github.com/mixxxdj/mixxx/pull/3281) * Don't trash user configuration if an error occurs when writing [#3192](https://github.com/mixxxdj/mixxx/pull/3192) * Enable CUE sheet recording by default [#3374](https://github.com/mixxxdj/mixxx/pull/3374) -* And countless other small fixes and improvements (too many to list them all!) * Fix crash when double clicking GLSL waveforms with right mouse button [#3904](https://github.com/mixxxdj/mixxx/pull/3904) * Derive Mixxx version from `git describe` [#3824](https://github.com/mixxxdj/mixxx/pull/3824) [#3841](https://github.com/mixxxdj/mixxx/pull/3841) [#3848](https://github.com/mixxxdj/mixxx/pull/3848) * Improve tapping the bpm of a deck [#3790](https://github.com/mixxxdj/mixxx/pull/3790) [lp:1882776](https://bugs.launchpad.net/mixxx/+bug/1882776) +* And countless other small fixes and improvements (too many to list them all!) ## [2.2.4](https://launchpad.net/mixxx/+milestone/2.2.4) (2020-06-27) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6246f78af9c..9d63d64eaca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -119,6 +119,16 @@ if(NOT BUILD_LOW_MEMORY) add_compile_options(-pipe) endif() +# Coverage +# +# This is only available with GCC, therefore this option is forcibly set to OFF +# for all other compilers. +cmake_dependent_option(COVERAGE "Coverage (i.e. gcov) support" OFF "GNU_GCC" OFF) +if(COVERAGE) + add_compile_options(--coverage -fprofile-arcs -ftest-coverage) + add_link_options(--coverage -fprofile-arcs -ftest-coverage) +endif() + # Profiling # # This is only available on Linux, therefore this option is forcibly set to OFF @@ -369,7 +379,8 @@ if(MSVC) default_option(SCCACHE_SUPPORT "Enable sccache support" "SCCACHE_EXECUTABLE") message(STATUS "Support for sccache: ${SCCACHE_SUPPORT}") if(SCCACHE_SUPPORT) - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "sccache") + set( CMAKE_C_COMPILER_LAUNCHER "${SCCACHE_EXECUTABLE}" ) + set( CMAKE_CXX_COMPILER_LAUNCHER "${SCCACHE_EXECUTABLE}" ) endif() else() # ccache support @@ -385,8 +396,8 @@ else() # without this compiler messages in `make` backend would be uncolored set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=${BUILD_COLORS}") endif() - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "ccache") - set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "ccache") + set( CMAKE_C_COMPILER_LAUNCHER "${CCACHE_EXECUTABLE}" ) + set( CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_EXECUTABLE}" ) endif() message(STATUS "Support for ccache: ${CCACHE_SUPPORT}") endif() @@ -703,8 +714,8 @@ add_library(mixxx-lib STATIC EXCLUDE_FROM_ALL src/mixer/sampler.cpp src/mixer/samplerbank.cpp src/coreservices.cpp - src/mixxx.cpp src/mixxxapplication.cpp + src/mixxxmainwindow.cpp src/musicbrainz/chromaprinter.cpp src/musicbrainz/crc.cpp src/musicbrainz/gzip.cpp @@ -774,6 +785,8 @@ add_library(mixxx-lib STATIC EXCLUDE_FROM_ALL src/skin/qml/qmleffectmanifestparametersmodel.cpp src/skin/qml/qmleffectsmanagerproxy.cpp src/skin/qml/qmleffectslotproxy.cpp + src/skin/qml/qmllibraryproxy.cpp + src/skin/qml/qmllibrarytracklistmodel.cpp src/skin/qml/qmlplayermanagerproxy.cpp src/skin/qml/qmlplayerproxy.cpp src/skin/qml/qmlskin.cpp @@ -1475,6 +1488,7 @@ add_executable(mixxx-test src/test/beatgridtest.cpp src/test/beatmaptest.cpp src/test/beatstranslatetest.cpp + src/test/bpmtest.cpp src/test/bpmcontrol_test.cpp src/test/broadcastprofile_test.cpp src/test/broadcastsettings_test.cpp @@ -1508,6 +1522,7 @@ add_executable(mixxx-test src/test/enginemicrophonetest.cpp src/test/enginesynctest.cpp src/test/fileinfo_test.cpp + src/test/frametest.cpp src/test/globaltrackcache_test.cpp src/test/hotcuecontrol_test.cpp src/test/imageutils_test.cpp @@ -1726,11 +1741,6 @@ if(WIN32) "${CMAKE_CURRENT_BINARY_DIR}/src/mixxx.rc.include" "${CMAKE_CURRENT_BINARY_DIR}/src/gitinfo.h" ) - # sccache fails with RC files - # https://github.com/mozilla/sccache/issues/947 - if(SCCACHE_SUPPORT) - set_target_properties(mixxx PROPERTIES RULE_LAUNCH_COMPILE "") - endif() target_include_directories(mixxx PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}") endif() @@ -1906,6 +1916,7 @@ if(KEYFINDER) -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_PREFIX_PATH:PATH="${CMAKE_PREFIX_PATH}" + -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR} -DBUILD_TESTING=OFF BUILD_COMMAND ${CMAKE_COMMAND} --build . BUILD_BYPRODUCTS /${KeyFinder_LIBRARY} @@ -2281,15 +2292,6 @@ set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) target_link_libraries(mixxx-lib PRIVATE Threads::Threads) -# Upower -if(UNIX AND NOT APPLE) - find_package(GLIB COMPONENTS gobject REQUIRED) - find_package(Upower REQUIRED) - target_include_directories(mixxx-lib SYSTEM PUBLIC ${GLIB_INCLUDE_DIRS}) - target_link_libraries(mixxx-lib PRIVATE ${GLIB_LIBRARIES} ${GLIB_GOBJECT_LIBRARIES}) - target_link_libraries(mixxx-lib PRIVATE Upower::Upower) -endif() - # iOS/OS X Frameworks if(APPLE) find_library(COREFOUNDATION_LIBRARY CoreFoundation REQUIRED) @@ -2325,6 +2327,10 @@ if(BATTERY) elseif(APPLE) target_sources(mixxx-lib PRIVATE src/util/battery/batterymac.cpp) elseif(UNIX) + find_package(Upower REQUIRED) + find_package(GLIB COMPONENTS gobject REQUIRED) + target_include_directories(mixxx-lib SYSTEM PUBLIC ${GLIB_INCLUDE_DIRS}) + target_link_libraries(mixxx-lib PRIVATE Upower::Upower ${GLIB_LIBRARIES} ${GLIB_GOBJECT_LIBRARIES}) target_sources(mixxx-lib PRIVATE src/util/battery/batterylinux.cpp) else() message(FATAL_ERROR "Battery support is not implemented for the target platform.") @@ -2691,11 +2697,17 @@ if(HID) find_library(AppKit_LIBRARY AppKit REQUIRED) target_link_libraries(mixxx-hidapi PUBLIC ${AppKit_LIBRARY}) elseif(UNIX) - if(NOT LibUSB_FOUND) - message(FATAL_ERROR "USB HID controller support on Unix with statically linked libhidapi-libusb requires libusb 1.0 and its development headers.") + if(CMAKE_SYSTEM_NAME STREQUAL Linux) + find_library(libudev_LIBRARY udev REQUIRED) + target_sources(mixxx-hidapi PRIVATE lib/hidapi/linux/hid.c) + target_link_libraries(mixxx-hidapi PRIVATE ${libudev_LIBRARY}) + else() + if(NOT LibUSB_FOUND) + message(FATAL_ERROR "USB HID controller support on Unix with statically linked libhidapi-libusb requires libusb 1.0 and its development headers.") + endif() + target_sources(mixxx-hidapi PRIVATE lib/hidapi/libusb/hid.c) + target_link_libraries(mixxx-hidapi PRIVATE LibUSB::LibUSB) endif() - target_sources(mixxx-hidapi PRIVATE lib/hidapi/libusb/hid.c) - target_link_libraries(mixxx-hidapi PRIVATE LibUSB::LibUSB) else() message(FATAL_ERROR "USB HID controller support only possible on Windows/Mac OS/Linux/BSD.") endif() @@ -2703,9 +2715,16 @@ if(HID) else() message(STATUS "Linking libhidapi dynamically") if(NOT HIDAPI_FOUND) - message(FATAL_ERROR "USB HID controller support requires libhidapi-libusb and its development headers.") + message(FATAL_ERROR "USB HID controller support requires hidapi and its development headers.") + endif() + # hidapi has two backends on Linux, one using the kernel's hidraw API and one using libusb. + # libusb obviously does not support Bluetooth HID devices, so use the hidraw backend. The + # libusb backend is the default, so hidraw needs to be selected explicitly at link time. + if(CMAKE_SYSTEM_NAME STREQUAL Linux) + target_link_libraries(mixxx-lib PRIVATE hidapi::hidraw) + else() + target_link_libraries(mixxx-lib PRIVATE hidapi::hidapi) endif() - target_link_libraries(mixxx-lib PRIVATE hidapi::hidapi) endif() target_sources(mixxx-lib PRIVATE src/controllers/hid/hidcontroller.cpp diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000000..f9a639a6c2f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,86 @@ +# Mixxx Contribution Guidelines # +Thank you for contributing to [Mixxx](https://mixxx.org/)! Your work helps DJs all over the world! We are global, all volunteer team that works by consensus and we are excited to have you join us. This document specifies technical aspects of our workflow. For social aspects please refer to [CODE_OF_CONDUCT.md](https://github.com/mixxxdj/mixxx/blob/master/CODE_OF_CONDUCT.md) in this repository. We encourage you to introduce yourself on our [Zulip chat](https://mixxx.zulipchat.com/) before starting to contribute code to Mixxx. + +Table of Contents +1. [Orientation](#Orientation) + 1. [Git Repositories](#Git-Repositories) +2. [Git Workflow](#Git-Workflow) + 1. [All Contributors](#All-Contributors) + 2. [Core Team](#Core-Team) + +## Orientation ## +We have lots more helpful information for users and developers on the [Mixxx wiki](https://mixxx.org/wiki/doku.php/start), including [build instructions](https://mixxx.org/wiki/doku.php/start#compile_mixxx_from_source_code). + +### Git Repositories ### +This repository contains the Mixxx source code, skins, controller mappings, and some helpful scripts. We have a few other Git repositories too: +* [mixxxdj/website](https://github.com/mixxxdj/website): content for the main [mixxx.org](https://mixxx.org/) website which is generated with the [Cactus static site generator](https://github.com/eudicots/Cactus) +* [mixxxdj/manual](https://github.com/mixxxdj/manual): content for the Mixxx manual, which uses [Sphinx](https://www.sphinx-doc.org/) +* [mixxxdj/buildserver](https://github.com/mixxxdj/buildserver): scripts for generating our prebuilt dependencies for macOS and Windows + +All of these are automatically built and deployed by our [Jenkins build servers](https://builds.renegadetech.mixxx.org/) whenever a change is committed. You are welcome to open a pull request in any of these repositories. + +## Git Workflow ## +### All Contributors ### +* Each feature/bug fix should be done on its own Git branch so they can be reviewed and merged independently. Refer to [Using Git](https://mixxx.org/wiki/doku.php/using_git) for how to do this. Please ask for help on [Zulip](https://mixxx.zulipchat.com/) if you have questions about using Git after reading that page. +* Commits should be as small as they can while still building. The smaller the commit, the easier it is to review. It also makes it easier to revert if it is later identified as the source of a bug. If you have lots of changes that you need to commit, a [GUI Git client](https://git-scm.com/downloads/guis) can be helpful for picking out specific changes for multiple small commits. +* Every commit should build. This is important so [git bisect](https://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git#_binary_search) works. +* Commit messages should succinctly describe what is changed in that commit and why. Lines should wrap at 72 characters so they show fully in GitHub and other Git tools. For example, this is a good commit message: + + ``` + DlgPrefEffects: add QListWidget to set order of chains + + This order will soon be used by new ControlObjects to load them + from controllers. + ``` + + This is not a good commit message: + + ``` + address comments from PR review + ``` + + Neither is this: + + ``` + fix a bug with quantize while the deck is playing and master sync is enabled and an effect unit is on the deck while the user is turning an EQ knob + ``` + + Refer to [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/) for more details. + +* Install [pre-commit](https://pre-commit.com/#install) to automatically ensure that your commits comply with our code style for both C++ and JavaScript. Note this is currently not working on Windows. This saves time reviewing so we don't have to point out nitpicky style issues. Once you have pre-commit installed on your computer, set it up in your local Git repository: + + ``` + cd /path/to/your/git/repo + pre-commit install + pre-commit install -t pre-push + ``` + + If you have a problems with a particular hook, you can use the SKIP environment variable to disable hooks: + + ``` + SKIP=clang-format,end-of-file-fixer git commit + ``` + + This can also be used to separate logic changes and autoformatting into two subsequent commits. Using the SKIP environment variable is preferable to using `git commit --no-verify` (which also disables the checks) because it won't prevent catching other, unrelated issues. + +* Generally, prefer merging to rebasing. Do not rebase unless you have discussed that with whoever is reviewing the pull request. When you rebase a branch with an open pull request, prior review comments made inline in the code on GitHub lose their connection to that spot in the code. If you want to correct minor mistakes with a rebase or `git commit --amend` within a few minutes of pushing commits, that is okay as long as no one has started reviewing those commits yet. +* If you are helping with someone else's pull request that is not yet merged, open a pull request targeted at their fork. Leave a comment on the upstream pull request (which targets mixxxdj/mixxx) with a link to your pull request so other Mixxx contributors are aware of your changes. +* Low risk bug fixes should be targeted at the stable branch (currently 2.2). However, bug fixes for the stable branches must have a direct impact on users. If you spot a minor bug reading the code or only want to clean up the code, target that at the master or beta branch. +* Controller mappings should be targeted at the stable branch unless they use features that are new in the beta or master branch. +* If you are making changes to the GUI with a pull request, please post before and after screenshots of the changes. +* Please help review other people's pull requests. When others review your pull requests, please return the favor. The continued progress of Mixxx depends on all of us working together. Even if you are not familiar with the area of the code being changed in a pull request, you can be helpful by building the branch, verifying that it works as described, and commenting with feedback about the user experience design. +* If you demonstrate good coding skills, help review pull requests, contribute major features, and show a commitment to Mixxx over time, we may invite you to the core team. + +### Core Team ### +Mixxx core team members are contributors who have write access to the [upstream mixxxdj repositories](https://github.com/mixxxdj/) on GitHub, access to the Jenkins web interface for the build servers, and access to the private Zulip stream for the core team. + +* Enable [two-factor authentication (2FA)](https://help.github.com/en/github/authenticating-to-github/securing-your-account-with-two-factor-authentication-2fa) for your GitHub account. +* _Never_ force push to an upstream repository (mixxxdj). If you encounter an error from Git saying you would need to force push, stop what you are doing and discuss the situation on Zulip. +* Only push directly to an upstream repository (mixxxdj) for trivial, uncontroversial changes like fixing a typo. +* All non-trivial contributions should be made with a pull request, just like any other contributor who does not have write access. Do not merge your own pull requests. +* You may merge someone else's pull request as the only reviewer if no other contributors have expressed concerns about the changes or said they want to review the code. Please do not merge pull requests immediately; allow at least a day or two for others to comment. Remember we are all volunteers and cannot respond to everything immediately. +* If there is disagreement about changes in a pull request, do not merge it until a consensus has been reached. +* Check CI to ensure builds work and tests pass before merging. If CI timed out, either manually restart it or build the branch and run the tests locally before merging. +* When you merge a pull request to a stable branch, merge the stable branch to the beta branch afterwards. If you merge a pull request to a beta branch, merge the beta branch to master afterwards. When backporting, cherry-pick or rebase rather than merge. +* Default to open; only post in the private Zulip stream for discussions that have a reason to be private. Most of the time, post to a public Zulip stream so anyone can participate in the discussion. +* When Mixxx participates in Google Summer of Code, you may volunteer as a mentor if you like. diff --git a/cmake/ctest-to-junit.xsl b/cmake/ctest-to-junit.xsl index 8bd53978b6a..ad4869944f0 100644 --- a/cmake/ctest-to-junit.xsl +++ b/cmake/ctest-to-junit.xsl @@ -4,7 +4,7 @@ This XSLT stylesheet is taken from the jenkins-ctest-plugin by Version One, Inc. and Ryan Pavlik and is subject to the terms of the MIT License. -It was taken from this GitHub repositiory: +It was taken from this GitHub repository: https://github.com/rpavlik/jenkins-ctest-plugin Includes modifications by Jan Holthuis to add support for skipped/errored diff --git a/cmake/modules/Findhidapi.cmake b/cmake/modules/Findhidapi.cmake index b4a7b282dd7..b74a53fedcf 100644 --- a/cmake/modules/Findhidapi.cmake +++ b/cmake/modules/Findhidapi.cmake @@ -62,6 +62,15 @@ find_library(hidapi_LIBRARY ) mark_as_advanced(hidapi_LIBRARY) +if(CMAKE_SYSTEM_NAME STREQUAL Linux) + find_library(hidapi-hidraw_LIBRARY + NAMES hidapi-hidraw + PATHS ${PC_hidapi_LIBRARY_DIRS} + DOC "hidap-hidraw library" + ) + mark_as_advanced(hidapi-hidraw_LIBRARY) +endif() + include(FindPackageHandleStandardArgs) find_package_handle_standard_args( hidapi @@ -98,5 +107,14 @@ if(hidapi_FOUND) INTERFACE_COMPILE_OPTIONS "${PC_hidapi_CFLAGS_OTHER}" INTERFACE_INCLUDE_DIRECTORIES "${hidapi_INCLUDE_DIR}" ) + if(CMAKE_SYSTEM_NAME STREQUAL Linux) + add_library(hidapi::hidraw UNKNOWN IMPORTED) + set_target_properties(hidapi::hidraw + PROPERTIES + IMPORTED_LOCATION "${hidapi-hidraw_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${PC_hidapi_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${hidapi_INCLUDE_DIR}" + ) + endif() endif() endif() diff --git a/cmake/modules/GitInfo.cmake b/cmake/modules/GitInfo.cmake index 3907760d385..e83b2350151 100644 --- a/cmake/modules/GitInfo.cmake +++ b/cmake/modules/GitInfo.cmake @@ -1,7 +1,7 @@ # Get the current commit ref if(NOT GIT_DESCRIBE) execute_process( - COMMAND git describe --tags --always --dirty=-modified + COMMAND git describe --tags --always --first-parent --dirty=-modified WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" OUTPUT_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE diff --git a/packaging/CPackDebInstall.cmake b/packaging/CPackDebInstall.cmake index 16e99ecb72d..a3198e1dd51 100644 --- a/packaging/CPackDebInstall.cmake +++ b/packaging/CPackDebInstall.cmake @@ -23,7 +23,7 @@ if(NOT CPACK_DEBIAN_DEBCHANGE) endif() # We create a temporary debian folder that the debhelper below run as usual. -# The final debian folder is created indipendently by cpack +# The final debian folder is created independently by cpack message( NOTICE "Creating temporary debian folder for debhelper" ) file(COPY ${CPACK_DEBIAN_SOURCE_DIR}/packaging/debian DESTINATION ${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}) @@ -69,7 +69,7 @@ function(run_dh DH_COMMAND) WORKING_DIRECTORY ${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME} RESULT_VARIABLE CPACK_DEBIAN_DH_RET) if(NOT CPACK_DEBIAN_DH_RET EQUAL "0") - message(FATAL_ERROR "${DH_COMMAND} retuned exit code ${CPACK_DEBIAN_DH_RET}") + message(FATAL_ERROR "${DH_COMMAND} returned exit code ${CPACK_DEBIAN_DH_RET}") endif() endfunction() diff --git a/packaging/CPackDebUploadPPA.cmake b/packaging/CPackDebUploadPPA.cmake index daaa59a8126..23eb1e53ede 100644 --- a/packaging/CPackDebUploadPPA.cmake +++ b/packaging/CPackDebUploadPPA.cmake @@ -117,7 +117,7 @@ foreach(RELEASE ${CPACK_DEBIAN_DISTRIBUTION_RELEASES}) WORKING_DIRECTORY ${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME} RESULT_VARIABLE CPACK_DEBIAN_DEBUILD_RET) if(NOT CPACK_DEBIAN_DEBUILD_RET EQUAL "0") - message(FATAL_ERROR "${CPACK_DEBIAN_DEBUILD} retuned exit code ${CPACK_DEBIAN_DEBUILD_RET}") + message(FATAL_ERROR "${CPACK_DEBIAN_DEBUILD} returned exit code ${CPACK_DEBIAN_DEBUILD_RET}") endif() endif() if (BUILD_MACHINE_RELEASE STREQUAL RELEASE AND DEB_BUILD) diff --git a/packaging/macos/entitlements.plist b/packaging/macos/entitlements.plist index 126ccd7564d..7193269b745 100644 --- a/packaging/macos/entitlements.plist +++ b/packaging/macos/entitlements.plist @@ -30,7 +30,7 @@ com.apple.security.files.user-selected.read-write - + com.apple.security.files.bookmarks.app-scope diff --git a/res/Mixxx-Keyboard-Shortcuts.pdf b/res/Mixxx-Keyboard-Shortcuts.pdf index d6491d378d2..51986d9b47b 100644 Binary files a/res/Mixxx-Keyboard-Shortcuts.pdf and b/res/Mixxx-Keyboard-Shortcuts.pdf differ diff --git a/res/controllers/Hercules_DJControl_Inpulse_200.midi.xml b/res/controllers/Hercules_DJControl_Inpulse_200.midi.xml index 1b87f171e74..d9d36d6b143 100644 --- a/res/controllers/Hercules_DJControl_Inpulse_200.midi.xml +++ b/res/controllers/Hercules_DJControl_Inpulse_200.midi.xml @@ -1303,7 +1303,7 @@ 0x07 0x05 - + [AutoDJ] enabled diff --git a/res/controllers/Hercules_DJControl_Jogvision.midi.xml b/res/controllers/Hercules_DJControl_Jogvision.midi.xml index aeb87ae3216..d7723cd3b5a 100644 --- a/res/controllers/Hercules_DJControl_Jogvision.midi.xml +++ b/res/controllers/Hercules_DJControl_Jogvision.midi.xml @@ -1721,7 +1721,7 @@ [Master] maximize_library - VIEW buton LED + VIEW button LED 0.5 1 0x90 diff --git a/res/controllers/Numark-N4-scripts.js b/res/controllers/Numark-N4-scripts.js index fcf8a427f6f..9967cbf3038 100644 --- a/res/controllers/Numark-N4-scripts.js +++ b/res/controllers/Numark-N4-scripts.js @@ -24,7 +24,7 @@ NumarkN4.cueReverseRoll=true; // enables the ability to do a reverse roll while NumarkN4.hotcuePageIndexBehavior=true; // possible ranges (0.0..3.0 where 0.06=6%) -NumarkN4.rateRanges = [0, // default (gets set via script later; don't modifify) +NumarkN4.rateRanges = [0, // default (gets set via script later; don't modify) 0.06, // one semitone 0.24, // for maximum freedom ]; diff --git a/res/controllers/Pioneer-DDJ-200-scripts.js b/res/controllers/Pioneer-DDJ-200-scripts.js index 5cfc7274597..e1f03a234a2 100644 --- a/res/controllers/Pioneer-DDJ-200-scripts.js +++ b/res/controllers/Pioneer-DDJ-200-scripts.js @@ -31,7 +31,7 @@ DDJ200.init = function() { DDJ200.switchPlayLED(d, ch); }); - // run switchSyncLED after sync toogle to set LEDs accordingly + // run switchSyncLED after sync toggle to set LEDs accordingly engine.makeConnection(vgroup, "sync_enabled", function(ch, vgroup) { var vDeckNo = script.deckFromGroup(vgroup); var d = (vDeckNo % 2) ? 0 : 1; diff --git a/res/controllers/Pioneer-DDJ-400.midi.xml b/res/controllers/Pioneer-DDJ-400.midi.xml index a2cc1d28eba..d1abe4e38b1 100644 --- a/res/controllers/Pioneer-DDJ-400.midi.xml +++ b/res/controllers/Pioneer-DDJ-400.midi.xml @@ -206,7 +206,7 @@ - JOG DIAL PLATTER (DECK1) - touch - enabe (on touch) / disable (on release) Scraching/Pitch + JOG DIAL PLATTER (DECK1) - touch - enable (on touch) / disable (on release) Scratching/Pitch bend [Channel1] @@ -218,7 +218,7 @@ - JOG DIAL PLATTER +SHIFT (DECK1) - touch - enabe (on touch) / disable (on release) highspeed + JOG DIAL PLATTER +SHIFT (DECK1) - touch - enable (on touch) / disable (on release) highspeed Pitch bend [Channel1] @@ -271,7 +271,7 @@ - JOG DIAL PLATTER (DECK2) - touch - enabe (on touch) / disable (on release) Scraching/Pitch + JOG DIAL PLATTER (DECK2) - touch - enable (on touch) / disable (on release) Scratching/Pitch bend [Channel2] @@ -283,7 +283,7 @@ - JOG DIAL PLATTER +SHIFT (DECK2) - touch - enabe (on touch) / disable (on release) highspeed + JOG DIAL PLATTER +SHIFT (DECK2) - touch - enable (on touch) / disable (on release) highspeed Pitch bend [Channel2] diff --git a/res/controllers/Traktor-Kontrol-S2-MK3-hid-scripts.js b/res/controllers/Traktor-Kontrol-S2-MK3-hid-scripts.js index c98765289da..6507bf3548e 100644 --- a/res/controllers/Traktor-Kontrol-S2-MK3-hid-scripts.js +++ b/res/controllers/Traktor-Kontrol-S2-MK3-hid-scripts.js @@ -187,7 +187,7 @@ TraktorS2MK3.registerInputPackets = function () { this.registerInputScaler(messageLong, "[Master]", "crossfader", 0x05, 0xFFFF, this.parameterHandler); /* do NOT map the "master" button because it also drives the analog output gain. - Disabling this mapping is the only way to have independant controls for the + Disabling this mapping is the only way to have independent controls for the digital master gain and the output level - the latter usually needs to be set at 100%. */ diff --git a/res/controllers/Traktor-Kontrol-S3-hid-scripts.js b/res/controllers/Traktor-Kontrol-S3-hid-scripts.js index 140b1d612ef..2cd16782952 100644 --- a/res/controllers/Traktor-Kontrol-S3-hid-scripts.js +++ b/res/controllers/Traktor-Kontrol-S3-hid-scripts.js @@ -2073,7 +2073,7 @@ TraktorS3.Controller.prototype.lightDeck = function(group, sendPackets) { deck.colorOutput(0, "!PreviewTrack"); deck.colorOutput(0, "!LibraryFocus"); deck.colorOutput(0, "!MaximizeLibrary"); - deck.colorOutput(TraktorS3.JogDefaultOn, "!jogButton"); + deck.colorOutput(deck.jogToggled, "!jogButton"); if (group === "[Channel4]") { this.basicOutput(0, "[Master]", "!extButton"); } diff --git a/res/images/templates/ic_template_keyboard_mapping_sheet.svg b/res/images/templates/ic_template_keyboard_mapping_sheet.svg index ef8d1a5172c..5f39a761916 100644 --- a/res/images/templates/ic_template_keyboard_mapping_sheet.svg +++ b/res/images/templates/ic_template_keyboard_mapping_sheet.svg @@ -1,22 +1,22 @@ Mixxx Keyboard mapping sheet templateimage/svg+xml @@ -7901,13 +8010,13 @@ id="g32437" style="fill:#ffffff;fill-opacity:1"> - - - - - - - -Mixxx default keyboard mapping sheet *www.mixxx.org - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Mixxx default keyboard mapping - - - - - - - - - - - - - - - - - - - - -rate - smallrate + smalltemp - smalltemp + smallloopin   loopout   reloop/ exit   QuickEffectsync tap  loopin   loopout   reloop/ exit   QuickEffect    4-barloop  loop÷ 2   loopx 2   headphone   headphone   4-barloop  loop÷ 2   loopx 2   back rev  play cue set  cue cue go  xFader small  xFader small  fwd  back rev  play cue set  fwd  cue cue go  talkover  hot 1 clear  hot 2 clear  hot 3 clear  hot 4 clear  lowkill  lowkill  toggleshuffleskipfade Deck 1Deck 2hot 1 clear  hot 2 clear  hot 3 clear  hot 4 clear  rate - smallrate + smalltemp - smalltemp + smallsync tap  load 1eject 1  load 2 eject 2  AutoDJLibrary±§ + + + + + + + +Mixxx default keyboard mapping sheet *www.mixxx.org + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mixxx default keyboard mapping + + + + + + + + + + + + + + + + + + + + +rate - smallrate + smalltemp - smalltemp + smallloopin   loopout   reloop/ exit   QuickEffectsync tap  loopin   loopout   reloop/ exit   QuickEffect    4-barloop  loop÷ 2   loopx 2   headphone   headphone   4-barloop  loop÷ 2   loopx 2   back rev  play cue set  cue cue go  xFader small  xFader small  fwd  back rev  play cue set  fwd  cue cue go  talkover  hot 1 clear  hot 2 clear  hot 3 clear  hot 4 clear  lowkill  lowkill  toggleshuffleskipfade Deck 1Deck 2hot 1 clear  hot 2 clear  hot 3 clear  hot 4 clear  rate - smallrate + smalltemp - smalltemp + smallsync tap  load 1eject 1  load 2 eject 2  ±§AutoDJLibrarymaximize library * for en-us keyboard layout * for en-us keyboard layout- select the rectangle in layer 'res > doc_file_boundary'- select the rectangle in layer 'res' > 'doc_file_boundary'- delete layers 'res' and 'links' 'setup_export'- delete layers 'res', 'links' 'setup_export'defined by the rectangle in layer 'doc_file_frame',defined by the rectangle in layer 'res' > 'doc_file_boundary', + + + diff --git a/res/skins/Deere/icon/ic_library_checkbox_checked.svg b/res/skins/Deere/icon/ic_library_checkbox_checked.svg new file mode 100644 index 00000000000..fd0ece59bad --- /dev/null +++ b/res/skins/Deere/icon/ic_library_checkbox_checked.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/res/skins/Deere/style.qss b/res/skins/Deere/style.qss index f93114a9c1a..33e40b8510c 100644 --- a/res/skins/Deere/style.qss +++ b/res/skins/Deere/style.qss @@ -264,12 +264,11 @@ WLibrary QLineEdit, } /* checkbox in library "Played" column */ -WTrackTableView::indicator:checked { - image: url(skin:/../Deere/icon/ic_library_checkmark.svg); - border: 1px solid #ff6600; -} WTrackTableView::indicator:unchecked { - border: 1px solid rgba(151,151,151,128); + image: url(skin:/../Deere/icon/ic_library_checkbox.svg); +} +WTrackTableView::indicator:checked { + image: url(skin:/../Deere/icon/ic_library_checkbox_checked.svg); } /* focused BPM cell in the library "BPM" column */ @@ -2122,7 +2121,6 @@ WTrackMenu QMenu QCheckBox::indicator:disabled { background-color: #333; } WLibrarySidebar QMenu::indicator:checked, -WTrackTableView::indicator:checked, WTrackMenu QMenu QCheckBox::indicator:checked { image: url(skin:/../Deere/icon/ic_library_checkmark_orange.svg); } @@ -2158,8 +2156,6 @@ WLibrarySidebar QMenu::indicator:unchecked, WLibrarySidebar QMenu::indicator:unchecked:selected, WTrackTableViewHeader QMenu::indicator:unchecked, WTrackTableViewHeader QMenu::indicator:unchecked:selected, -WTrackTableView::indicator:unchecked, -WTrackTableView::indicator:unchecked:selected, WEffectSelector::indicator:unchecked, WEffectSelector::indicator:unchecked:selected, #fadeModeCombobox::indicator:unchecked, diff --git a/res/skins/LateNight/classic/buttons/btn__lib_checkbox.svg b/res/skins/LateNight/classic/buttons/btn__lib_checkbox.svg new file mode 100644 index 00000000000..9ff5e37a358 --- /dev/null +++ b/res/skins/LateNight/classic/buttons/btn__lib_checkbox.svg @@ -0,0 +1,3 @@ + + + diff --git a/res/skins/LateNight/classic/buttons/btn__lib_checkbox_checked.svg b/res/skins/LateNight/classic/buttons/btn__lib_checkbox_checked.svg new file mode 100644 index 00000000000..a051362dbb3 --- /dev/null +++ b/res/skins/LateNight/classic/buttons/btn__lib_checkbox_checked.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/skins/LateNight/fx/unit_parameters_hidden.xml b/res/skins/LateNight/fx/unit_parameters_hidden.xml index dc92a339730..9fe21ee27b8 100644 --- a/res/skins/LateNight/fx/unit_parameters_hidden.xml +++ b/res/skins/LateNight/fx/unit_parameters_hidden.xml @@ -18,7 +18,7 @@ horizontal - + + When a track is loaded the bg gets darker for better contrast --> #19191a #001b23 rgba(15, 15, 15, 20) @@ -249,7 +249,7 @@ blue white 0f,0f @@ -392,7 +392,7 @@