summaryrefslogtreecommitdiff
path: root/avmedia/source/opengl/oglwindow.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'avmedia/source/opengl/oglwindow.cxx')
-rw-r--r--avmedia/source/opengl/oglwindow.cxx371
1 files changed, 0 insertions, 371 deletions
diff --git a/avmedia/source/opengl/oglwindow.cxx b/avmedia/source/opengl/oglwindow.cxx
deleted file mode 100644
index ae550ff37f84..000000000000
--- a/avmedia/source/opengl/oglwindow.cxx
+++ /dev/null
@@ -1,371 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "oglwindow.hxx"
-#include <cppuhelper/supportsservice.hxx>
-
-using namespace com::sun::star;
-using namespace libgltf;
-
-namespace avmedia { namespace ogl {
-
-OGLWindow::OGLWindow( glTFHandle& rHandle, const rtl::Reference<OpenGLContext> &rContext, vcl::Window& rEventHandlerParent )
- : m_rHandle( rHandle )
- , m_xContext( rContext )
- , m_rEventHandler( rEventHandlerParent )
- , m_bVisible ( false )
- , m_aLastMousePos(Point(0,0))
- , m_bIsOrbitMode( false )
-{
-}
-
-OGLWindow::~OGLWindow()
-{
- dispose();
-}
-
-void SAL_CALL OGLWindow::update()
-{
- m_xContext->makeCurrent();
- int nRet = gltf_prepare_renderer(&m_rHandle);
- if( nRet != 0 )
- {
- SAL_WARN("avmedia.opengl", "Error occurred while preparing for rendering! Error code: " << nRet);
- return;
- }
- gltf_renderer(&m_rHandle);
- gltf_complete_renderer(&m_rHandle);
- m_xContext->swapBuffers();
-}
-
-sal_Bool SAL_CALL OGLWindow::setZoomLevel( css::media::ZoomLevel /*eZoomLevel*/ )
-{
- return false;
-}
-
-css::media::ZoomLevel SAL_CALL OGLWindow::getZoomLevel()
-{
- return media::ZoomLevel_ORIGINAL;
-}
-
-void SAL_CALL OGLWindow::setPointerType( sal_Int32 )
-{
-}
-
-OUString SAL_CALL OGLWindow::getImplementationName()
-{
- return OUString("com.sun.star.comp.avmedia.Window_OpenGL");
-}
-
-sal_Bool SAL_CALL OGLWindow::supportsService( const OUString& rServiceName )
-{
- return cppu::supportsService(this, rServiceName);
-}
-
-uno::Sequence< OUString > SAL_CALL OGLWindow::getSupportedServiceNames()
-{
- return { "com.sun.star.media.Window_OpenGL" };
-}
-
-void SAL_CALL OGLWindow::dispose()
-{
- assert(m_rEventHandler.GetParent());
- m_rEventHandler.GetParent()->RemoveEventListener( LINK(this, OGLWindow, FocusGrabber));
- m_rEventHandler.RemoveEventListener( LINK(this, OGLWindow, CameraHandler));
-}
-
-void SAL_CALL OGLWindow::addEventListener( const uno::Reference< lang::XEventListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::removeEventListener( const uno::Reference< lang::XEventListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::setPosSize( sal_Int32 nX, sal_Int32 nY, sal_Int32 nWidth, sal_Int32 nHeight, sal_Int16 /*nFlags*/ )
-{
- if( m_rHandle.viewport.x != nX || m_rHandle.viewport.x != nY ||
- m_rHandle.viewport.width != nWidth || m_rHandle.viewport.height != nHeight )
- {
- m_xContext->setWinSize(Size(nWidth,nHeight));
- m_rHandle.viewport.x = nX;
- m_rHandle.viewport.y = nY;
- m_rHandle.viewport.width = nWidth;
- m_rHandle.viewport.height = nHeight;
- }
-}
-
-awt::Rectangle SAL_CALL OGLWindow::getPosSize()
-{
- return awt::Rectangle(m_rHandle.viewport.x, m_rHandle.viewport.y,
- m_rHandle.viewport.width, m_rHandle.viewport.height);
-}
-
-void SAL_CALL OGLWindow::setVisible( sal_Bool bSet )
-{
- assert(m_rEventHandler.GetParent());
- if( bSet && !m_bVisible )
- {
- m_rEventHandler.GetParent()->AddEventListener( LINK(this, OGLWindow, FocusGrabber));
- m_rEventHandler.AddEventListener( LINK(this, OGLWindow, CameraHandler));
- m_rEventHandler.GrabFocus();
- }
- else if( !bSet )
- {
- m_rEventHandler.GetParent()->RemoveEventListener( LINK(this, OGLWindow, FocusGrabber));
- m_rEventHandler.RemoveEventListener( LINK(this, OGLWindow, CameraHandler));
- }
- m_bVisible = bSet;
-}
-
-void SAL_CALL OGLWindow::setEnable( sal_Bool )
-{
-}
-
-void SAL_CALL OGLWindow::setFocus()
-{
-}
-
-void SAL_CALL OGLWindow::addWindowListener( const uno::Reference< awt::XWindowListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::removeWindowListener( const uno::Reference< awt::XWindowListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::addFocusListener( const uno::Reference< awt::XFocusListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::removeFocusListener( const uno::Reference< awt::XFocusListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::addKeyListener( const uno::Reference< awt::XKeyListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::removeKeyListener( const uno::Reference< awt::XKeyListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::addMouseListener( const uno::Reference< awt::XMouseListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::removeMouseListener( const uno::Reference< awt::XMouseListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::addMouseMotionListener( const uno::Reference< awt::XMouseMotionListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::removeMouseMotionListener( const uno::Reference< awt::XMouseMotionListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::addPaintListener( const uno::Reference< awt::XPaintListener >& )
-{
-}
-
-void SAL_CALL OGLWindow::removePaintListener( const uno::Reference< awt::XPaintListener >& )
-{
-}
-
-IMPL_LINK(OGLWindow, FocusGrabber, VclWindowEvent&, rEvent, void)
-{
- if( rEvent.GetId() == VclEventId::WindowMouseMove )
- {
- MouseEvent* pMouseEvt = static_cast<MouseEvent*>(rEvent.GetData());
- if(pMouseEvt)
- {
- const Point& rMousePos = pMouseEvt->GetPosPixel();
- const tools::Rectangle aWinRect(m_rEventHandler.GetPosPixel(),m_rEventHandler.GetSizePixel());
- // Grab focus to the OpenGL window when mouse pointer is over it
- if( aWinRect.IsInside(rMousePos) )
- {
- if ( !m_rEventHandler.HasFocus() )
- {
- m_rEventHandler.GrabFocus();
- }
- }
- // Move focus to the document when mouse is not over the OpenGL window
- else if ( m_rEventHandler.HasFocus() )
- {
- m_rEventHandler.GrabFocusToDocument();
- }
- }
- }
-}
-
-IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent&, rEvent, void)
-{
- if( rEvent.GetId() == VclEventId::WindowKeyInput )
- {
- KeyEvent* pKeyEvt = static_cast<KeyEvent*>(rEvent.GetData());
- if(pKeyEvt)
- {
- const sal_uInt16 nCode = pKeyEvt->GetKeyCode().GetCode();
- if (nCode == KEY_Q || nCode == KEY_E ||
- nCode == KEY_A || nCode == KEY_D ||
- nCode == KEY_W || nCode == KEY_S )
- {
- // Calculate movement
- glm::vec3 vMoveBy;
- {
- glm::vec3 vEye;
- glm::vec3 vView;
- glm::vec3 vUp;
- gltf_get_camera_pos(&m_rHandle, &vEye,&vView,&vUp);
- float fModelSize =(float)gltf_get_model_size(&m_rHandle);
-
- glm::vec3 vMove = vView-vEye;
- vMove = glm::normalize(vMove);
- vMove *= 25.0f;
- glm::vec3 vStrafe = glm::cross(vMove, vUp);
- vStrafe = glm::normalize(vStrafe);
- vStrafe *= 25.0f;
- glm::vec3 vMup = vUp * 25.0f;
-
- if( !m_bIsOrbitMode )
- {
- if(nCode == KEY_E)vMoveBy += vMup*(0.0005f*fModelSize);
- if(nCode == KEY_Q)vMoveBy -= vMup*(0.0005f*fModelSize);
- if(nCode == KEY_W)vMoveBy += vMove*(0.0005f*fModelSize);
- if(nCode == KEY_S)vMoveBy -= vMove*(0.0005f*fModelSize);
- if(nCode == KEY_A)vMoveBy -= vStrafe*(0.0005f*fModelSize);
- if(nCode == KEY_D)vMoveBy += vStrafe*(0.0005f*fModelSize);
- }
- else
- {
- bool bZoomIn = false;
- bool bZoomOut = false;
- if(nCode == KEY_E)
- {
- vMoveBy += vMove*(0.0005f*fModelSize);
- bZoomIn = true;
- }
- if(nCode == KEY_Q)
- {
- vMoveBy -= vMove*(0.0005f*fModelSize);
- bZoomOut = true;
- }
-
- // Limit zooming in orbit mode
- float fCameraDistFromModelGlobe = glm::length(vEye + vMoveBy - vView) - fModelSize / 2.0f;
- if ((fCameraDistFromModelGlobe < 0.5 * fModelSize && bZoomIn ) ||
- (fCameraDistFromModelGlobe > 2 * fModelSize && bZoomOut ))
- {
- vMoveBy = glm::vec3(0.0);
- }
- }
- }
- gltf_renderer_move_camera(&m_rHandle, vMoveBy.x, vMoveBy.y, vMoveBy.z, 0.0001);
-
- if( m_bIsOrbitMode )
- {
- long nDeltaX = 0;
- long nDeltaY = 0;
- if (nCode == KEY_W)
- {
- nDeltaY -= 1;
- }
- if (nCode == KEY_S)
- {
- nDeltaY += 1;
- }
- if (nCode == KEY_A)
- {
- nDeltaX -= 1;
- }
- if (nCode == KEY_D)
- {
- nDeltaX += 1;
- }
- float fSensitivity = 50.0;
- gltf_renderer_rotate_model(&m_rHandle, nDeltaX*fSensitivity, nDeltaY*fSensitivity, 0.0);
- }
- }
- else if(nCode == KEY_M)
- {
- if(m_bIsOrbitMode)
- {
- gltf_orbit_mode_stop(&m_rHandle);
- m_bIsOrbitMode = false;
- }
- else
- {
- gltf_orbit_mode_start(&m_rHandle);
- m_bIsOrbitMode = true;
- }
- }
- else if(nCode == KEY_F)
- {
- gltf_render_FPS_enable(&m_rHandle);
- }
- }
- }
- else if( rEvent.GetId() == VclEventId::WindowMouseButtonDown )
- {
- MouseEvent* pMouseEvt = static_cast<MouseEvent*>(rEvent.GetData());
- if(pMouseEvt && pMouseEvt->IsLeft() && pMouseEvt->GetClicks() == 1)
- {
- m_aLastMousePos = pMouseEvt->GetPosPixel();
- }
- }
- else if( rEvent.GetId() == VclEventId::WindowMouseMove )
- {
- if ( !m_rEventHandler.HasFocus() )
- {
- m_rEventHandler.GrabFocus();
- }
- MouseEvent* pMouseEvt = static_cast<MouseEvent*>(rEvent.GetData());
- if(pMouseEvt && pMouseEvt->IsLeft() && m_aLastMousePos != Point(0,0))
- {
- const Point& aCurPos = pMouseEvt->GetPosPixel();
- float fSensitivity = std::min(m_rHandle.viewport.width, m_rHandle.viewport.height);
- if (fSensitivity == 0.0)
- fSensitivity = 1.0;
- else
- fSensitivity = 540.0 / fSensitivity;
-
-
- long nDeltaX = m_aLastMousePos.X()-aCurPos.X();
- long nDeltaY = m_aLastMousePos.Y()-aCurPos.Y();
- if( m_bIsOrbitMode )
- {
- fSensitivity *= 5;
- gltf_renderer_rotate_model(&m_rHandle, (float)nDeltaX*fSensitivity, (float)nDeltaY*fSensitivity, 0.0);
- }
- else
- {
- // Filter out too small deltas to avoid rewrite rotation parameter with 0
- // before rotation is done
- if( nDeltaX != 0 || nDeltaY != 0 )
- gltf_renderer_rotate_camera(&m_rHandle, (float)nDeltaX*fSensitivity, (float)nDeltaY*fSensitivity, 0.0);
- }
- m_aLastMousePos = aCurPos;
- }
- }
- else if( rEvent.GetId() == VclEventId::WindowMouseButtonUp )
- {
- MouseEvent* pMouseEvt = static_cast<MouseEvent*>(rEvent.GetData());
- if(pMouseEvt && pMouseEvt->IsLeft() && pMouseEvt->GetClicks() == 1)
- {
- m_aLastMousePos = Point(0,0);
- }
- }
-}
-
-} // namespace ogl
-} // namespace avmedia
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */