15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef UI_GFX_GEOMETRY_CUBIC_BEZIER_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define UI_GFX_GEOMETRY_CUBIC_BEZIER_H_ 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/macros.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/gfx_export.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace gfx { 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class GFX_EXPORT CubicBezier { 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CubicBezier(double x1, double y1, double x2, double y2); 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ~CubicBezier(); 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns an approximation of y at the given x. 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) double Solve(double x) const; 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Returns an approximation of dy/dx at the given x. 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) double Slope(double x) const; 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Sets |min| and |max| to the bezier's minimum and maximium y values in the 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // interval [0, 1]. 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void Range(double* min, double* max) const; 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) double x1_; 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) double y1_; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) double x2_; 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) double y2_; 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_ASSIGN(CubicBezier); 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace gfx 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // UI_GFX_GEOMETRY_CUBIC_BEZIER_H_ 40