TilesManager::instance()->setShowVisualIndicator(showVisualIndicator);
}
-void GLWebViewState::setRings(Vector<IntRect>& rings, bool isPressed)
+void GLWebViewState::setRings(Vector<IntRect>& rings, bool isPressed, bool isButton)
{
android::Mutex::Autolock lock(m_baseLayerLock);
m_displayRings = true;
m_rings.op(rings.at(i), SkRegion::kUnion_Op);
}
m_ringsIsPressed = isPressed;
+ m_ringsIsButton = isButton;
}
void GLWebViewState::invalRegion(const SkRegion& region)
rgnIter.next();
}
}
+ if (m_ringsIsButton && m_ringsIsPressed)
+ return;
SkPath path;
if (!m_rings.getBoundaryPath(&path))
return;
#define TRIM_MEMORY_BACKGROUND 40
// Moderate free (clear cached tiles, keep visible ones)
#define TRIM_MEMORY_UI_HIDDEN 20
+// Duration to show the pressed cursor ring
+#define PRESSED_STATE_DURATION 400
namespace android {
return;
DBG_NAV_LOG("");
hideCursor(root);
+ viewInvalidate();
}
void hideCursor(CachedRoot* root)
DBG_NAV_LOG("inner");
m_viewImpl->m_hasCursorBounds = false;
root->hideCursor();
- viewInvalidate();
}
#if DUMP_NAV_CACHE
break;
case DrawExtrasCursorRing:
if (drawCursorPreamble(root) && m_ring.setup()) {
- if (!m_ring.m_isButton)
+ if (m_ring.m_isPressed || m_ringAnimationEnd == UINT_MAX)
extra = &m_ring;
drawCursorPostamble();
}
if (extra) {
if (extra == &m_ring) {
WTF::Vector<IntRect> rings;
- if (root == m_ring.m_frame)
+ if (!m_ring.m_isButton && root == m_ring.m_frame)
rings = m_ring.rings();
else {
// TODO: Fix the navcache to work with layers correctly
for (size_t i = 0; i < m_ring.m_node->rings().size(); i++) {
IntRect rect = m_ring.m_node->rings().at(i);
rect = m_ring.m_frame->adjustBounds(m_ring.m_node, rect);
- rect.inflate(4);
+ if (!m_ring.m_isButton)
+ rect.inflate(4);
rings.append(rect);
}
}
- m_glWebViewState->setRings(rings, m_ring.m_isPressed);
+ m_glWebViewState->setRings(rings, m_ring.m_isPressed, m_ring.m_isButton);
extra = 0;
} else {
LayerAndroid mainPicture(m_navPictureUI);
extra->draw(canvas, &mainPicture, &rect);
picture.endRecording();
}
- } else if (root && extras == DrawExtrasCursorRing && m_ring.m_isButton) {
- const CachedFrame* cachedFrame;
- const CachedNode* cachedCursor = root->currentCursor(&cachedFrame);
- if (cachedCursor) {
- rect = cachedCursor->bounds(cachedFrame);
- allowSame = true;
- }
}
m_glWebViewState->setExtra(m_baseLayer, picture, rect, allowSame);
void showCursorTimed()
{
DBG_NAV_LOG("");
- m_ringAnimationEnd = SkTime::GetMSecs() + 500;
+ m_ringAnimationEnd = SkTime::GetMSecs() + PRESSED_STATE_DURATION;
viewInvalidate();
}