1*635a8641SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker
5*635a8641SAndroid Build Coastguard Worker #include "ui/gfx/geometry/dip_util.h"
6*635a8641SAndroid Build Coastguard Worker
7*635a8641SAndroid Build Coastguard Worker #include "ui/gfx/geometry/insets.h"
8*635a8641SAndroid Build Coastguard Worker #include "ui/gfx/geometry/point.h"
9*635a8641SAndroid Build Coastguard Worker #include "ui/gfx/geometry/point_conversions.h"
10*635a8641SAndroid Build Coastguard Worker #include "ui/gfx/geometry/point_f.h"
11*635a8641SAndroid Build Coastguard Worker #include "ui/gfx/geometry/rect.h"
12*635a8641SAndroid Build Coastguard Worker #include "ui/gfx/geometry/rect_conversions.h"
13*635a8641SAndroid Build Coastguard Worker #include "ui/gfx/geometry/size.h"
14*635a8641SAndroid Build Coastguard Worker #include "ui/gfx/geometry/size_conversions.h"
15*635a8641SAndroid Build Coastguard Worker
16*635a8641SAndroid Build Coastguard Worker namespace gfx {
17*635a8641SAndroid Build Coastguard Worker
ConvertInsetsToDIP(float scale_factor,const gfx::Insets & insets_in_pixel)18*635a8641SAndroid Build Coastguard Worker Insets ConvertInsetsToDIP(float scale_factor,
19*635a8641SAndroid Build Coastguard Worker const gfx::Insets& insets_in_pixel) {
20*635a8641SAndroid Build Coastguard Worker if (scale_factor == 1.f)
21*635a8641SAndroid Build Coastguard Worker return insets_in_pixel;
22*635a8641SAndroid Build Coastguard Worker return insets_in_pixel.Scale(1.f / scale_factor);
23*635a8641SAndroid Build Coastguard Worker }
24*635a8641SAndroid Build Coastguard Worker
ConvertPointToDIP(float scale_factor,const Point & point_in_pixel)25*635a8641SAndroid Build Coastguard Worker Point ConvertPointToDIP(float scale_factor, const Point& point_in_pixel) {
26*635a8641SAndroid Build Coastguard Worker if (scale_factor == 1.f)
27*635a8641SAndroid Build Coastguard Worker return point_in_pixel;
28*635a8641SAndroid Build Coastguard Worker return ScaleToFlooredPoint(point_in_pixel, 1.f / scale_factor);
29*635a8641SAndroid Build Coastguard Worker }
30*635a8641SAndroid Build Coastguard Worker
ConvertPointToDIP(float scale_factor,const PointF & point_in_pixel)31*635a8641SAndroid Build Coastguard Worker PointF ConvertPointToDIP(float scale_factor, const PointF& point_in_pixel) {
32*635a8641SAndroid Build Coastguard Worker if (scale_factor == 1.f)
33*635a8641SAndroid Build Coastguard Worker return point_in_pixel;
34*635a8641SAndroid Build Coastguard Worker return ScalePoint(point_in_pixel, 1.f / scale_factor);
35*635a8641SAndroid Build Coastguard Worker }
36*635a8641SAndroid Build Coastguard Worker
ConvertSizeToDIP(float scale_factor,const Size & size_in_pixel)37*635a8641SAndroid Build Coastguard Worker Size ConvertSizeToDIP(float scale_factor, const Size& size_in_pixel) {
38*635a8641SAndroid Build Coastguard Worker if (scale_factor == 1.f)
39*635a8641SAndroid Build Coastguard Worker return size_in_pixel;
40*635a8641SAndroid Build Coastguard Worker return ScaleToFlooredSize(size_in_pixel, 1.f / scale_factor);
41*635a8641SAndroid Build Coastguard Worker }
42*635a8641SAndroid Build Coastguard Worker
ConvertRectToDIP(float scale_factor,const Rect & rect_in_pixel)43*635a8641SAndroid Build Coastguard Worker Rect ConvertRectToDIP(float scale_factor, const Rect& rect_in_pixel) {
44*635a8641SAndroid Build Coastguard Worker if (scale_factor == 1.f)
45*635a8641SAndroid Build Coastguard Worker return rect_in_pixel;
46*635a8641SAndroid Build Coastguard Worker return ToFlooredRectDeprecated(
47*635a8641SAndroid Build Coastguard Worker ScaleRect(RectF(rect_in_pixel), 1.f / scale_factor));
48*635a8641SAndroid Build Coastguard Worker }
49*635a8641SAndroid Build Coastguard Worker
ConvertInsetsToPixel(float scale_factor,const gfx::Insets & insets_in_dip)50*635a8641SAndroid Build Coastguard Worker Insets ConvertInsetsToPixel(float scale_factor,
51*635a8641SAndroid Build Coastguard Worker const gfx::Insets& insets_in_dip) {
52*635a8641SAndroid Build Coastguard Worker if (scale_factor == 1.f)
53*635a8641SAndroid Build Coastguard Worker return insets_in_dip;
54*635a8641SAndroid Build Coastguard Worker return insets_in_dip.Scale(scale_factor);
55*635a8641SAndroid Build Coastguard Worker }
56*635a8641SAndroid Build Coastguard Worker
ConvertPointToPixel(float scale_factor,const Point & point_in_dip)57*635a8641SAndroid Build Coastguard Worker Point ConvertPointToPixel(float scale_factor, const Point& point_in_dip) {
58*635a8641SAndroid Build Coastguard Worker if (scale_factor == 1.f)
59*635a8641SAndroid Build Coastguard Worker return point_in_dip;
60*635a8641SAndroid Build Coastguard Worker return ScaleToFlooredPoint(point_in_dip, scale_factor);
61*635a8641SAndroid Build Coastguard Worker }
62*635a8641SAndroid Build Coastguard Worker
ConvertPointToPixel(float scale_factor,const PointF & point_in_dip)63*635a8641SAndroid Build Coastguard Worker PointF ConvertPointToPixel(float scale_factor, const PointF& point_in_dip) {
64*635a8641SAndroid Build Coastguard Worker if (scale_factor == 1.f)
65*635a8641SAndroid Build Coastguard Worker return point_in_dip;
66*635a8641SAndroid Build Coastguard Worker return ScalePoint(point_in_dip, scale_factor);
67*635a8641SAndroid Build Coastguard Worker }
68*635a8641SAndroid Build Coastguard Worker
ConvertSizeToPixel(float scale_factor,const Size & size_in_dip)69*635a8641SAndroid Build Coastguard Worker Size ConvertSizeToPixel(float scale_factor, const Size& size_in_dip) {
70*635a8641SAndroid Build Coastguard Worker if (scale_factor == 1.f)
71*635a8641SAndroid Build Coastguard Worker return size_in_dip;
72*635a8641SAndroid Build Coastguard Worker return ScaleToFlooredSize(size_in_dip, scale_factor);
73*635a8641SAndroid Build Coastguard Worker }
74*635a8641SAndroid Build Coastguard Worker
ConvertRectToPixel(float scale_factor,const Rect & rect_in_dip)75*635a8641SAndroid Build Coastguard Worker Rect ConvertRectToPixel(float scale_factor, const Rect& rect_in_dip) {
76*635a8641SAndroid Build Coastguard Worker // Use ToEnclosingRect() to ensure we paint all the possible pixels
77*635a8641SAndroid Build Coastguard Worker // touched. ToEnclosingRect() floors the origin, and ceils the max
78*635a8641SAndroid Build Coastguard Worker // coordinate. To do otherwise (such as flooring the size) potentially
79*635a8641SAndroid Build Coastguard Worker // results in rounding down and not drawing all the pixels that are
80*635a8641SAndroid Build Coastguard Worker // touched.
81*635a8641SAndroid Build Coastguard Worker if (scale_factor == 1.f)
82*635a8641SAndroid Build Coastguard Worker return rect_in_dip;
83*635a8641SAndroid Build Coastguard Worker return ToEnclosingRect(
84*635a8641SAndroid Build Coastguard Worker RectF(ScalePoint(gfx::PointF(rect_in_dip.origin()), scale_factor),
85*635a8641SAndroid Build Coastguard Worker ScaleSize(gfx::SizeF(rect_in_dip.size()), scale_factor)));
86*635a8641SAndroid Build Coastguard Worker }
87*635a8641SAndroid Build Coastguard Worker
88*635a8641SAndroid Build Coastguard Worker } // namespace gfx
89