Add fullscreen framework

Signed-off-by: Justin Georgi <justin.georgi@gmail.com>
This commit is contained in:
2024-11-05 12:12:00 -07:00
parent a3b6aa1418
commit d80c31449b
3 changed files with 40 additions and 3 deletions

View File

@@ -154,7 +154,8 @@ class GlModelTransformOutput extends MediaTransformOutput {
'class' => 'glmv-container', 'class' => 'glmv-container',
'style' => 'width: ' . $this->width . 'px; height: ' . $this->height . 'px;', 'style' => 'width: ' . $this->width . 'px; height: ' . $this->height . 'px;',
'onmousedown' => 'clearAnnotations()', 'onmousedown' => 'clearAnnotations()',
'ontouchstart' => 'clearAnnotations()' 'ontouchstart' => 'clearAnnotations()',
'onfullscreenchange' => 'toggleFullScreen(event)'
); );
return Html::rawElement('div', $attrContainer, $elModel . $elMenu . $interactButton); return Html::rawElement('div', $attrContainer, $elModel . $elMenu . $interactButton);
@@ -207,11 +208,22 @@ class GlModelTransformOutput extends MediaTransformOutput {
'onmousedown' => 'event.stopPropagation()', 'onmousedown' => 'event.stopPropagation()',
'ontouchstart' => 'event.stopPropagation()' 'ontouchstart' => 'event.stopPropagation()'
); );
$screenDownUrl = $mainConfig->get( 'ExtensionAssetsPath' ) . '/GlModelViewer/resources/hs_slideshow.svg';
$screenUpUrl = $mainConfig->get( 'ExtensionAssetsPath' ) . '/GlModelViewer/resources/hs_hide.svg';
$attrMenuButtonScreen = array (
'class' => 'glmv-menu-button',
'onclick' => 'toggleFullScreen(this.parentNode.parentNode)',
'onmousedown' => 'event.stopPropagation()',
'ontouchstart' => 'event.stopPropagation()'
);
$menuButtons = array( $menuButtons = array(
Html::rawElement('div', $attrMenuButtonPrev, '<img class="awaiting-model" src="' . $gotoUrl . '"></image>'), Html::rawElement('div', $attrMenuButtonPrev, '<img class="awaiting-model" src="' . $gotoUrl . '"></image>'),
Html::rawElement('div', $attrMenuButtonSlides, '<img class="awaiting-model" src="' . $slideUrl . '"></image>'), Html::rawElement('div', $attrMenuButtonSlides, '<img class="awaiting-model" src="' . $slideUrl . '"></image>'),
Html::rawElement('div', $attrMenuButtonNext, '<img class="awaiting-model" src="' . $gotoUrl . '"></image>'), Html::rawElement('div', $attrMenuButtonNext, '<img class="awaiting-model" src="' . $gotoUrl . '"></image>'),
Html::rawElement('div', $attrMenuButtonHide, '<img class="awaiting-model" src="' . $hideUrl . '"></image>') Html::rawElement('div', $attrMenuButtonHide, '<img class="awaiting-model" src="' . $hideUrl . '"></image>'),
Html::rawElement('div', $attrMenuButtonScreen, '<img class="awaiting-model full-hide" src="' . $screenUpUrl . '"></image><img class="awaiting-model full-show" src="' . $screenDownUrl . '"></image>')
); );
return Html::rawElement('div', $attrMenu, $menuImg . implode($menuButtons)); return Html::rawElement('div', $attrMenu, $menuImg . implode($menuButtons));

View File

@@ -84,6 +84,18 @@
.glmv-container { .glmv-container {
position: relative; position: relative;
& .full-show {
display: none !important;
}
&:fullscreen .full-hide {
display: none !important;
}
&:fullscreen .full-show {
display: flex !important;
}
} }
.glmv-menu { .glmv-menu {
@@ -103,7 +115,7 @@
justify-content: flex-start; justify-content: flex-start;
&:hover { &:hover {
width: 160px; width: 196px;
& .glmv-menu-image { & .glmv-menu-image {
transform: rotate(180deg); transform: rotate(180deg);

View File

@@ -413,4 +413,17 @@ downloadImage = function(defName) {
.then(imgBlob => { .then(imgBlob => {
reader.readAsDataURL(imgBlob) reader.readAsDataURL(imgBlob)
}) })
}
/**
* Respond to full screen changes on the gl container
*
* @param {Element} glCont container element to enlarge or reduce
*/
toggleFullScreen = function(glCont) {
if (document.fullscreenElement) {
document.exitFullscreen()
} else {
glCont.requestFullscreen()
}
} }