Rafostar / clapper

Level up your video experience with a modern and user-friendly media player.
https://rafostar.github.io/clapper/
GNU General Public License v3.0
791 stars 37 forks source link

Use on a touchscreen - config & defaults #490

Open mixmastamyk opened 1 month ago

mixmastamyk commented 1 month ago

Hi, cool app, thank you.

So... I have a new Linux touchscreen tablet with Phosh and have been desperately looking for a video player to use with it that works similarly to Netflix on Android, i.e. touchscreen-based.

Despite Gnome apps having a reputation for working well on touchscreens, most of their apps don't. Video apps are some of the worst, having tiny touch targets and oddly demanding a keyboard. So far Totem, Celluloid, even Livvy are almost unusable on a tablet.

You'll hopefully be glad to hear that your app is the best so far. First, it works, even on Wayland. Simple enough to stay out of the way, powerful enough to choose tracks, subtitles, speed, etc. Efficient, as written in C. So far, so good.

The one drawback, is that while using touch is possible, it is still a tad clumsy. A lot better than the unusable others, but I was hoping a few minor things could be refined.

My understanding of the current behavior:

Some ideas/suggestions for a touchscreen profile:

Would like the interface to come up on first tap, take a skip or toggle action immediately after that, and fade out a few seconds after last tap—consistently. Many players get confused here and forget to hide the interface for some reason.

Profile selection:

Nice to haves:

Thanks for considering this.

Rafostar commented 1 month ago

Hover can't work, bring up interface on first tap.

Dunno which version you are using, but since 0.6, expected behaviour of first tap is to bring up interface and only while UI is visible it acts as toggle play/pause. Someone with PinePhone + Phosh was/is testing it and reported that it works. As usual Flatpak package from Flathub is recommended for latest stable version with all features.

Go full screen by default. Don't forget to hide clock and status bars. Same as tiny button in bottom right.

The state is restored, so if you close app while fullscreen, it will next time start in fullscreen.

mixmastamyk commented 1 month ago

Hi,

Ok, thanks I may not have everything 100% accurate as I wrote this from my laptop. I will continue to refine it.

which version ?

0.6.1 from Fedora

first tap is to bring up interface and only while UI is visible it acts as toggle play/pause

Ok, this is more intricate than I realized. If I have it play automatically (from file manager video click) there is no interface yet. I tap once and the interface comes up (good), but it also pauses (bad).

Later, after the interface hides itself, I have to tap it several times. First tap is ignored, second brings up UI, third tap ignored, fourth tap pauses. As you can see this is complicated. When I try to use it normally I have to keep tapping on the chance something may happen. Can only get it to skip by tapping furiously on one of the sides.

Also, it seems to remember if I've tapped previously, as if the events don't expire after a second or two? That is the issue contributing to everything else I think.

If in doubt on specs, Netflix on Android works well. There's another player named MX Player that I think is free and is well developed.

The state is restored, so if you close app while fullscreen, it will next time start in fullscreen.

Cool, good to know I can get that to work. However in "undocked mode" there are really no times when I want it windowed (not fullscreen), ie. clock/status bar showing.

What do you think?

Rafostar commented 1 month ago

If I have it play automatically (from file manager video click) there is no interface yet. I tap once and the interface comes up (good), but it also pauses (bad). Later, after the interface hides itself, I have to tap it several times. First tap is ignored, second brings up UI, third tap ignored, fourth tap pauses.

That is not intended bahavior. I wouldn't make it on purpose like that since it does not make sense. Since this was working fine during 0.6 development, either some newer version of GTK broke this or your screen works slightly differently that causes this.

Cool, good to know I can get that to work. However in "undocked mode" there are really no times when I want it windowed (not fullscreen), ie. clock/status bar showing.

If you want to keep fullscreen you can just always close it while fullscreen :smile:. Alternatively, latest git (not yet in 0.6) has support and adds some command line arguments. So you can do clapper --fullscreen or just clapper -f to launch app fullscreen. Possibly create a shortcut for this to make it always launch like that regardless if it was closed when windowed.

mixmastamyk commented 1 month ago

Cool, thanks. How to debug this? Maybe something that prints tap events to a file or something.

mixmastamyk commented 1 month ago

Ok, I tried with a laptop and touchscreen. Didn't think of it at first because it has KDE and never really touched the screen. But clapper 0.6.1 installed quickly.

The result was similar, though not identical. Maybe because of the mouse pointer hanging around. Player seems to work for a bit, but then it gets confused after several taps.

But anyway, would like to be able to:

Don't know if there is a state machine in your program, or you are getting events from gtk or something? Those could be buggy as well, not sure.

mixmastamyk commented 1 month ago

Deps: gtk4-4.14.5-1

dnf deplist clapper-0.6.1-1.fc40.x86_64 
Last metadata expiration check: 0:00:58 ago on 2024-09-27T17:12:36 PDT.
package: clapper-0.6.1-1.fc40.x86_64
  dependency: hicolor-icon-theme
   provider: hicolor-icon-theme-0.17-18.fc40.noarch
  dependency: libadwaita-1.so.0()(64bit)
   provider: libadwaita-1.5.3-1.fc40.x86_64
  dependency: libadwaita-1.so.0(LIBADWAITA_1_0)(64bit)
   provider: libadwaita-1.5.3-1.fc40.x86_64
  dependency: libc.so.6(GLIBC_2.34)(64bit)
   provider: glibc-2.39-22.fc40.x86_64
  dependency: libgio-2.0.so.0()(64bit)
   provider: glib2-2.80.3-1.fc40.x86_64
  dependency: libglib-2.0.so.0()(64bit)
   provider: glib2-2.80.3-1.fc40.x86_64
  dependency: libgmodule-2.0.so.0()(64bit)
   provider: glib2-2.80.3-1.fc40.x86_64
  dependency: libgobject-2.0.so.0()(64bit)
   provider: glib2-2.80.3-1.fc40.x86_64
  dependency: libgraphene-1.0.so.0()(64bit)
   provider: graphene-1.10.6-8.fc40.x86_64
  dependency: libgstaudio-1.0.so.0()(64bit)
   provider: gstreamer1-plugins-base-1.24.8-1.fc40.x86_64
  dependency: libgstgl-1.0.so.0()(64bit)
   provider: gstreamer1-plugins-base-1.24.8-1.fc40.x86_64
  dependency: libgstpbutils-1.0.so.0()(64bit)
   provider: gstreamer1-plugins-base-1.24.8-1.fc40.x86_64
  dependency: libgstreamer-1.0.so.0()(64bit)
   provider: gstreamer1-1.24.8-1.fc40.x86_64
  dependency: libgsttag-1.0.so.0()(64bit)
   provider: gstreamer1-plugins-base-1.24.8-1.fc40.x86_64
  dependency: libgstvideo-1.0.so.0()(64bit)
   provider: gstreamer1-plugins-base-1.24.8-1.fc40.x86_64
  dependency: libgtk-4.so.1()(64bit)
   provider: gtk4-4.14.5-1.fc40.x86_64
  dependency: libm.so.6()(64bit)
   provider: glibc-2.39-22.fc40.x86_64
  dependency: libm.so.6(GLIBC_2.2.5)(64bit)
   provider: glibc-2.39-22.fc40.x86_64
  dependency: libmicrodns.so.1()(64bit)
   provider: libmicrodns-0.2.0-9.fc40.x86_64
  dependency: libpango-1.0.so.0()(64bit)
   provider: pango-1.54.0-1.fc40.x86_64
  dependency: libsoup-3.0.so.0()(64bit)
   provider: libsoup3-3.4.4-3.fc40.x86_64
  dependency: rtld(GNU_HASH)
   provider: glibc-2.39-22.fc40.i686
   provider: glibc-2.39-22.fc40.x86_64