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