{"id":2495,"date":"2018-08-21T01:55:36","date_gmt":"2018-08-21T01:55:36","guid":{"rendered":"http:\/\/precog.iiitd.edu.in\/blog\/?p=2495"},"modified":"2018-08-21T01:55:36","modified_gmt":"2018-08-21T01:55:36","slug":"my-gsoc-experience-with-vlc-macos-interface-redesign","status":"publish","type":"post","link":"https:\/\/precog.iiit.ac.in\/blog\/?p=2495","title":{"rendered":"My GSoC experience with VLC (macOS Interface Redesign)"},"content":{"rendered":"<p class=\"p1\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-2504 alignright\" src=\"http:\/\/precog.iiitd.edu.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_vlc_logo-300x300.png\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_vlc_logo-300x300.png 300w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_vlc_logo-150x150.png 150w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_vlc_logo.png 512w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p class=\"p4\">Earlier this summer I got selected in <a href=\"https:\/\/summerofcode.withgoogle.com\/\">Google Summer of Code<\/a> to work with <a href=\"https:\/\/www.videolan.org\/index.html\">VideoLAN<\/a> on the Project <a href=\"https:\/\/summerofcode.withgoogle.com\/projects\/#5721689099337728\">VLC macOS Interface Redesign<\/a>. It has been a blessing to get a chance to work on one of the highest impact open source projects. I had a phenomenal experience. Let&#8217;s have a look at my contributions \ud83d\ude42<\/p>\n<p class=\"p6\"><span class=\"s1\">You can have a look at my <\/span><a href=\"https:\/\/summerofcode.withgoogle.com\/projects\/#5721689099337728\"><span class=\"s1\">GSoC Project Page<\/span><\/a><span class=\"s1\">\u00a0and <\/span><a href=\"https:\/\/github.com\/Daksh\/Daksh.github.io\/blob\/master\/images\/proposal.pdf\"><span class=\"s1\">Proposal<\/span><\/a><\/p>\n<p class=\"p6\"><span class=\"s1\">Feel free <\/span><span class=\"s1\"><b>to jump right to the <\/b><\/span><a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\/branches\"><span class=\"s1\"><b>code<\/b><\/span><\/a><\/p>\n<h2 class=\"p2\">Our Team<\/h2>\n<ul>\n<li class=\"p4\"><a href=\"https:\/\/code.videolan.org\/jbk\">Jean-Baptiste Kempf<\/a>\u00a0(President of VideoLAN)<\/li>\n<li class=\"p4\"><a href=\"https:\/\/code.videolan.org\/fkuehne\"><span class=\"s1\">Felix Paul K\u00fchne<\/span><\/a><span class=\"s1\">\u00a0(Mentor)<\/span><\/li>\n<li class=\"p4\"><a href=\"https:\/\/code.videolan.org\/dfuhrmann\"><span class=\"s1\">David Fuhrmann<\/span><\/a><span class=\"s1\">\u00a0(Mentor<\/span><\/li>\n<li class=\"p4\"><a href=\"https:\/\/code.videolan.org\/vibhoothiiaanand\"><span class=\"s1\">Vibhoothi<\/span><\/a><span class=\"s1\">\u00a0(Student at Amrita University)<\/span><\/li>\n<li class=\"p4\"><a href=\"https:\/\/code.videolan.org\/Daksh\"><span class=\"s1\">Daksh Shah<\/span><\/a><span class=\"s1\">\u00a0(Me, Student at <\/span><span class=\"s1\"><a href=\"https:\/\/iiitd.ac.in\/\">IIITD<\/a>)<\/span><\/li>\n<\/ul>\n<p class=\"p4\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-2497\" src=\"http:\/\/precog.iiitd.edu.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_team-1024x768.jpg\" alt=\"\" width=\"840\" height=\"630\" srcset=\"https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_team-1024x768.jpg 1024w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_team-300x225.jpg 300w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_team-768x576.jpg 768w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_team-1200x900.jpg 1200w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><\/p>\n<p class=\"p4\">Left to Right: Vibhoothi, Daksh(Me), Jean-Baptiste, Felix, David<\/p>\n<h2 class=\"p2\">Workflow<\/h2>\n<p class=\"p4\">Let&#8217;s start by looking at our workflow at VLC. VLC has a <a href=\"https:\/\/github.com\/videolan\/vlc\">GitHub Repository<\/a>\u00a0which is read-only.<span class=\"Apple-converted-space\">\u00a0 <\/span>We use our <a href=\"https:\/\/wiki.videolan.org\/Sending_Patches_VLC\/\">mailing list\u00a0to send Patches<\/a>. We also have a GitLab instance at <a href=\"https:\/\/code.videolan.org\/\">https:\/\/code.videolan.org\/<\/a>.<\/p>\n<p class=\"p4\">For my GSoC project, my mentors created a clone of upstream at the beginning of our coding period. It helped to keep things organized and eased the process of reviewing. You can find the repository we worked on during the summer at <a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\">https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc<\/a><\/p>\n<p class=\"p6\"><span class=\"s1\">We have an <\/span><a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\/issues?scope=all&amp;utf8=%E2%9C%93&amp;state=opened\"><span class=\"s1\">Issues Page<\/span><\/a><span class=\"s1\">\u00a0on GitLab. We used this to divide the whole work into subcategories. Further, I have made <\/span><a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\/branches\/all\"><span class=\"s1\">different branches<\/span><\/a><span class=\"s1\">\u00a0and <\/span><a href=\"https:\/\/code.videolan.org\/Daksh\"><span class=\"s1\">various commits<\/span><\/a><span class=\"s1\">.<\/span><\/p>\n<h2 class=\"p2\">Face-To-Face with the team<\/h2>\n<p class=\"p4\">I was lucky to be able to meet with my Mentors along with Jean-Baptiste for a couple of days. VideoLAN was very kind to sponsor me to come and meet our mentors in Europe. I would like to thank them from the bottom of my heart.<\/p>\n<p class=\"p4\">During our meeting, we discussed various design aspects of several Media Players and how do we envision the new VLC design to be. We also clearly divided the parts that were to be done by each one of us (Me and Vibhoothi). This helped kickstart the work and proved to be extremely useful and increased the productivity exponentially \ud83d\ude00<\/p>\n<h1 class=\"p7\">My Work Goals<\/h1>\n<ol>\n<li class=\"p4\">Add a feature enhancement to Go-to-time popup\u00a0<a href=\"#go-to-time\">(more details)<\/a>: <b>Ready to be merged<\/b><\/li>\n<li class=\"p4\"><i>Draggable Panel instead of ControlBar in windowed video<span class=\"Apple-converted-space\">\u00a0 <\/span>window<\/i>\u00a0To bring the draggable-control-panel (currently only in Fullscreen more) inside the normal Video playing windows and test with multiple Video Windows\u00a0<a href=\"#draggable-panel\">(more details)<\/a>: <b>Done and tested<\/b><\/li>\n<li class=\"p4\">Title Bar Autohiding\u00a0<a href=\"#autohidden-border\">(more details<\/a>): <b>Almost done<\/b><\/li>\n<li class=\"p4\">Make the draggable-control-panel as a View instead of a separate window. For now, just test with a plain view and see how it performs with an underlying video being played\u00a0<a href=\"#dp-as-view\">(more details)<\/a>: <b>Done<\/b><\/li>\n<\/ol>\n<p class=\"p4\"><b><i>It shows promising performance, hence in future &#8211; To extend it and have the actual panel as a View instead of Window<\/i><\/b>.<\/p>\n<h1 class=\"p7\">Work in-depth along with code<\/h1>\n<h2 class=\"p2\"><a id=\"go-to-time\"><\/a>1. Go\/Jump to Time popup (<a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\/tree\/is9-goToTime\">branch: is9-goToTime<\/a>)<\/h2>\n<p class=\"p4\">It is a pop-up which helps you to jump to any particular time. To access it, you can do any of the following:<\/p>\n<ul>\n<li class=\"p4\">Press <kbd>\u2318<\/kbd>+<kbd>J<\/kbd><\/li>\n<li class=\"p4\">Go to Playback -&gt; Jump to Time<\/li>\n<li class=\"p4\">Double Click on Time-Elapsed or Time-Remaining (in the ControlBar)<\/li>\n<\/ul>\n<h3 class=\"p8\">Visual Difference<\/h3>\n<p class=\"p4\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2502\" src=\"http:\/\/precog.iiitd.edu.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_gtt_Before_After.png\" alt=\"\" width=\"567\" height=\"142\" srcset=\"https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_gtt_Before_After.png 567w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_gtt_Before_After-300x75.png 300w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/p>\n<h3 class=\"p8\">Features<\/h3>\n<ul>\n<li class=\"p4\">Now you can add time in the hh:mm:ss format<\/li>\n<li class=\"p4\">Allows you to write bigger numbers, example: You can write 80 in seconds, and it will automatically convert that to 00:01:20<\/li>\n<li class=\"p4\">You can switch between fields with <kbd>tab<\/kbd><\/li>\n<li class=\"p4\">You can use the stepper to change the fields<\/li>\n<\/ul>\n<h3 class=\"p8\">Related Code<\/h3>\n<ul>\n<li class=\"p6\"><span class=\"s1\"><a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\/tree\/is9-goToTime\">Branch<\/a><\/span><\/li>\n<li class=\"p6\"><span class=\"s1\"><a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\/merge_requests\/2\">Merge Request<\/a><\/span><\/li>\n<li class=\"p6\"><a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\/issues\/9\"><span class=\"s1\">Issue-9<\/span><\/a><\/li>\n<\/ul>\n<h3 class=\"p8\">How it is inside IB(Interface Builder), Xcode<\/h3>\n<p class=\"p4\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-2501\" src=\"http:\/\/precog.iiitd.edu.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_goToTime_ib-1024x719.png\" alt=\"\" width=\"840\" height=\"590\" srcset=\"https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_goToTime_ib-1024x719.png 1024w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_goToTime_ib-300x211.png 300w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_goToTime_ib-768x540.png 768w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_goToTime_ib-1200x843.png 1200w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_goToTime_ib.png 1244w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><\/p>\n<h3 class=\"p8\">A sneak peek at constraints<\/h3>\n<p class=\"p4\" style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2500 alignleft\" src=\"http:\/\/precog.iiitd.edu.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_goToTime_constraints.png\" alt=\"\" width=\"321\" height=\"189\" srcset=\"https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_goToTime_constraints.png 321w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_goToTime_constraints-300x177.png 300w\" sizes=\"auto, (max-width: 321px) 100vw, 321px\" \/>AutoLayout is a bit tricky at times. David taught me how to set the constraints in a way, that even when the language of the text changes, it still looks the way it should. It also takes care of languages that are written from right to left<\/p>\n<h2 class=\"p2\"><a id=\"draggable-panel\"><\/a>2. Draggable Panel instead of ControlBar in windowed video<span class=\"Apple-converted-space\">\u00a0 <\/span>window (<a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\/issues\/1\">Issue 1<\/a>)<\/h2>\n<ul>\n<li class=\"p4\">Removed the fixed ControlBar and replaced it with a movable draggable panel. Just like the fullscreen controller<\/li>\n<li class=\"p4\">On resizing or moving the window, the draggable panel re-centers along with the window. There is a bit of a delay+drag as the panel is a window and not a view<\/li>\n<li class=\"p4\">The draggablePanel is constrained in the bounds of the window.<\/li>\n<\/ul>\n<h2 class=\"p2\"><a id=\"autohidden-border\"><\/a>3. Title Bar Autohiding (<a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\/issues\/3\">Issue 3<\/a>)<\/h2>\n<p class=\"p4\">Window&#8217;s title bar (and its close \/ minimize \/ maximize icons) automatically appears if the mouse is moved over the window, and disappear again if the mouse pointer hides or leaves the window.<\/p>\n<h2 class=\"p9\"><span class=\"s1\">Implementation of Issue 1 and 3 (<\/span><span class=\"s1\"><a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\/tree\/PanelInMultipleVout\">branch: PanelInMultipleVout<\/a>)<\/span><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2545\" src=\"http:\/\/precog.iiitd.edu.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_is3and1_reduced.png\" alt=\"\" width=\"773\" height=\"680\" srcset=\"https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_is3and1_reduced.png 773w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_is3and1_reduced-300x264.png 300w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_is3and1_reduced-768x676.png 768w\" sizes=\"auto, (max-width: 773px) 100vw, 773px\" \/><\/h2>\n<ul>\n<li class=\"p6\"><span class=\"s1\">Code for <\/span><a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\/commit\/f287ebb171342ca5e2324c10cf0f60f06a1b555d\"><span class=\"s1\">Making the titleBar seamless<\/span><\/a><\/li>\n<li class=\"p6\">Code for <a href=\"https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc\/commit\/4777cf0d1efd11f129ff563cb9dec2e57536df9e\"><span class=\"s1\">draggable panel<\/span><\/a><\/li>\n<\/ul>\n<h2 class=\"p2\">4. <a id=\"dp-as-view\"><\/a>Draggable Panel as a View<\/h2>\n<p class=\"p4\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-2499\" src=\"http:\/\/precog.iiitd.edu.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_draggablePanel_under_development-1024x492.png\" alt=\"\" width=\"840\" height=\"404\" srcset=\"https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_draggablePanel_under_development-1024x492.png 1024w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_draggablePanel_under_development-300x144.png 300w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_draggablePanel_under_development-768x369.png 768w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_draggablePanel_under_development-1200x576.png 1200w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_draggablePanel_under_development.png 1210w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><\/p>\n<p class=\"p4\">The draggablePanel was earlier a window. Having the draggablePanel as a window was creating a problem. When the video window was moved, in order to keep it at its place we had to programmatically move the panel in the same way. But a drag and a delay was coming in that.<\/p>\n<p class=\"p4\">So we decided to make it as a view instead of a window. After testing, it seems to have solved the problem \ud83d\ude00<\/p>\n<ul>\n<li class=\"p4\">It remains at its position even when the window is moved<\/li>\n<li class=\"p4\">Added the panel as a custom NSView<\/li>\n<\/ul>\n<p class=\"p4\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-2498\" src=\"http:\/\/precog.iiitd.edu.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_dpasview-1024x611.png\" alt=\"\" width=\"840\" height=\"501\" srcset=\"https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_dpasview-1024x611.png 1024w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_dpasview-300x179.png 300w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_dpasview-768x458.png 768w, https:\/\/precog.iiit.ac.in\/blog\/wp-content\/uploads\/2018\/08\/daksh_dpasview.png 1178w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><\/p>\n<ul>\n<li class=\"p4\">Created two new Classes <span class=\"s2\">`<\/span><span class=\"s4\">VLCDraggablePanelView<\/span><span class=\"s2\">`<\/span> and <span class=\"s2\">`<\/span><span class=\"s4\">VLCDraggablePanelController<\/span><span class=\"s2\">`<\/span> to handle the operations of the Panel<\/li>\n<li class=\"p4\">Connected all the components with the related class files<\/li>\n<\/ul>\n<h3 class=\"p8\">TO-DO<\/h3>\n<p class=\"p4\">Currently, the buttons are non-functional. Discussion on how the classes and their instances need to be done, after which it can be implemented.<\/p>\n<h1 class=\"p7\">Things I learnt<\/h1>\n<ul>\n<li class=\"p4\">How to work on a huge code base<\/li>\n<li class=\"p4\">Objective C<\/li>\n<li class=\"p4\">Xcode<\/li>\n<li class=\"p4\">Interface Builder<\/li>\n<li class=\"p4\">AutoLayout<\/li>\n<li class=\"p4\">Cocoa Framework<\/li>\n<li class=\"p4\">Git\n<ul>\n<li class=\"p4\">There were numerous small and big things I learnt in Git and how to version code. Here are a few tips that you can make use of \ud83d\ude42<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<blockquote><p><span class=\"s4\">git diff &#8211;color-words<\/span><\/p><\/blockquote>\n<p>To see the changes in words instead of sentences<\/p>\n<blockquote><p><span class=\"s4\">git checkout commitHash<\/span><\/p><\/blockquote>\n<p>To temporarily switch to a branch at that particular commit, helps in testing<\/p>\n<blockquote><p><span class=\"s4\">git stash<\/span>\u00a0and\u00a0<span class=\"s4\">git stash apply<\/span><\/p><\/blockquote>\n<p>To undo\/redo the uncommitted changes<\/p>\n<blockquote><p><span class=\"s4\">git diff HEAD~2<\/span><\/p><\/blockquote>\n<p>To see the changes done since HEAD~2 (two commit before HEAD). Refer to <a href=\"https:\/\/stackoverflow.com\/a\/9903611\/2806163\">this post<\/a>\u00a0for more options<\/p>\n<blockquote><p><span class=\"s4\">git branch<\/span>\u00a0and <span class=\"s4\">git checkout branch-name<\/span><\/p><\/blockquote>\n<p>To list and change to a particular branch<\/p>\n<h2 class=\"p2\">Useful Links<\/h2>\n<ul>\n<li class=\"p6\"><span class=\"s1\"><a href=\"https:\/\/vibhoothiiaanand.wordpress.com\/2018\/08\/10\/gsoc-2018-final-report\/\">GSoC 2018: Blog by Vibhoothi<\/a><\/span><\/li>\n<li class=\"p6\"><a href=\"https:\/\/epir.at\/2017\/08\/26\/gsoc-2017-vlc-for-macos-interface-redesign\/\"><span class=\"s1\">GSoC 2017: VLC for macOS interface redesign by ePirat<\/span><\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Earlier this summer I got selected in Google Summer of Code to work with VideoLAN on the Project VLC macOS Interface Redesign. It has been a blessing to get a chance to work on one of the highest impact open source projects. I had a phenomenal experience. Let&#8217;s have a look at my contributions \ud83d\ude42 You can have a look at my GSoC Project Page\u00a0and Proposal Feel free to jump right to the code Our Team Jean-Baptiste Kempf\u00a0(President of VideoLAN) Felix Paul K\u00fchne\u00a0(Mentor) David Fuhrmann\u00a0(Mentor Vibhoothi\u00a0(Student at Amrita University) Daksh Shah\u00a0(Me, Student at IIITD) Left to Right: Vibhoothi, Daksh(Me), Jean-Baptiste, Felix, David Workflow Let&#8217;s start by looking at our workflow at VLC. VLC has a GitHub Repository\u00a0which is read-only.\u00a0 We use our mailing list\u00a0to send Patches. We also have a GitLab instance at https:\/\/code.videolan.org\/. For my GSoC project, my mentors created a clone of upstream at the beginning of our coding period. It helped to keep things organized and eased the process of reviewing. You can find the repository we worked on during the summer at https:\/\/code.videolan.org\/GSoC2018\/macOS\/vlc We have an Issues Page\u00a0on GitLab. We used this to divide the whole work into subcategories. Further, I have made different branches\u00a0and various commits. Face-To-Face with the team I was lucky to be able to meet with my Mentors along with Jean-Baptiste for a couple of days. VideoLAN was very kind to sponsor me to come and meet our mentors in Europe. I would like to thank them from the bottom of my heart. During our meeting, we discussed various design aspects of several Media Players and how do we envision the new VLC design to be. We also clearly divided the parts that were to be done by each one of us (Me and Vibhoothi). This helped kickstart the work and proved to be extremely useful and increased the productivity exponentially \ud83d\ude00 My Work Goals Add a feature enhancement to Go-to-time popup\u00a0(more details): Ready to be merged Draggable Panel instead of ControlBar in windowed video\u00a0 window\u00a0To bring the draggable-control-panel (currently only in Fullscreen more) inside the normal Video playing windows and test with multiple Video Windows\u00a0(more details): Done and tested Title Bar Autohiding\u00a0(more details): Almost done Make the draggable-control-panel as a View instead of a separate window. For now, just test with a plain view and see how it performs with an underlying video being played\u00a0(more details): Done It shows promising performance, hence in future &#8211; To extend it and have the actual panel as a View instead of Window. Work in-depth along with code 1. Go\/Jump to Time popup (branch: is9-goToTime) It is a pop-up which helps you to jump to any particular time. To access it, you can do any of the following: Press \u2318+J Go to Playback -&gt; Jump to Time Double Click on Time-Elapsed or Time-Remaining (in the ControlBar) Visual Difference Features Now you can add time in the hh:mm:ss format Allows you to write bigger numbers, example: You can write 80 in seconds, and it will automatically convert that to 00:01:20 You can switch between fields with tab You can use the stepper to change the fields Related Code Branch Merge Request Issue-9 How it is inside IB(Interface Builder), Xcode A sneak peek at constraints AutoLayout is a bit tricky at times. David taught me how to set the constraints in a way, that even when the language of the text changes, it still looks the way it should. It also takes care of languages that are written from right to left 2. Draggable Panel instead of ControlBar in windowed video\u00a0 window (Issue 1) Removed the fixed ControlBar and replaced it with a movable draggable panel. Just like the fullscreen controller On resizing or moving the window, the draggable panel re-centers along with the window. There is a bit of a delay+drag as the panel is a window and not a view The draggablePanel is constrained in the bounds of the window. 3. Title Bar Autohiding (Issue 3) Window&#8217;s title bar (and its close \/ minimize \/ maximize icons) automatically appears if the mouse is moved over the window, and disappear again if the mouse pointer hides or leaves the window. Implementation of Issue 1 and 3 (branch: PanelInMultipleVout) Code for Making the titleBar seamless Code for draggable panel 4. Draggable Panel as a View The draggablePanel was earlier a window. Having the draggablePanel as a window was creating a problem. When the video window was moved, in order to keep it at its place we had to programmatically move the panel in the same way. But a drag and a delay was coming in that. So we decided to make it as a view instead of a window. After testing, it seems to have solved the problem \ud83d\ude00 It remains at its position even when the window is moved Added the panel as a custom NSView Created two new Classes `VLCDraggablePanelView` and `VLCDraggablePanelController` to handle the operations of the Panel Connected all the components with the related class files TO-DO Currently, the buttons are non-functional. Discussion on how the classes and their instances need to be done, after which it can be implemented. Things I learnt How to work on a huge code base Objective C Xcode Interface Builder AutoLayout Cocoa Framework Git There were numerous small and big things I learnt in Git and how to version code. Here are a few tips that you can make use of \ud83d\ude42 git diff &#8211;color-words To see the changes in words instead of sentences git checkout commitHash To temporarily switch to a branch at that particular commit, helps in testing git stash\u00a0and\u00a0git stash apply To undo\/redo the uncommitted changes git diff HEAD~2 To see the changes done since HEAD~2 (two commit before HEAD). Refer to this post\u00a0for more options git branch\u00a0and git checkout branch-name To list and change to a particular branch Useful Links GSoC 2018: Blog by Vibhoothi GSoC 2017: VLC for macOS interface redesign by ePirat<\/p>\n","protected":false},"author":61,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[2,3],"tags":[],"class_list":["post-2495","post","type-post","status-publish","format-standard","hentry","category-experiences","category-students"],"_links":{"self":[{"href":"https:\/\/precog.iiit.ac.in\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/precog.iiit.ac.in\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/precog.iiit.ac.in\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/precog.iiit.ac.in\/blog\/index.php?rest_route=\/wp\/v2\/users\/61"}],"replies":[{"embeddable":true,"href":"https:\/\/precog.iiit.ac.in\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2495"}],"version-history":[{"count":26,"href":"https:\/\/precog.iiit.ac.in\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2495\/revisions"}],"predecessor-version":[{"id":2557,"href":"https:\/\/precog.iiit.ac.in\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2495\/revisions\/2557"}],"wp:attachment":[{"href":"https:\/\/precog.iiit.ac.in\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/precog.iiit.ac.in\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/precog.iiit.ac.in\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}