1// Copyright (c) 2011 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
5#include "base/logging.h"
6#include "skia/ext/platform_device.h"
7
8#include "third_party/skia/include/core/SkMetaData.h"
9
10namespace skia {
11
12namespace {
13
14const char* kDevicePlatformBehaviour = "CrDevicePlatformBehaviour";
15const char* kDraftModeKey = "CrDraftMode";
16
17#if defined(OS_MACOSX) || defined(OS_WIN)
18const char* kIsPreviewMetafileKey = "CrIsPreviewMetafile";
19#endif
20
21void SetBoolMetaData(const SkCanvas& canvas, const char* key,  bool value) {
22  SkMetaData& meta = skia::getMetaData(canvas);
23  meta.setBool(key, value);
24}
25
26bool GetBoolMetaData(const SkCanvas& canvas, const char* key) {
27  bool value;
28  SkMetaData& meta = skia::getMetaData(canvas);
29  if (!meta.findBool(key, &value))
30    value = false;
31  return value;
32}
33
34}  // namespace
35
36void SetPlatformDevice(SkBaseDevice* device, PlatformDevice* platform_behaviour) {
37  SkMetaData& meta_data = device->getMetaData();
38  meta_data.setPtr(kDevicePlatformBehaviour, platform_behaviour);
39}
40
41PlatformDevice* GetPlatformDevice(SkBaseDevice* device) {
42  if (device) {
43    SkMetaData& meta_data = device->getMetaData();
44    PlatformDevice* device_behaviour = NULL;
45    if (meta_data.findPtr(kDevicePlatformBehaviour,
46                          reinterpret_cast<void**>(&device_behaviour)))
47      return device_behaviour;
48  }
49  return NULL;
50}
51
52SkMetaData& getMetaData(const SkCanvas& canvas) {
53  SkBaseDevice* device = canvas.getDevice();
54  DCHECK(device != NULL);
55  return device->getMetaData();
56}
57
58void SetIsDraftMode(const SkCanvas& canvas, bool draft_mode) {
59  SetBoolMetaData(canvas, kDraftModeKey, draft_mode);
60}
61
62bool IsDraftMode(const SkCanvas& canvas) {
63  return GetBoolMetaData(canvas, kDraftModeKey);
64}
65
66#if defined(OS_MACOSX) || defined(OS_WIN)
67void SetIsPreviewMetafile(const SkCanvas& canvas, bool is_preview) {
68  SetBoolMetaData(canvas, kIsPreviewMetafileKey, is_preview);
69}
70
71bool IsPreviewMetafile(const SkCanvas& canvas) {
72  return GetBoolMetaData(canvas, kIsPreviewMetafileKey);
73}
74#endif
75
76bool PlatformDevice::SupportsPlatformPaint() {
77  return true;
78}
79
80}  // namespace skia
81