| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 #include "chrome/browser/android/vr_shell/textures/url_bar_texture.h" | 5 #include "chrome/browser/android/vr_shell/textures/url_bar_texture.h" |
| 6 | 6 |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "cc/paint/skia_paint_canvas.h" | 8 #include "cc/paint/skia_paint_canvas.h" |
| 9 #include "components/security_state/core/security_state.h" | 9 #include "components/security_state/core/security_state.h" |
| 10 #include "ui/gfx/canvas.h" | 10 #include "ui/gfx/canvas.h" |
| 11 #include "ui/gfx/font.h" | 11 #include "ui/gfx/font.h" |
| 12 #include "ui/gfx/font_list.h" | 12 #include "ui/gfx/font_list.h" |
| 13 #include "ui/gfx/geometry/point_f.h" |
| 13 #include "ui/gfx/geometry/rect.h" | 14 #include "ui/gfx/geometry/rect.h" |
| 15 #include "ui/gfx/geometry/rect_f.h" |
| 14 #include "ui/gfx/paint_vector_icon.h" | 16 #include "ui/gfx/paint_vector_icon.h" |
| 15 #include "ui/gfx/render_text.h" | 17 #include "ui/gfx/render_text.h" |
| 16 #include "ui/gfx/vector_icon_types.h" | 18 #include "ui/gfx/vector_icon_types.h" |
| 17 #include "ui/vector_icons/vector_icons.h" | 19 #include "ui/vector_icons/vector_icons.h" |
| 18 | 20 |
| 19 namespace vr_shell { | 21 namespace vr_shell { |
| 20 | 22 |
| 21 namespace { | 23 namespace { |
| 22 | 24 |
| 23 static constexpr SkColor kBackground = 0xCCAAAAAA; | 25 // TODO(mthiesse): These values are all wrong. The UX spec is unclear. |
| 24 static constexpr SkColor kBackgroundHover = 0xCCDDDDDD; | 26 static constexpr SkColor kBackground = 0x66D6D6D6; |
| 25 static constexpr SkColor kForeground = 0xCC444444; | 27 static constexpr SkColor kBackgroundHover = 0x6EF0F0F0; |
| 26 static constexpr SkColor kSeparatorColor = 0x51000000; | 28 static constexpr SkColor kBackgroundDown = 0x76F6F6F6; |
| 29 static constexpr SkColor kForeground = 0xFF333333; |
| 30 static constexpr SkColor kSeparatorColor = 0x33000000; |
| 27 | 31 |
| 28 static constexpr SkColor kInfoOutlineIconColor = 0xFF5A5A5A; | 32 static constexpr SkColor kInfoOutlineIconColor = 0xFF5A5A5A; |
| 29 static constexpr SkColor kLockIconColor = 0xFF0B8043; | 33 static constexpr SkColor kLockIconColor = 0xFF0B8043; |
| 30 static constexpr SkColor kWarningIconColor = 0xFFC73821; | 34 static constexpr SkColor kWarningIconColor = 0xFFC73821; |
| 31 | 35 |
| 32 static constexpr float kWidth = 0.672; | 36 static constexpr float kWidth = 0.672; |
| 33 static constexpr float kHeight = 0.088; | 37 static constexpr float kHeight = 0.088; |
| 34 static constexpr float kFontHeight = 0.027; | 38 static constexpr float kFontHeight = 0.027; |
| 35 static constexpr float kBackButtonWidth = kHeight; | 39 static constexpr float kBackButtonWidth = kHeight; |
| 36 static constexpr float kBackIconHeight = 0.05; | 40 static constexpr float kBackIconHeight = 0.05; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 67 case SecurityLevel::SECURE: | 71 case SecurityLevel::SECURE: |
| 68 case SecurityLevel::EV_SECURE: | 72 case SecurityLevel::EV_SECURE: |
| 69 return kLockIconColor; | 73 return kLockIconColor; |
| 70 case SecurityLevel::SECURE_WITH_POLICY_INSTALLED_CERT: | 74 case SecurityLevel::SECURE_WITH_POLICY_INSTALLED_CERT: |
| 71 case SecurityLevel::DANGEROUS: | 75 case SecurityLevel::DANGEROUS: |
| 72 default: | 76 default: |
| 73 return kWarningIconColor; | 77 return kWarningIconColor; |
| 74 } | 78 } |
| 75 } | 79 } |
| 76 | 80 |
| 81 gfx::PointF percentToMeters(const gfx::PointF& percent) { |
| 82 return gfx::PointF(percent.x() * kWidth, percent.y() * kHeight); |
| 83 } |
| 84 |
| 77 } // namespace | 85 } // namespace |
| 78 | 86 |
| 79 UrlBarTexture::UrlBarTexture() : security_level_(SecurityLevel::DANGEROUS) {} | 87 UrlBarTexture::UrlBarTexture() : security_level_(SecurityLevel::DANGEROUS) {} |
| 80 | 88 |
| 81 UrlBarTexture::~UrlBarTexture() = default; | 89 UrlBarTexture::~UrlBarTexture() = default; |
| 82 | 90 |
| 83 void UrlBarTexture::SetURL(const GURL& gurl) { | 91 void UrlBarTexture::SetURL(const GURL& gurl) { |
| 84 if (gurl_ != gurl) | 92 if (gurl_ != gurl) |
| 85 set_dirty(); | 93 set_dirty(); |
| 86 gurl_ = gurl; | 94 gurl_ = gurl; |
| 87 } | 95 } |
| 88 | 96 |
| 89 void UrlBarTexture::SetSecurityLevel(int level) { | 97 void UrlBarTexture::SetSecurityLevel(int level) { |
| 90 if (&getSecurityIcon(security_level_) != &getSecurityIcon(level)) | 98 if (&getSecurityIcon(security_level_) != &getSecurityIcon(level)) |
| 91 set_dirty(); | 99 set_dirty(); |
| 92 security_level_ = level; | 100 security_level_ = level; |
| 93 } | 101 } |
| 94 | 102 |
| 95 float UrlBarTexture::ToPixels(float meters) const { | 103 float UrlBarTexture::ToPixels(float meters) const { |
| 96 return meters * size_.width() / kWidth; | 104 return meters * size_.width() / kWidth; |
| 97 } | 105 } |
| 98 | 106 |
| 107 bool UrlBarTexture::HitsBackButton(const gfx::PointF& position) const { |
| 108 const gfx::PointF& meters = percentToMeters(position); |
| 109 gfx::RectF rect(gfx::PointF(0, 0), gfx::SizeF(kBackButtonWidth, kHeight)); |
| 110 return rect.Contains(meters) && !HitsTransparentRegion(meters, true); |
| 111 } |
| 112 |
| 113 bool UrlBarTexture::HitsUrlBar(const gfx::PointF& position) const { |
| 114 const gfx::PointF& meters = percentToMeters(position); |
| 115 gfx::RectF rect(gfx::PointF(kBackButtonWidth, 0), |
| 116 gfx::SizeF(kWidth - kBackButtonWidth, kHeight)); |
| 117 return rect.Contains(meters) && !HitsTransparentRegion(meters, false); |
| 118 } |
| 119 |
| 120 bool UrlBarTexture::HitsTransparentRegion(const gfx::PointF& meters, |
| 121 bool left) const { |
| 122 const float radius = kHeight / 2.0f; |
| 123 gfx::PointF circle_center(left ? radius : kWidth - radius, radius); |
| 124 if (!left && meters.x() < circle_center.x()) |
| 125 return false; |
| 126 if (left && meters.x() > circle_center.x()) |
| 127 return false; |
| 128 return (meters - circle_center).LengthSquared() > radius * radius; |
| 129 } |
| 130 |
| 99 void UrlBarTexture::Draw(SkCanvas* canvas, const gfx::Size& texture_size) { | 131 void UrlBarTexture::Draw(SkCanvas* canvas, const gfx::Size& texture_size) { |
| 100 size_.set_height(texture_size.height()); | 132 size_.set_height(texture_size.height()); |
| 101 size_.set_width(texture_size.width()); | 133 size_.set_width(texture_size.width()); |
| 102 | 134 |
| 103 canvas->save(); | 135 canvas->save(); |
| 104 canvas->scale(size_.width() / kWidth, size_.width() / kWidth); | 136 canvas->scale(size_.width() / kWidth, size_.width() / kWidth); |
| 105 | 137 |
| 106 // Make a gfx canvas to support utility drawing methods. | 138 // Make a gfx canvas to support utility drawing methods. |
| 107 cc::SkiaPaintCanvas paint_canvas(canvas); | 139 cc::SkiaPaintCanvas paint_canvas(canvas); |
| 108 gfx::Canvas gfx_canvas(&paint_canvas, 1.0f); | 140 gfx::Canvas gfx_canvas(&paint_canvas, 1.0f); |
| 109 | 141 |
| 110 // Back button area. | 142 // Back button area. |
| 111 SkRRect round_rect; | 143 SkRRect round_rect; |
| 112 SkVector rounded_corner = {kHeight / 2, kHeight / 2}; | 144 SkVector rounded_corner = {kHeight / 2, kHeight / 2}; |
| 113 SkVector left_corners[4] = {rounded_corner, {0, 0}, {0, 0}, rounded_corner}; | 145 SkVector left_corners[4] = {rounded_corner, {0, 0}, {0, 0}, rounded_corner}; |
| 114 round_rect.setRectRadii({0, 0, kHeight, kHeight}, left_corners); | 146 round_rect.setRectRadii({0, 0, kHeight, kHeight}, left_corners); |
| 147 SkColor color = |
| 148 (GetDrawFlags() & FLAG_BACK_HOVER) ? kBackgroundHover : kBackground; |
| 149 color = (GetDrawFlags() & FLAG_BACK_DOWN) ? kBackgroundDown : color; |
| 115 SkPaint paint; | 150 SkPaint paint; |
| 116 paint.setColor((GetDrawFlags() & FLAG_HOVER) ? kBackgroundHover | 151 paint.setColor(color); |
| 117 : kBackground); | |
| 118 canvas->drawRRect(round_rect, paint); | 152 canvas->drawRRect(round_rect, paint); |
| 119 | 153 |
| 120 // URL area. | 154 // URL area. |
| 121 paint.setColor(kBackground); | 155 paint.setColor(kBackground); |
| 122 SkVector right_corners[4] = {{0, 0}, rounded_corner, rounded_corner, {0, 0}}; | 156 SkVector right_corners[4] = {{0, 0}, rounded_corner, rounded_corner, {0, 0}}; |
| 123 round_rect.setRectRadii({kHeight, 0, kWidth, kHeight}, right_corners); | 157 round_rect.setRectRadii({kHeight, 0, kWidth, kHeight}, right_corners); |
| 124 canvas->drawRRect(round_rect, paint); | 158 canvas->drawRRect(round_rect, paint); |
| 125 | 159 |
| 126 // Back button / URL separator vertical line. | 160 // Back button / URL separator vertical line. |
| 127 paint.setColor(kSeparatorColor); | 161 paint.setColor(kSeparatorColor); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 return size_; | 218 return size_; |
| 185 } | 219 } |
| 186 | 220 |
| 187 bool UrlBarTexture::SetDrawFlags(int draw_flags) { | 221 bool UrlBarTexture::SetDrawFlags(int draw_flags) { |
| 188 if (draw_flags != GetDrawFlags()) | 222 if (draw_flags != GetDrawFlags()) |
| 189 set_dirty(); | 223 set_dirty(); |
| 190 return UiTexture::SetDrawFlags(draw_flags); | 224 return UiTexture::SetDrawFlags(draw_flags); |
| 191 } | 225 } |
| 192 | 226 |
| 193 } // namespace vr_shell | 227 } // namespace vr_shell |
| OLD | NEW |