| Index: gfx/canvas_direct2d_unittest.cc
|
| ===================================================================
|
| --- gfx/canvas_direct2d_unittest.cc (revision 73487)
|
| +++ gfx/canvas_direct2d_unittest.cc (working copy)
|
| @@ -1,350 +0,0 @@
|
| -// Copyright (c) 2010 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.
|
| -
|
| -#include <windows.h>
|
| -#include <uxtheme.h>
|
| -#include <vsstyle.h>
|
| -#include <vssym32.h>
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/ref_counted_memory.h"
|
| -#include "base/resource_util.h"
|
| -#include "base/scoped_ptr.h"
|
| -#include "gfx/brush.h"
|
| -#include "gfx/canvas_direct2d.h"
|
| -#include "gfx/canvas_skia.h"
|
| -#include "gfx/codec/png_codec.h"
|
| -#include "gfx/native_theme_win.h"
|
| -#include "gfx/rect.h"
|
| -#include "gfx/win_util.h"
|
| -#include "grit/gfx_resources.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -
|
| -namespace {
|
| -
|
| -const char kVisibleModeFlag[] = "d2d-canvas-visible";
|
| -const wchar_t kWindowClassName[] = L"GFXD2DTestWindowClass";
|
| -
|
| -class TestWindow {
|
| - public:
|
| - static const int kWindowSize = 500;
|
| - static const int kWindowPosition = 10;
|
| -
|
| - TestWindow() : hwnd_(NULL) {
|
| - if (CommandLine::ForCurrentProcess()->HasSwitch(kVisibleModeFlag))
|
| - Sleep(1000);
|
| -
|
| - RegisterMyClass();
|
| -
|
| - hwnd_ = CreateWindowEx(0, kWindowClassName, NULL,
|
| - WS_OVERLAPPEDWINDOW,
|
| - kWindowPosition, kWindowPosition,
|
| - kWindowSize, kWindowSize,
|
| - NULL, NULL, NULL, this);
|
| - DCHECK(hwnd_);
|
| -
|
| - // Initialize the RenderTarget for the window.
|
| - rt_ = MakeHWNDRenderTarget();
|
| -
|
| - if (CommandLine::ForCurrentProcess()->HasSwitch(kVisibleModeFlag))
|
| - ShowWindow(hwnd(), SW_SHOW);
|
| - }
|
| - virtual ~TestWindow() {
|
| - if (CommandLine::ForCurrentProcess()->HasSwitch(kVisibleModeFlag))
|
| - Sleep(1000);
|
| - DestroyWindow(hwnd());
|
| - UnregisterMyClass();
|
| - }
|
| -
|
| - HWND hwnd() const { return hwnd_; }
|
| -
|
| - ID2D1RenderTarget* rt() const { return rt_.get(); }
|
| -
|
| - private:
|
| - ID2D1RenderTarget* MakeHWNDRenderTarget() {
|
| - D2D1_RENDER_TARGET_PROPERTIES rt_properties =
|
| - D2D1::RenderTargetProperties();
|
| - rt_properties.usage = D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE;
|
| -
|
| - ID2D1HwndRenderTarget* rt = NULL;
|
| - gfx::CanvasDirect2D::GetD2D1Factory()->CreateHwndRenderTarget(
|
| - rt_properties,
|
| - D2D1::HwndRenderTargetProperties(hwnd(), D2D1::SizeU(500, 500)),
|
| - &rt);
|
| - return rt;
|
| - }
|
| -
|
| - void RegisterMyClass() {
|
| - WNDCLASSEX class_ex;
|
| - class_ex.cbSize = sizeof(WNDCLASSEX);
|
| - class_ex.style = CS_DBLCLKS;
|
| - class_ex.lpfnWndProc = &DefWindowProc;
|
| - class_ex.cbClsExtra = 0;
|
| - class_ex.cbWndExtra = 0;
|
| - class_ex.hInstance = NULL;
|
| - class_ex.hIcon = NULL;
|
| - class_ex.hCursor = LoadCursor(NULL, IDC_ARROW);
|
| - class_ex.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_BACKGROUND);
|
| - class_ex.lpszMenuName = NULL;
|
| - class_ex.lpszClassName = kWindowClassName;
|
| - class_ex.hIconSm = class_ex.hIcon;
|
| - ATOM atom = RegisterClassEx(&class_ex);
|
| - DCHECK(atom);
|
| - }
|
| -
|
| - void UnregisterMyClass() {
|
| - ::UnregisterClass(kWindowClassName, NULL);
|
| - }
|
| -
|
| - HWND hwnd_;
|
| -
|
| - ScopedComPtr<ID2D1RenderTarget> rt_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TestWindow);
|
| -};
|
| -
|
| -// Loads a png data blob from the data resources associated with this
|
| -// executable, decodes it and returns a SkBitmap.
|
| -SkBitmap LoadBitmapFromResources(int resource_id) {
|
| - SkBitmap bitmap;
|
| -
|
| - HINSTANCE resource_instance = GetModuleHandle(NULL);
|
| - void* data_ptr;
|
| - size_t data_size;
|
| - if (base::GetDataResourceFromModule(resource_instance, resource_id, &data_ptr,
|
| - &data_size)) {
|
| - scoped_refptr<RefCountedMemory> memory(new RefCountedStaticMemory(
|
| - reinterpret_cast<const unsigned char*>(data_ptr), data_size));
|
| - if (!memory)
|
| - return bitmap;
|
| -
|
| - if (!gfx::PNGCodec::Decode(memory->front(), memory->size(), &bitmap))
|
| - NOTREACHED() << "Unable to decode theme image resource " << resource_id;
|
| - }
|
| - return bitmap;
|
| -}
|
| -
|
| -bool CheckForD2DCompatibility() {
|
| - if (!gfx::Direct2dIsAvailable()) {
|
| - LOG(WARNING) << "Test is disabled as it requires either Windows 7 or " <<
|
| - "Vista with Platform Update KB971644";
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -TEST(CanvasDirect2D, CreateCanvas) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, SaveRestoreNesting) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - // Simple.
|
| - canvas.Save();
|
| - canvas.Restore();
|
| -
|
| - // Nested.
|
| - canvas.Save();
|
| - canvas.Save();
|
| - canvas.Restore();
|
| - canvas.Restore();
|
| -
|
| - // Simple alpha.
|
| - canvas.SaveLayerAlpha(127);
|
| - canvas.Restore();
|
| -
|
| - // Alpha with sub-rect.
|
| - canvas.SaveLayerAlpha(127, gfx::Rect(20, 20, 100, 100));
|
| - canvas.Restore();
|
| -
|
| - // Nested alpha.
|
| - canvas.Save();
|
| - canvas.SaveLayerAlpha(127);
|
| - canvas.Save();
|
| - canvas.Restore();
|
| - canvas.Restore();
|
| - canvas.Restore();
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, SaveLayerAlpha) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - canvas.Save();
|
| - canvas.FillRectInt(SK_ColorBLUE, 20, 20, 100, 100);
|
| - canvas.SaveLayerAlpha(127);
|
| - canvas.FillRectInt(SK_ColorRED, 60, 60, 100, 100);
|
| - canvas.Restore();
|
| - canvas.Restore();
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, SaveLayerAlphaWithBounds) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - canvas.Save();
|
| - canvas.FillRectInt(SK_ColorBLUE, 20, 20, 100, 100);
|
| - canvas.SaveLayerAlpha(127, gfx::Rect(60, 60, 50, 50));
|
| - canvas.FillRectInt(SK_ColorRED, 60, 60, 100, 100);
|
| - canvas.Restore();
|
| - canvas.Restore();
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, FillRect) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - canvas.FillRectInt(SK_ColorRED, 20, 20, 100, 100);
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, PlatformPainting) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - gfx::NativeDrawingContext dc = canvas.BeginPlatformPaint();
|
| -
|
| - // Use the system theme engine to draw a native button. This only works on a
|
| - // GDI device context.
|
| - RECT r = { 20, 20, 220, 80 };
|
| - gfx::NativeTheme::instance()->PaintButton(
|
| - dc, BP_PUSHBUTTON, PBS_NORMAL, DFCS_BUTTONPUSH, &r);
|
| -
|
| - canvas.EndPlatformPaint();
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, ClipRect) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - canvas.FillRectInt(SK_ColorGREEN, 0, 0, 500, 500);
|
| - canvas.ClipRectInt(20, 20, 120, 120);
|
| - canvas.FillRectInt(SK_ColorBLUE, 0, 0, 500, 500);
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, ClipRectWithTranslate) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - // Repeat the same rendering as in ClipRect...
|
| - canvas.Save();
|
| - canvas.FillRectInt(SK_ColorGREEN, 0, 0, 500, 500);
|
| - canvas.ClipRectInt(20, 20, 120, 120);
|
| - canvas.FillRectInt(SK_ColorBLUE, 0, 0, 500, 500);
|
| - canvas.Restore();
|
| -
|
| - // ... then translate, clip and fill again relative to the new origin.
|
| - canvas.Save();
|
| - canvas.TranslateInt(150, 150);
|
| - canvas.ClipRectInt(10, 10, 110, 110);
|
| - canvas.FillRectInt(SK_ColorRED, 0, 0, 500, 500);
|
| - canvas.Restore();
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, ClipRectWithScale) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - // Repeat the same rendering as in ClipRect...
|
| - canvas.Save();
|
| - canvas.FillRectInt(SK_ColorGREEN, 0, 0, 500, 500);
|
| - canvas.ClipRectInt(20, 20, 120, 120);
|
| - canvas.FillRectInt(SK_ColorBLUE, 0, 0, 500, 500);
|
| - canvas.Restore();
|
| -
|
| - // ... then translate and scale, clip and fill again relative to the new
|
| - // origin.
|
| - canvas.Save();
|
| - canvas.TranslateInt(150, 150);
|
| - canvas.ScaleInt(2, 2);
|
| - canvas.ClipRectInt(10, 10, 110, 110);
|
| - canvas.FillRectInt(SK_ColorRED, 0, 0, 500, 500);
|
| - canvas.Restore();
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, DrawRectInt) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - canvas.Save();
|
| - canvas.DrawRectInt(SK_ColorRED, 10, 10, 200, 200);
|
| - canvas.Restore();
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, DrawLineInt) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - canvas.Save();
|
| - canvas.DrawLineInt(SK_ColorRED, 10, 10, 210, 210);
|
| - canvas.Restore();
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, DrawBitmapInt) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - SkBitmap bitmap = LoadBitmapFromResources(IDR_BITMAP_BRUSH_IMAGE);
|
| -
|
| - canvas.Save();
|
| - canvas.DrawBitmapInt(bitmap, 100, 100);
|
| - canvas.Restore();
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, DrawBitmapInt2) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - SkBitmap bitmap = LoadBitmapFromResources(IDR_BITMAP_BRUSH_IMAGE);
|
| -
|
| - canvas.Save();
|
| - canvas.DrawBitmapInt(bitmap, 5, 5, 30, 30, 10, 10, 30, 30, false);
|
| - canvas.DrawBitmapInt(bitmap, 5, 5, 30, 30, 110, 110, 100, 100, true);
|
| - canvas.DrawBitmapInt(bitmap, 5, 5, 30, 30, 220, 220, 100, 100, false);
|
| - canvas.Restore();
|
| -}
|
| -
|
| -TEST(CanvasDirect2D, TileImageInt) {
|
| - if (!CheckForD2DCompatibility())
|
| - return;
|
| - TestWindow window;
|
| - gfx::CanvasDirect2D canvas(window.rt());
|
| -
|
| - SkBitmap bitmap = LoadBitmapFromResources(IDR_BITMAP_BRUSH_IMAGE);
|
| -
|
| - canvas.Save();
|
| - canvas.TileImageInt(bitmap, 10, 10, 300, 300);
|
| - canvas.Restore();
|
| -}
|
|
|