Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@beyondcompute
Copy link

@beyondcompute beyondcompute commented Nov 25, 2025


Description:

A suggestion and a conversation-starter. An AI-assisted work again 🤖, so the code might need some love.

  • Zoom works when the setting Control → Pinch to is set to “Adjust window size“. (Maybe a new setting could be introduced to keep legacy behavior if many users wish so)
  • If we are not zoomed-in (so the size is 100%), the zoom starts around the cursor position (clamping to the nearest point in the video when the cursor is outside of the video)
  • If we zoom several times (“consecutive zooms”), zooming still happens around the point where we started when we were at 100%. This avoids “jumps” that naïve panning would cause in such a case. And it feels natural anyway
  • But perhaps a more easing-in mode of panning for consecutive zooms and zooms after panning (see below) could be introduced
  • Only when zoom is above 100%, we can pan (with two fingers on a touchpad, for example). After we have panned, zoom happens around the center of the screen. (This could be a little confusing if your cursor is far from the center. But if we zoom around the cursor again, that would cause a “jump“ of fast panning as well; see above.)
  • Panning seems to play along fine with the Control → Scroll vertically to and Scroll horizontally to actions. When we are zoomed above 100%, we get panning, at 100% we get our configured actions
  • Max zoom level is hardcoded in the code
  • The behavior of the zoom in windowed mode should not be affected
  • If General → Resume last playback position setting is enabled, zoom and pan state is also remembered. I think that‘s fine

@low-batt
Copy link
Contributor

A while back I too started on changes to add pan, rotate and zoom. I did not take that code past the just playing around stage because the priority is to first remove the restriction that prevents these features from being used except in full screen mode. I've heard changes were made in that area for IINA 1.4.1, but haven't had time to look into that.

Originally the plan was for IINA 1.5.0 to remove that restriction and add other features. But Apple breaking all kinds of things in macOS Tahoe disrupted IINA's plans. The IINA 1.4.0 release was supposed to be 1.4.0-beta2. Because IINA was so broken in macOS Tahoe, quick fixes were added for some of the macOS 26 problems and IINA 1.4.0 was rushed out the door. Some important fixes that were planned for 1.4.0 were left sitting on the dock as IINA 1.4.0 sailed away. IINA 1.4.1 was a quick release to fix some more of the problems Apple introduced in macOS 26. More remain.

Worse a couple of severe problems have been found in the upgraded libraries IINA is built on top of. Due to the way IINA builds libraries it can be difficult to patch and rebuild libraries when they are no long the current released version. Because of this the plan was to make IINA 1.5.0 focused on upgrading mpv, FFmpeg and the other libraries, fixing remaining macOS Tahoe problems and other regressions.

That plan has run into some problems building libraries for the oldest version of macOS IINA supports (Catalina). Because of that we are currently working on an IINA 1.4.2 release with the latest version of libdav1d, more fixes for macOS Tahoe problems and fixes for other regressions. Once that release is out we will go back to working on IINA 1.5.0.

Because of all this turmoil I'm unsure what the other developers are thinking with regards to features going into IINA 1.5.0. It is looking like IINA has to upgrade to mpv 0.40.0 and FFmpeg 8 to fix some of the problems. That adds significant pressure to quickly complete the development of IINA 1.5.0 and greatly limit the inclusion of any features.

Another consideration has to do IINA starting to address technical debt and other long postponed work. The way the IINA UI is coded (XIBs) is now two generations behind. Work has been underway to introduce use of SwiftUI starting with the settings panel. That work can be seen on the new-pref-ui branch. Major rework like this comes with the usual problem of ongoing changes to the existing code base causing additional work as those changes then have to be reworked for the new UI code. This makes finishing and merging the new UI code a priority. Given the extra work not merging the new UI code generates I'm expecting this might be the other change included in IINA 1.5.0.

Remember I'm a junior IINA developer and not always up to date on our plans. But it is looking to me like near term IINA will be very focused on a couple of releases to fix defects before the focus turns back to features. If you don't see activity on this PR in the near term, it is likely due to the priorities I described above.

@beyondcompute
Copy link
Author

Hello, @low-batt! Thank you taking the time to provide me with a context and a glimpse into the IINA’s team‘s plans! 🙏 I meant those PRs exactly as a more material alternative to the Discussions section and also as a learning opportunity for myself.

I was also strongly expecting that I will have to run my own “fork” of IINA locally (and to delay the upgrade to ’26 as long as possible 😄).

@svobs
Copy link
Contributor

svobs commented Dec 24, 2025

Hi @beyondcompute, thank you so much for this! The code is nearly perfect. I merged it into my fork and expanded it a bit so that:

  • It can be enabled/disabled via Settings… > Control, and the maximum zoom can be changed (up to 10x).
  • An OSD message is displayed when video-zoom changes.
  • It also starts zooming when the window is maximized on screen when the pinch is started. Subsequent pinches will continue zooming / panning until a pinch ends with 1x zoom, and then the next pinch will reduce the window again. (If the user reduces the window size via some other method while zoomed, the zoom auto-resets to 1x).

You can take a look and download a notarized binary release here. In my source tree the code lives in MagnificationGestureHandler.swift.

@beyondcompute
Copy link
Author

beyondcompute commented Dec 24, 2025

Thank you, @svobs. TIL about IINA Advance! ℹ️ And wow, that looks so cool! I like the chapter markers, the control bar, etc. Also the ability to restore windows after restarting the machine and so on, is something I noticed but haven’t realized how cool it would be to have it! (Does something like #5798 have a chance of ending up there? 😄)

A small piece of feedback. Top margin looks a bit tight on this view:
Screenshot 2025-12-24 at 05 45 06

Also I can’t import my current keyboard config (even after I removed my custom command from it). ⌨️ (OK, that got fixed here: svobs#16)


Merry Christmas to everyone who celebrates! 🎄🎅

@svobs
Copy link
Contributor

svobs commented Dec 27, 2025

A small piece of feedback. Top margin looks a bit tight on this view:

Also I can’t import my current keyboard config (even after I removed my custom command from it). ⌨️ (OK, that got fixed here: svobs#16)

Thanks for the feedback/help! Looks like the top margin was a regression for pre-Tahoe Macs. The broken import looks...much older, oops. I'll soon roll out a 1.4.2 update which will include these fixes.

Does something like #5798 have a chance of ending up there? 😄

I've had plans to develop a generalized mechanism for making all the IINA commands bindable via input bindings configuration (you may have seen #5566), and I've had some fragments of ideas of doing the same for IINA preference keys generally (or at least a large subset of them). I'll see what I can come up with.

@beyondcompute
Copy link
Author

I've had plans to develop a generalized mechanism for making all the IINA commands bindable via input bindings configuration (you may have seen #5566), and I've had some fragments of ideas of doing the same for IINA preference keys generally (or at least a large subset of them). I'll see what I can come up with.

That’s cool! I’ll be looking forward to those. 😌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants