Index: ui/gfx/canvas_skia_win.cc |
diff --git a/ui/gfx/canvas_skia_win.cc b/ui/gfx/canvas_skia_win.cc |
index 76fe318f117efe0ad2882f72122a26e4e1f816df..65ea67d5e791d948bf27e3fe02d39efe764bb34d 100644 |
--- a/ui/gfx/canvas_skia_win.cc |
+++ b/ui/gfx/canvas_skia_win.cc |
@@ -16,6 +16,7 @@ |
#include "ui/gfx/color_utils.h" |
#include "ui/gfx/font.h" |
#include "ui/gfx/rect.h" |
+#include "ui/gfx/render_text.h" |
namespace { |
@@ -380,6 +381,45 @@ void CanvasSkia::DrawStringInt(const string16& text, |
DrawStringInt(text, font.GetNativeFont(), color, x, y, w, h, flags); |
} |
+// TODO(msw): Copied from another DrawStringInt. Dig in, understand, and unify. |
+void CanvasSkia::DrawStringInt(const gfx::RenderText& render_text) { |
+ SkRect fclip; |
+ if (!getClipBounds(&fclip)) |
+ return; |
+ const gfx::Rect& r = render_text.get_display_rect(); |
+ RECT text_bounds = { r.x(), r.y(), r.x() + r.width(), r.y() + r.height() }; |
+ SkIRect clip; |
+ fclip.round(&clip); |
+ if (!clip.intersect(skia::RECTToSkIRect(text_bounds))) |
+ return; |
+ |
+ // TODO(msw): Necessary with Uniscribe? |
+ // Clamp the max amount of text we'll draw to 32K. There seem to be bugs in |
+ // DrawText() if you e.g. ask it to character-break a no-whitespace string of |
+ // length > 43680 (for which it draws nothing), and since we clamped to 2K in |
+ // SizeStringInt() we're unlikely to be able to display this much anyway. |
+ const int kMaxStringLength = 32768 - 1; // So the trailing \0 fits in 32K. |
+ string16 clamped_string(render_text.text().substr(0, kMaxStringLength)); |
+ |
+ HDC dc; |
+ { |
+ // TODO(msw): Fix. |
+ skia::ScopedPlatformPaint scoped_platform_paint(this); |
+ dc = scoped_platform_paint.GetPlatformSurface(); |
+ SetBkMode(dc, TRANSPARENT); |
+ //int f = ComputeFormatFlags(flags, clamped_string); |
+ //DoDrawText(dc, clamped_string, &text_bounds, f); |
+ render_text.Draw(dc); |
+ } |
+ |
+ // TODO(msw): Necessary with Uniscribe? |
+ // Windows will have cleared the alpha channel of the text we drew. Assume |
+ // we're drawing to an opaque surface, or at least the text rect area is |
+ // opaque. |
+ skia::MakeOpaque(this, clip.fLeft, clip.fTop, clip.width(), |
+ clip.height()); |
+} |
+ |
// Checks each pixel immediately adjacent to the given pixel in the bitmap. If |
// any of them are not the halo color, returns true. This defines the halo of |
// pixels that will appear around the text. Note that we have to check each |