void AccessibleCaret::EnsureApzAware() { // If the caret element was cloned, the listener might have been lost. So // if that's the case we register a dummy listener if there isn't one on // the element already. if (!CaretElement()->IsApzAware()) { CaretElement()->AddEventListener(NS_LITERAL_STRING("touchstart"), mDummyTouchListener, false); } }
void AccessibleCaret::RemoveCaretElement(nsIDocument* aDocument) { CaretElement()->RemoveEventListener(NS_LITERAL_STRING("touchstart"), mDummyTouchListener, false); ErrorResult rv; aDocument->RemoveAnonymousContent(*mCaretElementHolder, rv); // It's OK rv is failed since nsCanvasFrame might not exists now. }
bool AccessibleCaret::Intersects(const AccessibleCaret& aCaret) const { MOZ_ASSERT(mPresShell == aCaret.mPresShell); if (!IsVisuallyVisible() || !aCaret.IsVisuallyVisible()) { return false; } nsRect rect = nsLayoutUtils::GetRectRelativeToFrame(CaretElement(), RootFrame()); nsRect rhsRect = nsLayoutUtils::GetRectRelativeToFrame(aCaret.CaretElement(), RootFrame()); return rect.Intersects(rhsRect); }
void AccessibleCaret::InjectCaretElement(nsIDocument* aDocument) { ErrorResult rv; nsCOMPtr<Element> element = CreateCaretElement(aDocument); mCaretElementHolder = aDocument->InsertAnonymousContent(*element, rv); MOZ_ASSERT(!rv.Failed(), "Insert anonymous content should not fail!"); MOZ_ASSERT(mCaretElementHolder.get(), "We must have anonymous content!"); // InsertAnonymousContent will clone the element to make an AnonymousContent. // Since event listeners are not being cloned when cloning a node, we need to // add the listener here. CaretElement()->AddEventListener(NS_LITERAL_STRING("touchstart"), mDummyTouchListener, false); }
void AccessibleCaret::SetCaretElementStyle(const nsRect& aRect) { nsPoint position = CaretElementPosition(aRect); nsAutoString styleStr; styleStr.AppendPrintf("left: %dpx; top: %dpx;", nsPresContext::AppUnitsToIntCSSPixels(position.x), nsPresContext::AppUnitsToIntCSSPixels(position.y)); float zoomLevel = GetZoomLevel(); styleStr.AppendPrintf(" width: %.2fpx; height: %.2fpx; margin-left: %.2fpx", sWidth / zoomLevel, sHeight / zoomLevel, sMarginLeft / zoomLevel); ErrorResult rv; CaretElement()->SetAttribute(NS_LITERAL_STRING("style"), styleStr, rv); MOZ_ASSERT(!rv.Failed()); AC_LOG("Set caret style: %s", NS_ConvertUTF16toUTF8(styleStr).get()); }