LibreOffice Module android (master) 1
ViewportMetrics.java
Go to the documentation of this file.
1/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
2 * This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6package org.mozilla.gecko.gfx;
7
8import android.graphics.PointF;
9import android.graphics.RectF;
10import android.util.DisplayMetrics;
11
12import org.json.JSONException;
13import org.json.JSONObject;
14
19public class ViewportMetrics {
20 private static final String LOGTAG = "GeckoViewportMetrics";
21
22 private RectF mPageRect;
23 private RectF mCssPageRect;
24 private RectF mViewportRect;
25 private float mZoomFactor;
26
27 public ViewportMetrics(DisplayMetrics metrics) {
28 mPageRect = new RectF(0, 0, metrics.widthPixels, metrics.heightPixels);
29 mCssPageRect = new RectF(0, 0, metrics.widthPixels, metrics.heightPixels);
30 mViewportRect = new RectF(0, 0, metrics.widthPixels, metrics.heightPixels);
31 mZoomFactor = 1.0f;
32 }
33
35 mPageRect = new RectF(viewport.getPageRect());
36 mCssPageRect = new RectF(viewport.getCssPageRect());
37 mViewportRect = new RectF(viewport.getViewport());
38 mZoomFactor = viewport.getZoomFactor();
39 }
40
42 mPageRect = new RectF(viewport.pageRectLeft,
43 viewport.pageRectTop,
44 viewport.pageRectRight,
45 viewport.pageRectBottom);
46 mCssPageRect = new RectF(viewport.cssPageRectLeft,
47 viewport.cssPageRectTop,
48 viewport.cssPageRectRight,
49 viewport.cssPageRectBottom);
50 mViewportRect = new RectF(viewport.viewportRectLeft,
51 viewport.viewportRectTop,
52 viewport.viewportRectRight,
53 viewport.viewportRectBottom);
54 mZoomFactor = viewport.zoomFactor;
55 }
56
57 public ViewportMetrics(JSONObject json) throws JSONException {
58 float x = (float)json.getDouble("x");
59 float y = (float)json.getDouble("y");
60 float width = (float)json.getDouble("width");
61 float height = (float)json.getDouble("height");
62 float pageLeft = (float)json.getDouble("pageLeft");
63 float pageTop = (float)json.getDouble("pageTop");
64 float pageRight = (float)json.getDouble("pageRight");
65 float pageBottom = (float)json.getDouble("pageBottom");
66 float cssPageLeft = (float)json.getDouble("cssPageLeft");
67 float cssPageTop = (float)json.getDouble("cssPageTop");
68 float cssPageRight = (float)json.getDouble("cssPageRight");
69 float cssPageBottom = (float)json.getDouble("cssPageBottom");
70 float zoom = (float)json.getDouble("zoom");
71
72 mPageRect = new RectF(pageLeft, pageTop, pageRight, pageBottom);
73 mCssPageRect = new RectF(cssPageLeft, cssPageTop, cssPageRight, cssPageBottom);
74 mViewportRect = new RectF(x, y, x + width, y + height);
75 mZoomFactor = zoom;
76 }
77
78 public ViewportMetrics(float x, float y, float width, float height,
79 float pageLeft, float pageTop, float pageRight, float pageBottom,
80 float cssPageLeft, float cssPageTop, float cssPageRight, float cssPageBottom,
81 float zoom) {
82 mPageRect = new RectF(pageLeft, pageTop, pageRight, pageBottom);
83 mCssPageRect = new RectF(cssPageLeft, cssPageTop, cssPageRight, cssPageBottom);
84 mViewportRect = new RectF(x, y, x + width, y + height);
85 mZoomFactor = zoom;
86 }
87
88 public PointF getOrigin() {
89 return new PointF(mViewportRect.left, mViewportRect.top);
90 }
91
92 public FloatSize getSize() {
93 return new FloatSize(mViewportRect.width(), mViewportRect.height());
94 }
95
96 public RectF getViewport() {
97 return mViewportRect;
98 }
99
100 public RectF getCssViewport() {
102 }
103
104 public RectF getPageRect() {
105 return mPageRect;
106 }
107
108 public RectF getCssPageRect() {
109 return mCssPageRect;
110 }
111
112 public float getZoomFactor() {
113 return mZoomFactor;
114 }
115
116 public void setPageRect(RectF pageRect, RectF cssPageRect) {
117 mPageRect = pageRect;
118 mCssPageRect = cssPageRect;
119 }
120
121 public void setViewport(RectF viewport) {
122 mViewportRect = viewport;
123 }
124
125 public void setOrigin(PointF origin) {
126 mViewportRect.set(origin.x, origin.y,
127 origin.x + mViewportRect.width(),
128 origin.y + mViewportRect.height());
129 }
130
131 public void setSize(FloatSize size) {
132 mViewportRect.right = mViewportRect.left + size.width;
133 mViewportRect.bottom = mViewportRect.top + size.height;
134 }
135
136 public void setZoomFactor(float zoomFactor) {
137 mZoomFactor = zoomFactor;
138 }
139
140 public String toJSON() {
141 // Round off height and width. Since the height and width are the size of the screen, it
142 // makes no sense to send non-integer coordinates to Gecko.
143 int height = Math.round(mViewportRect.height());
144 int width = Math.round(mViewportRect.width());
145
146 StringBuffer sb = new StringBuffer(512);
147 sb.append("{ \"x\" : ").append(mViewportRect.left)
148 .append(", \"y\" : ").append(mViewportRect.top)
149 .append(", \"width\" : ").append(width)
150 .append(", \"height\" : ").append(height)
151 .append(", \"pageLeft\" : ").append(mPageRect.left)
152 .append(", \"pageTop\" : ").append(mPageRect.top)
153 .append(", \"pageRight\" : ").append(mPageRect.right)
154 .append(", \"pageBottom\" : ").append(mPageRect.bottom)
155 .append(", \"cssPageLeft\" : ").append(mCssPageRect.left)
156 .append(", \"cssPageTop\" : ").append(mCssPageRect.top)
157 .append(", \"cssPageRight\" : ").append(mCssPageRect.right)
158 .append(", \"cssPageBottom\" : ").append(mCssPageRect.bottom)
159 .append(", \"zoom\" : ").append(mZoomFactor)
160 .append(" }");
161 return sb.toString();
162 }
163
164 @Override
165 public String toString() {
166 StringBuffer buff = new StringBuffer(256);
167 buff.append("v=").append(mViewportRect.toString())
168 .append(" p=").append(mPageRect.toString())
169 .append(" c=").append(mCssPageRect.toString())
170 .append(" z=").append(mZoomFactor);
171 return buff.toString();
172 }
173}
ImmutableViewportMetrics are used to store the viewport metrics in way that we can access a version o...
static RectF scale(RectF rect, float scale)
Definition: RectUtils.java:44
ViewportMetrics manages state and contains some utility functions related to the page viewport for th...
ViewportMetrics(ViewportMetrics viewport)
ViewportMetrics(DisplayMetrics metrics)
ViewportMetrics(float x, float y, float width, float height, float pageLeft, float pageTop, float pageRight, float pageBottom, float cssPageLeft, float cssPageTop, float cssPageRight, float cssPageBottom, float zoom)
ViewportMetrics(ImmutableViewportMetrics viewport)
void setPageRect(RectF pageRect, RectF cssPageRect)
float y
float x
size