IProgressObserver.h (1712B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef mozilla_image_IProgressObserver_h 7 #define mozilla_image_IProgressObserver_h 8 9 #include "mozilla/WeakPtr.h" 10 #include "nsISupports.h" 11 #include "nsRect.h" 12 13 namespace mozilla { 14 namespace image { 15 16 /** 17 * An interface for observing changes to image state, as reported by 18 * ProgressTracker. 19 * 20 * This is the ImageLib-internal version of imgINotificationObserver, 21 * essentially, with implementation details that code outside of ImageLib 22 * shouldn't see. 23 * 24 * XXX(seth): It's preferable to avoid adding anything to this interface if 25 * possible. In the long term, it would be ideal to get to a place where we can 26 * just use the imgINotificationObserver interface internally as well. 27 */ 28 class IProgressObserver : public SupportsWeakPtr { 29 public: 30 // Subclasses may or may not be XPCOM classes, so we just require that they 31 // implement AddRef and Release. 32 NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING 33 34 // imgINotificationObserver methods: 35 virtual void Notify(int32_t aType, const nsIntRect* aRect = nullptr) = 0; 36 virtual void OnLoadComplete(bool aLastPart) = 0; 37 38 // Other, internal-only methods: 39 virtual void SetHasImage() = 0; 40 virtual bool NotificationsDeferred() const = 0; 41 virtual void MarkPendingNotify() = 0; 42 virtual void ClearPendingNotify() = 0; 43 44 protected: 45 virtual ~IProgressObserver() = default; 46 }; 47 48 } // namespace image 49 } // namespace mozilla 50 51 #endif // mozilla_image_IProgressObserver_h