12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 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) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef UI_GFX_GEOMETRY_INSETS_BASE_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define UI_GFX_GEOMETRY_INSETS_BASE_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/gfx_export.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace gfx { 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// An insets represents the borders of a container (the space the container must 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// leave at each of its edges). 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template<typename Class, typename Type> 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class GFX_EXPORT InsetsBase { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type top() const { return top_; } 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type left() const { return left_; } 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type bottom() const { return bottom_; } 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type right() const { return right_; } 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the total width taken up by the insets, which is the sum of the 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // left and right insets. 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type width() const { return left_ + right_; } 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the total height taken up by the insets, which is the sum of the 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // top and bottom insets. 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type height() const { return top_ + bottom_; } 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if the insets are empty. 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool empty() const { return width() == 0 && height() == 0; } 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Set(Type top, Type left, Type bottom, Type right) { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) top_ = top; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) left_ = left; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_ = bottom; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) right_ = right; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator==(const Class& insets) const { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return top_ == insets.top_ && left_ == insets.left_ && 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_ == insets.bottom_ && right_ == insets.right_; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator!=(const Class& insets) const { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return !(*this == insets); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void operator+=(const Class& insets) { 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) top_ += insets.top_; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) left_ += insets.left_; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_ += insets.bottom_; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) right_ += insets.right_; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Class operator-() const { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Class(-top_, -left_, -bottom_, -right_); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InsetsBase(Type top, Type left, Type bottom, Type right) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : top_(top), 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) left_(left), 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bottom_(bottom), 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) right_(right) {} 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Destructor is intentionally made non virtual and protected. 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Do not make this public. 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~InsetsBase() {} 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type top_; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type left_; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type bottom_; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type right_; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace gfx 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // UI_GFX_GEOMETRY_INSETS_BASE_H_ 81