12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_LAYERS_CONTENTS_SCALING_LAYER_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_LAYERS_CONTENTS_SCALING_LAYER_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Base class for layers that need contents scale.
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The content bounds are determined by bounds and scale of the contents.
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT ContentsScalingLayer : public Layer {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void CalculateContentsScale(
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      float ideal_contents_scale,
19b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      float device_scale_factor,
20b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      float page_scale_factor,
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool animating_transform_to_screen,
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      float* contents_scale_x,
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      float* contents_scale_y,
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      gfx::Size* content_bounds) OVERRIDE;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual bool Update(
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ResourceUpdateQueue* queue,
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const OcclusionTracker* occlusion) OVERRIDE;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ContentsScalingLayer();
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~ContentsScalingLayer();
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Size ComputeContentBoundsForScale(float scale_x, float scale_y) const;
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float last_update_contents_scale_x_;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float last_update_contents_scale_y_;
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ContentsScalingLayer);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_LAYERS_CONTENTS_SCALING_LAYER_H__
46