transform_recorder.cc 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. // Copyright 2015 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ui/compositor/transform_recorder.h"
  5. #include "cc/paint/display_item_list.h"
  6. #include "cc/paint/paint_op_buffer.h"
  7. #include "ui/compositor/paint_context.h"
  8. #include "ui/gfx/geometry/transform.h"
  9. namespace ui {
  10. TransformRecorder::TransformRecorder(const PaintContext& context)
  11. : context_(context), transformed_(false) {}
  12. TransformRecorder::~TransformRecorder() {
  13. if (!transformed_)
  14. return;
  15. context_.list_->StartPaint();
  16. context_.list_->push<cc::RestoreOp>();
  17. context_.list_->EndPaintOfPairedEnd();
  18. }
  19. void TransformRecorder::Transform(const gfx::Transform& transform) {
  20. DCHECK(!transformed_);
  21. if (transform.IsIdentity())
  22. return;
  23. context_.list_->StartPaint();
  24. context_.list_->push<cc::SaveOp>();
  25. context_.list_->push<cc::ConcatOp>(transform.GetMatrixAsSkM44());
  26. context_.list_->EndPaintOfPairedBegin();
  27. transformed_ = true;
  28. }
  29. } // namespace ui