| // Copyright 2023 The PDFium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "core/fxge/cfx_defaultrenderdevice.h" |
| |
| #include "core/fxcrt/fx_coordinates.h" |
| #include "core/fxcrt/retain_ptr.h" |
| #include "core/fxge/cfx_fillrenderoptions.h" |
| #include "core/fxge/cfx_graphstatedata.h" |
| #include "core/fxge/cfx_path.h" |
| #include "core/fxge/dib/cfx_dibitmap.h" |
| #include "core/fxge/dib/fx_dib.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| TEST(CFX_DefaultRenderDeviceTest, GetClipBox_Default) { |
| CFX_DefaultRenderDevice device; |
| ASSERT_TRUE(device.Create(/*width=*/16, /*height=*/16, FXDIB_Format::kArgb, |
| /*pBackdropBitmap=*/nullptr)); |
| |
| EXPECT_EQ(FX_RECT(0, 0, 16, 16), device.GetClipBox()); |
| } |
| |
| TEST(CFX_DefaultRenderDeviceTest, GetClipBox_PathFill) { |
| // Matrix that transposes and translates by 1 unit on each axis. |
| const CFX_Matrix object_to_device(0, 1, 1, 0, 1, -1); |
| |
| // Fill type cannot be none. |
| const CFX_FillRenderOptions fill_options( |
| CFX_FillRenderOptions::FillType::kEvenOdd); |
| |
| CFX_DefaultRenderDevice device; |
| ASSERT_TRUE(device.Create(/*width=*/16, /*height=*/16, FXDIB_Format::kArgb, |
| /*pBackdropBitmap=*/nullptr)); |
| |
| CFX_Path path; |
| path.AppendRect(2, 4, 14, 12); |
| EXPECT_TRUE(device.SetClip_PathFill(path, &object_to_device, fill_options)); |
| |
| EXPECT_EQ(FX_RECT(5, 1, 13, 13), device.GetClipBox()); |
| } |
| |
| TEST(CFX_DefaultRenderDeviceTest, GetClipBox_PathStroke) { |
| // Matrix that transposes and translates by 1 unit on each axis. |
| const CFX_Matrix object_to_device(0, 1, 1, 0, 1, -1); |
| |
| // Default line width is 1. |
| const CFX_GraphStateData graphics_state; |
| |
| CFX_DefaultRenderDevice device; |
| ASSERT_TRUE(device.Create(/*width=*/16, /*height=*/16, FXDIB_Format::kArgb, |
| /*pBackdropBitmap=*/nullptr)); |
| |
| CFX_Path path; |
| path.AppendRect(2, 4, 14, 12); |
| EXPECT_TRUE( |
| device.SetClip_PathStroke(path, &object_to_device, &graphics_state)); |
| |
| EXPECT_EQ(FX_RECT(4, 0, 14, 14), device.GetClipBox()); |
| } |
| |
| TEST(CFX_DefaultRenderDeviceTest, GetClipBox_Rect) { |
| CFX_DefaultRenderDevice device; |
| ASSERT_TRUE(device.Create(/*width=*/16, /*height=*/16, FXDIB_Format::kArgb, |
| /*pBackdropBitmap=*/nullptr)); |
| |
| EXPECT_TRUE(device.SetClip_Rect({2, 4, 14, 12})); |
| |
| EXPECT_EQ(FX_RECT(2, 4, 14, 12), device.GetClipBox()); |
| } |
| |
| TEST(CFX_DefaultRenderDeviceTest, GetClipBox_Empty) { |
| CFX_DefaultRenderDevice device; |
| ASSERT_TRUE(device.Create(/*width=*/16, /*height=*/16, FXDIB_Format::kArgb, |
| /*pBackdropBitmap=*/nullptr)); |
| |
| EXPECT_TRUE(device.SetClip_Rect({2, 8, 14, 8})); |
| |
| EXPECT_TRUE(device.GetClipBox().IsEmpty()); |
| } |