xref: /trunk/main/vcl/inc/aqua/salframe.h (revision bde8a4bd)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SV_SALFRAME_H
25 #define _SV_SALFRAME_H
26 
27 #include "vcl/sysdata.hxx"
28 
29 #include "aqua/salmenu.h"
30 #include "aqua/saldata.hxx"
31 #include "aqua/aquavcltypes.h"
32 
33 #include "salframe.hxx"
34 
35 #include <vector>
36 #include <utility>
37 #include <stdexcept>
38 
39 #include <boost/shared_ptr.hpp>
40 
41 class AquaSalGraphics;
42 class AquaSalFrame;
43 class AquaSalTimer;
44 class AquaSalInstance;
45 class AquaSalMenu;
46 class AquaBlinker;
47 
48 typedef struct SalFrame::SalPointerState SalPointerState;
49 
50 // ----------------
51 // - AquaSalFrame -
52 // ----------------
53 
54 class AquaSalFrame : public SalFrame
55 {
56 public:
57 	NSWindow*                       mpNSWindow;             // Cocoa window
58 	NSView*                         mpNSView;               // Cocoa view (actually a custom view)
59     NSMenuItem*                     mpDockMenuEntry;        // entry in the dynamic dock menu
60     NSRect                          maScreenRect;           // for mirroring purposes
61 	AquaSalGraphics*		        mpGraphics; 			// current frame graphics
62 	AquaSalFrame*			        mpParent;				// pointer to parent frame
63  	SystemEnvData			        maSysData;				// system data
64 	int                             mnMinWidth;             // min. client width in pixels
65 	int                             mnMinHeight;            // min. client height in pixels
66 	int                             mnMaxWidth;             // max. client width in pixels
67 	int                             mnMaxHeight;            // max. client height in pixels
68 	NSRect                          maFullScreenRect;       // old window size when in FullScreen
69 	bool					        mbGraphics:1; 			// is Graphics used?
70 	bool                            mbFullScreen:1;         // is Window in FullScreen?
71     bool                            mbShown:1;
72     bool                            mbInitShow:1;
73     bool                            mbPositioned:1;
74     bool                            mbSized:1;
75     bool                            mbPresentation:1;
76 
77     sal_uLong                           mnStyle;
78     unsigned int                    mnStyleMask;            // our style mask from NSWindow creation
79 
80     sal_uLong                           mnLastEventTime;
81     unsigned int                    mnLastModifierFlags;
82     AquaSalMenu*                    mpMenu;
83 
84     SalExtStyle                     mnExtStyle;             // currently document frames are marked this way
85 
86     PointerStyle                    mePointerStyle;         // currently active pointer style
87 
88     NSTrackingRectTag               mnTrackingRectTag;      // used to get enter/leave messages
89 
90     CGMutablePathRef                mrClippingPath;         // used for "shaping"
91     std::vector< CGRect >           maClippingRects;
92 
93     std::list<AquaBlinker*>         maBlinkers;
94 
95     Rectangle                       maInvalidRect;
96 
97     sal_uLong                           mnICOptions;
98 
99     boost::shared_ptr< Timer >      mpActivityTimer; // Timer to prevent system sleep during presentation
100 public:
101     /** Constructor
102 
103         Creates a system window and connects this frame with it.
104 
105         @throws std::runtime_error in case window creation fails
106     */
107     AquaSalFrame( SalFrame* pParent, sal_uLong salFrameStyle );
108 
109     virtual ~AquaSalFrame();
110 
111     virtual SalGraphics*		GetGraphics();
112     virtual void				ReleaseGraphics( SalGraphics* pGraphics );
113     virtual sal_Bool				PostEvent( void* pData );
114     virtual void				SetTitle( const XubString& rTitle );
115     virtual void				SetIcon( sal_uInt16 nIcon );
116     virtual void                SetRepresentedURL( const rtl::OUString& );
117     virtual void                SetMenu( SalMenu* pSalMenu );
118     virtual void                DrawMenuBar();
119     virtual void				Show( sal_Bool bVisible, sal_Bool bNoActivate = sal_False );
120     virtual void				Enable( sal_Bool bEnable );
121     virtual void                SetMinClientSize( long nWidth, long nHeight );
122     virtual void                SetMaxClientSize( long nWidth, long nHeight );
123     virtual void				SetPosSize( long nX, long nY, long nWidth, long nHeight, sal_uInt16 nFlags );
124     virtual void				GetClientSize( long& rWidth, long& rHeight );
125     virtual void				GetWorkArea( Rectangle& rRect );
126     virtual SalFrame*			GetParent() const;
127     virtual void				SetWindowState( const SalFrameState* pState );
128     virtual sal_Bool				GetWindowState( SalFrameState* pState );
129     virtual void				ShowFullScreen( sal_Bool bFullScreen, sal_Int32 nDisplay );
130     virtual void				StartPresentation( sal_Bool bStart );
131     virtual void				SetAlwaysOnTop( sal_Bool bOnTop );
132     virtual void				ToTop( sal_uInt16 nFlags );
133     virtual void				SetPointer( PointerStyle ePointerStyle );
134     virtual void				CaptureMouse( sal_Bool bMouse );
135     virtual void				SetPointerPos( long nX, long nY );
136     virtual void				Flush( void );
137     virtual void				Flush( const Rectangle& );
138     virtual void				Sync();
139     virtual void				SetInputContext( SalInputContext* pContext );
140     virtual void				EndExtTextInput( sal_uInt16 nFlags );
141     virtual String				GetKeyName( sal_uInt16 nKeyCode );
142     virtual String				GetSymbolKeyName( const XubString& rFontName, sal_uInt16 nKeyCode );
143     virtual sal_Bool                MapUnicodeToKeyCode( sal_Unicode aUnicode, LanguageType aLangType, KeyCode& rKeyCode );
144     virtual LanguageType		GetInputLanguage();
145     virtual SalBitmap*			SnapShot();
146     virtual void				UpdateSettings( AllSettings& rSettings );
147     virtual void				Beep( SoundType eSoundType );
148     virtual const SystemEnvData*	GetSystemData() const;
149     virtual SalPointerState		GetPointerState();
150     virtual void				SetParent( SalFrame* pNewParent );
151     virtual bool				SetPluginParent( SystemParentData* pNewParent );
152     virtual void                SetExtendedFrameStyle( SalExtStyle );
153     virtual void                SetBackgroundBitmap( SalBitmap* );
154     virtual void                SetScreenNumber(unsigned int);
155 
156     // shaped system windows
157     // set clip region to none (-> rectangular windows, normal state)
158     virtual void ResetClipRegion();
159     // start setting the clipregion consisting of nRects rectangles
160     virtual void BeginSetClipRegion( sal_uLong nRects );
161     // add a rectangle to the clip region
162     virtual void UnionClipRegion( long nX, long nY, long nWidth, long nHeight );
163     // done setting up the clipregion
164     virtual void EndSetClipRegion();
165 
166     virtual void SetClientSize( long nWidth, long nHeight );
167 
168     void UpdateFrameGeometry();
169 
170     // trigger painting of the window
171     void SendPaintEvent( const Rectangle* pRect = NULL );
172 
173     static bool isAlive( const AquaSalFrame* pFrame )
174     { return GetSalData()->maFrameCheck.find( pFrame ) != GetSalData()->maFrameCheck.end(); }
175 
176     static AquaSalFrame* GetCaptureFrame() { return s_pCaptureFrame; }
177 
178     NSWindow* getNSWindow() const { return mpNSWindow; }
179     NSView* getNSView() const { return mpNSView; }
180     unsigned int getStyleMask() const { return mnStyleMask; }
181 
182     void getResolution( long& o_rDPIX, long& o_rDPIY );
183 
184     // actually the follwing methods do the same thing: flipping y coordinates
185     // but having two of them makes clearer what the coordinate system
186     // is supposed to be before and after
187     void VCLToCocoa( NSRect& io_rRect, bool bRelativeToScreen = true );
188     void CocoaToVCL( NSRect& io_rRect, bool bRelativeToScreen = true );
189 
190     void VCLToCocoa( NSPoint& io_rPoint, bool bRelativeToScreen = true );
191     void CocoaToVCL( NSPoint& io_Point, bool bRelativeToScreen = true );
192 
193     NSCursor* getCurrentCursor() const;
194 
195     CGMutablePathRef getClipPath() const { return mrClippingPath; }
196 
197     // called by VCL_NSApplication to indicate screen settings have changed
198     void screenParametersChanged();
199 
200  private: // methods
201     /** do things on initial show (like centering on parent or on screen)
202     */
203     void initShow();
204 
205     void initWindowAndView();
206 
207  private: // data
208     static AquaSalFrame*                   s_pCaptureFrame;
209 
210     // make AquaSalFrame non copyable
211     AquaSalFrame( const AquaSalFrame& );
212     AquaSalFrame& operator=(const AquaSalFrame&);
213 };
214 
215 #endif // _SV_SALFRAME_H
216