From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- widget/cocoa/nsMenuItemIconX.h | 70 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 widget/cocoa/nsMenuItemIconX.h (limited to 'widget/cocoa/nsMenuItemIconX.h') diff --git a/widget/cocoa/nsMenuItemIconX.h b/widget/cocoa/nsMenuItemIconX.h new file mode 100644 index 0000000000..e60e920f9d --- /dev/null +++ b/widget/cocoa/nsMenuItemIconX.h @@ -0,0 +1,70 @@ +/* -*- Mode: C++; tab-width: 2; 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/. */ + +/* + * Retrieves and displays icons in native menu items on Mac OS X. + */ + +#ifndef nsMenuItemIconX_h_ +#define nsMenuItemIconX_h_ + +#import + +#include "mozilla/widget/IconLoader.h" +#include "mozilla/WeakPtr.h" + +class nsIconLoaderService; +class nsIURI; +class nsIContent; +class nsIPrincipal; +class imgRequestProxy; +class nsMenuParentX; +class nsPresContext; + +namespace mozilla { +class ComputedStyle; +} + +class nsMenuItemIconX final : public mozilla::widget::IconLoader::Listener { + public: + class Listener { + public: + virtual void IconUpdated() = 0; + }; + + explicit nsMenuItemIconX(Listener* aListener); + ~nsMenuItemIconX(); + + // SetupIcon starts the icon load. Once the icon has loaded, + // nsMenuParentX::IconUpdated will be called. The icon image needs to be + // retrieved from GetIconImage(). If aContent is an icon-less menuitem, + // GetIconImage() will return nil. If it does have an icon, GetIconImage() + // will return a transparent placeholder icon during the load and the actual + // icon when the load is completed. + void SetupIcon(nsIContent* aContent); + + // Implements this method for mozilla::widget::IconLoader::Listener. + // Called once the icon load is complete. + nsresult OnComplete(imgIContainer* aImage) override; + + // Returns a weak reference to the icon image that is owned by this class. Can + // return nil. + NSImage* GetIconImage() const { return mIconImage; } + + protected: + // Returns whether there should be an icon. + bool StartIconLoad(nsIContent* aContent); + + // GetIconURI returns null if the item should not have any icon. + already_AddRefed GetIconURI(nsIContent* aContent); + + Listener* mListener; // [weak] + RefPtr mComputedStyle; + mozilla::WeakPtr mPresContext; + NSImage* mIconImage = nil; // [strong] + RefPtr mIconLoader; +}; + +#endif // nsMenuItemIconX_h_ -- cgit v1.2.3