14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef UI_GFX_SCOPED_CANVAS_H_
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define UI_GFX_SCOPED_CANVAS_H_
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/gfx/canvas.h"
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace gfx {
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Saves the drawing state, and restores the state when going out of scope.
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class ScopedCanvas {
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public:
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  explicit ScopedCanvas(gfx::Canvas* canvas) : canvas_(canvas) {
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    if (canvas_)
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      canvas_->Save();
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ~ScopedCanvas() {
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    if (canvas_)
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      canvas_->Restore();
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  void SetCanvas(gfx::Canvas* canvas) {
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    if (canvas_)
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      canvas_->Restore();
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    canvas_ = canvas;
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    canvas_->Save();
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private:
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  gfx::Canvas* canvas_;
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ScopedCanvas);
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace gfx
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif  // UI_GFX_SCOPED_CANVAS_H_
39