| Index: ui/gfx/canvas_skia_win.cc
|
| ===================================================================
|
| --- ui/gfx/canvas_skia_win.cc (revision 82144)
|
| +++ ui/gfx/canvas_skia_win.cc (working copy)
|
| @@ -275,16 +275,6 @@
|
|
|
| namespace gfx {
|
|
|
| -CanvasSkia::CanvasSkia(int width, int height, bool is_opaque)
|
| - : skia::PlatformCanvas(width, height, is_opaque) {
|
| -}
|
| -
|
| -CanvasSkia::CanvasSkia() : skia::PlatformCanvas() {
|
| -}
|
| -
|
| -CanvasSkia::~CanvasSkia() {
|
| -}
|
| -
|
| // static
|
| void CanvasSkia::SizeStringInt(const string16& text,
|
| const gfx::Font& font,
|
| @@ -330,7 +320,7 @@
|
| int x, int y, int w, int h,
|
| int flags) {
|
| SkRect fclip;
|
| - if (!getClipBounds(&fclip))
|
| + if (!skia_canvas_->getClipBounds(&fclip))
|
| return;
|
| RECT text_bounds = { x, y, x + w, y + h };
|
| SkIRect clip;
|
| @@ -345,7 +335,7 @@
|
| const int kMaxStringLength = 32768 - 1; // So the trailing \0 fits in 32K.
|
| string16 clamped_string(text.substr(0, kMaxStringLength));
|
|
|
| - HDC dc = beginPlatformPaint();
|
| + HDC dc = BeginPlatformPaint();
|
| SetBkMode(dc, TRANSPARENT);
|
| HFONT old_font = (HFONT)SelectObject(dc, font);
|
| COLORREF brush_color = RGB(SkColorGetR(color), SkColorGetG(color),
|
| @@ -354,7 +344,7 @@
|
|
|
| int f = ComputeFormatFlags(flags, clamped_string);
|
| DoDrawText(dc, clamped_string, &text_bounds, f);
|
| - endPlatformPaint();
|
| + EndPlatformPaint();
|
|
|
| // Restore the old font. This way we don't have to worry if the caller
|
| // deletes the font and the DC lives longer.
|
| @@ -363,8 +353,7 @@
|
| // 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.
|
| - getTopPlatformDevice().makeOpaque(clip.fLeft, clip.fTop,
|
| - clip.width(), clip.height());
|
| + skia::MakeOpaque(clip, skia_canvas_.get());
|
| }
|
|
|
| void CanvasSkia::DrawStringInt(const string16& text,
|
| @@ -415,7 +404,10 @@
|
|
|
| // Create a temporary buffer filled with the halo color. It must leave room
|
| // for the 1-pixel border around the text.
|
| - CanvasSkia text_canvas(w + 2, h + 2, true);
|
| + CanvasSkia text_canvas;
|
| + if (!text_canvas.Init(w + 2, h + 2, true))
|
| + return;
|
| +
|
| SkPaint bkgnd_paint;
|
| bkgnd_paint.setColor(halo_color);
|
| text_canvas.DrawRectInt(0, 0, w + 2, h + 2, bkgnd_paint);
|
| @@ -428,11 +420,11 @@
|
| // opaque. We have to do this first since pixelShouldGetHalo will check for
|
| // 0 to see if a pixel has been modified to transparent, and black text that
|
| // Windows draw will look transparent to it!
|
| - text_canvas.getTopPlatformDevice().makeOpaque(0, 0, w + 2, h + 2);
|
| + skia::MakeOpaque(SkIRect::MakeWH(w + 2, h + 2), text_canvas.skia_canvas());
|
|
|
| uint32_t halo_premul = SkPreMultiplyColor(halo_color);
|
| SkBitmap& text_bitmap = const_cast<SkBitmap&>(
|
| - text_canvas.getTopPlatformDevice().accessBitmap(true));
|
| + text_canvas.skia_canvas()->getTopDevice()->accessBitmap(true));
|
| for (int cur_y = 0; cur_y < h + 2; cur_y++) {
|
| uint32_t* text_row = text_bitmap.getAddr32(0, cur_y);
|
| for (int cur_x = 0; cur_x < w + 2; cur_x++) {
|
| @@ -531,7 +523,7 @@
|
|
|
| // Move the origin to |display_rect.origin()|. This simplifies all the
|
| // drawing so that both the source and destination can be (0,0).
|
| - save(kMatrix_SaveFlag);
|
| + skia_canvas_->save(SkCanvas::kMatrix_SaveFlag);
|
| TranslateInt(display_rect.x(), display_rect.y());
|
|
|
| gfx::Rect solid_part(gfx::Point(), display_rect.size());
|
| @@ -563,25 +555,35 @@
|
| display_rect.width(), display_rect.height(), false, NULL));
|
| DCHECK(gradient_bitmap.get());
|
|
|
| - HDC hdc = beginPlatformPaint();
|
| + HDC hdc = BeginPlatformPaint();
|
| if (is_truncating_head)
|
| DrawTextGradientPart(hdc, *gradient_bitmap, text, color, gray_scale_font,
|
| text_rect, head_part, is_rtl, flags);
|
| if (is_truncating_tail)
|
| DrawTextGradientPart(hdc, *gradient_bitmap, text, color, gray_scale_font,
|
| text_rect, tail_part, !is_rtl, flags);
|
| - endPlatformPaint();
|
| + EndPlatformPaint();
|
|
|
| // Draw the solid part.
|
| - save(kClip_SaveFlag);
|
| + skia_canvas_->save(SkCanvas::kClip_SaveFlag);
|
| ClipRectInt(solid_part.x(), solid_part.y(),
|
| solid_part.width(), solid_part.height());
|
| DrawStringInt(text, font, color,
|
| text_rect.x(), text_rect.y(),
|
| text_rect.width(), text_rect.height(),
|
| flags);
|
| - restore();
|
| - restore();
|
| + skia_canvas_->restore();
|
| + skia_canvas_->restore();
|
| }
|
|
|
| +void CanvasSkia::BlitToNativeContext(const Rect& src_rect,
|
| + const Point& dst_origin,
|
| + NativeDrawingContext dst_context) {
|
| + skia::BitmapPlatformDevice* device =
|
| + static_cast<skia::BitmapPlatformDevice*>(skia_canvas_->getTopDevice());
|
| + device->drawToHDC(dst_context, dst_origin.x(), dst_origin.y(),
|
| + &src_rect.ToRECT());
|
| +}
|
| +
|
| } // namespace gfx
|
| +
|
|
|