1 /* 2 * OpenClonk, http://www.openclonk.org 3 * 4 * Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de/ 5 * Copyright (c) 2013, The OpenClonk Team and contributors 6 * 7 * Distributed under the terms of the ISC license; see accompanying file 8 * "COPYING" for details. 9 * 10 * "Clonk" is a registered trademark of Matthes Bender, used with permission. 11 * See accompanying file "TRADEMARK" for details. 12 * 13 * To redistribute this file separately, substitute the full license texts 14 * for the above references. 15 */ 16 17 /* Player and editor viewports in console */ 18 19 #ifndef INC_C4ConsoleQtViewport 20 #define INC_C4ConsoleQtViewport 21 #ifdef WITH_QT_EDITOR 22 23 #include "C4Include.h" // needed for automoc 24 #include "editor/C4ConsoleGUI.h" // for glew.h 25 #include "editor/C4ConsoleQt.h" 26 27 class C4ConsoleQtViewportView : public QOpenGLWidget 28 { 29 Q_OBJECT 30 31 class C4ConsoleQtViewportDockWidget *dock; 32 class C4Viewport *cvp; 33 34 private: 35 bool IsPlayViewport() const; 36 qreal GetDevicePixelRatio(); 37 void ShowContextMenu(const QPoint &pos); 38 void AddSelectObjectContextEntry(C4Object *obj, QMenu *menu); 39 void UpdateCursor(); 40 41 protected: 42 void focusInEvent(QFocusEvent * event) override; 43 void focusOutEvent(QFocusEvent * event) override; 44 void mouseMoveEvent(QMouseEvent *eventMove) override; 45 void mousePressEvent(QMouseEvent *eventPress) override; 46 void mouseDoubleClickEvent(QMouseEvent *eventPress) override; 47 void mouseReleaseEvent(QMouseEvent *releaseEvent) override; 48 void wheelEvent(QWheelEvent *event) override; 49 void keyPressEvent(QKeyEvent * event) override; 50 void keyReleaseEvent(QKeyEvent * event) override; 51 void enterEvent(QEvent *) override; 52 void leaveEvent(QEvent *) override; 53 54 public: 55 C4ConsoleQtViewportView(class C4ConsoleQtViewportScrollArea *scrollarea); 56 57 // QOpenGLWidget functions 58 void initializeGL() override; 59 void resizeGL(int w, int h) override; 60 void paintGL() override; 61 }; 62 63 class C4ConsoleQtViewportScrollArea : public QAbstractScrollArea 64 { 65 Q_OBJECT 66 67 class C4ConsoleQtViewportDockWidget *dock; 68 class C4Viewport *cvp; 69 int32_t is_updating_scrollbars; 70 71 protected: 72 void scrollContentsBy(int dx, int dy) override; 73 bool viewportEvent(QEvent *e) override; 74 75 public: 76 C4ConsoleQtViewportScrollArea(class C4ConsoleQtViewportDockWidget *dock); 77 78 void setupViewport(QWidget *viewport) override; 79 void ScrollBarsByViewPosition(); 80 void setScrollBarVisibility(bool visible); 81 82 friend C4ConsoleQtViewportView; 83 }; 84 85 class C4ConsoleQtViewportDockWidget : public QDockWidget 86 { 87 Q_OBJECT 88 89 class C4ConsoleQtMainWindow *main_window; 90 class C4ViewportWindow *cvp; 91 C4ConsoleQtViewportView *view; 92 93 protected: 94 void mousePressEvent(QMouseEvent *eventPress) override; 95 void OnActiveChanged(bool active); 96 97 public: 98 C4ConsoleQtViewportDockWidget(class C4ConsoleQtMainWindow *main_window, QMainWindow *parent, class C4ViewportWindow *window); 99 void closeEvent(QCloseEvent * event) override; GetViewportWindow()100 class C4ViewportWindow *GetViewportWindow() const { return cvp; } SetFocus()101 void SetFocus() { raise(); view->setFocus(); } // forward focus to view HasFocus()102 bool HasFocus() { return view->hasFocus(); } // forward focus to view 103 bool event(QEvent *e) override; 104 105 private slots : 106 void TopLevelChanged(bool is_floating); 107 108 friend C4ConsoleQtViewportView; 109 friend C4ConsoleQtViewportScrollArea; 110 }; 111 112 113 #endif // WITH_QT_EDITOR 114 #endif // INC_C4ConsoleQtViewport 115