| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _SV_WINDOW_H |
| #define _SV_WINDOW_H |
| |
| #include <vector> |
| #include <vcl/sv.h> |
| #include <vcl/outdev.hxx> |
| #include <vcl/timer.hxx> |
| #ifndef _SV_INPUTCTX_HXX |
| #include <vcl/inputctx.hxx> |
| #endif |
| #ifndef _SV_POINTR_HXX |
| #include <vcl/pointr.hxx> |
| #endif |
| #include <tools/wintypes.hxx> |
| #include <vcl/vclevent.hxx> |
| #include <com/sun/star/uno/Reference.hxx> |
| #include <cppuhelper/weakref.hxx> |
| |
| #include <vcl/salnativewidgets.hxx> |
| |
| #include <list> |
| |
| struct SalPaintEvent; |
| struct ImplDelData; |
| struct ImplAccessibleInfos; |
| |
| class Window; |
| class VirtualDevice; |
| class Cursor; |
| class ImplDevFontList; |
| class ImplFontCache; |
| class VCLXWindow; |
| class SalFrame; |
| class SalObject; |
| |
| |
| namespace com { |
| namespace sun { |
| namespace star { |
| namespace accessibility { |
| class XAccessible; |
| }}}} |
| |
| namespace com { |
| namespace sun { |
| namespace star { |
| namespace rendering { |
| class XCanvas; |
| }}}} |
| |
| namespace com { |
| namespace sun { |
| namespace star { |
| namespace awt { |
| class XWindowPeer; |
| class XWindow; |
| } |
| namespace uno { |
| class Any; |
| class XInterface; |
| } |
| namespace datatransfer { |
| namespace clipboard { |
| class XClipboard; |
| } |
| |
| namespace dnd { |
| class XDropTargetListener; |
| class XDragGestureRecognizer; |
| class XDragSource; |
| class XDropTarget; |
| } } } } } |
| |
| namespace vcl { |
| struct ControlLayoutData; |
| struct ExtWindowImpl; |
| } |
| |
| |
| // -------------- |
| // - Prototypes - |
| // -------------- |
| |
| long ImplWindowFrameProc( Window* pInst, SalFrame* pFrame, sal_uInt16 nEvent, const void* pEvent ); |
| |
| // ----------- |
| // - HitTest - |
| // ----------- |
| |
| #define WINDOW_HITTEST_INSIDE ((sal_uInt16)0x0001) |
| #define WINDOW_HITTEST_TRANSPARENT ((sal_uInt16)0x0002) |
| |
| // --------------- |
| // - ImplWinData - |
| // --------------- |
| |
| struct ImplWinData |
| { |
| UniString* mpExtOldText; |
| sal_uInt16* mpExtOldAttrAry; |
| Rectangle* mpCursorRect; |
| long mnCursorExtWidth; |
| Rectangle* mpFocusRect; |
| Rectangle* mpTrackRect; |
| sal_uInt16 mnTrackFlags; |
| sal_uInt16 mnIsTopWindow; |
| sal_Bool mbMouseOver; // tracks mouse over for native widget paint effect |
| sal_Bool mbEnableNativeWidget; // toggle native widget rendering |
| ::std::list< Window* > |
| maTopWindowChildren; |
| }; |
| |
| // ------------------- |
| // - ImplOverlapData - |
| // ------------------- |
| |
| struct ImplOverlapData |
| { |
| VirtualDevice* mpSaveBackDev; // Gesicherte Hintergrund-Bitmap |
| Region* mpSaveBackRgn; // Gesicherte Region, was invalidiert werden muss |
| Window* mpNextBackWin; // Naechstes Fenster mit Hintergrund-Sicherung |
| sal_uIntPtr mnSaveBackSize; // Groesse Bitmap fuer Hintergrund-Sicherung |
| sal_Bool mbSaveBack; // sal_True: Background sichern |
| sal_uInt8 mnTopLevel; // Level for Overlap-Window |
| }; |
| |
| // ----------------- |
| // - ImplFrameData - |
| // ----------------- |
| |
| struct ImplFrameData |
| { |
| Timer maPaintTimer; // paint timer |
| Timer maResizeTimer; // resize timer |
| InputContext maOldInputContext; // Last set Input Context |
| Window* mpNextFrame; // next frame window |
| Window* mpFirstOverlap; // first overlap window |
| Window* mpFocusWin; // focus window (is also set, when frame doesn't have the focous) |
| Window* mpMouseMoveWin; // last window, where MouseMove() called |
| Window* mpMouseDownWin; // last window, where MouseButtonDown() called |
| Window* mpFirstBackWin; // Erstes Overlap-Window mit Hintergrund-Sicherung |
| ::std::vector<Window *> maOwnerDrawList; // List of system windows with owner draw decoration |
| ImplDevFontList* mpFontList; // Font-List for this frame |
| ImplFontCache* mpFontCache; // Font-Cache for this frame |
| sal_Int32 mnDPIX; // Original Screen Resolution |
| sal_Int32 mnDPIY; // Original Screen Resolution |
| ImplMapRes maMapUnitRes; // for LogicUnitToPixel |
| sal_uIntPtr mnAllSaveBackSize; // Groesse aller Bitmaps fuer Hintergrund-Sicherung |
| sal_uIntPtr mnFocusId; // FocusId for PostUserLink |
| sal_uIntPtr mnMouseMoveId; // MoveId for PostUserLink |
| long mnLastMouseX; // last x mouse position |
| long mnLastMouseY; // last y mouse position |
| long mnBeforeLastMouseX; // last but one x mouse position |
| long mnBeforeLastMouseY; // last but one y mouse position |
| long mnFirstMouseX; // first x mouse position by mousebuttondown |
| long mnFirstMouseY; // first y mouse position by mousebuttondown |
| long mnLastMouseWinX; // last x mouse position, rel. to pMouseMoveWin |
| long mnLastMouseWinY; // last y mouse position, rel. to pMouseMoveWin |
| sal_uInt16 mnModalMode; // frame based modal count (app based makes no sense anymore) |
| sal_uIntPtr mnMouseDownTime; // mouse button down time for double click |
| sal_uInt16 mnClickCount; // mouse click count |
| sal_uInt16 mnFirstMouseCode; // mouse code by mousebuttondown |
| sal_uInt16 mnMouseCode; // mouse code |
| sal_uInt16 mnMouseMode; // mouse mode |
| MapUnit meMapUnit; // last MapUnit for LogicUnitToPixel |
| sal_Bool mbHasFocus; // focus |
| sal_Bool mbInMouseMove; // is MouseMove on stack |
| sal_Bool mbMouseIn; // is Mouse inside the frame |
| sal_Bool mbStartDragCalled; // is command startdrag called |
| sal_Bool mbNeedSysWindow; // set, when FrameSize <= IMPL_MIN_NEEDSYSWIN |
| sal_Bool mbMinimized; // set, when FrameSize <= 0 |
| sal_Bool mbStartFocusState; // FocusState, beim abschicken des Events |
| sal_Bool mbInSysObjFocusHdl; // Innerhalb vom GetFocus-Handler eines SysChilds |
| sal_Bool mbInSysObjToTopHdl; // Innerhalb vom ToTop-Handler eines SysChilds |
| sal_Bool mbSysObjFocus; // Hat ein SysChild den Focus |
| |
| ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDragSource > mxDragSource; |
| ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDropTarget > mxDropTarget; |
| ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDropTargetListener > mxDropTargetListener; |
| ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard > mxClipboard; |
| ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::clipboard::XClipboard > mxSelection; |
| |
| sal_Bool mbInternalDragGestureRecognizer; |
| }; |
| |
| // ----------------------- |
| // - ImplAccessibleInfos - |
| // ----------------------- |
| |
| struct ImplAccessibleInfos |
| { |
| sal_uInt16 nAccessibleRole; |
| String* pAccessibleName; |
| String* pAccessibleDescription; |
| Window* pLabeledByWindow; |
| Window* pLabelForWindow; |
| Window* pMemberOfWindow; |
| |
| ImplAccessibleInfos(); |
| ~ImplAccessibleInfos(); |
| }; |
| |
| |
| // --------------- |
| // - WindowImpl - |
| // --------------- |
| |
| enum AlwaysInputMode { AlwaysInputNone = 0, AlwaysInputEnabled = 1, AlwaysInputDisabled =2 }; |
| |
| class WindowImpl |
| { |
| public: |
| WindowImpl( WindowType ); |
| ~WindowImpl(); |
| |
| ImplWinData* mpWinData; |
| ImplOverlapData* mpOverlapData; |
| ImplFrameData* mpFrameData; |
| SalFrame* mpFrame; |
| SalObject* mpSysObj; |
| Window* mpFrameWindow; |
| Window* mpOverlapWindow; |
| Window* mpBorderWindow; |
| Window* mpClientWindow; |
| Window* mpParent; |
| Window* mpRealParent; |
| Window* mpFirstChild; |
| Window* mpLastChild; |
| Window* mpFirstOverlap; |
| Window* mpLastOverlap; |
| Window* mpPrev; |
| Window* mpNext; |
| Window* mpNextOverlap; |
| Window* mpLastFocusWindow; |
| Window* mpDlgCtrlDownWindow; |
| VclEventListeners maEventListeners; |
| VclEventListeners maChildEventListeners; |
| |
| // The canvas interface for this VCL window. Is persistent after the first GetCanvas() call |
| ::com::sun::star::uno::WeakReference< ::com::sun::star::rendering::XCanvas > mxCanvas; |
| |
| ImplDelData* mpFirstDel; |
| void* mpUserData; |
| vcl::ExtWindowImpl* mpExtImpl; |
| Cursor* mpCursor; |
| Pointer maPointer; |
| Fraction maZoom; |
| XubString maText; |
| Font* mpControlFont; |
| Color maControlForeground; |
| Color maControlBackground; |
| sal_Int32 mnLeftBorder; |
| sal_Int32 mnTopBorder; |
| sal_Int32 mnRightBorder; |
| sal_Int32 mnBottomBorder; |
| long mnX; |
| long mnY; |
| long mnAbsScreenX; |
| Point maPos; |
| rtl::OString maHelpId; |
| rtl::OString maUniqId; |
| XubString maHelpText; |
| XubString maQuickHelpText; |
| InputContext maInputContext; |
| ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > mxWindowPeer; |
| ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > mxAccessible; |
| ImplAccessibleInfos* mpAccessibleInfos; |
| VCLXWindow* mpVCLXWindow; |
| Region maWinRegion; // region to 'shape' the VCL window (frame coordinates) |
| Region maWinClipRegion; // the (clipping) region that finally corresponds to the VCL window (frame coordinates) |
| Region maInvalidateRegion; // region that has to be redrawn (frame coordinates) |
| Region* mpChildClipRegion; // child clip region if CLIPCHILDREN is set (frame coordinates) |
| Region* mpPaintRegion; // only set during Paint() method call (window coordinates) |
| WinBits mnStyle; |
| WinBits mnPrevStyle; |
| WinBits mnExtendedStyle; |
| WinBits mnPrevExtendedStyle; |
| WindowType mnType; |
| ControlPart mnNativeBackground; |
| sal_uInt16 mnWaitCount; |
| sal_uInt16 mnPaintFlags; |
| sal_uInt16 mnGetFocusFlags; |
| sal_uInt16 mnParentClipMode; |
| sal_uInt16 mnActivateMode; |
| sal_uInt16 mnDlgCtrlFlags; |
| sal_uInt16 mnLockCount; |
| AlwaysInputMode meAlwaysInputMode; |
| sal_Bool mbFrame:1, |
| mbBorderWin:1, |
| mbOverlapWin:1, |
| mbSysWin:1, |
| mbDialog:1, |
| mbDockWin:1, |
| mbFloatWin:1, |
| mbPushButton:1, |
| mbVisible:1, |
| mbDisabled:1, |
| mbInputDisabled:1, |
| mbDropDisabled:1, |
| mbNoUpdate:1, |
| mbNoParentUpdate:1, |
| mbActive:1, |
| mbParentActive:1, |
| mbReallyVisible:1, |
| mbReallyShown:1, |
| mbInInitShow:1, |
| mbChildNotify:1, |
| mbChildPtrOverwrite:1, |
| mbNoPtrVisible:1, |
| mbPaintFrame:1, |
| mbInPaint:1, |
| mbMouseMove:1, |
| mbMouseButtonDown:1, |
| mbMouseButtonUp:1, |
| mbKeyInput:1, |
| mbKeyUp:1, |
| mbCommand:1, |
| mbDefPos:1, |
| mbDefSize:1, |
| mbCallMove:1, |
| mbCallResize:1, |
| mbWaitSystemResize:1, |
| mbInitWinClipRegion:1, |
| mbInitChildRegion:1, |
| mbWinRegion:1, |
| mbClipChildren:1, |
| mbClipSiblings:1, |
| mbChildTransparent:1, |
| mbPaintTransparent:1, |
| mbMouseTransparent:1, |
| mbDlgCtrlStart:1, |
| mbFocusVisible:1, |
| mbTrackVisible:1, |
| mbUseNativeFocus:1, |
| mbNativeFocusVisible:1, |
| mbInShowFocus:1, |
| mbInHideFocus:1, |
| mbControlForeground:1, |
| mbControlBackground:1, |
| mbAlwaysOnTop:1, |
| mbCompoundControl:1, |
| mbCompoundControlHasFocus:1, |
| mbPaintDisabled:1, |
| mbAllResize:1, |
| mbInDtor:1, |
| mbExtTextInput:1, |
| mbInFocusHdl:1, |
| mbOverlapVisible:1, |
| mbCreatedWithToolkit:1, |
| mbToolBox:1, |
| mbSplitter:1, |
| mbSuppressAccessibilityEvents:1, |
| mbMenuFloatingWindow:1, |
| mbDrawSelectionBackground:1, |
| mbIsInTaskPaneList:1, |
| mbToolbarFloatingWindow:1, |
| mbCallHandlersDuringInputDisabled:1, |
| mbDisableAccessibleLabelForRelation:1, |
| mbDisableAccessibleLabeledByRelation:1, |
| mbHelpTextDynamic:1, |
| mbFakeFocusSet:1, |
| mbInterceptChildWindowKeyDown:1, |
| mbIsThemingEnabled; |
| |
| ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxDNDListenerContainer; |
| }; |
| |
| // ----------------- |
| // - Hilfsmethoden - |
| // ----------------- |
| |
| long ImplHandleMouseEvent( Window* pWindow, sal_uInt16 nSVEvent, sal_Bool bMouseLeave, |
| long nX, long nY, sal_uIntPtr nMsgTime, |
| sal_uInt16 nCode, sal_uInt16 nMode ); |
| void ImplHandleResize( Window* pWindow, long nNewWidth, long nNewHeight ); |
| |
| #endif // _SV_WINDOW_H |