Home | History | Annotate | Download | only in gfx
      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 #import <Cocoa/Cocoa.h>
      6 
      7 #include "ui/gfx/canvas.h"
      8 
      9 #include "base/logging.h"
     10 #include "base/strings/sys_string_conversions.h"
     11 #include "third_party/skia/include/core/SkTypeface.h"
     12 #include "ui/gfx/font.h"
     13 #include "ui/gfx/rect.h"
     14 
     15 // Note: This is a temporary Skia-based implementation of the ui/gfx text
     16 // rendering routines for views/aura. It replaces the stale Cocoa-based
     17 // implementation. A future |canvas_skia.cc| implementation will supersede
     18 // this and the other platform-specific implmenentations. Most drawing options,
     19 // such as alignment, multi-line, and line heights are not implemented here.
     20 
     21 namespace {
     22 
     23 SkTypeface::Style FontTypefaceStyle(const gfx::Font& font) {
     24   int style = 0;
     25   if (font.GetStyle() & gfx::Font::BOLD)
     26     style |= SkTypeface::kBold;
     27   if (font.GetStyle() & gfx::Font::ITALIC)
     28     style |= SkTypeface::kItalic;
     29 
     30   return static_cast<SkTypeface::Style>(style);
     31 }
     32 
     33 }  // namespace
     34 
     35 namespace gfx {
     36 
     37 // static
     38 void Canvas::SizeStringInt(const base::string16& text,
     39                            const gfx::Font& font,
     40                            int* width,
     41                            int* height,
     42                            int line_height,
     43                            int flags) {
     44   DLOG_IF(WARNING, line_height != 0) << "Line heights not implemented.";
     45   DLOG_IF(WARNING, flags & Canvas::MULTI_LINE) << "Multi-line not implemented.";
     46 
     47   NSFont* native_font = font.GetNativeFont();
     48   NSString* ns_string = base::SysUTF16ToNSString(text);
     49   NSDictionary* attributes =
     50       [NSDictionary dictionaryWithObject:native_font
     51                                   forKey:NSFontAttributeName];
     52   NSSize string_size = [ns_string sizeWithAttributes:attributes];
     53   *width = string_size.width;
     54   *height = font.GetHeight();
     55 }
     56 
     57 void Canvas::DrawStringWithShadows(const base::string16& text,
     58                                    const gfx::Font& font,
     59                                    SkColor color,
     60                                    const gfx::Rect& text_bounds,
     61                                    int line_height,
     62                                    int flags,
     63                                    const ShadowValues& shadows) {
     64   DLOG_IF(WARNING, line_height != 0) << "Line heights not implemented.";
     65   DLOG_IF(WARNING, flags & Canvas::MULTI_LINE) << "Multi-line not implemented.";
     66   DLOG_IF(WARNING, !shadows.empty()) << "Text shadows not implemented.";
     67 
     68   skia::RefPtr<SkTypeface> typeface = skia::AdoptRef(
     69       SkTypeface::CreateFromName(
     70           font.GetFontName().c_str(), FontTypefaceStyle(font)));
     71   SkPaint paint;
     72   paint.setTypeface(typeface.get());
     73   paint.setColor(color);
     74   canvas_->drawText(text.c_str(),
     75                     text.size() * sizeof(base::string16::value_type),
     76                     text_bounds.x(),
     77                     text_bounds.bottom(),
     78                     paint);
     79 }
     80 
     81 void Canvas::DrawStringWithHalo(const base::string16& text,
     82                                 const gfx::Font& font,
     83                                 SkColor text_color,
     84                                 SkColor halo_color,
     85                                 int x, int y, int w, int h,
     86                                 int flags) {
     87 }
     88 
     89 }  // namespace gfx
     90