1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/ui/omnibox/location_bar_util.h" 6 7 #include "base/i18n/rtl.h" 8 #include "base/strings/string_util.h" 9 #include "chrome/browser/extensions/extension_action.h" 10 #include "third_party/skia/include/core/SkPaint.h" 11 #include "third_party/skia/include/effects/SkGradientShader.h" 12 #include "ui/gfx/canvas.h" 13 #include "ui/gfx/color_utils.h" 14 #include "ui/gfx/rect.h" 15 #include "ui/gfx/text_elider.h" 16 17 namespace location_bar_util { 18 19 base::string16 CalculateMinString(const base::string16& description) { 20 // Chop at the first '.' or whitespace. 21 const size_t dot_index = description.find('.'); 22 const size_t ws_index = description.find_first_of(base::kWhitespaceUTF16); 23 size_t chop_index = std::min(dot_index, ws_index); 24 base::string16 min_string; 25 if (chop_index == base::string16::npos) { 26 // No dot or whitespace, truncate to at most 3 chars. 27 min_string = gfx::TruncateString(description, 3); 28 } else { 29 min_string = description.substr(0, chop_index); 30 } 31 base::i18n::AdjustStringForLocaleDirection(&min_string); 32 return min_string; 33 } 34 35 36 void PaintExtensionActionBackground(const ExtensionAction& action, 37 int tab_id, 38 gfx::Canvas* canvas, 39 const gfx::Rect& bounds, 40 SkColor text_color, 41 SkColor background_color) { 42 if (!action.WantsAttention(tab_id)) 43 return; 44 45 SkPoint gradient_bounds[2] = { {SkIntToScalar(bounds.x()), 46 SkIntToScalar(bounds.y())}, 47 {SkIntToScalar(bounds.x()), 48 SkIntToScalar(bounds.bottom())} }; 49 SkColor gradient_colors[2] = { 50 color_utils::AlphaBlend(text_color, background_color, 0x13), 51 color_utils::AlphaBlend(text_color, background_color, 0x1d) 52 }; 53 skia::RefPtr<SkShader> gradient = skia::AdoptRef( 54 SkGradientShader::CreateLinear(gradient_bounds, gradient_colors, 55 NULL, 2, SkShader::kClamp_TileMode)); 56 SkPaint paint; 57 paint.setShader(gradient.get()); 58 canvas->DrawRect(bounds, paint); 59 60 SkColor border_color = 61 color_utils::AlphaBlend(text_color, background_color, 0x55); 62 canvas->DrawLine(bounds.origin(), 63 gfx::Point(bounds.x(), bounds.bottom()), 64 border_color); 65 // "-1" because gfx::Rects are half-open, not including their right or 66 // bottom edges. 67 canvas->DrawLine(gfx::Point(bounds.right() - 1, bounds.y()), 68 gfx::Point(bounds.right() - 1, bounds.bottom()), 69 border_color); 70 } 71 72 } // namespace location_bar_util 73