mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 860613 - Add an API to bind an APZC instance to a Layer. r=BenWa
This commit is contained in:
parent
57ae4c29c2
commit
3c3e318554
@ -398,6 +398,38 @@ Layer::SetAnimations(const AnimationArray& aAnimations)
|
||||
Mutated();
|
||||
}
|
||||
|
||||
static uint8_t sPanZoomUserDataKey;
|
||||
struct PanZoomUserData : public LayerUserData {
|
||||
PanZoomUserData(AsyncPanZoomController* aController)
|
||||
: mController(aController)
|
||||
{ }
|
||||
|
||||
// We don't keep a strong ref here because PanZoomUserData is only
|
||||
// set transiently, and APZC is thread-safe refcounted so
|
||||
// AddRef/Release is expensive.
|
||||
AsyncPanZoomController* mController;
|
||||
};
|
||||
|
||||
void
|
||||
Layer::SetAsyncPanZoomController(AsyncPanZoomController *controller)
|
||||
{
|
||||
if (controller) {
|
||||
SetUserData(&sPanZoomUserDataKey, new PanZoomUserData(controller));
|
||||
} else {
|
||||
RemoveUserData(&sPanZoomUserDataKey);
|
||||
}
|
||||
}
|
||||
|
||||
AsyncPanZoomController*
|
||||
Layer::GetAsyncPanZoomController()
|
||||
{
|
||||
LayerUserData* data = GetUserData(&sPanZoomUserDataKey);
|
||||
if (!data) {
|
||||
return nullptr;
|
||||
}
|
||||
return static_cast<PanZoomUserData*>(data)->mController;
|
||||
}
|
||||
|
||||
void
|
||||
Layer::ApplyPendingUpdatesToSubtree()
|
||||
{
|
||||
|
@ -48,6 +48,7 @@ namespace layers {
|
||||
|
||||
class Animation;
|
||||
class AnimationData;
|
||||
class AsyncPanZoomController;
|
||||
class CommonLayerAttributes;
|
||||
class Layer;
|
||||
class ThebesLayer;
|
||||
@ -896,6 +897,11 @@ public:
|
||||
const gfx::Margin& GetFixedPositionMargins() { return mMargins; }
|
||||
Layer* GetMaskLayer() { return mMaskLayer; }
|
||||
|
||||
// These functions allow attaching an AsyncPanZoomController to this layer,
|
||||
// and can be used anytime.
|
||||
void SetAsyncPanZoomController(AsyncPanZoomController *controller);
|
||||
AsyncPanZoomController* GetAsyncPanZoomController();
|
||||
|
||||
// Note that all lengths in animation data are either in CSS pixels or app
|
||||
// units and must be converted to device pixels by the compositor.
|
||||
AnimationArray& GetAnimations() { return mAnimations; }
|
||||
|
@ -67,18 +67,6 @@ struct LayerTreeState {
|
||||
TargetConfig mTargetConfig;
|
||||
};
|
||||
|
||||
static uint8_t sPanZoomUserDataKey;
|
||||
struct PanZoomUserData : public LayerUserData {
|
||||
PanZoomUserData(AsyncPanZoomController* aController)
|
||||
: mController(aController)
|
||||
{ }
|
||||
|
||||
// We don't keep a strong ref here because PanZoomUserData is only
|
||||
// set transiently, and APZC is thread-safe refcounted so
|
||||
// AddRef/Release is expensive.
|
||||
AsyncPanZoomController* mController;
|
||||
};
|
||||
|
||||
/**
|
||||
* Lookup the indirect shadow tree for |aId| and return it if it
|
||||
* exists. Otherwise null is returned. This must only be called on
|
||||
@ -504,12 +492,11 @@ private:
|
||||
if (OP == Resolve) {
|
||||
ref->ConnectReferentLayer(referent);
|
||||
if (AsyncPanZoomController* apzc = state->mController) {
|
||||
referent->SetUserData(&sPanZoomUserDataKey,
|
||||
new PanZoomUserData(apzc));
|
||||
referent->SetAsyncPanZoomController(apzc);
|
||||
}
|
||||
} else {
|
||||
ref->DetachReferentLayer(referent);
|
||||
referent->RemoveUserData(&sPanZoomUserDataKey);
|
||||
referent->SetAsyncPanZoomController(nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -855,13 +842,7 @@ CompositorParent::ApplyAsyncContentTransformToTree(TimeStamp aCurrentFrame,
|
||||
return appliedTransform;
|
||||
}
|
||||
|
||||
AsyncPanZoomController* controller = nullptr;
|
||||
// Check if an AsyncPanZoomController is attached to this layer.
|
||||
if (LayerUserData* data = aLayer->GetUserData(&sPanZoomUserDataKey)) {
|
||||
controller = static_cast<PanZoomUserData*>(data)->mController;
|
||||
}
|
||||
|
||||
if (controller) {
|
||||
if (AsyncPanZoomController* controller = aLayer->GetAsyncPanZoomController()) {
|
||||
ShadowLayer* shadow = aLayer->AsShadowLayer();
|
||||
|
||||
ViewTransform treeTransform;
|
||||
|
Loading…
Reference in New Issue
Block a user