0031067: Visualization - Aspect_Window::DoResize() should be a non-const method
[occt.git] / samples / qt / Common / src / OcctWindow.h
CommitLineData
de6273a3 1#ifndef OcctWindow_H
2#define OcctWindow_H
3
4#include <Aspect_Window.hxx>
5
55a40de8 6#include <Standard_WarningsDisable.hxx>
de6273a3 7#include <QWidget>
55a40de8 8#include <Standard_WarningsRestore.hxx>
9
de6273a3 10class OcctWindow;
11
12/*
13 OcctWindow class implements Aspect_Window interface using Qt API
14 as a platform-independent source of window geometry information.
15 A similar class should be used instead of platform-specific OCCT
16 classes (WNT_Window, Xw_Window) in any Qt 5 application using OCCT
17 3D visualization.
18
19 With Qt 5, the requirement for a Qt-based application to rely fully
20 on Qt public API and stop using platform-specific APIs looks mandatory.
21 An example of this is changed QWidget event sequence: when a widget is
22 first shown on the screen, a resize event is generated before the
23 underlying native window is resized correctly, however the QWidget instance
24 already holds correct size information at that moment. The OCCT classes
25 acting as a source of window geometry for V3d_View class (WNT_Window, Xw_Window)
26 are no longer compatible with changed Qt behavior because they rely on
27 platform-specific API that cannot return correct window geometry information
28 in some cases. A reasonable solution is to provide a Qt-based implementation
29 of Aspect_Window interface at application level.
30*/
31
32class OcctWindow : public Aspect_Window
33{
34public:
35
36 //! Constructor
37 OcctWindow( QWidget* theWidget, const Quantity_NameOfColor theBackColor = Quantity_NOC_MATRAGRAY );
38
39 virtual void Destroy();
40
41 //! Destructor
42 ~OcctWindow()
43 {
44 Destroy();
45 }
46
47 //! Returns native Window handle
48 virtual Aspect_Drawable NativeHandle() const;
49
50 //! Returns parent of native Window handle.
51 virtual Aspect_Drawable NativeParentHandle() const;
52
53 //! Applies the resizing to the window <me>
1a5007a9 54 virtual Aspect_TypeOfResize DoResize();
de6273a3 55
56 //! Returns True if the window <me> is opened
57 //! and False if the window is closed.
58 virtual Standard_Boolean IsMapped() const;
59
60 //! Apply the mapping change to the window <me>
61 //! and returns TRUE if the window is mapped at screen.
62 virtual Standard_Boolean DoMapping() const { return Standard_True; }
63
64 //! Opens the window <me>.
65 virtual void Map() const;
66
67 //! Closes the window <me>.
68 virtual void Unmap() const;
69
70 virtual void Position( Standard_Integer& theX1, Standard_Integer& theY1,
71 Standard_Integer& theX2, Standard_Integer& theY2 ) const;
72
73 //! Returns The Window RATIO equal to the physical
74 //! WIDTH/HEIGHT dimensions.
ee2be2a8 75 virtual Standard_Real Ratio() const;
de6273a3 76
77 virtual void Size( Standard_Integer& theWidth, Standard_Integer& theHeight ) const;
78
79 virtual Aspect_FBConfig NativeFBConfig() const Standard_OVERRIDE { return NULL; }
80
92efcf78 81 DEFINE_STANDARD_RTTIEXT(OcctWindow,Aspect_Window)
de6273a3 82
83protected:
84 Standard_Integer myXLeft;
85 Standard_Integer myYTop;
86 Standard_Integer myXRight;
87 Standard_Integer myYBottom;
88 QWidget* myWidget;
89};
90
91
92#endif // OcctWindow_H