Index: pdf/fading_control.cc |
=================================================================== |
--- pdf/fading_control.cc (revision 0) |
+++ pdf/fading_control.cc (revision 0) |
@@ -0,0 +1,75 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "pdf/fading_control.h" |
+ |
+#include <math.h> |
+ |
+#include "base/logging.h" |
+#include "pdf/draw_utils.h" |
+#include "pdf/resource_consts.h" |
+ |
+namespace chrome_pdf { |
+ |
+FadingControl::FadingControl() |
+ : alpha_shift_(0), timer_id_(0) { |
+} |
+ |
+FadingControl::~FadingControl() { |
+} |
+ |
+void FadingControl::OnTimerFired(uint32 timer_id) { |
+ if (timer_id == timer_id_) { |
+ int32 new_alpha = transparency() + alpha_shift_; |
+ if (new_alpha <= kTransparentAlpha) { |
+ Show(false, true); |
+ OnFadeOutComplete(); |
+ return; |
+ } |
+ if (new_alpha >= kOpaqueAlpha) { |
+ AdjustTransparency(kOpaqueAlpha, true); |
+ OnFadeInComplete(); |
+ return; |
+ } |
+ |
+ AdjustTransparency(static_cast<uint8>(new_alpha), true); |
+ timer_id_ = owner()->ScheduleTimer(id(), kFadingTimeoutMs); |
+ } |
+} |
+ |
+// Fade In/Out control depending on visible flag over the time of time_ms. |
+void FadingControl::Fade(bool show, uint32 time_ms) { |
+ DCHECK(time_ms != 0); |
+ // Check if we already in the same state. |
+ if (!visible() && !show) |
+ return; |
+ if (!visible() && show) { |
+ Show(show, false); |
+ AdjustTransparency(kTransparentAlpha, false); |
+ OnFadeOutComplete(); |
+ } |
+ if (transparency() == kOpaqueAlpha && show) { |
+ OnFadeInComplete(); |
+ return; |
+ } |
+ |
+ int delta = show ? kOpaqueAlpha - transparency() : transparency(); |
+ double shift = |
+ static_cast<double>(delta) * kFadingTimeoutMs / time_ms; |
+ if (shift > delta) |
+ alpha_shift_ = delta; |
+ else |
+ alpha_shift_ = static_cast<int>(ceil(shift)); |
+ |
+ if (alpha_shift_ == 0) |
+ alpha_shift_ = 1; |
+ |
+ // If disabling, make alpha shift negative. |
+ if (!show) |
+ alpha_shift_ = -alpha_shift_; |
+ |
+ timer_id_ = owner()->ScheduleTimer(id(), kFadingTimeoutMs); |
+} |
+ |
+} // namespace chrome_pdf |
Property changes on: pdf\fading_control.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |