1// Copyright (c) 2012 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 "ppapi/thunk/thunk.h"
6#include "ppapi/thunk/enter.h"
7#include "ppapi/thunk/ppb_scrollbar_api.h"
8#include "ppapi/thunk/resource_creation_api.h"
9
10namespace ppapi {
11namespace thunk {
12
13typedef EnterResource<PPB_Scrollbar_API> EnterScrollbar;
14
15namespace {
16
17PP_Resource Create(PP_Instance instance, PP_Bool vertical) {
18  EnterResourceCreation enter(instance);
19  if (enter.failed())
20    return 0;
21  return enter.functions()->CreateScrollbar(instance, vertical);
22}
23
24PP_Bool IsScrollbar(PP_Resource resource) {
25  EnterScrollbar enter(resource, false);
26  return PP_FromBool(enter.succeeded());
27}
28
29uint32_t GetThickness(PP_Resource scrollbar) {
30  EnterScrollbar enter(scrollbar, true);
31  if (enter.failed())
32    return 0;
33  return enter.object()->GetThickness();
34}
35
36PP_Bool IsOverlay(PP_Resource scrollbar) {
37  EnterScrollbar enter(scrollbar, true);
38  if (enter.failed())
39    return PP_FALSE;
40  return PP_FromBool(enter.object()->IsOverlay());
41}
42
43uint32_t GetValue(PP_Resource scrollbar) {
44  EnterScrollbar enter(scrollbar, true);
45  if (enter.failed())
46    return 0;
47  return enter.object()->GetValue();
48}
49
50void SetValue(PP_Resource scrollbar, uint32_t value) {
51  EnterScrollbar enter(scrollbar, true);
52  if (enter.succeeded())
53    enter.object()->SetValue(value);
54}
55
56void SetDocumentSize(PP_Resource scrollbar, uint32_t size) {
57  EnterScrollbar enter(scrollbar, true);
58  if (enter.succeeded())
59    enter.object()->SetDocumentSize(size);
60}
61
62void SetTickMarks(PP_Resource scrollbar,
63                  const PP_Rect* tick_marks,
64                  uint32_t count) {
65  EnterScrollbar enter(scrollbar, true);
66  if (enter.succeeded())
67    enter.object()->SetTickMarks(tick_marks, count);
68}
69
70void ScrollBy(PP_Resource scrollbar, PP_ScrollBy_Dev unit, int32_t multiplier) {
71  EnterScrollbar enter(scrollbar, true);
72  if (enter.succeeded())
73    enter.object()->ScrollBy(unit, multiplier);
74}
75
76const PPB_Scrollbar_Dev g_ppb_scrollbar_thunk = {
77  &Create,
78  &IsScrollbar,
79  &GetThickness,
80  &IsOverlay,
81  &GetValue,
82  &SetValue,
83  &SetDocumentSize,
84  &SetTickMarks,
85  &ScrollBy
86};
87
88}  // namespace
89
90const PPB_Scrollbar_Dev_0_5* GetPPB_Scrollbar_Dev_0_5_Thunk() {
91  return &g_ppb_scrollbar_thunk;
92}
93
94}  // namespace thunk
95}  // namespace ppapi
96