Files
tubestation/widget/uikit/nsWindow.h
serge-sans-paille bf3516e81e Bug 1964489 - Avoid duplication in NS_DECLARE_STATIC_IID_ACCESSOR / NS_DEFINE_STATIC_IID_ACCESSOR r=nika,necko-reviewers,media-playback-reviewers,places-reviewers,win-reviewers,dom-storage-reviewers,xpcom-reviewers,gstoll,janv,emilio,padenot,valentin,asuth
In modern C++, static constexpr member variables are automatically
inline (aka weak) so the template trick is not needed. This also avoid
duplication and reduces the amount of parsed code. No impact on
generated binary (actually: smaller debuginfo, close to identical
binary).

Differential Revision: https://phabricator.services.mozilla.com/D247825
2025-05-08 08:05:51 +00:00

147 lines
4.5 KiB
Objective-C

/* -*- 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 NSWINDOW_H_
#define NSWINDOW_H_
#include <CoreFoundation/CoreFoundation.h>
#include "mozilla/widget/IOSView.h"
#include "nsBaseWidget.h"
#include "gfxPoint.h"
#include "nsTArray.h"
#ifdef __OBJC__
@class ChildView;
#else
typedef struct objc_object ChildView;
#endif
namespace mozilla::widget {
class EventDispatcher;
class TextInputHandler;
} // namespace mozilla::widget
#define NS_WINDOW_IID \
{0x5e6fd559, 0xb3f9, 0x40c9, {0x92, 0xd1, 0xef, 0x80, 0xb4, 0xf9, 0x69, 0xe9}}
class nsWindow final : public nsBaseWidget {
public:
nsWindow();
NS_INLINE_DECL_STATIC_IID(NS_WINDOW_IID)
NS_DECL_ISUPPORTS_INHERITED
//
// nsIWidget
//
[[nodiscard]] nsresult Create(
nsIWidget* aParent, const LayoutDeviceIntRect& aRect,
mozilla::widget::InitData* aInitData = nullptr) override;
void Destroy() override;
void Show(bool aState) override;
void Enable(bool aState) override {}
bool IsEnabled() const override { return true; }
bool IsVisible() const override { return mVisible; }
void SetFocus(Raise, mozilla::dom::CallerType aCallerType) override;
LayoutDeviceIntPoint WidgetToScreenOffset() override;
void SetBackgroundColor(const nscolor& aColor) override;
void* GetNativeData(uint32_t aDataType) override;
void Move(double aX, double aY) override;
nsSizeMode SizeMode() override { return mSizeMode; }
void SetSizeMode(nsSizeMode aMode) override;
void EnteredFullScreen(bool aFullScreen);
void Resize(double aWidth, double aHeight, bool aRepaint) override;
void Resize(double aX, double aY, double aWidth, double aHeight,
bool aRepaint) override;
LayoutDeviceIntRect GetScreenBounds() override;
void ReportMoveEvent();
void ReportSizeEvent();
void ReportSizeModeEvent(nsSizeMode aMode);
CGFloat BackingScaleFactor();
void BackingScaleFactorChanged();
float GetDPI() override {
// XXX: terrible
return 326.0f;
}
double GetDefaultScaleInternal() override { return BackingScaleFactor(); }
int32_t RoundsWidgetCoordinatesTo() override;
nsresult SetTitle(const nsAString& aTitle) override { return NS_OK; }
void Invalidate(const LayoutDeviceIntRect& aRect) override;
nsresult DispatchEvent(mozilla::WidgetGUIEvent* aEvent,
nsEventStatus& aStatus) override;
void WillPaintWindow();
bool PaintWindow(LayoutDeviceIntRegion aRegion);
bool HasModalDescendents() { return false; }
// virtual nsresult
// NotifyIME(const IMENotification& aIMENotification) override;
void SetInputContext(const InputContext& aContext,
const InputContextAction& aAction) override;
InputContext GetInputContext() override;
TextEventDispatcherListener* GetNativeTextEventDispatcherListener() override;
mozilla::widget::TextInputHandler* GetTextInputHandler() const {
return mTextInputHandler;
}
bool IsVirtualKeyboardDisabled() const;
/*
virtual bool ExecuteNativeKeyBinding(
NativeKeyBindingsType aType,
const mozilla::WidgetKeyboardEvent& aEvent,
DoCommandCallback aCallback,
void* aCallbackData) override;
*/
mozilla::widget::EventDispatcher* GetEventDispatcher() const;
static already_AddRefed<nsWindow> From(nsPIDOMWindowOuter* aDOMWindow);
static already_AddRefed<nsWindow> From(nsIWidget* aWidget);
void SetIOSView(already_AddRefed<mozilla::widget::IOSView>&& aView) {
mIOSView = aView;
}
mozilla::widget::IOSView* GetIOSView() const { return mIOSView; }
protected:
virtual ~nsWindow();
void BringToFront();
nsWindow* FindTopLevel();
bool IsTopLevel();
nsresult GetCurrentOffset(uint32_t& aOffset, uint32_t& aLength);
nsresult DeleteRange(int aOffset, int aLen);
void TearDownView();
ChildView* mNativeView;
bool mVisible;
nsSizeMode mSizeMode;
nsTArray<nsWindow*> mChildren;
nsWindow* mParent;
mozilla::widget::InputContext mInputContext;
RefPtr<mozilla::widget::TextInputHandler> mTextInputHandler;
RefPtr<mozilla::widget::IOSView> mIOSView;
void OnSizeChanged(const mozilla::gfx::IntSize& aSize);
static void DumpWindows();
static void DumpWindows(const nsTArray<nsWindow*>& wins, int indent = 0);
static void LogWindow(nsWindow* win, int index, int indent);
};
#endif /* NSWINDOW_H_ */