OLD | NEW |
| (Empty) |
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 "pdf/page_indicator.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "base/strings/string_util.h" | |
9 #include "pdf/draw_utils.h" | |
10 #include "pdf/number_image_generator.h" | |
11 #include "pdf/resource_consts.h" | |
12 | |
13 namespace chrome_pdf { | |
14 | |
15 | |
16 PageIndicator::PageIndicator() | |
17 : current_page_(0), | |
18 fade_out_timer_id_(0), | |
19 splash_timeout_(kPageIndicatorSplashTimeoutMs), | |
20 fade_timeout_(kPageIndicatorScrollFadeTimeoutMs), | |
21 always_visible_(false) { | |
22 } | |
23 | |
24 PageIndicator::~PageIndicator() { | |
25 } | |
26 | |
27 bool PageIndicator::CreatePageIndicator( | |
28 uint32 id, | |
29 bool visible, | |
30 Control::Owner* delegate, | |
31 NumberImageGenerator* number_image_generator, | |
32 bool always_visible) { | |
33 number_image_generator_ = number_image_generator; | |
34 always_visible_ = always_visible; | |
35 | |
36 pp::Rect rc; | |
37 bool res = Control::Create(id, rc, visible, delegate); | |
38 return res; | |
39 } | |
40 | |
41 void PageIndicator::Configure(const pp::Point& origin, | |
42 const pp::ImageData& background) { | |
43 background_ = background; | |
44 pp::Rect rc(origin, background_.size()); | |
45 Control::SetRect(rc, false); | |
46 } | |
47 | |
48 void PageIndicator::set_current_page(int current_page) { | |
49 if (current_page_ < 0) | |
50 return; | |
51 | |
52 current_page_ = current_page; | |
53 } | |
54 | |
55 void PageIndicator::Paint(pp::ImageData* image_data, const pp::Rect& rc) { | |
56 if (!visible()) | |
57 return; | |
58 | |
59 pp::Rect draw_rc = rc.Intersect(rect()); | |
60 if (draw_rc.IsEmpty()) | |
61 return; | |
62 | |
63 // Copying the background image to a temporary buffer. | |
64 pp::ImageData buffer(owner()->GetInstance(), background_.format(), | |
65 background_.size(), false); | |
66 CopyImage(background_, pp::Rect(background_.size()), | |
67 &buffer, pp::Rect(background_.size()), false); | |
68 | |
69 // Creating the page number image. | |
70 pp::ImageData page_number_image; | |
71 number_image_generator_->GenerateImage(current_page_, &page_number_image); | |
72 | |
73 pp::Point origin2( | |
74 (buffer.size().width() - page_number_image.size().width()) / 2.5, | |
75 (buffer.size().height() - page_number_image.size().height()) / 2); | |
76 | |
77 // Drawing page number image on the buffer. | |
78 if (origin2.x() > 0 && origin2.y() > 0) { | |
79 CopyImage(page_number_image, | |
80 pp::Rect(pp::Point(), page_number_image.size()), | |
81 &buffer, | |
82 pp::Rect(origin2, page_number_image.size()), | |
83 false); | |
84 } | |
85 | |
86 // Drawing the buffer. | |
87 pp::Point origin = draw_rc.point(); | |
88 draw_rc.Offset(-rect().x(), -rect().y()); | |
89 AlphaBlend(buffer, draw_rc, image_data, origin, transparency()); | |
90 } | |
91 | |
92 void PageIndicator::OnTimerFired(uint32 timer_id) { | |
93 FadingControl::OnTimerFired(timer_id); | |
94 if (timer_id == fade_out_timer_id_) { | |
95 Fade(false, fade_timeout_); | |
96 } | |
97 } | |
98 | |
99 void PageIndicator::ResetFadeOutTimer() { | |
100 fade_out_timer_id_ = | |
101 owner()->ScheduleTimer(id(), splash_timeout_); | |
102 } | |
103 | |
104 void PageIndicator::OnFadeInComplete() { | |
105 if (!always_visible_) | |
106 ResetFadeOutTimer(); | |
107 } | |
108 | |
109 void PageIndicator::Splash() { | |
110 Splash(kPageIndicatorSplashTimeoutMs, kPageIndicatorScrollFadeTimeoutMs); | |
111 } | |
112 | |
113 void PageIndicator::Splash(uint32 splash_timeout, uint32 fade_timeout) { | |
114 splash_timeout_ = splash_timeout; | |
115 fade_timeout_ = fade_timeout; | |
116 if (!always_visible_) | |
117 fade_out_timer_id_ = 0; | |
118 Fade(true, fade_timeout_); | |
119 } | |
120 | |
121 int PageIndicator::GetYPosition( | |
122 int vertical_scrollbar_y, int document_height, int plugin_height) { | |
123 double percent = static_cast<double>(vertical_scrollbar_y) / document_height; | |
124 return (plugin_height - rect().height()) * percent; | |
125 } | |
126 | |
127 } // namespace chrome_pdf | |
OLD | NEW |