GSoC: VLC macOS interface redesign

My contribution to Google Summer of Code 2021

Introduction

For the summer of 2021, I participated in Google Summer of Code.
I contributed to the VLC media player, through the project titled VLC macOS interface redesign.

Overview

The goal for the project is to implement the newly designed interface for the next major release 4.0.
The new interface follows modern look and feel for macOS.

This interface is implemented in native Cocoa API, using Objective-C.
A basic implementation was already in-place, however, the UI/UX aspects were largerly not implemented.
Additionally, some logic needed to be either implemented, or updated.

Main Window

This commit contains the main work. It implements the features listed below.

Main Window re-design

The main window is redesigned to have 4 tabs, each tab represents a functionality.

Inside each tab, you get either an empty view at the start, or a collection view.

Main View (Video, empty) Streams View

Using native Cocoa APIs for Browse tab

Normally, the four tabs rely on the VLC media library for filling their content.
However, the media library currently supports very basic navigation for local items.
Thus, native Cocoa APIs were used instead.

The main bulk of the implementation was in integrating the API in a way that plays nicely
with the already in place functionality.
As the old functionality relied on VLC media library API only, care was taken to bridge the native API, without the need to duplicating the functionality twice.

Browse View Browse View

Implementing and updating the bottom bar

The bottom bar is the bar that contains the play info for VLC.
The new redesign includes translucency, new buttons, new colors, and an updated look.

Additionally, if the mouse hovers on the progress bar, its size increases (see image II below).

An item is playing An item is playing, mouse on progress bar.

Implementing Advanced Audio Effects Panel

The advanced tab in the audio effects panel was implemented. It contains 2 new filters, pitch control, and stereo pan.

Although other tabs normally used 1 enable button for all the filters available through it, yet for the advanced tab, it was decided to use 1 enable button per filter.

The reason for this is that the sterea pan filter is alters the audio over the whole value range. Thus, if enabled, it always affects the audio.

This will render the pitch control un-usable, therefore, it was decided to implement one button per filter.

New advanced audio effects panel

Tiny bug fixes

Some bug fixes on the UI.