/* 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 WINDOWS_UI_OVERLAY_IMAGE_H_ #define WINDOWS_UI_OVERLAY_IMAGE_H_ #include #include #include #include #include #include "mozilla/RefPtr.h" #include "nsISupportsImpl.h" #include "nsWindowsHelpers.h" namespace mozilla { /** * Displays an overlay image on top of a UI Automation element. */ class WindowsUIOverlayImage final { public: enum class DisplayMode { Static, Animated }; NS_INLINE_DECL_REFCOUNTING(WindowsUIOverlayImage) /** * Creates an overlay image for a given element. * * @param aWindow Window containing the element. * @param aElement UI Automation element. * @param aDisplayMode Display mode, which can be static or animated. * @return Overlay image. */ static already_AddRefed Create( HWND aWindow, RefPtr aElement, DisplayMode aDisplayMode); /** * Returns whether the overlay image is visible. * * @return true whether the overlay image is visible, false otherwise. */ bool IsVisible(); /** * Advances to the next frame of the image. */ void AdvanceFrame(); // Non-copyable and non-movable WindowsUIOverlayImage(const WindowsUIOverlayImage&) = delete; WindowsUIOverlayImage(WindowsUIOverlayImage&&) = delete; WindowsUIOverlayImage& operator=(const WindowsUIOverlayImage&) = delete; WindowsUIOverlayImage& operator=(WindowsUIOverlayImage&&) = delete; private: explicit WindowsUIOverlayImage(HWND aWindow, RefPtr aElement, DisplayMode aDisplayMode); ~WindowsUIOverlayImage(); bool Initialize(); HWND mWindow; RefPtr mElement; DisplayMode mDisplayMode; SIZE mSize; std::vector> mFrames; nsAutoBitmap mDib; nsAutoHDC mMemDC; void* mDibBits; HGDIOBJ mOldBmp; RECT mRect; HWND mOverlayWindow; size_t mCurrentFrame; }; } // namespace mozilla #endif