Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : */
9 :
10 : #include <vcl/openglwin.hxx>
11 : #include <vcl/opengl/OpenGLContext.hxx>
12 : #include <vcl/event.hxx>
13 : #include <vcl/sysdata.hxx>
14 :
15 34 : class OpenGLWindowImpl
16 : {
17 : public:
18 : OpenGLWindowImpl(vcl::Window* pWindow);
19 0 : OpenGLContext& getContext() { return maContext;}
20 : private:
21 : OpenGLContext maContext;
22 : boost::scoped_ptr<SystemChildWindow> mpChildWindow;
23 : };
24 :
25 34 : OpenGLWindowImpl::OpenGLWindowImpl(vcl::Window* pWindow)
26 : {
27 34 : SystemWindowData aData = OpenGLContext::generateWinData(pWindow, false);
28 34 : mpChildWindow.reset(new SystemChildWindow(pWindow, 0, &aData));
29 34 : mpChildWindow->Show();
30 34 : maContext.init(mpChildWindow.get());
31 34 : pWindow->SetMouseTransparent(false);
32 34 : }
33 :
34 :
35 34 : OpenGLWindow::OpenGLWindow(vcl::Window* pParent):
36 : Window(pParent, 0),
37 34 : mpImpl(new OpenGLWindowImpl(this)),
38 68 : mpRenderer(NULL)
39 : {
40 34 : }
41 :
42 102 : OpenGLWindow::~OpenGLWindow()
43 : {
44 34 : if(mpRenderer)
45 34 : mpRenderer->contextDestroyed();
46 68 : }
47 :
48 0 : OpenGLContext& OpenGLWindow::getContext()
49 : {
50 0 : return mpImpl->getContext();
51 : }
52 :
53 0 : void OpenGLWindow::Paint(const Rectangle&)
54 : {
55 0 : if(mpRenderer)
56 0 : mpRenderer->update();
57 0 : }
58 :
59 0 : void OpenGLWindow::MouseButtonDown( const MouseEvent& rMEvt )
60 : {
61 0 : maStartPoint = rMEvt.GetPosPixel();
62 0 : }
63 :
64 0 : void OpenGLWindow::MouseButtonUp( const MouseEvent& rMEvt )
65 : {
66 0 : if(!mpRenderer)
67 0 : return;
68 :
69 0 : Point aPoint = rMEvt.GetPosPixel();
70 0 : if(aPoint == maStartPoint)
71 : {
72 0 : mpRenderer->clickedAt(aPoint, rMEvt.GetButtons());
73 : }
74 : else
75 : {
76 : mpRenderer->mouseDragMove(maStartPoint, aPoint,
77 0 : rMEvt.GetButtons());
78 : }
79 : }
80 :
81 0 : void OpenGLWindow::Command( const CommandEvent& rCEvt )
82 : {
83 0 : if(!mpRenderer)
84 0 : return;
85 :
86 0 : if(rCEvt.GetCommand() == COMMAND_WHEEL)
87 : {
88 0 : const CommandWheelData* pData = rCEvt.GetWheelData();
89 0 : if(pData->GetMode() == CommandWheelMode::SCROLL)
90 : {
91 0 : long nDelta = pData->GetDelta();
92 0 : mpRenderer->scroll(nDelta);
93 : }
94 : }
95 : }
96 :
97 0 : void OpenGLWindow::MouseMove( const MouseEvent& /*rMEvt*/ )
98 : {
99 0 : }
100 :
101 368 : void OpenGLWindow::setRenderer(IRenderer* pRenderer)
102 : {
103 368 : mpRenderer = pRenderer;
104 1019 : }
105 :
106 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|