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_a11y_HTMLImageMapAccessible_h__ 7 #define mozilla_a11y_HTMLImageMapAccessible_h__ 8 9 #include "HTMLLinkAccessible.h" 10 #include "ImageAccessibleWrap.h" 11 12 namespace mozilla { 13 namespace a11y { 14 15 /** 16 * Used for HTML image maps. 17 */ 18 class HTMLImageMapAccessible final : public ImageAccessibleWrap { 19 public: 20 HTMLImageMapAccessible(nsIContent* aContent, DocAccessible* aDoc); 21 22 // nsISupports and cycle collector 23 NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLImageMapAccessible, 24 ImageAccessibleWrap) 25 26 // LocalAccessible 27 virtual a11y::role NativeRole() const override; 28 29 // HyperLinkAccessible 30 virtual uint32_t AnchorCount() override; 31 virtual LocalAccessible* AnchorAt(uint32_t aAnchorIndex) override; 32 virtual already_AddRefed<nsIURI> AnchorURIAt( 33 uint32_t aAnchorIndex) const override; 34 35 /** 36 * Update area children of the image map. 37 */ 38 void UpdateChildAreas(bool aDoFireEvents = true); 39 40 /** 41 * Return accessible of child node. 42 */ 43 LocalAccessible* GetChildAccessibleFor(const nsINode* aNode) const; 44 45 protected: ~HTMLImageMapAccessible()46 virtual ~HTMLImageMapAccessible() {} 47 }; 48 49 /** 50 * Accessible for image map areas - must be child of image. 51 */ 52 class HTMLAreaAccessible final : public HTMLLinkAccessible { 53 public: 54 HTMLAreaAccessible(nsIContent* aContent, DocAccessible* aDoc); 55 56 // LocalAccessible 57 virtual void Description(nsString& aDescription) override; 58 virtual LocalAccessible* LocalChildAtPoint( 59 int32_t aX, int32_t aY, EWhichChildAtPoint aWhichChild) override; 60 virtual nsRect RelativeBounds(nsIFrame** aBoundingFrame) const override; 61 62 // HyperLinkAccessible 63 virtual uint32_t StartOffset() override; 64 virtual uint32_t EndOffset() override; 65 IsAcceptableChild(nsIContent * aEl)66 virtual bool IsAcceptableChild(nsIContent* aEl) const override { 67 return false; 68 } 69 70 protected: 71 // LocalAccessible 72 virtual ENameValueFlag NativeName(nsString& aName) const override; 73 }; 74 75 //////////////////////////////////////////////////////////////////////////////// 76 // LocalAccessible downcasting method 77 AsImageMap()78inline HTMLImageMapAccessible* LocalAccessible::AsImageMap() { 79 return IsImageMap() ? static_cast<HTMLImageMapAccessible*>(this) : nullptr; 80 } 81 82 } // namespace a11y 83 } // namespace mozilla 84 85 #endif 86