12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2011 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/layer_quad.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/quad_f.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)LayerQuad::Edge::Edge(const gfx::PointF& p, const gfx::PointF& q) { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(p != q); 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2dF tangent(p.y() - q.y(), q.x() - p.x()); 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float cross2 = p.x() * q.y() - q.x() * p.y(); 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set(tangent.x(), tangent.y(), cross2); 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scale(1.0f / tangent.Length()); 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)LayerQuad::LayerQuad(const gfx::QuadF& quad) { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create edges. 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) left_ = Edge(quad.p4(), quad.p1()); 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) right_ = Edge(quad.p2(), quad.p3()); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) top_ = Edge(quad.p1(), quad.p2()); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_ = Edge(quad.p3(), quad.p4()); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float sign = quad.IsCounterClockwise() ? -1 : 1; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) left_.scale(sign); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) right_.scale(sign); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) top_.scale(sign); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_.scale(sign); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)LayerQuad::LayerQuad(const Edge& left, 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Edge& top, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Edge& right, 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Edge& bottom) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : left_(left), 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) top_(top), 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) right_(right), 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_(bottom) {} 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::QuadF LayerQuad::ToQuadF() const { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::QuadF(left_.Intersect(top_), 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) top_.Intersect(right_), 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) right_.Intersect(bottom_), 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_.Intersect(left_)); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LayerQuad::ToFloatArray(float flattened[12]) const { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flattened[0] = left_.x(); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flattened[1] = left_.y(); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flattened[2] = left_.z(); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flattened[3] = top_.x(); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flattened[4] = top_.y(); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flattened[5] = top_.z(); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flattened[6] = right_.x(); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flattened[7] = right_.y(); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flattened[8] = right_.z(); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flattened[9] = bottom_.x(); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flattened[10] = bottom_.y(); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) flattened[11] = bottom_.z(); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 68