annotate johndyer-mediaelement-13fa20a/src/js/mep-feature-fullscreen.js @ 25:4a4bd554b4c1 tip

Closing this sub branch.
author Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk>
date Mon, 25 Mar 2013 14:02:54 +0000
parents 032bc65ebafc
children
rev   line source
gyorgy@0 1 (function($) {
gyorgy@0 2 mejs.MediaElementDefaults.forcePluginFullScreen = false;
gyorgy@0 3
gyorgy@0 4 MediaElementPlayer.prototype.isFullScreen = false;
gyorgy@0 5 MediaElementPlayer.prototype.buildfullscreen = function(player, controls, layers, media) {
gyorgy@0 6
gyorgy@0 7 if (!player.isVideo)
gyorgy@0 8 return;
gyorgy@0 9
gyorgy@0 10 // native events
gyorgy@0 11 if (mejs.MediaFeatures.hasNativeFullScreen) {
gyorgy@0 12 player.container.bind('webkitfullscreenchange', function(e) {
gyorgy@0 13
gyorgy@0 14 if (document.webkitIsFullScreen) {
gyorgy@0 15 // reset the controls once we are fully in full screen
gyorgy@0 16 player.setControlsSize();
gyorgy@0 17 } else {
gyorgy@0 18 // when a user presses ESC
gyorgy@0 19 // make sure to put the player back into place
gyorgy@0 20 player.exitFullScreen();
gyorgy@0 21 }
gyorgy@0 22 });
gyorgy@0 23 }
gyorgy@0 24
gyorgy@0 25 var
gyorgy@0 26 normalHeight = 0,
gyorgy@0 27 normalWidth = 0,
gyorgy@0 28 container = player.container,
gyorgy@0 29 docElement = document.documentElement,
gyorgy@0 30 docStyleOverflow,
gyorgy@0 31 parentWindow = window.parent,
gyorgy@0 32 parentiframes,
gyorgy@0 33 iframe,
gyorgy@0 34 fullscreenBtn =
gyorgy@0 35 $('<div class="mejs-button mejs-fullscreen-button"><button type="button"></button></div>')
gyorgy@0 36 .appendTo(controls)
gyorgy@0 37 .click(function() {
gyorgy@0 38 var isFullScreen = (mejs.MediaFeatures.hasNativeFullScreen) ?
gyorgy@0 39 document.webkitIsFullScreen :
gyorgy@0 40 player.isFullScreen;
gyorgy@0 41
gyorgy@0 42 if (isFullScreen) {
gyorgy@0 43 player.exitFullScreen();
gyorgy@0 44 } else {
gyorgy@0 45 player.enterFullScreen();
gyorgy@0 46 }
gyorgy@0 47 });
gyorgy@0 48
gyorgy@0 49 player.enterFullScreen = function() {
gyorgy@0 50
gyorgy@0 51 // firefox can't adjust plugin sizes without resetting :(
gyorgy@0 52 if (player.pluginType !== 'native' && (mejs.MediaFeatures.isFirefox || player.options.forcePluginFullScreen)) {
gyorgy@0 53 media.setFullscreen(true);
gyorgy@0 54 //player.isFullScreen = true;
gyorgy@0 55 return;
gyorgy@0 56 }
gyorgy@0 57
gyorgy@0 58 // attempt to set fullscreen
gyorgy@0 59 if (mejs.MediaFeatures.hasNativeFullScreen) {
gyorgy@0 60 player.container[0].webkitRequestFullScreen();
gyorgy@0 61 }
gyorgy@0 62
gyorgy@0 63 // store overflow
gyorgy@0 64 docStyleOverflow = docElement.style.overflow;
gyorgy@0 65 // set it to not show scroll bars so 100% will work
gyorgy@0 66 docElement.style.overflow = 'hidden';
gyorgy@0 67
gyorgy@0 68 // store
gyorgy@0 69 normalHeight = player.container.height();
gyorgy@0 70 normalWidth = player.container.width();
gyorgy@0 71
gyorgy@0 72 // make full size
gyorgy@0 73 container
gyorgy@0 74 .addClass('mejs-container-fullscreen')
gyorgy@0 75 .width('100%')
gyorgy@0 76 .height('100%')
gyorgy@0 77 .css('z-index', 1000);
gyorgy@0 78 //.css({position: 'fixed', left: 0, top: 0, right: 0, bottom: 0, overflow: 'hidden', width: '100%', height: '100%', 'z-index': 1000});
gyorgy@0 79
gyorgy@0 80 if (player.pluginType === 'native') {
gyorgy@0 81 player.$media
gyorgy@0 82 .width('100%')
gyorgy@0 83 .height('100%');
gyorgy@0 84 } else {
gyorgy@0 85 container.find('object embed')
gyorgy@0 86 .width('100%')
gyorgy@0 87 .height('100%');
gyorgy@0 88 player.media.setVideoSize($(window).width(),$(window).height());
gyorgy@0 89 }
gyorgy@0 90
gyorgy@0 91 layers.children('div')
gyorgy@0 92 .width('100%')
gyorgy@0 93 .height('100%');
gyorgy@0 94
gyorgy@0 95 fullscreenBtn
gyorgy@0 96 .removeClass('mejs-fullscreen')
gyorgy@0 97 .addClass('mejs-unfullscreen');
gyorgy@0 98
gyorgy@0 99 player.setControlsSize();
gyorgy@0 100 player.isFullScreen = true;
gyorgy@0 101 };
gyorgy@0 102 player.exitFullScreen = function() {
gyorgy@0 103
gyorgy@0 104 // firefox can't adjust plugins
gyorgy@0 105 if (player.pluginType !== 'native' && mejs.MediaFeatures.isFirefox) {
gyorgy@0 106 media.setFullscreen(false);
gyorgy@0 107 //player.isFullScreen = false;
gyorgy@0 108 return;
gyorgy@0 109 }
gyorgy@0 110
gyorgy@0 111 // come outo of native fullscreen
gyorgy@0 112 if (mejs.MediaFeatures.hasNativeFullScreen && document.webkitIsFullScreen) {
gyorgy@0 113 document.webkitCancelFullScreen();
gyorgy@0 114 }
gyorgy@0 115
gyorgy@0 116 // restore scroll bars to document
gyorgy@0 117 docElement.style.overflow = docStyleOverflow;
gyorgy@0 118
gyorgy@0 119 container
gyorgy@0 120 .removeClass('mejs-container-fullscreen')
gyorgy@0 121 .width(normalWidth)
gyorgy@0 122 .height(normalHeight)
gyorgy@0 123 .css('z-index', 1);
gyorgy@0 124 //.css({position: '', left: '', top: '', right: '', bottom: '', overflow: 'inherit', width: normalWidth + 'px', height: normalHeight + 'px', 'z-index': 1});
gyorgy@0 125
gyorgy@0 126 if (player.pluginType === 'native') {
gyorgy@0 127 player.$media
gyorgy@0 128 .width(normalWidth)
gyorgy@0 129 .height(normalHeight);
gyorgy@0 130 } else {
gyorgy@0 131 container.find('object embed')
gyorgy@0 132 .width(normalWidth)
gyorgy@0 133 .height(normalHeight);
gyorgy@0 134
gyorgy@0 135 player.media.setVideoSize(normalWidth, normalHeight);
gyorgy@0 136 }
gyorgy@0 137
gyorgy@0 138 layers.children('div')
gyorgy@0 139 .width(normalWidth)
gyorgy@0 140 .height(normalHeight);
gyorgy@0 141
gyorgy@0 142 fullscreenBtn
gyorgy@0 143 .removeClass('mejs-unfullscreen')
gyorgy@0 144 .addClass('mejs-fullscreen');
gyorgy@0 145
gyorgy@0 146 player.setControlsSize();
gyorgy@0 147 player.isFullScreen = false;
gyorgy@0 148 };
gyorgy@0 149
gyorgy@0 150 $(window).bind('resize',function (e) {
gyorgy@0 151 player.setControlsSize();
gyorgy@0 152 });
gyorgy@0 153
gyorgy@0 154 $(document).bind('keydown',function (e) {
gyorgy@0 155 if (player.isFullScreen && e.keyCode == 27) {
gyorgy@0 156 player.exitFullScreen();
gyorgy@0 157 }
gyorgy@0 158 });
gyorgy@0 159
gyorgy@0 160 }
gyorgy@0 161
gyorgy@0 162 })(mejs.$);