Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(159)

Side by Side Diff: Source/core/platform/graphics/GraphicsLayer.cpp

Issue 15663005: Expand tap highlight to allow multiple highlights for touch disambiguation. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/platform/graphics/GraphicsLayer.h ('k') | Source/web/LinkHighlight.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 , m_contentsVisible(true) 96 , m_contentsVisible(true)
97 , m_paintingPhase(GraphicsLayerPaintAllWithOverflowClip) 97 , m_paintingPhase(GraphicsLayerPaintAllWithOverflowClip)
98 , m_contentsOrientation(CompositingCoordinatesTopDown) 98 , m_contentsOrientation(CompositingCoordinatesTopDown)
99 , m_parent(0) 99 , m_parent(0)
100 , m_maskLayer(0) 100 , m_maskLayer(0)
101 , m_replicaLayer(0) 101 , m_replicaLayer(0)
102 , m_replicatedLayer(0) 102 , m_replicatedLayer(0)
103 , m_paintCount(0) 103 , m_paintCount(0)
104 , m_contentsLayer(0) 104 , m_contentsLayer(0)
105 , m_contentsLayerId(0) 105 , m_contentsLayerId(0)
106 , m_linkHighlight(0)
107 , m_contentsLayerPurpose(NoContentsLayer) 106 , m_contentsLayerPurpose(NoContentsLayer)
108 , m_scrollableArea(0) 107 , m_scrollableArea(0)
109 , m_compositingReasons(WebKit::CompositingReasonUnknown) 108 , m_compositingReasons(WebKit::CompositingReasonUnknown)
110 { 109 {
111 #ifndef NDEBUG 110 #ifndef NDEBUG
112 if (m_client) 111 if (m_client)
113 m_client->verifyNotPainting(); 112 m_client->verifyNotPainting();
114 #endif 113 #endif
115 114
116 m_opaqueRectTrackingContentLayerDelegate = adoptPtr(new OpaqueRectTrackingCo ntentLayerDelegate(this)); 115 m_opaqueRectTrackingContentLayerDelegate = adoptPtr(new OpaqueRectTrackingCo ntentLayerDelegate(this));
117 m_layer = adoptPtr(Platform::current()->compositorSupport()->createContentLa yer(m_opaqueRectTrackingContentLayerDelegate.get())); 116 m_layer = adoptPtr(Platform::current()->compositorSupport()->createContentLa yer(m_opaqueRectTrackingContentLayerDelegate.get()));
118 m_layer->layer()->setDrawsContent(m_drawsContent && m_contentsVisible); 117 m_layer->layer()->setDrawsContent(m_drawsContent && m_contentsVisible);
119 m_layer->layer()->setWebLayerClient(this); 118 m_layer->layer()->setWebLayerClient(this);
120 m_layer->setAutomaticallyComputeRasterScale(true); 119 m_layer->setAutomaticallyComputeRasterScale(true);
121 } 120 }
122 121
123 GraphicsLayer::~GraphicsLayer() 122 GraphicsLayer::~GraphicsLayer()
124 { 123 {
125 if (m_linkHighlight) { 124 for (size_t i = 0; i < m_linkHighlights.size(); i++)
jochen (gone - plz use gerrit) 2013/09/16 14:13:05 nit: ++i (and everywhere else)
126 m_linkHighlight->clearCurrentGraphicsLayer(); 125 m_linkHighlights[i]->clearCurrentGraphicsLayer();
127 m_linkHighlight = 0; 126 m_linkHighlights.clear();
128 }
129 127
130 #ifndef NDEBUG 128 #ifndef NDEBUG
131 if (m_client) 129 if (m_client)
132 m_client->verifyNotPainting(); 130 m_client->verifyNotPainting();
133 #endif 131 #endif
134 132
135 if (m_replicaLayer) 133 if (m_replicaLayer)
136 m_replicaLayer->setReplicatedLayer(0); 134 m_replicaLayer->setReplicatedLayer(0);
137 135
138 if (m_replicatedLayer) 136 if (m_replicatedLayer)
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 } 394 }
397 395
398 const Vector<GraphicsLayer*>& childLayers = children(); 396 const Vector<GraphicsLayer*>& childLayers = children();
399 size_t numChildren = childLayers.size(); 397 size_t numChildren = childLayers.size();
400 for (size_t i = 0; i < numChildren; ++i) { 398 for (size_t i = 0; i < numChildren; ++i) {
401 GraphicsLayer* curChild = childLayers[i]; 399 GraphicsLayer* curChild = childLayers[i];
402 400
403 childHost->addChild(curChild->platformLayer()); 401 childHost->addChild(curChild->platformLayer());
404 } 402 }
405 403
406 if (m_linkHighlight) 404 for (size_t i = 0; i < m_linkHighlights.size(); i++)
407 childHost->addChild(m_linkHighlight->layer()); 405 childHost->addChild(m_linkHighlights[i]->layer());
408 } 406 }
409 407
410 void GraphicsLayer::updateLayerIsDrawable() 408 void GraphicsLayer::updateLayerIsDrawable()
411 { 409 {
412 // For the rest of the accelerated compositor code, there is no reason to ma ke a 410 // For the rest of the accelerated compositor code, there is no reason to ma ke a
413 // distinction between drawsContent and contentsVisible. So, for m_layer->la yer(), these two 411 // distinction between drawsContent and contentsVisible. So, for m_layer->la yer(), these two
414 // flags are combined here. m_contentsLayer shouldn't receive the drawsConte nt flag 412 // flags are combined here. m_contentsLayer shouldn't receive the drawsConte nt flag
415 // so it is only given contentsVisible. 413 // so it is only given contentsVisible.
416 414
417 m_layer->layer()->setDrawsContent(m_drawsContent && m_contentsVisible); 415 m_layer->layer()->setDrawsContent(m_drawsContent && m_contentsVisible);
418 if (WebLayer* contentsLayer = contentsLayerIfRegistered()) 416 if (WebLayer* contentsLayer = contentsLayerIfRegistered())
419 contentsLayer->setDrawsContent(m_contentsVisible); 417 contentsLayer->setDrawsContent(m_contentsVisible);
420 418
421 if (m_drawsContent) { 419 if (m_drawsContent) {
422 m_layer->layer()->invalidate(); 420 m_layer->layer()->invalidate();
423 if (m_linkHighlight) 421 for (size_t i = 0; i < m_linkHighlights.size(); i++)
424 m_linkHighlight->invalidate(); 422 m_linkHighlights[i]->invalidate();
425 } 423 }
426 } 424 }
427 425
428 void GraphicsLayer::updateContentsRect() 426 void GraphicsLayer::updateContentsRect()
429 { 427 {
430 WebLayer* contentsLayer = contentsLayerIfRegistered(); 428 WebLayer* contentsLayer = contentsLayerIfRegistered();
431 if (!contentsLayer) 429 if (!contentsLayer)
432 return; 430 return;
433 431
434 contentsLayer->setPosition(FloatPoint(m_contentsRect.x(), m_contentsRect.y() )); 432 contentsLayer->setPosition(FloatPoint(m_contentsRect.x(), m_contentsRect.y() ));
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 dumpLayer(ts, 0, flags); 737 dumpLayer(ts, 0, flags);
740 return ts.release(); 738 return ts.release();
741 } 739 }
742 740
743 WebKit::WebString GraphicsLayer::debugName(WebKit::WebLayer* webLayer) 741 WebKit::WebString GraphicsLayer::debugName(WebKit::WebLayer* webLayer)
744 { 742 {
745 String name; 743 String name;
746 if (!m_client) 744 if (!m_client)
747 return name; 745 return name;
748 746
747 String highlightDebugName;
748 for (size_t i = 0; i < m_linkHighlights.size(); i++) {
749 if (webLayer == m_linkHighlights[i]->layer()) {
750 highlightDebugName = "LinkHighlight[" + String::number(i) + "] for " + m_client->debugName(this);
751 break;
752 }
753 }
754
749 if (webLayer == m_contentsLayer) { 755 if (webLayer == m_contentsLayer) {
750 name = "ContentsLayer for " + m_client->debugName(this); 756 name = "ContentsLayer for " + m_client->debugName(this);
751 } else if (m_linkHighlight && webLayer == m_linkHighlight->layer()) { 757 } else if (!highlightDebugName.isEmpty()) {
752 name = "LinkHighlight for " + m_client->debugName(this); 758 name = highlightDebugName;
753 } else if (webLayer == m_layer->layer()) { 759 } else if (webLayer == m_layer->layer()) {
754 name = m_client->debugName(this); 760 name = m_client->debugName(this);
755 } else { 761 } else {
756 ASSERT_NOT_REACHED(); 762 ASSERT_NOT_REACHED();
757 } 763 }
758 return name; 764 return name;
759 } 765 }
760 766
761 void GraphicsLayer::setCompositingReasons(WebKit::WebCompositingReasons reasons) 767 void GraphicsLayer::setCompositingReasons(WebKit::WebCompositingReasons reasons)
762 { 768 {
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 contentsLayer->invalidate(); 895 contentsLayer->invalidate();
890 addRepaintRect(contentsRect()); 896 addRepaintRect(contentsRect());
891 } 897 }
892 } 898 }
893 899
894 void GraphicsLayer::setNeedsDisplay() 900 void GraphicsLayer::setNeedsDisplay()
895 { 901 {
896 if (drawsContent()) { 902 if (drawsContent()) {
897 m_layer->layer()->invalidate(); 903 m_layer->layer()->invalidate();
898 addRepaintRect(FloatRect(FloatPoint(), m_size)); 904 addRepaintRect(FloatRect(FloatPoint(), m_size));
899 if (m_linkHighlight) 905 for (size_t i = 0; i < m_linkHighlights.size(); i++)
900 m_linkHighlight->invalidate(); 906 m_linkHighlights[i]->invalidate();
901 } 907 }
902 } 908 }
903 909
904 void GraphicsLayer::setNeedsDisplayInRect(const FloatRect& rect) 910 void GraphicsLayer::setNeedsDisplayInRect(const FloatRect& rect)
905 { 911 {
906 if (drawsContent()) { 912 if (drawsContent()) {
907 m_layer->layer()->invalidateRect(rect); 913 m_layer->layer()->invalidateRect(rect);
908 addRepaintRect(rect); 914 addRepaintRect(rect);
909 if (m_linkHighlight) 915 for (size_t i = 0; i < m_linkHighlights.size(); i++)
910 m_linkHighlight->invalidate(); 916 m_linkHighlights[i]->invalidate();
911 } 917 }
912 } 918 }
913 919
914 void GraphicsLayer::setContentsRect(const IntRect& rect) 920 void GraphicsLayer::setContentsRect(const IntRect& rect)
915 { 921 {
916 if (rect == m_contentsRect) 922 if (rect == m_contentsRect)
917 return; 923 return;
918 924
919 m_contentsRect = rect; 925 m_contentsRect = rect;
920 updateContentsRect(); 926 updateContentsRect();
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 } 1147 }
1142 1148
1143 void GraphicsLayer::setBackgroundFilters(const FilterOperations& filters) 1149 void GraphicsLayer::setBackgroundFilters(const FilterOperations& filters)
1144 { 1150 {
1145 OwnPtr<WebFilterOperations> webFilters = adoptPtr(Platform::current()->compo sitorSupport()->createFilterOperations()); 1151 OwnPtr<WebFilterOperations> webFilters = adoptPtr(Platform::current()->compo sitorSupport()->createFilterOperations());
1146 if (!copyWebCoreFilterOperationsToWebFilterOperations(filters, *webFilters)) 1152 if (!copyWebCoreFilterOperationsToWebFilterOperations(filters, *webFilters))
1147 return; 1153 return;
1148 m_layer->layer()->setBackgroundFilters(*webFilters); 1154 m_layer->layer()->setBackgroundFilters(*webFilters);
1149 } 1155 }
1150 1156
1151 void GraphicsLayer::setLinkHighlight(LinkHighlightClient* linkHighlight) 1157 void GraphicsLayer::addLinkHighlight(LinkHighlightClient* linkHighlight)
1152 { 1158 {
1153 m_linkHighlight = linkHighlight; 1159 ASSERT(linkHighlight);
1154 if (m_linkHighlight) 1160 m_linkHighlights.append(linkHighlight);
1155 m_linkHighlight->layer()->setWebLayerClient(this); 1161 linkHighlight->layer()->setWebLayerClient(this);
1156 updateChildList(); 1162 updateChildList();
1157 } 1163 }
1158 1164
1165 void GraphicsLayer::removeLinkHighlight(LinkHighlightClient* linkHighlight)
1166 {
1167 m_linkHighlights.remove(m_linkHighlights.find(linkHighlight));
1168 ASSERT(!m_linkHighlights.contains(linkHighlight));
jochen (gone - plz use gerrit) 2013/09/16 14:13:05 why not assert that you don't add the same client
1169 updateChildList();
1170 }
1171
1159 void GraphicsLayer::setScrollableArea(ScrollableArea* scrollableArea, bool isMai nFrame) 1172 void GraphicsLayer::setScrollableArea(ScrollableArea* scrollableArea, bool isMai nFrame)
1160 { 1173 {
1161 if (m_scrollableArea == scrollableArea) 1174 if (m_scrollableArea == scrollableArea)
1162 return; 1175 return;
1163 1176
1164 m_scrollableArea = scrollableArea; 1177 m_scrollableArea = scrollableArea;
1165 1178
1166 // Main frame scrolling may involve pinch zoom and gets routed through 1179 // Main frame scrolling may involve pinch zoom and gets routed through
1167 // WebViewImpl explicitly rather than via GraphicsLayer::didScroll. 1180 // WebViewImpl explicitly rather than via GraphicsLayer::didScroll.
1168 if (isMainFrame) 1181 if (isMainFrame)
(...skipping 30 matching lines...) Expand all
1199 #ifndef NDEBUG 1212 #ifndef NDEBUG
1200 void showGraphicsLayerTree(const WebCore::GraphicsLayer* layer) 1213 void showGraphicsLayerTree(const WebCore::GraphicsLayer* layer)
1201 { 1214 {
1202 if (!layer) 1215 if (!layer)
1203 return; 1216 return;
1204 1217
1205 String output = layer->layerTreeAsText(WebCore::LayerTreeIncludesDebugInfo); 1218 String output = layer->layerTreeAsText(WebCore::LayerTreeIncludesDebugInfo);
1206 fprintf(stderr, "%s\n", output.utf8().data()); 1219 fprintf(stderr, "%s\n", output.utf8().data());
1207 } 1220 }
1208 #endif 1221 #endif
OLDNEW
« no previous file with comments | « Source/core/platform/graphics/GraphicsLayer.h ('k') | Source/web/LinkHighlight.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698