summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorflackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-12 20:15:58 +0000
committerflackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-12 20:15:58 +0000
commitd7c919661c7da112647ebc96ad353f71ec2ea201 (patch)
tree609767c6bbb3bfcee4241fe403aa1e2104fa5e28 /ui
parent01534b667f92d5ebd7b90e69365a9e58bc35b1fe (diff)
downloadchromium_src-d7c919661c7da112647ebc96ad353f71ec2ea201.zip
chromium_src-d7c919661c7da112647ebc96ad353f71ec2ea201.tar.gz
chromium_src-d7c919661c7da112647ebc96ad353f71ec2ea201.tar.bz2
Revert 117461 - Reimplement CanvasSkiaMac in terms of pure Skia for demo purposes
This was failing gfx_unittests: TextEliderTest.TestFilenameEliding and TextEliderTest.ElideRectangleText. The existing Cocoa-based implementation of CanvasSkia is stale and broken. The Mac/Aura shell work needs basic text rendering to properly render views Button controls. The changes here provide a minimal working implementation to this end. A larger effort to render UI text using pure Skia is underway and will eventually replace canvas_skia_(mac|win|linux|...).cc with a single canvas_skia_skia.cc. BUG=None TEST=Manual using Mac/Aura shell, observe text button text appearance. R=asvitkine@chromium.org, ben@chromium.org Review URL: http://codereview.chromium.org/9185022 TBR=dhollowa@chromium.org Review URL: http://codereview.chromium.org/9186044 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@117493 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r--ui/gfx/canvas_skia.h4
-rw-r--r--ui/gfx/canvas_skia_mac.mm113
2 files changed, 59 insertions, 58 deletions
diff --git a/ui/gfx/canvas_skia.h b/ui/gfx/canvas_skia.h
index f83daa5..9c0f82e 100644
--- a/ui/gfx/canvas_skia.h
+++ b/ui/gfx/canvas_skia.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -84,6 +84,7 @@ class UI_EXPORT CanvasSkia : public Canvas {
void DrawGdkPixbuf(GdkPixbuf* pixbuf, int x, int y);
#endif
+#if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MACOSX))
// Draws text with a 1-pixel halo around it of the given color.
// On Windows, it allows ClearType to be drawn to an otherwise transparenct
// bitmap for drag images. Drag images have only 1-bit of transparency, so
@@ -96,6 +97,7 @@ class UI_EXPORT CanvasSkia : public Canvas {
const SkColor& halo_color,
int x, int y, int w, int h,
int flags);
+#endif
// Extracts a bitmap from the contents of this canvas.
SkBitmap ExtractBitmap() const;
diff --git a/ui/gfx/canvas_skia_mac.mm b/ui/gfx/canvas_skia_mac.mm
index ad3167a..8018295 100644
--- a/ui/gfx/canvas_skia_mac.mm
+++ b/ui/gfx/canvas_skia_mac.mm
@@ -1,55 +1,33 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#import <Cocoa/Cocoa.h>
+
#include "ui/gfx/canvas_skia.h"
-#include "base/logging.h"
-#include "third_party/skia/include/core/SkTypeface.h"
+#include "base/mac/mac_util.h"
+#include "base/mac/scoped_cftyperef.h"
+#include "base/sys_string_conversions.h"
+#include "third_party/skia/include/core/SkShader.h"
#include "ui/gfx/font.h"
-
-// Note: This is a temporary Skia-based implementation of the ui/gfx text
-// rendering routines for views/aura. It replaces the stale Cocoa-based
-// implementation. A future |canvas_skia_skia.cc| implementation will supersede
-// this and the other platform-specific implmenentations.
-// Most drawing options, such as alignment and multi-line, are not implemented
-// here.
-
-namespace {
-
-SkTypeface::Style FontTypefaceStyle(const gfx::Font& font) {
- int style = 0;
- if (font.GetStyle() & gfx::Font::BOLD)
- style |= SkTypeface::kBold;
- if (font.GetStyle() & gfx::Font::ITALIC)
- style |= SkTypeface::kItalic;
-
- return static_cast<SkTypeface::Style>(style);
-}
-
-} // namespace
+#include "ui/gfx/rect.h"
namespace gfx {
// static
void CanvasSkia::SizeStringInt(const string16& text,
const gfx::Font& font,
- int* width,
- int* height,
+ int* width, int* height,
int flags) {
- SkTypeface* typeface = SkTypeface::CreateFromName(font.GetFontName().c_str(),
- FontTypefaceStyle(font));
- SkPaint paint;
- paint.setTypeface(typeface);
- SkRect bounds;
- bounds.setEmpty();
- paint.measureText(text.c_str(),
- text.size() * sizeof(string16::value_type),
- &bounds,
- 0);
- typeface->unref();
- *width = SkScalarCeilToInt(bounds.width());
- *height = SkScalarCeilToInt(bounds.height());
+ NSFont* native_font = font.GetNativeFont();
+ NSString* ns_string = base::SysUTF16ToNSString(text);
+ NSDictionary* attributes =
+ [NSDictionary dictionaryWithObject:native_font
+ forKey:NSFontAttributeName];
+ NSSize string_size = [ns_string sizeWithAttributes:attributes];
+ *width = string_size.width;
+ *height = font.GetHeight();
}
void CanvasSkia::DrawStringInt(const string16& text,
@@ -57,28 +35,49 @@ void CanvasSkia::DrawStringInt(const string16& text,
const SkColor& color,
int x, int y, int w, int h,
int flags) {
- SkTypeface* typeface = SkTypeface::CreateFromName(font.GetFontName().c_str(),
- FontTypefaceStyle(font));
- SkPaint paint;
- paint.setTypeface(typeface);
- typeface->unref();
- paint.setColor(color);
- canvas_->drawText(text.c_str(),
- text.size() * sizeof(string16::value_type),
- x,
- y + h,
- paint);
-}
+ if (!IntersectsClipRectInt(x, y, w, h))
+ return;
+
+ skia::ScopedPlatformPaint scoped_platform_paint(canvas_);
+ CGContextRef context = scoped_platform_paint.GetPlatformSurface();
+ CGContextSaveGState(context);
+
+ NSColor* ns_color = [NSColor colorWithDeviceRed:SkColorGetR(color) / 255.0
+ green:SkColorGetG(color) / 255.0
+ blue:SkColorGetB(color) / 255.0
+ alpha:SkColorGetA(color) / 255.0];
+ NSMutableParagraphStyle *ns_style =
+ [[[NSMutableParagraphStyle alloc] init] autorelease];
+ if (flags & TEXT_ALIGN_CENTER)
+ [ns_style setAlignment:NSCenterTextAlignment];
+ // TODO(awalker): Implement the rest of the Canvas text flags
+
+ NSDictionary* attributes =
+ [NSDictionary dictionaryWithObjectsAndKeys:
+ font.GetNativeFont(), NSFontAttributeName,
+ ns_color, NSForegroundColorAttributeName,
+ ns_style, NSParagraphStyleAttributeName,
+ nil];
+
+ NSAttributedString* ns_string =
+ [[[NSAttributedString alloc] initWithString:base::SysUTF16ToNSString(text)
+ attributes:attributes] autorelease];
+ base::mac::ScopedCFTypeRef<CTFramesetterRef> framesetter(
+ CTFramesetterCreateWithAttributedString(
+ base::mac::NSToCFCast(ns_string)));
+
+ CGRect text_bounds = CGRectMake(x, y, w, h);
+ base::mac::ScopedCFTypeRef<CGMutablePathRef> path(CGPathCreateMutable());
+ CGPathAddRect(path, NULL, text_bounds);
-void CanvasSkia::DrawStringWithHalo(const string16& text,
- const gfx::Font& font,
- const SkColor& text_color,
- const SkColor& halo_color,
- int x, int y, int w, int h,
- int flags) {
+ base::mac::ScopedCFTypeRef<CTFrameRef> frame(
+ CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL));
+ CTFrameDraw(frame, context);
+ CGContextRestoreGState(context);
}
ui::TextureID CanvasSkia::GetTextureID() {
+ // TODO(wjmaclean)
return 0;
}