diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5196d009f..38803b2be 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,6 +11,7 @@ on: - "**/*.md" - ".github/ISSUE_TEMPLATE/*" - ".github/workflows/sponsors.yml" + - ".github/workflows/translators.yml" - "Graphics/*" pull_request: branches: diff --git a/.github/workflows/sponsors.yml b/.github/workflows/sponsors.yml index 1fe2fbb99..e2dda2491 100644 --- a/.github/workflows/sponsors.yml +++ b/.github/workflows/sponsors.yml @@ -11,12 +11,12 @@ jobs: uses: actions/checkout@v3 - name: Generate Sponsors - uses: JamesIves/github-sponsors-readme-action@v1.2.2 + uses: JamesIves/github-sponsors-readme-action@v1 with: token: ${{ secrets.SPONSORS_PAT }} file: 'README.md' organization: true - template: '{{{ name }}} ' + template: '{{{ name }}} ' - name: Deploy to GitHub Pages uses: JamesIves/github-pages-deploy-action@v4 diff --git a/.github/workflows/translators.yml b/.github/workflows/translators.yml new file mode 100644 index 000000000..11046de4d --- /dev/null +++ b/.github/workflows/translators.yml @@ -0,0 +1,47 @@ +name: Update Translators List + +on: + schedule: + - cron: '0 0 * * 0' # Run weekly on Sunday at 00:00 + workflow_dispatch: + +jobs: + update-translators: + runs-on: windows-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Update README.md + shell: pwsh + run: | + $headers = @{ + "Authorization" = "Bearer ${{ secrets.CROWDIN_API_TOKEN }}" + } + + $response = Invoke-RestMethod ` + -Uri "https://api.crowdin.com/api/v2/projects/407880/members" ` + -Headers $headers + $translators = $response.data.data + + $html = ($translators | Sort-Object -Property @{Expression={ $_.fullName }}, @{Expression={ $_.username }} | ForEach-Object { + $translator = $_ + $translatorName = if ($translator.fullName) { $translator.fullName } else { $translator.username } + $avatarUrl = $translator.avatarUrl + "`"$translatorName`"" + }) -join " " + $html = "`n$html`n" + + $readmeContent = Get-Content -Path .\README.md -Raw + $readmeContent -match "(?[\s\S]*?)[\s\S]*?(?[\s\S]*)" + $readmeContent = $matches["sof"] + $html + $matches["eof"] + + Set-Content -Path .\README.md -Value $readmeContent + + - name: Commit changes + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add README.md + git commit -m "Update translators via GitHub Actions" || exit 0 + git push origin master diff --git a/.gitignore b/.gitignore index 4bc66cb67..272fb6bfc 100644 --- a/.gitignore +++ b/.gitignore @@ -214,3 +214,4 @@ _pkginfo.txt .chocolatey/tools/Release.zip /artifacts/sideload /Tools +nuget.exe diff --git a/EarTrumpet/App.xaml.cs b/EarTrumpet/App.xaml.cs index 5df83cfa5..71f0245c8 100644 --- a/EarTrumpet/App.xaml.cs +++ b/EarTrumpet/App.xaml.cs @@ -128,7 +128,7 @@ private void trayIconScrolled(object _, int wheelDelta) var hWndTray = WindowsTaskbar.GetTrayToolbarWindowHwnd(); var hWndTooltip = User32.SendMessage(hWndTray, User32.TB_GETTOOLTIPS, IntPtr.Zero, IntPtr.Zero); User32.SendMessage(hWndTooltip, User32.TTM_POPUP, IntPtr.Zero, IntPtr.Zero); - + CollectionViewModel.Default?.IncrementVolume(Math.Sign(wheelDelta) * 2); } } diff --git a/EarTrumpet/AppSettings.cs b/EarTrumpet/AppSettings.cs index 8ba84d363..8882399a4 100644 --- a/EarTrumpet/AppSettings.cs +++ b/EarTrumpet/AppSettings.cs @@ -145,6 +145,12 @@ public bool UseGlobalMouseWheelHook set => _settings.Set("UseGlobalMouseWheelHook", value); } + public bool UseScrollWheelInSliders + { + get => _settings.Get("UseScrollWheelInSliders", true); + set => _settings.Set("UseScrollWheelInSliders", value); + } + public bool HasShownFirstRun { get => _settings.HasKey("hasShownFirstRun"); diff --git a/EarTrumpet/Properties/Resources.Designer.cs b/EarTrumpet/Properties/Resources.Designer.cs index c8b85eec0..31f1296e9 100644 --- a/EarTrumpet/Properties/Resources.Designer.cs +++ b/EarTrumpet/Properties/Resources.Designer.cs @@ -1430,6 +1430,15 @@ public static string SettingsUseGlobalMouseWheelHook { } } + /// + /// Looks up a localized string similar to Use the scroll wheel to change volume while hovering over volume sliders. + /// + public static string SettingsUseScrollWheelInSliders { + get { + return ResourceManager.GetString("SettingsUseScrollWheelInSliders", resourceCulture); + } + } + /// /// Looks up a localized string similar to Use legacy EarTrumpet icon. /// diff --git a/EarTrumpet/Properties/Resources.resx b/EarTrumpet/Properties/Resources.resx index 109324f4e..bb3ae9c00 100644 --- a/EarTrumpet/Properties/Resources.resx +++ b/EarTrumpet/Properties/Resources.resx @@ -659,6 +659,9 @@ Open [https://eartrumpet.app/jmp/fixfonts] now? Use the scroll wheel to change volume while the flyout is open + + Use the scroll wheel to change volume while hovering over volume sliders + Community settings diff --git a/EarTrumpet/UI/Controls/VolumeSlider.cs b/EarTrumpet/UI/Controls/VolumeSlider.cs index 7b5237c8b..19d8adf29 100644 --- a/EarTrumpet/UI/Controls/VolumeSlider.cs +++ b/EarTrumpet/UI/Controls/VolumeSlider.cs @@ -145,9 +145,12 @@ private void OnMouseMove(object sender, MouseEventArgs e) private void OnMouseWheel(object sender, MouseWheelEventArgs e) { - var amount = Math.Sign(e.Delta) * 2.0; - ChangePositionByAmount(amount); - e.Handled = true; + if (App.Settings.UseScrollWheelInSliders) + { + var amount = Math.Sign(e.Delta) * 2.0; + ChangePositionByAmount(amount); + e.Handled = true; + } } public void SetPositionByControlPoint(Point point) diff --git a/EarTrumpet/UI/ViewModels/EarTrumpetMouseSettingsPageViewModel.cs b/EarTrumpet/UI/ViewModels/EarTrumpetMouseSettingsPageViewModel.cs index c76edcf27..9c02085ae 100644 --- a/EarTrumpet/UI/ViewModels/EarTrumpetMouseSettingsPageViewModel.cs +++ b/EarTrumpet/UI/ViewModels/EarTrumpetMouseSettingsPageViewModel.cs @@ -16,6 +16,12 @@ public bool UseGlobalMouseWheelHook set => _settings.UseGlobalMouseWheelHook = value; } + public bool UseScrollWheelInSliders + { + get => _settings.UseScrollWheelInSliders; + set => _settings.UseScrollWheelInSliders = value; + } + private readonly AppSettings _settings; public EarTrumpetMouseSettingsPageViewModel(AppSettings settings) : base(null) diff --git a/EarTrumpet/UI/Views/SettingsWindow.xaml b/EarTrumpet/UI/Views/SettingsWindow.xaml index 3ac1c5c1a..672ea6a28 100644 --- a/EarTrumpet/UI/Views/SettingsWindow.xaml +++ b/EarTrumpet/UI/Views/SettingsWindow.xaml @@ -169,6 +169,9 @@ + diff --git a/LICENSE b/LICENSE index 5bcf67b01..7a134c6c6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,3 +1,17 @@ +The following legal persons or entities (collectively, the "Excluded Entities") are +expressly excluded from the licensing terms set forth below and, as such, do not +have the right to reproduce, distribute, or create derivative works from the +software or associated documentation files: + + Yellow Elephant Productions + Tidal Media Inc. + Articent Group LLC + +The Excluded Entities may not exercise any of the rights granted to other users +under these licensing terms. + +--- + The MIT License (MIT) Copyright (c) 2015 diff --git a/README.md b/README.md index 8072bd56f..9a830ad36 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # EarTrumpet -[![GitHub issues](https://img.shields.io/github/issues/File-New-Project/EarTrumpet?style=flat-square)](https://github.com/File-New-Project/EarTrumpet/issues) [![GitHub forks](https://img.shields.io/github/forks/File-New-Project/EarTrumpet?style=flat-square)](https://github.com/File-New-Project/EarTrumpet/network) [![GitHub stars](https://img.shields.io/github/stars/File-New-Project/EarTrumpet?style=flat-square)](https://github.com/File-New-Project/EarTrumpet/stargazers) [![GitHub license](https://img.shields.io/github/license/File-New-Project/EarTrumpet?style=flat-square)](https://github.com/File-New-Project/EarTrumpet/blob/master/LICENSE) [![Nuget package](https://img.shields.io/chocolatey/v/eartrumpet?style=flat-square)](https://chocolatey.org/packages/eartrumpet) ![Maintenance status](https://img.shields.io/maintenance/yes/2023?style=flat-square) +[![GitHub issues](https://img.shields.io/github/issues/File-New-Project/EarTrumpet?style=flat-square)](https://github.com/File-New-Project/EarTrumpet/issues) [![GitHub forks](https://img.shields.io/github/forks/File-New-Project/EarTrumpet?style=flat-square)](https://github.com/File-New-Project/EarTrumpet/network) [![GitHub stars](https://img.shields.io/github/stars/File-New-Project/EarTrumpet?style=flat-square)](https://github.com/File-New-Project/EarTrumpet/stargazers) [![Nuget package](https://img.shields.io/chocolatey/v/eartrumpet?style=flat-square)](https://chocolatey.org/packages/eartrumpet) ![Maintenance status](https://img.shields.io/maintenance/yes/2025?style=flat-square) ![EarTrumpet Screenshot](./Graphics/hero.gif) @@ -12,6 +12,11 @@ ## Media coverage +> [...] there are alternative solutions like EarTrumpet which are great [...] +> +> — [Linus Tech Tips (February 12, 2025)](https://youtu.be/6wgHq9NZru0?t=461) + + > [...] there are third-party solutions out there that do a much better job than what Windows offers by default. One such app is called EarTrumpet [...] > > — [TechQuickie (Jan 11, 2022)](https://www.youtube.com/watch?v=xQvp5HzY9xc) @@ -26,7 +31,7 @@ ## Sponsors -Matthew Novelli + ## Features @@ -42,7 +47,13 @@ ## Internationalization -We currently support 20+ languages. Are we missing your language? [Contribute a translation via Crowdin](https://crowdin.com/project/eartrumpet)! +Thanks to our translators, we currently support 20+ languages. Are we missing your language? [Contribute a translation via Crowdin](https://crowdin.com/project/eartrumpet)! + +### Translators + + +4tubborn BlockyTheDev casungo cmhdream cronhan CrysoK Dekamir dkopec91 Drasil drodrigues55 evasive ewerkman fashni FoxyLoon gbetsis GoldenTao heerxingen hypnotichemionus4 ivoo_ jamilfarajov JordyEGNL jsunyermias JY3 kutiz Le_Roi_Fromage luisvalles luukverhagen96 merah26 NazeehYauqoob noseran Orofil OsoFugitivo poipoi random.001 Randomname456 segewick siprach solomoncyj Tihsamikah TrDy73 weyh Yannick_Whorst yinyue200 Zababa chreddy gable RazvanS Taifuuni 140bpmdubstep alpdmrel Andrew Poženel Apolônio Serafim Arcade Ariel Eytan Artan Imeri Artem Artem Bazhenov Bazsa Berk Kırıkçı Cain Carl Oosthuizen Charles IdB Corey Daan Schroeten Davin Risy A. H. Dimitris Traxiotis Donato duk6046 Dy64 Eduardo Junio Elias Torstensen Emre EN LYOWH Enes 3078 Epic gaming chair Ettore Bernardi ExteriorCloth20 Firefly74940 Fred Ahrens Gabriel Lima Gabriele GiHeong Ro Göran Guillaume Turchini Gustavo Abreu HibouDev Hichem Fantar hirin-byte hugoalh IDAぷろ iGerman00 Igor Ivić Iman Nemati iMiKE (Borizzz from XDA) Italo King Muñoz Izumi W. Jacek Majda Jaiganesh Kumaran Jaime Muñoz Martín Jan Formela Jerem Dlcn Jeroen Maathuis Jhongt796 Jiaa johnyb0y Jose Calderon Jules LastRagnarokkr Leon San José Larsson likegravity Lilian ARAGO maboroshin Marco P. Marco te Kortschot Marian Dolinský Martijn van B. Mat GMC7 Melcon Moraes Merloss Miguel Hurtado Mohammad Shughri Mr Mati muhammad sadq Nicolas Panico Nikola Perović Nil Calderó Vega Nissan-O NTAuthority Omar Mostafa Pasvv19 Pavel Bibichenko Peter J. Mello Peter Pin-guang Chen Pol Quartyn Walker Rafael Rivera Raul Andres del Canto Zahr Really Super Otter Rodrigo Rodrigo Garcia Martin Roman Matviiv Sándor Papp Sebastian Soldat Shahdan Turung Shahin Alam (shahin alam) Shizzoid ShlomoDev somni Sophia Sarah Spaanhede Stanislav Steve Y Sus Juegos Tci Gravifer Fang Ten tu není th ch Thatchai Sintra Thiago Henrique da Silva Tungstene u!^DEV Umang Chauhan wancoro WCONTI Wessel Smid Yacine Boussoufa Yaniv Levin Yasoga Nanayakkarawasam YifePlayte yrctw YuDong yuna0x0 Λόρδος Πορτοκάλης Вова Смірнов Кирилл Карасёв Михаил Эпштейн י. פל. 曹恩逢 王柏崴 神枪968 + ## Install @@ -73,6 +84,7 @@ Want to see what we were working on? Or help us test new features? [Install EarT - Windows 10 20H2 (October 2020 Update) - Windows 10 21H1 (May 2021 Update) - Windows 10 21H2 (November 2021 Update) +- Windows 10 22H2 (October 2022 Update) - Windows 11 ## Credits @@ -84,3 +96,86 @@ Want to see what we were working on? Or help us test new features? [Install EarT ## Special thanks "[Horn](https://thenounproject.com/icon/horn-125731/)" icon by Artjom Korman from [the Noun Project](https://thenounproject.com/) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +