Blame image/IProgressObserver.h

Packit f0b94e
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
Packit f0b94e
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit f0b94e
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit f0b94e
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit f0b94e
Packit f0b94e
#ifndef mozilla_image_IProgressObserver_h
Packit f0b94e
#define mozilla_image_IProgressObserver_h
Packit f0b94e
Packit f0b94e
#include "mozilla/WeakPtr.h"
Packit f0b94e
#include "nsISupports.h"
Packit f0b94e
#include "nsRect.h"
Packit f0b94e
Packit f0b94e
class nsIEventTarget;
Packit f0b94e
Packit f0b94e
namespace mozilla {
Packit f0b94e
namespace image {
Packit f0b94e
Packit f0b94e
/**
Packit f0b94e
 * An interface for observing changes to image state, as reported by
Packit f0b94e
 * ProgressTracker.
Packit f0b94e
 *
Packit f0b94e
 * This is the ImageLib-internal version of imgINotificationObserver,
Packit f0b94e
 * essentially, with implementation details that code outside of ImageLib
Packit f0b94e
 * shouldn't see.
Packit f0b94e
 *
Packit f0b94e
 * XXX(seth): It's preferable to avoid adding anything to this interface if
Packit f0b94e
 * possible.  In the long term, it would be ideal to get to a place where we can
Packit f0b94e
 * just use the imgINotificationObserver interface internally as well.
Packit f0b94e
 */
Packit f0b94e
class IProgressObserver : public SupportsWeakPtr<IProgressObserver> {
Packit f0b94e
 public:
Packit f0b94e
  MOZ_DECLARE_WEAKREFERENCE_TYPENAME(IProgressObserver)
Packit f0b94e
Packit f0b94e
  // Subclasses may or may not be XPCOM classes, so we just require that they
Packit f0b94e
  // implement AddRef and Release.
Packit f0b94e
  NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING
Packit f0b94e
Packit f0b94e
  // imgINotificationObserver methods:
Packit f0b94e
  virtual void Notify(int32_t aType, const nsIntRect* aRect = nullptr) = 0;
Packit f0b94e
  virtual void OnLoadComplete(bool aLastPart) = 0;
Packit f0b94e
Packit f0b94e
  // Other, internal-only methods:
Packit f0b94e
  virtual void SetHasImage() = 0;
Packit f0b94e
  virtual bool NotificationsDeferred() const = 0;
Packit f0b94e
  virtual void MarkPendingNotify() = 0;
Packit f0b94e
  virtual void ClearPendingNotify() = 0;
Packit f0b94e
Packit f0b94e
  virtual already_AddRefed<nsIEventTarget> GetEventTarget() const {
Packit f0b94e
    return nullptr;
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
 protected:
Packit f0b94e
  virtual ~IProgressObserver() {}
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
}  // namespace image
Packit f0b94e
}  // namespace mozilla
Packit f0b94e
Packit f0b94e
#endif  // mozilla_image_IProgressObserver_h