summaryrefslogtreecommitdiff
path: root/widget/cocoa/nsCocoaWindow.h
diff options
context:
space:
mode:
Diffstat (limited to 'widget/cocoa/nsCocoaWindow.h')
-rw-r--r--widget/cocoa/nsCocoaWindow.h426
1 files changed, 0 insertions, 426 deletions
diff --git a/widget/cocoa/nsCocoaWindow.h b/widget/cocoa/nsCocoaWindow.h
deleted file mode 100644
index 1913696b8c..0000000000
--- a/widget/cocoa/nsCocoaWindow.h
+++ /dev/null
@@ -1,426 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsCocoaWindow_h_
-#define nsCocoaWindow_h_
-
-#undef DARWIN
-
-#import <Cocoa/Cocoa.h>
-
-#include "mozilla/RefPtr.h"
-#include "nsBaseWidget.h"
-#include "nsPIWidgetCocoa.h"
-#include "nsCocoaUtils.h"
-
-class nsCocoaWindow;
-class nsChildView;
-class nsMenuBarX;
-@class ChildView;
-
-typedef struct _nsCocoaWindowList {
- _nsCocoaWindowList() : prev(nullptr), window(nullptr) {}
- struct _nsCocoaWindowList *prev;
- nsCocoaWindow *window; // Weak
-} nsCocoaWindowList;
-
-// NSWindow subclass that is the base class for all of our own window classes.
-// Among other things, this class handles the storage of those settings that
-// need to be persisted across window destruction and reconstruction, i.e. when
-// switching to and from fullscreen mode.
-// We don't save shadow, transparency mode or background color because it's not
-// worth the hassle - Gecko will reset them anyway as soon as the window is
-// resized.
-@interface BaseWindow : NSWindow
-{
- // Data Storage
- NSMutableDictionary* mState;
- BOOL mDrawsIntoWindowFrame;
- NSColor* mActiveTitlebarColor;
- NSColor* mInactiveTitlebarColor;
-
- // Shadow
- BOOL mScheduledShadowInvalidation;
-
- // Invalidation disabling
- BOOL mDisabledNeedsDisplay;
-
- // DPI cache. Getting the physical screen size (CGDisplayScreenSize)
- // is ridiculously slow, so we cache it in the toplevel window for all
- // descendants to use.
- float mDPI;
-
- NSTrackingArea* mTrackingArea;
-
- NSRect mDirtyRect;
-
- BOOL mBeingShown;
- BOOL mDrawTitle;
- BOOL mBrightTitlebarForeground;
- BOOL mUseMenuStyle;
-}
-
-- (void)importState:(NSDictionary*)aState;
-- (NSMutableDictionary*)exportState;
-- (void)setDrawsContentsIntoWindowFrame:(BOOL)aState;
-- (BOOL)drawsContentsIntoWindowFrame;
-- (void)setTitlebarColor:(NSColor*)aColor forActiveWindow:(BOOL)aActive;
-- (NSColor*)titlebarColorForActiveWindow:(BOOL)aActive;
-
-- (void)deferredInvalidateShadow;
-- (void)invalidateShadow;
-- (float)getDPI;
-
-- (void)mouseEntered:(NSEvent*)aEvent;
-- (void)mouseExited:(NSEvent*)aEvent;
-- (void)mouseMoved:(NSEvent*)aEvent;
-- (void)updateTrackingArea;
-- (NSView*)trackingAreaView;
-
-- (void)setBeingShown:(BOOL)aValue;
-- (BOOL)isBeingShown;
-- (BOOL)isVisibleOrBeingShown;
-
-- (ChildView*)mainChildView;
-
-- (NSArray*)titlebarControls;
-
-- (void)setWantsTitleDrawn:(BOOL)aDrawTitle;
-- (BOOL)wantsTitleDrawn;
-
-- (void)setUseBrightTitlebarForeground:(BOOL)aBrightForeground;
-- (BOOL)useBrightTitlebarForeground;
-
-- (void)disableSetNeedsDisplay;
-- (void)enableSetNeedsDisplay;
-
-- (NSRect)getAndResetNativeDirtyRect;
-
-- (void)setUseMenuStyle:(BOOL)aValue;
-
-@end
-
-@interface NSWindow (Undocumented)
-
-// If a window has been explicitly removed from the "window cache" (to
-// deactivate it), it's sometimes necessary to "reset" it to reactivate it
-// (and put it back in the "window cache"). One way to do this, which Apple
-// often uses, is to set the "window number" to '-1' and then back to its
-// original value.
-- (void)_setWindowNumber:(NSInteger)aNumber;
-
-// If we set the window's stylemask to be textured, the corners on the bottom of
-// the window are rounded by default. We use this private method to make
-// the corners square again, a la Safari. Starting with 10.7, all windows have
-// rounded bottom corners, so this call doesn't have any effect there.
-- (void)setBottomCornerRounded:(BOOL)rounded;
-- (BOOL)bottomCornerRounded;
-
-// Present in the same form on OS X since at least OS X 10.5.
-- (NSRect)contentRectForFrameRect:(NSRect)windowFrame styleMask:(NSUInteger)windowStyle;
-- (NSRect)frameRectForContentRect:(NSRect)windowContentRect styleMask:(NSUInteger)windowStyle;
-
-// Present since at least OS X 10.5. The OS calls this method on NSWindow
-// (and its subclasses) to find out which NSFrameView subclass to instantiate
-// to create its "frame view".
-+ (Class)frameViewClassForStyleMask:(NSUInteger)styleMask;
-
-@end
-
-@interface PopupWindow : BaseWindow
-{
-@private
- BOOL mIsContextMenu;
-}
-
-- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask
- backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation;
-- (BOOL)isContextMenu;
-- (void)setIsContextMenu:(BOOL)flag;
-- (BOOL)canBecomeMainWindow;
-
-@end
-
-@interface BorderlessWindow : BaseWindow
-{
-}
-
-- (BOOL)canBecomeKeyWindow;
-- (BOOL)canBecomeMainWindow;
-
-@end
-
-@interface WindowDelegate : NSObject <NSWindowDelegate>
-{
- nsCocoaWindow* mGeckoWindow; // [WEAK] (we are owned by the window)
- // Used to avoid duplication when we send NS_ACTIVATE and
- // NS_DEACTIVATE to Gecko for toplevel widgets. Starts out
- // false.
- bool mToplevelActiveState;
- BOOL mHasEverBeenZoomed;
-}
-+ (void)paintMenubarForWindow:(NSWindow*)aWindow;
-- (id)initWithGeckoWindow:(nsCocoaWindow*)geckoWind;
-- (void)windowDidResize:(NSNotification*)aNotification;
-- (nsCocoaWindow*)geckoWidget;
-- (bool)toplevelActiveState;
-- (void)sendToplevelActivateEvents;
-- (void)sendToplevelDeactivateEvents;
-@end
-
-@class ToolbarWindow;
-
-// NSColor subclass that allows us to draw separate colors both in the titlebar
-// and for background of the window.
-@interface TitlebarAndBackgroundColor : NSColor
-{
- ToolbarWindow *mWindow; // [WEAK] (we are owned by the window)
-}
-
-- (id)initWithWindow:(ToolbarWindow*)aWindow;
-
-@end
-
-// NSWindow subclass for handling windows with toolbars.
-@interface ToolbarWindow : BaseWindow
-{
- TitlebarAndBackgroundColor *mColor; // strong
- CGFloat mUnifiedToolbarHeight;
- NSColor *mBackgroundColor; // strong
- NSView *mTitlebarView; // strong
- NSRect mWindowButtonsRect;
- NSRect mFullScreenButtonRect;
-}
-// Pass nil here to get the default appearance.
-- (void)setTitlebarColor:(NSColor*)aColor forActiveWindow:(BOOL)aActive;
-- (void)setUnifiedToolbarHeight:(CGFloat)aHeight;
-- (CGFloat)unifiedToolbarHeight;
-- (CGFloat)titlebarHeight;
-- (NSRect)titlebarRect;
-- (void)setTitlebarNeedsDisplayInRect:(NSRect)aRect sync:(BOOL)aSync;
-- (void)setTitlebarNeedsDisplayInRect:(NSRect)aRect;
-- (void)setDrawsContentsIntoWindowFrame:(BOOL)aState;
-- (void)setSheetAttachmentPosition:(CGFloat)aY;
-- (void)placeWindowButtons:(NSRect)aRect;
-- (void)placeFullScreenButton:(NSRect)aRect;
-- (NSPoint)windowButtonsPositionWithDefaultPosition:(NSPoint)aDefaultPosition;
-- (NSPoint)fullScreenButtonPositionWithDefaultPosition:(NSPoint)aDefaultPosition;
-- (void)setTemporaryBackgroundColor;
-- (void)restoreBackgroundColor;
-@end
-
-class nsCocoaWindow : public nsBaseWidget, public nsPIWidgetCocoa
-{
-private:
- typedef nsBaseWidget Inherited;
-
-public:
-
- nsCocoaWindow();
-
- NS_DECL_ISUPPORTS_INHERITED
- NS_DECL_NSPIWIDGETCOCOA
-
- virtual MOZ_MUST_USE nsresult Create(nsIWidget* aParent,
- nsNativeWidget aNativeParent,
- const DesktopIntRect& aRect,
- nsWidgetInitData* aInitData = nullptr)
- override;
-
- virtual MOZ_MUST_USE nsresult Create(nsIWidget* aParent,
- nsNativeWidget aNativeParent,
- const LayoutDeviceIntRect& aRect,
- nsWidgetInitData* aInitData = nullptr)
- override;
-
- virtual void Destroy() override;
-
- NS_IMETHOD Show(bool aState) override;
- virtual nsIWidget* GetSheetWindowParent(void) override;
- NS_IMETHOD Enable(bool aState) override;
- virtual bool IsEnabled() const override;
- virtual void SetModal(bool aState) override;
- virtual void SetFakeModal(bool aState) override;
- virtual bool IsRunningAppModal() override;
- virtual bool IsVisible() const override;
- NS_IMETHOD SetFocus(bool aState=false) override;
- virtual LayoutDeviceIntPoint WidgetToScreenOffset() override;
- virtual LayoutDeviceIntPoint GetClientOffset() override;
- virtual LayoutDeviceIntSize
- ClientToWindowSize(const LayoutDeviceIntSize& aClientSize) override;
-
- virtual void* GetNativeData(uint32_t aDataType) override;
-
- virtual void ConstrainPosition(bool aAllowSlop,
- int32_t *aX, int32_t *aY) override;
- virtual void SetSizeConstraints(const SizeConstraints& aConstraints) override;
- NS_IMETHOD Move(double aX, double aY) override;
- virtual void SetSizeMode(nsSizeMode aMode) override;
- NS_IMETHOD HideWindowChrome(bool aShouldHide) override;
-
- void EnteredFullScreen(bool aFullScreen, bool aNativeMode = true);
- virtual bool PrepareForFullscreenTransition(nsISupports** aData) override;
- virtual void PerformFullscreenTransition(FullscreenTransitionStage aStage,
- uint16_t aDuration,
- nsISupports* aData,
- nsIRunnable* aCallback) override;
- virtual nsresult MakeFullScreen(
- bool aFullScreen, nsIScreen* aTargetScreen = nullptr) override final;
- NS_IMETHOD MakeFullScreenWithNativeTransition(
- bool aFullScreen, nsIScreen* aTargetScreen = nullptr) override final;
- NSAnimation* FullscreenTransitionAnimation() const { return mFullscreenTransitionAnimation; }
- void ReleaseFullscreenTransitionAnimation()
- {
- MOZ_ASSERT(mFullscreenTransitionAnimation,
- "Should only be called when there is animation");
- [mFullscreenTransitionAnimation release];
- mFullscreenTransitionAnimation = nil;
- }
-
- NS_IMETHOD Resize(double aWidth, double aHeight, bool aRepaint) override;
- NS_IMETHOD Resize(double aX, double aY, double aWidth, double aHeight, bool aRepaint) override;
- virtual LayoutDeviceIntRect GetClientBounds() override;
- virtual LayoutDeviceIntRect GetScreenBounds() override;
- void ReportMoveEvent();
- void ReportSizeEvent();
- NS_IMETHOD SetCursor(nsCursor aCursor) override;
- NS_IMETHOD SetCursor(imgIContainer* aCursor, uint32_t aHotspotX, uint32_t aHotspotY) override;
-
- CGFloat BackingScaleFactor();
- void BackingScaleFactorChanged();
- virtual double GetDefaultScaleInternal() override;
- virtual int32_t RoundsWidgetCoordinatesTo() override;
-
- mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScale() final {
- return mozilla::DesktopToLayoutDeviceScale(BackingScaleFactor());
- }
-
- NS_IMETHOD SetTitle(const nsAString& aTitle) override;
-
- NS_IMETHOD Invalidate(const LayoutDeviceIntRect& aRect) override;
- virtual nsresult ConfigureChildren(const nsTArray<Configuration>& aConfigurations) override;
- virtual LayerManager* GetLayerManager(PLayerTransactionChild* aShadowManager = nullptr,
- LayersBackend aBackendHint = mozilla::layers::LayersBackend::LAYERS_NONE,
- LayerManagerPersistence aPersistence = LAYER_MANAGER_CURRENT) override;
- NS_IMETHOD DispatchEvent(mozilla::WidgetGUIEvent* aEvent,
- nsEventStatus& aStatus) override;
- virtual void CaptureRollupEvents(nsIRollupListener * aListener,
- bool aDoCapture) override;
- NS_IMETHOD GetAttention(int32_t aCycleCount) override;
- virtual bool HasPendingInputEvent() override;
- virtual nsTransparencyMode GetTransparencyMode() override;
- virtual void SetTransparencyMode(nsTransparencyMode aMode) override;
- virtual void SetWindowShadowStyle(int32_t aStyle) override;
- virtual void SetShowsToolbarButton(bool aShow) override;
- virtual void SetShowsFullScreenButton(bool aShow) override;
- virtual void SetWindowAnimationType(WindowAnimationType aType) override;
- virtual void SetDrawsTitle(bool aDrawTitle) override;
- virtual void SetUseBrightTitlebarForeground(bool aBrightForeground) override;
- NS_IMETHOD SetNonClientMargins(LayoutDeviceIntMargin& aMargins) override;
- virtual void SetWindowTitlebarColor(nscolor aColor, bool aActive) override;
- virtual void SetDrawsInTitlebar(bool aState) override;
- virtual void UpdateThemeGeometries(const nsTArray<ThemeGeometry>& aThemeGeometries) override;
- virtual nsresult SynthesizeNativeMouseEvent(LayoutDeviceIntPoint aPoint,
- uint32_t aNativeMessage,
- uint32_t aModifierFlags,
- nsIObserver* aObserver) override;
-
- void DispatchSizeModeEvent();
-
- // be notified that a some form of drag event needs to go into Gecko
- virtual bool DragEvent(unsigned int aMessage, mozilla::gfx::Point aMouseGlobal, UInt16 aKeyModifiers);
-
- bool HasModalDescendents() { return mNumModalDescendents > 0; }
- NSWindow *GetCocoaWindow() { return mWindow; }
-
- void SetMenuBar(nsMenuBarX* aMenuBar);
- nsMenuBarX *GetMenuBar();
-
- NS_IMETHOD_(void) SetInputContext(
- const InputContext& aContext,
- const InputContextAction& aAction) override;
- NS_IMETHOD_(InputContext) GetInputContext() override
- {
- return mInputContext;
- }
- NS_IMETHOD_(bool) ExecuteNativeKeyBinding(
- NativeKeyBindingsType aType,
- const mozilla::WidgetKeyboardEvent& aEvent,
- DoCommandCallback aCallback,
- void* aCallbackData) override;
-
- void SetPopupWindowLevel();
-
-protected:
- virtual ~nsCocoaWindow();
-
- nsresult CreateNativeWindow(const NSRect &aRect,
- nsBorderStyle aBorderStyle,
- bool aRectIsFrameRect);
- nsresult CreatePopupContentView(const LayoutDeviceIntRect &aRect,
- nsWidgetInitData* aInitData);
- void DestroyNativeWindow();
- void AdjustWindowShadow();
- void SetWindowBackgroundBlur();
- void UpdateBounds();
-
- nsresult DoResize(double aX, double aY, double aWidth, double aHeight,
- bool aRepaint, bool aConstrainToCurrentScreen);
-
- inline bool ShouldToggleNativeFullscreen(bool aFullScreen,
- bool aUseSystemTransition);
- nsresult DoMakeFullScreen(bool aFullScreen, bool aUseSystemTransition);
-
- virtual already_AddRefed<nsIWidget>
- AllocateChildPopupWidget() override
- {
- static NS_DEFINE_IID(kCPopUpCID, NS_POPUP_CID);
- nsCOMPtr<nsIWidget> widget = do_CreateInstance(kCPopUpCID);
- return widget.forget();
- }
-
- nsIWidget* mParent; // if we're a popup, this is our parent [WEAK]
- nsIWidget* mAncestorLink; // link to traverse ancestors [WEAK]
- BaseWindow* mWindow; // our cocoa window [STRONG]
- WindowDelegate* mDelegate; // our delegate for processing window msgs [STRONG]
- RefPtr<nsMenuBarX> mMenuBar;
- NSWindow* mSheetWindowParent; // if this is a sheet, this is the NSWindow it's attached to
- nsChildView* mPopupContentView; // if this is a popup, this is its content widget
- // if this is a toplevel window, and there is any ongoing fullscreen
- // transition, it is the animation object.
- NSAnimation* mFullscreenTransitionAnimation;
- int32_t mShadowStyle;
-
- CGFloat mBackingScaleFactor;
-
- WindowAnimationType mAnimationType;
-
- bool mWindowMadeHere; // true if we created the window, false for embedding
- bool mSheetNeedsShow; // if this is a sheet, are we waiting to be shown?
- // this is used for sibling sheet contention only
- bool mInFullScreenMode;
- bool mInFullScreenTransition; // true from the request to enter/exit fullscreen
- // (MakeFullScreen() call) to EnteredFullScreen()
- bool mModal;
- bool mFakeModal;
-
- // Only true on 10.7+ if SetShowsFullScreenButton(true) is called.
- bool mSupportsNativeFullScreen;
- // Whether we are currently using native fullscreen. It could be false because
- // we are in the DOM fullscreen where we do not use the native fullscreen.
- bool mInNativeFullScreenMode;
-
- bool mIsAnimationSuppressed;
-
- bool mInReportMoveEvent; // true if in a call to ReportMoveEvent().
- bool mInResize; // true if in a call to DoResize().
-
- bool mAlwaysOnTop;
-
- int32_t mNumModalDescendents;
- InputContext mInputContext;
-};
-
-#endif // nsCocoaWindow_h_