OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.ui.resources.system; | 5 package org.chromium.ui.resources.system; |
6 | 6 |
7 import android.content.Context; | |
8 import android.content.res.Resources; | 7 import android.content.res.Resources; |
9 import android.graphics.Bitmap; | 8 import android.graphics.Bitmap; |
10 import android.graphics.Canvas; | 9 import android.graphics.Canvas; |
11 import android.graphics.Paint; | 10 import android.graphics.Paint; |
12 import android.graphics.Paint.Style; | 11 import android.graphics.Paint.Style; |
13 import android.graphics.RectF; | 12 import android.graphics.RectF; |
14 | 13 |
15 import org.chromium.ui.gfx.DeviceDisplayInfo; | |
16 import org.chromium.ui.resources.Resource; | 14 import org.chromium.ui.resources.Resource; |
17 import org.chromium.ui.resources.SystemUIResourceType; | 15 import org.chromium.ui.resources.SystemUIResourceType; |
18 import org.chromium.ui.resources.async.AsyncPreloadResourceLoader; | 16 import org.chromium.ui.resources.async.AsyncPreloadResourceLoader; |
19 import org.chromium.ui.resources.statics.StaticResource; | 17 import org.chromium.ui.resources.statics.StaticResource; |
20 | 18 |
21 /** | 19 /** |
22 * Handles loading system specific resources like overscroll and edge glows. | 20 * Handles loading system specific resources like overscroll and edge glows. |
23 */ | 21 */ |
24 public class SystemResourceLoader extends AsyncPreloadResourceLoader { | 22 public class SystemResourceLoader extends AsyncPreloadResourceLoader { |
25 private static final float SIN_PI_OVER_6 = 0.5f; | 23 private static final float SIN_PI_OVER_6 = 0.5f; |
26 private static final float COS_PI_OVER_6 = 0.866f; | 24 private static final float COS_PI_OVER_6 = 0.866f; |
27 | 25 |
28 /** | 26 /** |
29 * Creates an instance of a {@link SystemResourceLoader}. | 27 * Creates an instance of a {@link SystemResourceLoader}. |
30 * @param resourceType The resource type this loader is responsible for load ing. | 28 * @param resourceType The resource type this loader is responsible for load ing. |
31 * @param callback The {@link ResourceLoaderCallback} to notify when a { @link Resource} is | 29 * @param callback The {@link ResourceLoaderCallback} to notify when a { @link Resource} is |
32 * done loading. | 30 * done loading. |
33 * @param resources A {@link Resources} instance to load assets from. | 31 * @param minScreenSideLength The length of the smallest side of the scre en. |
Ted C
2015/11/11 00:19:45
I would suffix this with either Dp or Px depending
gsennton
2015/11/13 20:00:05
Done.
| |
34 */ | 32 */ |
35 public SystemResourceLoader(int resourceType, ResourceLoaderCallback callbac k, | 33 public SystemResourceLoader( |
36 final Context context) { | 34 int resourceType, ResourceLoaderCallback callback, final int minScre enSideLength) { |
37 super(resourceType, callback, new ResourceCreator() { | 35 super(resourceType, callback, new ResourceCreator() { |
38 @Override | 36 @Override |
39 public Resource create(int resId) { | 37 public Resource create(int resId) { |
40 return createResource(context, resId); | 38 return createResource(minScreenSideLength, resId); |
41 } | 39 } |
42 }); | 40 }); |
43 } | 41 } |
44 | 42 |
45 private static Resource createResource(Context context, int resId) { | 43 private static Resource createResource(int minScreenSideLength, int resId) { |
46 switch (resId) { | 44 switch (resId) { |
47 case SystemUIResourceType.OVERSCROLL_EDGE: | 45 case SystemUIResourceType.OVERSCROLL_EDGE: |
48 return StaticResource.create(Resources.getSystem(), | 46 return StaticResource.create(Resources.getSystem(), |
49 getResourceId("android:drawable/overscroll_edge"), 128, 12); | 47 getResourceId("android:drawable/overscroll_edge"), 128, 12); |
50 case SystemUIResourceType.OVERSCROLL_GLOW: | 48 case SystemUIResourceType.OVERSCROLL_GLOW: |
51 return StaticResource.create(Resources.getSystem(), | 49 return StaticResource.create(Resources.getSystem(), |
52 getResourceId("android:drawable/overscroll_glow"), 128, 64); | 50 getResourceId("android:drawable/overscroll_glow"), 128, 64); |
53 case SystemUIResourceType.OVERSCROLL_GLOW_L: | 51 case SystemUIResourceType.OVERSCROLL_GLOW_L: |
54 return createOverscrollGlowLBitmap(context); | 52 return createOverscrollGlowLBitmap(minScreenSideLength); |
55 | 53 |
56 default: | 54 default: |
57 assert false; | 55 assert false; |
58 } | 56 } |
59 return null; | 57 return null; |
60 } | 58 } |
61 | 59 |
62 private static Resource createOverscrollGlowLBitmap(Context context) { | 60 private static Resource createOverscrollGlowLBitmap(int minScreenSideLength) { |
63 DeviceDisplayInfo displayInfo = DeviceDisplayInfo.create(context); | 61 float arcWidth = minScreenSideLength * 0.5f / SIN_PI_OVER_6; |
64 int screenWidth = displayInfo.getPhysicalDisplayWidth() != 0 | |
65 ? displayInfo.getPhysicalDisplayWidth() : displayInfo.getDisplay Width(); | |
66 int screenHeight = displayInfo.getPhysicalDisplayHeight() != 0 | |
67 ? displayInfo.getPhysicalDisplayHeight() : displayInfo.getDispla yHeight(); | |
68 | |
69 float arcWidth = Math.min(screenWidth, screenHeight) * 0.5f / SIN_PI_OVE R_6; | |
70 float y = COS_PI_OVER_6 * arcWidth; | 62 float y = COS_PI_OVER_6 * arcWidth; |
71 float height = arcWidth - y; | 63 float height = arcWidth - y; |
72 | 64 |
73 float arcRectX = -arcWidth / 2.f; | 65 float arcRectX = -arcWidth / 2.f; |
74 float arcRectY = -arcWidth - y; | 66 float arcRectY = -arcWidth - y; |
75 float arcRectWidth = arcWidth * 2.f; | 67 float arcRectWidth = arcWidth * 2.f; |
76 float arcRectHeight = arcWidth * 2.f; | 68 float arcRectHeight = arcWidth * 2.f; |
77 RectF arcRect = new RectF( | 69 RectF arcRect = new RectF( |
78 arcRectX, arcRectY, arcRectX + arcRectWidth, arcRectY + arcRectH eight); | 70 arcRectX, arcRectY, arcRectX + arcRectWidth, arcRectY + arcRectH eight); |
79 | 71 |
80 Paint arcPaint = new Paint(); | 72 Paint arcPaint = new Paint(); |
81 arcPaint.setAntiAlias(true); | 73 arcPaint.setAntiAlias(true); |
82 arcPaint.setAlpha(0xBB); | 74 arcPaint.setAlpha(0xBB); |
83 arcPaint.setStyle(Style.FILL); | 75 arcPaint.setStyle(Style.FILL); |
84 | 76 |
85 Bitmap bitmap = Bitmap.createBitmap((int) arcWidth, (int) height, Bitmap .Config.ALPHA_8); | 77 Bitmap bitmap = Bitmap.createBitmap((int) arcWidth, (int) height, Bitmap .Config.ALPHA_8); |
86 Canvas canvas = new Canvas(bitmap); | 78 Canvas canvas = new Canvas(bitmap); |
87 canvas.drawArc(arcRect, 45, 90, true, arcPaint); | 79 canvas.drawArc(arcRect, 45, 90, true, arcPaint); |
88 | 80 |
89 return new StaticResource(bitmap); | 81 return new StaticResource(bitmap); |
90 } | 82 } |
91 | 83 |
92 private static int getResourceId(String name) { | 84 private static int getResourceId(String name) { |
93 Resources systemResources = Resources.getSystem(); | 85 Resources systemResources = Resources.getSystem(); |
94 return systemResources.getIdentifier(name, null, null); | 86 return systemResources.getIdentifier(name, null, null); |
95 } | 87 } |
96 } | 88 } |
OLD | NEW |