Quick Fullscreen Package for RV

Quick Fullscreen Package - RV Developer Example Series

fullScreen

In this example, you can have a one-shortcut method of making your image full screen with no window decorations.

About this series:

Over the years, I’ve made a number of packages for myself, developers looking get get around a roadblock, or to just reproduce/validate a bug.

While the packages in this series aren’t intended to be fully finished forms of art, they all have some sort of value that I’d like to pass along. You will likely find problems, bugs, and/or things that could be optimized, but the purpose here is to share formulas and recipes to help expose what you can do with RV. I hope this series proves valuable, and I encourage you to share your own packages (assuming you have permission to share them to the public).

If you are new to writing RV packages, also check this out: How do I write my first package in RV?

What does this package do?

When I want to see a movie or sequence of frames use my entire screen, I use this package.
To activate it use alt+`.
It will set RV to be full screen, remove the top and bottom widgets, hide the menu bar, and deactivate the timeline and timeline magnifier.

When you deactivate full screen, it will attempt to put back all the elements it hid while it was making it into the full screen mode.

What can we learn from this package?

In this package, you should be able to have the following takeaways:

  • Delayed Load modes: Not all modes need to start up with RV. By delaying your mode (see the mode definition in the PACKAGE file) you can speed up RV’s start time.
  • Functionality on Activation/Deactivation: Modes don’t always have to be active! If you don’t need a tool or functionality, or even access to the mode, it might make sense to deactivate the mode. This package makes interesting use of activation/deactivation to set/reset the state.
  • Custom internal events: This package is designed to work with other packages by sending internal events. Any custom event can be sent by a package and handled by another package. This is a good way to communicate with an unknown other package. By sending events, you can communicate with other packages without direct code dependency. If a custom UI package wanted to integrate with Quick Fullscreen, they could respond to “quick-fullscreen-activated” and “quick-fullscreen-deactivated”.
  • Overriding keyboard shortcuts: When the mode is active, we override the normal full screen button, but when the mode is not active, the fullscreen button is handled by the normal UI code.

The QuickFullscreen package isn’t perfect, as it can’t handle a lot of custom UIs without those UIs integrating nicely with it, but it is a good starting point if you want to take it further.

The Package

To install this package, go to RV>Preferences>Packages, then click the Add Package... button. Open the package file, choose your install location, and then make sure both check boxes are checked on the package in the list.
Quick_Fullscreen-1.2.rvpkg (2.1 KB)

For help on installing packages, check out the package installation portion of the user manual, here.

10 Likes

Hi, Michael!
Thanks for the package! Working nice.
I wonder, why is it still not a default feature?

Best

1 Like

It’s still in our backlog! Hopefully this unblocks you for now while we work on the full feature implementation. :slight_smile:

2 Likes

Is there some reason this package wouldn’t work with the newest RV? RV 2022.0.0 Release? Alt + ` is not working after install. Thanks.

1 Like

the iteritems() function is not compatible with new rv builds. I made changes to the code, you can use the one I attached below

Quick_Fullscreen-1.2.rvpkg (2.0 KB)

1 Like

I need to add a few more uiElements to be deactivate when entering fullscreen mode. Any clue what the names are for the session manager, annotation, and screening room?

@ryanng, check the various modules for things like theMode() to get an instance to the mode if it exists.

For instance, for session_manager, the activate/deactivate methods work like this (assuming the instance has been created:

from rv import runtime
runtime.eval("""session_manager.theMode().activate();""", ["session_manager"])
runtime.eval("""session_manager.theMode().deactivate();""", ["session_manager"])