[iOS] Text decoration of dragged content does not paint with opacity
authordbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 11 May 2018 23:01:37 +0000 (23:01 +0000)
committerdbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 11 May 2018 23:01:37 +0000 (23:01 +0000)
https://bugs.webkit.org/show_bug.cgi?id=185551
<rdar://problem/40166867>

Reviewed by Wenson Hsieh.

Respect alpha when painting the text decoration for dragged content.

* rendering/InlineTextBox.cpp:
(WebCore::InlineTextBox::MarkedTextStyle::areDecorationMarkedTextStylesEqual): Consider alpha when
comparing decoration styles for equality so that we do not coalesce styles with differing alpha.
(WebCore::InlineTextBox::paintMarkedTextDecoration): Respect alpha when painting dragged content.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@231725 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/rendering/InlineTextBox.cpp

index 8a28013..efb1d03 100644 (file)
@@ -1,3 +1,18 @@
+2018-05-11  Daniel Bates  <dabates@apple.com>
+
+        [iOS] Text decoration of dragged content does not paint with opacity
+        https://bugs.webkit.org/show_bug.cgi?id=185551
+        <rdar://problem/40166867>
+
+        Reviewed by Wenson Hsieh.
+
+        Respect alpha when painting the text decoration for dragged content.
+
+        * rendering/InlineTextBox.cpp:
+        (WebCore::InlineTextBox::MarkedTextStyle::areDecorationMarkedTextStylesEqual): Consider alpha when
+        comparing decoration styles for equality so that we do not coalesce styles with differing alpha.
+        (WebCore::InlineTextBox::paintMarkedTextDecoration): Respect alpha when painting dragged content.
+
 2018-05-11  Nan Wang  <n_wang@apple.com>
 
         AX: In role=dialog elements with aria-modal=true VoiceOver iOS/macOS can't manually focus or read dialog paragraph description text inside the modal.
index 5a859bb..58ff798 100644 (file)
@@ -403,7 +403,7 @@ struct InlineTextBox::MarkedTextStyle {
     }
     static bool areDecorationMarkedTextStylesEqual(const MarkedTextStyle& a, const MarkedTextStyle& b)
     {
-        return a.textDecorationStyles == b.textDecorationStyles && a.textShadow == b.textShadow;
+        return a.textDecorationStyles == b.textDecorationStyles && a.textShadow == b.textShadow && a.alpha == b.alpha;
     }
 
     Color backgroundColor;
@@ -1075,9 +1075,13 @@ void InlineTextBox::paintMarkedTextDecoration(PaintInfo& paintInfo, const FloatR
 
     {
         GraphicsContextStateSaver stateSaver { context, false };
-        if (!clipOutRect.isEmpty()) {
+        bool isDraggedContent = markedText.type == MarkedText::DraggedContent;
+        if (isDraggedContent || !clipOutRect.isEmpty()) {
             stateSaver.save();
-            context.clipOut(clipOutRect);
+            if (isDraggedContent)
+                context.setAlpha(markedText.style.alpha);
+            if (!clipOutRect.isEmpty())
+                context.clipOut(clipOutRect);
         }
         decorationPainter.paintTextDecoration(textRun.subRun(startOffset, endOffset - startOffset), textOriginFromBoxRect(snappedSelectionRect), snappedSelectionRect.location());
     }