1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "pdf/fading_control.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <math.h> 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/logging.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "pdf/draw_utils.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "pdf/resource_consts.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace chrome_pdf { 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)FadingControl::FadingControl() 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : alpha_shift_(0), timer_id_(0) { 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)FadingControl::~FadingControl() { 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void FadingControl::OnTimerFired(uint32 timer_id) { 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (timer_id == timer_id_) { 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int32 new_alpha = transparency() + alpha_shift_; 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (new_alpha <= kTransparentAlpha) { 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Show(false, true); 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OnFadeOutComplete(); 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (new_alpha >= kOpaqueAlpha) { 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AdjustTransparency(kOpaqueAlpha, true); 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OnFadeInComplete(); 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AdjustTransparency(static_cast<uint8>(new_alpha), true); 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) timer_id_ = owner()->ScheduleTimer(id(), kFadingTimeoutMs); 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Fade In/Out control depending on visible flag over the time of time_ms. 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void FadingControl::Fade(bool show, uint32 time_ms) { 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(time_ms != 0); 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Check if we already in the same state. 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!visible() && !show) 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!visible() && show) { 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Show(show, false); 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AdjustTransparency(kTransparentAlpha, false); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OnFadeOutComplete(); 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (transparency() == kOpaqueAlpha && show) { 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OnFadeInComplete(); 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int delta = show ? kOpaqueAlpha - transparency() : transparency(); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) double shift = 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static_cast<double>(delta) * kFadingTimeoutMs / time_ms; 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (shift > delta) 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) alpha_shift_ = delta; 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) else 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) alpha_shift_ = static_cast<int>(ceil(shift)); 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (alpha_shift_ == 0) 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) alpha_shift_ = 1; 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // If disabling, make alpha shift negative. 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!show) 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) alpha_shift_ = -alpha_shift_; 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) timer_id_ = owner()->ScheduleTimer(id(), kFadingTimeoutMs); 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace chrome_pdf 76