RemoteScrollingUIState.cpp [plain text]
#import "config.h"
#import "RemoteScrollingUIState.h"
#import "ArgumentCoders.h"
#import <wtf/text/TextStream.h>
namespace WebKit {
void RemoteScrollingUIState::encode(IPC::Encoder& encoder) const
{
encoder.encode(m_changes);
if (m_changes.contains(Changes::ScrollSnapNodes))
encoder << m_nodesWithActiveScrollSnap;
if (m_changes.contains(Changes::UserScrollNodes))
encoder << m_nodesWithActiveUserScrolls;
}
Optional<RemoteScrollingUIState> RemoteScrollingUIState::decode(IPC::Decoder& decoder)
{
RemoteScrollingUIState uiState;
if (!decoder.decode(uiState.m_changes))
return WTF::nullopt;
if (uiState.m_changes.contains(Changes::ScrollSnapNodes)) {
if (!decoder.decode(uiState.m_nodesWithActiveScrollSnap))
return WTF::nullopt;
}
if (uiState.m_changes.contains(Changes::UserScrollNodes)) {
if (!decoder.decode(uiState.m_nodesWithActiveUserScrolls))
return WTF::nullopt;
}
return uiState;
}
void RemoteScrollingUIState::reset()
{
clearChanges();
m_nodesWithActiveScrollSnap.clear();
m_nodesWithActiveUserScrolls.clear();
}
void RemoteScrollingUIState::addNodeWithActiveScrollSnap(WebCore::ScrollingNodeID nodeID)
{
auto addResult = m_nodesWithActiveScrollSnap.add(nodeID);
if (addResult.isNewEntry)
m_changes.add(Changes::ScrollSnapNodes);
}
void RemoteScrollingUIState::removeNodeWithActiveScrollSnap(WebCore::ScrollingNodeID nodeID)
{
if (m_nodesWithActiveScrollSnap.remove(nodeID))
m_changes.add(Changes::ScrollSnapNodes);
}
void RemoteScrollingUIState::addNodeWithActiveUserScroll(WebCore::ScrollingNodeID nodeID)
{
auto addResult = m_nodesWithActiveUserScrolls.add(nodeID);
if (addResult.isNewEntry)
m_changes.add(Changes::UserScrollNodes);
}
void RemoteScrollingUIState::removeNodeWithActiveUserScroll(WebCore::ScrollingNodeID nodeID)
{
if (m_nodesWithActiveUserScrolls.remove(nodeID))
m_changes.add(Changes::UserScrollNodes);
}
}