diff --git a/BUILD.gn b/BUILD.gn
index d8da9de..beb6ec3 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1317,7 +1317,6 @@
       "xfa/fwl/cfwl_widgetproperties.h",
       "xfa/fwl/cfx_barcode.cpp",
       "xfa/fwl/cfx_barcode.h",
-      "xfa/fwl/fwl_error.h",
       "xfa/fwl/fwl_widgetdef.h",
       "xfa/fwl/fwl_widgethit.h",
       "xfa/fwl/ifwl_adaptertimermgr.h",
@@ -1704,8 +1703,6 @@
       "xfa/fxfa/xfa_ffwidgethandler.h",
       "xfa/fxfa/xfa_fontmgr.h",
       "xfa/fxfa/xfa_rendercontext.h",
-      "xfa/fxgraphics/cagg_graphics.cpp",
-      "xfa/fxgraphics/cagg_graphics.h",
       "xfa/fxgraphics/cfx_color.cpp",
       "xfa/fxgraphics/cfx_color.h",
       "xfa/fxgraphics/cfx_graphics.cpp",
diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index c51cc2b..c67948d 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -95,8 +95,7 @@
     return;
 
   if (pPage->GetContext()->GetDocType() == DOCTYPE_DYNAMIC_XFA) {
-    CFX_Graphics gs;
-    gs.Create(pDevice);
+    CFX_Graphics gs(pDevice);
     CFX_RectF rectClip(static_cast<FX_FLOAT>(pClip.left),
                        static_cast<FX_FLOAT>(pClip.top),
                        static_cast<FX_FLOAT>(pClip.Width()),
diff --git a/fpdfsdk/cpdfsdk_xfawidgethandler.cpp b/fpdfsdk/cpdfsdk_xfawidgethandler.cpp
index 41c21e0..653eb8a 100644
--- a/fpdfsdk/cpdfsdk_xfawidgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_xfawidgethandler.cpp
@@ -53,8 +53,7 @@
   ASSERT(pPageView);
   ASSERT(pAnnot);
 
-  CFX_Graphics gs;
-  gs.Create(pDevice);
+  CFX_Graphics gs(pDevice);
 
   CFX_Matrix mt = *pUser2Device;
   bool bIsHighlight = false;
diff --git a/xfa/fwl/cfwl_datetimeedit.h b/xfa/fwl/cfwl_datetimeedit.h
index bde14dd..923ad05 100644
--- a/xfa/fwl/cfwl_datetimeedit.h
+++ b/xfa/fwl/cfwl_datetimeedit.h
@@ -12,7 +12,6 @@
 #include "xfa/fwl/cfwl_edit.h"
 #include "xfa/fwl/cfwl_widget.h"
 #include "xfa/fwl/cfwl_widgetproperties.h"
-#include "xfa/fwl/fwl_error.h"
 
 class CFWL_DateTimeEdit : public CFWL_Edit {
  public:
diff --git a/xfa/fwl/cfwl_event.h b/xfa/fwl/cfwl_event.h
index 9a9f30a..e326ab3 100644
--- a/xfa/fwl/cfwl_event.h
+++ b/xfa/fwl/cfwl_event.h
@@ -12,7 +12,6 @@
 #include "core/fxcrt/fx_system.h"
 #include "xfa/fwl/cfwl_messagekey.h"
 #include "xfa/fwl/cfwl_messagemouse.h"
-#include "xfa/fwl/fwl_error.h"
 
 class CFX_Graphics;
 class CFWL_Widget;
diff --git a/xfa/fwl/cfwl_message.h b/xfa/fwl/cfwl_message.h
index 67e1f05..778e1e2 100644
--- a/xfa/fwl/cfwl_message.h
+++ b/xfa/fwl/cfwl_message.h
@@ -12,7 +12,6 @@
 #include "core/fxcrt/fx_basic.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
-#include "xfa/fwl/fwl_error.h"
 
 class CFWL_Widget;
 
diff --git a/xfa/fwl/cfwl_widgetmgr.h b/xfa/fwl/cfwl_widgetmgr.h
index 02dbf46..2d436bd 100644
--- a/xfa/fwl/cfwl_widgetmgr.h
+++ b/xfa/fwl/cfwl_widgetmgr.h
@@ -12,7 +12,6 @@
 #include <vector>
 
 #include "core/fxcrt/fx_system.h"
-#include "xfa/fwl/fwl_error.h"
 #include "xfa/fwl/ifwl_widgetmgrdelegate.h"
 #include "xfa/fxgraphics/cfx_graphics.h"
 
diff --git a/xfa/fwl/fwl_error.h b/xfa/fwl/fwl_error.h
deleted file mode 100644
index 8ef56d9..0000000
--- a/xfa/fwl/fwl_error.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FWL_FWL_ERROR_H_
-#define XFA_FWL_FWL_ERROR_H_
-
-enum class FWL_Error {
-  Succeeded = 0,
-  Indefinite,
-  ParameterInvalid,
-  PropertyInvalid,
-  IntermediateValueInvalid,
-  MethodNotSupported
-};
-
-#endif  // XFA_FWL_FWL_ERROR_H_
diff --git a/xfa/fwl/theme/cfwl_widgettp.h b/xfa/fwl/theme/cfwl_widgettp.h
index 794c67b..c819507 100644
--- a/xfa/fwl/theme/cfwl_widgettp.h
+++ b/xfa/fwl/theme/cfwl_widgettp.h
@@ -14,7 +14,6 @@
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_system.h"
 #include "xfa/fgas/font/cfgas_gefont.h"
-#include "xfa/fwl/fwl_error.h"
 #include "xfa/fwl/theme/cfwl_utils.h"
 #include "xfa/fxgraphics/cfx_graphics.h"
 
diff --git a/xfa/fxfa/app/xfa_ffwidget.cpp b/xfa/fxfa/app/xfa_ffwidget.cpp
index e0c70a5..1ffd712 100644
--- a/xfa/fxfa/app/xfa_ffwidget.cpp
+++ b/xfa/fxfa/app/xfa_ffwidget.cpp
@@ -1566,22 +1566,22 @@
   FX_ARGB crStart, crEnd;
   crStart = fill.GetColor();
   int32_t iType = fill.GetPattern(crEnd);
-  FX_HatchStyle iHatch = FX_HATCHSTYLE_Cross;
+  FX_HatchStyle iHatch = FX_HatchStyle::Cross;
   switch (iType) {
     case XFA_ATTRIBUTEENUM_CrossDiagonal:
-      iHatch = FX_HATCHSTYLE_DiagonalCross;
+      iHatch = FX_HatchStyle::DiagonalCross;
       break;
     case XFA_ATTRIBUTEENUM_DiagonalLeft:
-      iHatch = FX_HATCHSTYLE_ForwardDiagonal;
+      iHatch = FX_HatchStyle::ForwardDiagonal;
       break;
     case XFA_ATTRIBUTEENUM_DiagonalRight:
-      iHatch = FX_HATCHSTYLE_BackwardDiagonal;
+      iHatch = FX_HatchStyle::BackwardDiagonal;
       break;
     case XFA_ATTRIBUTEENUM_Horizontal:
-      iHatch = FX_HATCHSTYLE_Horizontal;
+      iHatch = FX_HatchStyle::Horizontal;
       break;
     case XFA_ATTRIBUTEENUM_Vertical:
-      iHatch = FX_HATCHSTYLE_Vertical;
+      iHatch = FX_HatchStyle::Vertical;
       break;
     default:
       break;
diff --git a/xfa/fxfa/app/xfa_fwladapter.h b/xfa/fxfa/app/xfa_fwladapter.h
index 406709b..c68fb70 100644
--- a/xfa/fxfa/app/xfa_fwladapter.h
+++ b/xfa/fxfa/app/xfa_fwladapter.h
@@ -9,7 +9,6 @@
 
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_system.h"
-#include "xfa/fwl/fwl_error.h"
 
 class CFWL_Widget;
 
diff --git a/xfa/fxgraphics/cagg_graphics.cpp b/xfa/fxgraphics/cagg_graphics.cpp
deleted file mode 100644
index 5d1f563..0000000
--- a/xfa/fxgraphics/cagg_graphics.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fxgraphics/cagg_graphics.h"
-
-CAGG_Graphics::CAGG_Graphics() : m_owner(nullptr) {}
-
-FWL_Error CAGG_Graphics::Create(CFX_Graphics* owner,
-                                int32_t width,
-                                int32_t height,
-                                FXDIB_Format format) {
-  if (owner->m_renderDevice)
-    return FWL_Error::ParameterInvalid;
-  if (m_owner)
-    return FWL_Error::PropertyInvalid;
-
-  CFX_FxgeDevice* device = new CFX_FxgeDevice;
-  device->Create(width, height, format, nullptr);
-  m_owner = owner;
-  m_owner->m_renderDevice = device;
-  m_owner->m_renderDevice->GetBitmap()->Clear(0xFFFFFFFF);
-  return FWL_Error::Succeeded;
-}
-
-CAGG_Graphics::~CAGG_Graphics() {
-  delete m_owner->m_renderDevice;
-}
diff --git a/xfa/fxgraphics/cagg_graphics.h b/xfa/fxgraphics/cagg_graphics.h
deleted file mode 100644
index 9f57a72..0000000
--- a/xfa/fxgraphics/cagg_graphics.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXGRAPHICS_CAGG_GRAPHICS_H_
-#define XFA_FXGRAPHICS_CAGG_GRAPHICS_H_
-
-#include "core/fxge/fx_dib.h"
-#include "xfa/fxgraphics/cfx_graphics.h"
-
-class CFX_Graphics;
-
-class CAGG_Graphics {
- public:
-  CAGG_Graphics();
-  virtual ~CAGG_Graphics();
-
-  FWL_Error Create(CFX_Graphics* owner,
-                   int32_t width,
-                   int32_t height,
-                   FXDIB_Format format);
-
- private:
-  CFX_Graphics* m_owner;
-};
-
-#endif  // XFA_FXGRAPHICS_CAGG_GRAPHICS_H_
diff --git a/xfa/fxgraphics/cfx_color.cpp b/xfa/fxgraphics/cfx_color.cpp
index 2044b76..36025a8 100644
--- a/xfa/fxgraphics/cfx_color.cpp
+++ b/xfa/fxgraphics/cfx_color.cpp
@@ -24,26 +24,23 @@
   m_type = FX_COLOR_None;
 }
 
-FWL_Error CFX_Color::Set(const FX_ARGB argb) {
+void CFX_Color::Set(const FX_ARGB argb) {
   m_type = FX_COLOR_Solid;
   m_info.argb = argb;
   m_info.pattern = nullptr;
-  return FWL_Error::Succeeded;
 }
 
-FWL_Error CFX_Color::Set(CFX_Pattern* pattern, const FX_ARGB argb) {
+void CFX_Color::Set(CFX_Pattern* pattern, const FX_ARGB argb) {
   if (!pattern)
-    return FWL_Error::ParameterInvalid;
+    return;
   m_type = FX_COLOR_Pattern;
   m_info.argb = argb;
   m_info.pattern = pattern;
-  return FWL_Error::Succeeded;
 }
 
-FWL_Error CFX_Color::Set(CFX_Shading* shading) {
+void CFX_Color::Set(CFX_Shading* shading) {
   if (!shading)
-    return FWL_Error::ParameterInvalid;
+    return;
   m_type = FX_COLOR_Shading;
   m_shading = shading;
-  return FWL_Error::Succeeded;
 }
diff --git a/xfa/fxgraphics/cfx_color.h b/xfa/fxgraphics/cfx_color.h
index f47f8c4..75f7fe2 100644
--- a/xfa/fxgraphics/cfx_color.h
+++ b/xfa/fxgraphics/cfx_color.h
@@ -23,9 +23,9 @@
   CFX_Color(CFX_Pattern* pattern, const FX_ARGB argb);
   virtual ~CFX_Color();
 
-  FWL_Error Set(const FX_ARGB argb);
-  FWL_Error Set(CFX_Pattern* pattern, const FX_ARGB argb);
-  FWL_Error Set(CFX_Shading* shading);
+  void Set(const FX_ARGB argb);
+  void Set(CFX_Pattern* pattern, const FX_ARGB argb);
+  void Set(CFX_Shading* shading);
 
  private:
   friend class CFX_Graphics;
diff --git a/xfa/fxgraphics/cfx_graphics.cpp b/xfa/fxgraphics/cfx_graphics.cpp
index d47c261..d2f2151 100644
--- a/xfa/fxgraphics/cfx_graphics.cpp
+++ b/xfa/fxgraphics/cfx_graphics.cpp
@@ -13,7 +13,6 @@
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/cfx_unicodeencoding.h"
 #include "third_party/base/ptr_util.h"
-#include "xfa/fxgraphics/cagg_graphics.h"
 #include "xfa/fxgraphics/cfx_color.h"
 #include "xfa/fxgraphics/cfx_path.h"
 #include "xfa/fxgraphics/cfx_pattern.h"
@@ -35,663 +34,111 @@
 };
 
 const FX_HATCHDATA hatchBitmapData[FX_HATCHSTYLE_Total] = {
-    {16,
+    {16,  // Horizontal
      16,
      {
-         0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
+         0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+         0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      }},
-    {16,
+    {16,  // Vertical
      16,
      {
-         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00,
+         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00,
+         0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
+         0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80,
+         0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
+         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00,
+         0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
      }},
-    {16,
+    {16,  // ForwardDiagonal
      16,
      {
-         0x80, 0x80, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
-         0x10, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00,
-         0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x40, 0x40, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,
-         0x08, 0x08, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
-         0x01, 0x01, 0x00, 0x00,
+         0x80, 0x80, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x20, 0x20, 0x00,
+         0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x04, 0x04,
+         0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x80,
+         0x80, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
+         0x10, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x04, 0x04, 0x00,
+         0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
      }},
-    {16,
+    {16,  // BackwardDiagonal
      16,
      {
-         0x01, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00,
-         0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
-         0x40, 0x40, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-         0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
-         0x10, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00,
+         0x01, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00,
+         0x00, 0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x20, 0x20,
+         0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01,
+         0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00,
+         0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00,
+         0x00, 0x40, 0x40, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
      }},
-    {16,
+    {16,  // Cross
      16,
      {
-         0xff, 0xff, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00,
+         0xff, 0xff, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00,
+         0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80,
+         0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0xff,
+         0xff, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
+         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00,
+         0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
      }},
-    {16,
+    {16,  // DiagonalCross
      16,
      {
-         0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00,
-         0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00,
-         0x42, 0x42, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00,
-         0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
-         0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00,
-         0x81, 0x81, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x22, 0x22, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xaa, 0xaa, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
-         0x11, 0x11, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00,
-         0xaa, 0xaa, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
-         0x44, 0x44, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00,
-         0xaa, 0xaa, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
-         0x11, 0x11, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
-         0x51, 0x51, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
-         0xaa, 0xaa, 0x00, 0x00, 0x15, 0x15, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x51, 0x51, 0x00, 0x00,
-         0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
-         0x15, 0x15, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
-         0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
-         0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xee, 0xee, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xbb, 0xbb, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
-         0xbb, 0xbb, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00, 0xbb, 0xbb, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
-         0xee, 0xee, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xbb, 0xbb, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00,
-         0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00,
-         0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00,
-         0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00,
-         0x77, 0x77, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00,
-         0xdd, 0xdd, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x77, 0x77, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0xdd, 0xdd, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x77, 0x77, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xdd, 0xdd, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xef, 0xef, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0xef, 0xef, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0xfe, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xef, 0xef, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0xef, 0xef, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0xf7, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xf7, 0xf7, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x7f, 0x7f, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x88, 0x88, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
-         0x11, 0x11, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00,
-         0x22, 0x22, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x44, 0x44, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
-         0x11, 0x11, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
-         0x44, 0x44, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00,
-         0x22, 0x22, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xcc, 0xcc, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00,
-         0x99, 0x99, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00,
-         0x33, 0x33, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00,
-         0x66, 0x66, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00,
-         0xcc, 0xcc, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00,
-         0x99, 0x99, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x33, 0x33, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00,
-         0x99, 0x99, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00,
-         0xcc, 0xcc, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00,
-         0x66, 0x66, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00,
-         0x33, 0x33, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00,
-         0x99, 0x99, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xc1, 0xc1, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00,
-         0x38, 0x38, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00,
-         0x07, 0x07, 0x00, 0x00, 0x83, 0x83, 0x00, 0x00, 0xc1, 0xc1, 0x00, 0x00,
-         0xe0, 0xe0, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00,
-         0x1c, 0x1c, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
-         0x83, 0x83, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x83, 0x83, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00,
-         0x1c, 0x1c, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00,
-         0xe0, 0xe0, 0x00, 0x00, 0xc1, 0xc1, 0x00, 0x00, 0x83, 0x83, 0x00, 0x00,
-         0x07, 0x07, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00,
-         0x38, 0x38, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00,
-         0xc1, 0xc1, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00,
-         0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00,
-         0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00,
-         0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00,
-         0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x00,
-         0xcc, 0xcc, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x44, 0x44, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00,
-         0x22, 0x22, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00,
-         0x22, 0x22, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
-         0x44, 0x44, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
-         0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
-         0x08, 0x08, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x80, 0x80, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00,
-         0x02, 0x02, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-         0x20, 0x20, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x08, 0x08, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
-         0x10, 0x10, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
-         0x04, 0x04, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xb1, 0xb1, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00,
-         0x1b, 0x1b, 0x00, 0x00, 0xd8, 0xd8, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00,
-         0x0c, 0x0c, 0x00, 0x00, 0x8d, 0x8d, 0x00, 0x00, 0xb1, 0xb1, 0x00, 0x00,
-         0x30, 0x30, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x1b, 0x1b, 0x00, 0x00,
-         0xd8, 0xd8, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00,
-         0x8d, 0x8d, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00,
-         0x18, 0x18, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00,
-         0x24, 0x24, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00,
-         0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
-         0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00,
-         0x18, 0x18, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00,
-         0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
-         0x25, 0x25, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x18, 0x18, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00,
-         0xc0, 0xc0, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x01, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00,
-         0x08, 0x08, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00,
-         0x42, 0x42, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-         0x02, 0x02, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
-         0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00,
-         0x81, 0x81, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xff, 0xff, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
-         0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
-         0x08, 0x08, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x88, 0x88, 0x00, 0x00, 0x54, 0x54, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
-         0x45, 0x45, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x14, 0x14, 0x00, 0x00,
-         0x22, 0x22, 0x00, 0x00, 0x51, 0x51, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x54, 0x54, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x45, 0x45, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0x14, 0x14, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
-         0x51, 0x51, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00,
-         0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
-         0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00,
-         0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00,
-         0xf0, 0xf0, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
-         0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x01, 0x01, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x10, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x03, 0x03, 0x00, 0x00, 0x84, 0x84, 0x00, 0x00, 0x48, 0x48, 0x00, 0x00,
-         0x30, 0x30, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
-         0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00,
-         0x84, 0x84, 0x00, 0x00, 0x48, 0x48, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00,
-         0x0c, 0x0c, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-         0x01, 0x01, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xff, 0xff, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x99, 0x99, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x66, 0x66, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x99, 0x99, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x77, 0x77, 0x00, 0x00, 0x89, 0x89, 0x00, 0x00, 0x8f, 0x8f, 0x00, 0x00,
-         0x8f, 0x8f, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00, 0x98, 0x98, 0x00, 0x00,
-         0xf8, 0xf8, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00,
-         0x89, 0x89, 0x00, 0x00, 0x8f, 0x8f, 0x00, 0x00, 0x8f, 0x8f, 0x00, 0x00,
-         0x77, 0x77, 0x00, 0x00, 0x98, 0x98, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00,
-         0xf8, 0xf8, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xff, 0xff, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0xff, 0xff, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00,
-         0x88, 0x88, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x99, 0x99, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00,
-         0x99, 0x99, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00,
-         0x66, 0x66, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00,
-         0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x99, 0x99, 0x00, 0x00,
-         0x99, 0x99, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00,
-         0x99, 0x99, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00,
-         0xf0, 0xf0, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00,
-         0x0f, 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00,
-         0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00,
-         0x0f, 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00,
-         0x0f, 0x0f, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x82, 0x82, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x28, 0x28, 0x00, 0x00,
-         0x10, 0x10, 0x00, 0x00, 0x28, 0x28, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00,
-         0x82, 0x82, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x82, 0x82, 0x00, 0x00,
-         0x44, 0x44, 0x00, 0x00, 0x28, 0x28, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,
-         0x28, 0x28, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x82, 0x82, 0x00, 0x00,
-         0x01, 0x01, 0x00, 0x00,
-     }},
-    {16,
-     16,
-     {
-         0x10, 0x10, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00,
-         0xfe, 0xfe, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00,
-         0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,
-         0x38, 0x38, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00,
-         0x7c, 0x7c, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
+         0x81, 0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00,
+         0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x24, 0x24,
+         0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00, 0x81,
+         0x81, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00,
+         0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x24, 0x24, 0x00,
+         0x00, 0x42, 0x42, 0x00, 0x00, 0x81, 0x81, 0x00, 0x00,
      }},
 };
 
 }  // namespace
 
-CFX_Graphics::CFX_Graphics()
-    : m_type(FX_CONTEXT_None), m_renderDevice(nullptr) {}
-
-FWL_Error CFX_Graphics::Create(CFX_RenderDevice* renderDevice,
-                               bool isAntialiasing) {
+CFX_Graphics::CFX_Graphics(CFX_RenderDevice* renderDevice)
+    : m_type(FX_CONTEXT_None), m_renderDevice(renderDevice) {
   if (!renderDevice)
-    return FWL_Error::ParameterInvalid;
-  if (m_type != FX_CONTEXT_None)
-    return FWL_Error::PropertyInvalid;
-
+    return;
   m_type = FX_CONTEXT_Device;
-  m_info.isAntialiasing = isAntialiasing;
-  m_renderDevice = renderDevice;
-  if (m_renderDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SOFT_CLIP)
-    return FWL_Error::Succeeded;
-  return FWL_Error::Indefinite;
-}
-
-FWL_Error CFX_Graphics::Create(int32_t width,
-                               int32_t height,
-                               FXDIB_Format format,
-                               bool isNative,
-                               bool isAntialiasing) {
-  if (m_type != FX_CONTEXT_None)
-    return FWL_Error::PropertyInvalid;
-
-  m_type = FX_CONTEXT_Device;
-  m_info.isAntialiasing = isAntialiasing;
-  m_aggGraphics = pdfium::MakeUnique<CAGG_Graphics>();
-  return m_aggGraphics->Create(this, width, height, format);
 }
 
 CFX_Graphics::~CFX_Graphics() {}
 
-FWL_Error CFX_Graphics::GetDeviceCap(const int32_t capID,
-                                     FX_DeviceCap& capVal) {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    capVal = m_renderDevice->GetDeviceCaps(capID);
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::IsPrinterDevice(bool& isPrinter) {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    isPrinter = m_renderDevice->GetDeviceClass() == FXDC_PRINTER;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::EnableAntialiasing(bool isAntialiasing) {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    m_info.isAntialiasing = isAntialiasing;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SaveGraphState() {
+void CFX_Graphics::SaveGraphState() {
   if (m_type != FX_CONTEXT_Device || !m_renderDevice)
-    return FWL_Error::PropertyInvalid;
+    return;
 
   m_renderDevice->SaveState();
   m_infoStack.push_back(pdfium::MakeUnique<TInfo>(m_info));
-  return FWL_Error::Succeeded;
 }
 
-FWL_Error CFX_Graphics::RestoreGraphState() {
+void CFX_Graphics::RestoreGraphState() {
   if (m_type != FX_CONTEXT_Device || !m_renderDevice)
-    return FWL_Error::PropertyInvalid;
+    return;
 
   m_renderDevice->RestoreState(false);
   if (m_infoStack.empty() || !m_infoStack.back())
-    return FWL_Error::IntermediateValueInvalid;
+    return;
 
   m_info = *m_infoStack.back();
   m_infoStack.pop_back();
-  return FWL_Error::Succeeded;
+  return;
 }
 
-FWL_Error CFX_Graphics::GetLineCap(CFX_GraphStateData::LineCap& lineCap) const {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    lineCap = m_info.graphState.m_LineCap;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SetLineCap(CFX_GraphStateData::LineCap lineCap) {
+void CFX_Graphics::SetLineCap(CFX_GraphStateData::LineCap lineCap) {
   if (m_type == FX_CONTEXT_Device && m_renderDevice) {
     m_info.graphState.m_LineCap = lineCap;
-    return FWL_Error::Succeeded;
   }
-  return FWL_Error::PropertyInvalid;
 }
 
-FWL_Error CFX_Graphics::GetDashCount(int32_t& dashCount) const {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    dashCount = m_info.graphState.m_DashCount;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::GetLineDash(FX_FLOAT& dashPhase,
-                                    FX_FLOAT* dashArray) const {
-  if (!dashArray)
-    return FWL_Error::ParameterInvalid;
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    dashPhase = m_info.graphState.m_DashPhase;
-    FXSYS_memcpy(dashArray, m_info.graphState.m_DashArray,
-                 m_info.graphState.m_DashCount * sizeof(FX_FLOAT));
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SetLineDash(FX_FLOAT dashPhase,
-                                    FX_FLOAT* dashArray,
-                                    int32_t dashCount) {
+void CFX_Graphics::SetLineDash(FX_FLOAT dashPhase,
+                               FX_FLOAT* dashArray,
+                               int32_t dashCount) {
   if (dashCount > 0 && !dashArray)
-    return FWL_Error::ParameterInvalid;
+    return;
 
   dashCount = dashCount < 0 ? 0 : dashCount;
   if (m_type == FX_CONTEXT_Device && m_renderDevice) {
@@ -704,165 +151,68 @@
     for (int32_t i = 0; i < dashCount; i++) {
       m_info.graphState.m_DashArray[i] = dashArray[i] * scale;
     }
-    return FWL_Error::Succeeded;
   }
-  return FWL_Error::PropertyInvalid;
 }
 
-FWL_Error CFX_Graphics::SetLineDash(FX_DashStyle dashStyle) {
+void CFX_Graphics::SetLineDash(FX_DashStyle dashStyle) {
   if (m_type == FX_CONTEXT_Device && m_renderDevice)
-    return RenderDeviceSetLineDash(dashStyle);
-  return FWL_Error::PropertyInvalid;
+    RenderDeviceSetLineDash(dashStyle);
 }
 
-FWL_Error CFX_Graphics::GetLineJoin(
-    CFX_GraphStateData::LineJoin& lineJoin) const {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    lineJoin = m_info.graphState.m_LineJoin;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SetLineJoin(CFX_GraphStateData::LineJoin lineJoin) {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    m_info.graphState.m_LineJoin = lineJoin;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::GetMiterLimit(FX_FLOAT& miterLimit) const {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    miterLimit = m_info.graphState.m_MiterLimit;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SetMiterLimit(FX_FLOAT miterLimit) {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    m_info.graphState.m_MiterLimit = miterLimit;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::GetLineWidth(FX_FLOAT& lineWidth) const {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    lineWidth = m_info.graphState.m_LineWidth;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SetLineWidth(FX_FLOAT lineWidth, bool isActOnDash) {
+void CFX_Graphics::SetLineWidth(FX_FLOAT lineWidth, bool isActOnDash) {
   if (m_type == FX_CONTEXT_Device && m_renderDevice) {
     m_info.graphState.m_LineWidth = lineWidth;
     m_info.isActOnDash = isActOnDash;
-    return FWL_Error::Succeeded;
   }
-  return FWL_Error::PropertyInvalid;
 }
 
-FWL_Error CFX_Graphics::GetStrokeAlignment(
-    FX_StrokeAlignment& strokeAlignment) const {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    strokeAlignment = m_info.strokeAlignment;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SetStrokeAlignment(FX_StrokeAlignment strokeAlignment) {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    m_info.strokeAlignment = strokeAlignment;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SetStrokeColor(CFX_Color* color) {
+void CFX_Graphics::SetStrokeColor(CFX_Color* color) {
   if (!color)
-    return FWL_Error::ParameterInvalid;
+    return;
   if (m_type == FX_CONTEXT_Device && m_renderDevice) {
     m_info.strokeColor = color;
-    return FWL_Error::Succeeded;
   }
-  return FWL_Error::PropertyInvalid;
 }
 
-FWL_Error CFX_Graphics::SetFillColor(CFX_Color* color) {
+void CFX_Graphics::SetFillColor(CFX_Color* color) {
   if (!color)
-    return FWL_Error::ParameterInvalid;
+    return;
   if (m_type == FX_CONTEXT_Device && m_renderDevice) {
     m_info.fillColor = color;
-    return FWL_Error::Succeeded;
   }
-  return FWL_Error::PropertyInvalid;
 }
 
-FWL_Error CFX_Graphics::StrokePath(CFX_Path* path, CFX_Matrix* matrix) {
+void CFX_Graphics::StrokePath(CFX_Path* path, CFX_Matrix* matrix) {
   if (!path)
-    return FWL_Error::ParameterInvalid;
+    return;
   if (m_type == FX_CONTEXT_Device && m_renderDevice)
-    return RenderDeviceStrokePath(path, matrix);
-  return FWL_Error::PropertyInvalid;
+    RenderDeviceStrokePath(path, matrix);
 }
 
-FWL_Error CFX_Graphics::FillPath(CFX_Path* path,
-                                 FX_FillMode fillMode,
-                                 CFX_Matrix* matrix) {
+void CFX_Graphics::FillPath(CFX_Path* path,
+                            FX_FillMode fillMode,
+                            CFX_Matrix* matrix) {
   if (!path)
-    return FWL_Error::ParameterInvalid;
+    return;
   if (m_type == FX_CONTEXT_Device && m_renderDevice)
-    return RenderDeviceFillPath(path, fillMode, matrix);
-  return FWL_Error::PropertyInvalid;
+    RenderDeviceFillPath(path, fillMode, matrix);
 }
 
-FWL_Error CFX_Graphics::ClipPath(CFX_Path* path,
-                                 FX_FillMode fillMode,
-                                 CFX_Matrix* matrix) {
-  if (!path)
-    return FWL_Error::ParameterInvalid;
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    bool result =
-        m_renderDevice->SetClip_PathFill(path->GetPathData(), matrix, fillMode);
-    if (!result)
-      return FWL_Error::Indefinite;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::DrawImage(CFX_DIBSource* source,
-                                  const CFX_PointF& point,
-                                  CFX_Matrix* matrix) {
+void CFX_Graphics::StretchImage(CFX_DIBSource* source,
+                                const CFX_RectF& rect,
+                                CFX_Matrix* matrix) {
   if (!source)
-    return FWL_Error::ParameterInvalid;
+    return;
   if (m_type == FX_CONTEXT_Device && m_renderDevice)
-    return RenderDeviceDrawImage(source, point, matrix);
-  return FWL_Error::PropertyInvalid;
+    RenderDeviceStretchImage(source, rect, matrix);
 }
 
-FWL_Error CFX_Graphics::StretchImage(CFX_DIBSource* source,
-                                     const CFX_RectF& rect,
-                                     CFX_Matrix* matrix) {
-  if (!source)
-    return FWL_Error::ParameterInvalid;
-  if (m_type == FX_CONTEXT_Device && m_renderDevice)
-    return RenderDeviceStretchImage(source, rect, matrix);
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::ConcatMatrix(const CFX_Matrix* matrix) {
+void CFX_Graphics::ConcatMatrix(const CFX_Matrix* matrix) {
   if (!matrix)
-    return FWL_Error::ParameterInvalid;
+    return;
   if (m_type == FX_CONTEXT_Device && m_renderDevice) {
     m_info.CTM.Concat(*matrix);
-    return FWL_Error::Succeeded;
   }
-  return FWL_Error::PropertyInvalid;
 }
 
 CFX_Matrix* CFX_Graphics::GetMatrix() {
@@ -879,275 +229,52 @@
   return CFX_Rect(r.left, r.top, r.Width(), r.Height()).As<FX_FLOAT>();
 }
 
-FWL_Error CFX_Graphics::SetClipRect(const CFX_RectF& rect) {
+void CFX_Graphics::SetClipRect(const CFX_RectF& rect) {
   if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    if (!m_renderDevice->SetClip_Rect(
-            FX_RECT(FXSYS_round(rect.left), FXSYS_round(rect.top),
-                    FXSYS_round(rect.right()), FXSYS_round(rect.bottom())))) {
-      return FWL_Error::MethodNotSupported;
-    }
-    return FWL_Error::Succeeded;
+    m_renderDevice->SetClip_Rect(
+        FX_RECT(FXSYS_round(rect.left), FXSYS_round(rect.top),
+                FXSYS_round(rect.right()), FXSYS_round(rect.bottom())));
   }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::ClearClip() {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice)
-    return FWL_Error::Succeeded;
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SetFont(CFX_Font* font) {
-  if (!font)
-    return FWL_Error::ParameterInvalid;
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    m_info.font = font;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SetFontSize(const FX_FLOAT size) {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    m_info.fontSize = size <= 0 ? 1.0f : size;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SetFontHScale(const FX_FLOAT scale) {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    m_info.fontHScale = scale <= 0 ? 1.0f : scale;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SetCharSpacing(const FX_FLOAT spacing) {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    m_info.fontSpacing = spacing < 0 ? 0 : spacing;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::SetTextDrawingMode(const int32_t mode) {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice)
-    return FWL_Error::Succeeded;
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::ShowText(const CFX_PointF& point,
-                                 const CFX_WideString& text,
-                                 CFX_Matrix* matrix) {
-  if (m_type == FX_CONTEXT_Device && m_renderDevice)
-    return RenderDeviceShowText(point, text, matrix);
-  return FWL_Error::PropertyInvalid;
-}
-
-void CFX_Graphics::CalcTextRect(CFX_RectF& rect,
-                                const CFX_WideString& text,
-                                bool isMultiline,
-                                CFX_Matrix* matrix) {
-  if (m_type != FX_CONTEXT_Device || !m_renderDevice)
-    return;
-
-  int32_t length = text.GetLength();
-  uint32_t* charCodes = FX_Alloc(uint32_t, length);
-  FXTEXT_CHARPOS* charPos = FX_Alloc(FXTEXT_CHARPOS, length);
-  CalcTextInfo(text, charCodes, charPos, rect);
-  FX_Free(charPos);
-  FX_Free(charCodes);
-}
-
-FWL_Error CFX_Graphics::Transfer(CFX_Graphics* graphics,
-                                 const CFX_Matrix* matrix) {
-  if (!graphics || !graphics->m_renderDevice)
-    return FWL_Error::ParameterInvalid;
-  CFX_Matrix m(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d,
-               m_info.CTM.e, m_info.CTM.f);
-  if (matrix) {
-    m.Concat(*matrix);
-  }
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    CFX_DIBitmap* bitmap = graphics->m_renderDevice->GetBitmap();
-    bool result = m_renderDevice->SetDIBits(bitmap, 0, 0);
-    if (!result)
-      return FWL_Error::MethodNotSupported;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
-}
-
-FWL_Error CFX_Graphics::Transfer(CFX_Graphics* graphics,
-                                 FX_FLOAT srcLeft,
-                                 FX_FLOAT srcTop,
-                                 const CFX_RectF& dstRect,
-                                 const CFX_Matrix* matrix) {
-  if (!graphics || !graphics->m_renderDevice)
-    return FWL_Error::ParameterInvalid;
-  CFX_Matrix m(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d,
-               m_info.CTM.e, m_info.CTM.f);
-  if (matrix) {
-    m.Concat(*matrix);
-  }
-  if (m_type == FX_CONTEXT_Device && m_renderDevice) {
-    CFX_DIBitmap bmp;
-    bool result =
-        bmp.Create((int32_t)dstRect.width, (int32_t)dstRect.height,
-                   graphics->m_renderDevice->GetBitmap()->GetFormat());
-    if (!result)
-      return FWL_Error::IntermediateValueInvalid;
-    result = graphics->m_renderDevice->GetDIBits(&bmp, (int32_t)srcLeft,
-                                                 (int32_t)srcTop);
-    if (!result)
-      return FWL_Error::MethodNotSupported;
-    result = m_renderDevice->SetDIBits(&bmp, (int32_t)dstRect.left,
-                                       (int32_t)dstRect.top);
-    if (!result)
-      return FWL_Error::MethodNotSupported;
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::PropertyInvalid;
 }
 
 CFX_RenderDevice* CFX_Graphics::GetRenderDevice() {
   return m_renderDevice;
 }
 
-FWL_Error CFX_Graphics::InverseRect(const CFX_RectF& rect) {
-  if (!m_renderDevice)
-    return FWL_Error::PropertyInvalid;
-  CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap();
-  if (!bitmap)
-    return FWL_Error::PropertyInvalid;
-  CFX_RectF temp(rect);
-  m_info.CTM.TransformRect(temp);
-  CFX_RectF r(0, 0, (FX_FLOAT)bitmap->GetWidth(), (FX_FLOAT)bitmap->GetWidth());
-  r.Intersect(temp);
-  if (r.IsEmpty()) {
-    return FWL_Error::ParameterInvalid;
-  }
-  FX_ARGB* pBuf =
-      (FX_ARGB*)(bitmap->GetBuffer() + int32_t(r.top) * bitmap->GetPitch());
-  int32_t bottom = (int32_t)r.bottom();
-  int32_t right = (int32_t)r.right();
-  for (int32_t i = (int32_t)r.top; i < bottom; i++) {
-    FX_ARGB* pLine = pBuf + (int32_t)r.left;
-    for (int32_t j = (int32_t)r.left; j < right; j++) {
-      FX_ARGB c = *pLine;
-      *pLine++ = (c & 0xFF000000) | (0xFFFFFF - (c & 0x00FFFFFF));
-    }
-    pBuf = (FX_ARGB*)((uint8_t*)pBuf + bitmap->GetPitch());
-  }
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error CFX_Graphics::XorDIBitmap(const CFX_DIBitmap* srcBitmap,
-                                    const CFX_RectF& rect) {
-  if (!m_renderDevice)
-    return FWL_Error::PropertyInvalid;
-  CFX_DIBitmap* dst = m_renderDevice->GetBitmap();
-  if (!dst)
-    return FWL_Error::PropertyInvalid;
-  CFX_RectF temp(rect);
-  m_info.CTM.TransformRect(temp);
-  CFX_RectF r(0, 0, (FX_FLOAT)dst->GetWidth(), (FX_FLOAT)dst->GetWidth());
-  r.Intersect(temp);
-  if (r.IsEmpty()) {
-    return FWL_Error::ParameterInvalid;
-  }
-  FX_ARGB* pSrcBuf = (FX_ARGB*)(srcBitmap->GetBuffer() +
-                                int32_t(r.top) * srcBitmap->GetPitch());
-  FX_ARGB* pDstBuf =
-      (FX_ARGB*)(dst->GetBuffer() + int32_t(r.top) * dst->GetPitch());
-  int32_t bottom = (int32_t)r.bottom();
-  int32_t right = (int32_t)r.right();
-  for (int32_t i = (int32_t)r.top; i < bottom; i++) {
-    FX_ARGB* pSrcLine = pSrcBuf + (int32_t)r.left;
-    FX_ARGB* pDstLine = pDstBuf + (int32_t)r.left;
-    for (int32_t j = (int32_t)r.left; j < right; j++) {
-      FX_ARGB c = *pDstLine;
-      *pDstLine++ =
-          ArgbEncode(FXARGB_A(c), (c & 0xFFFFFF) ^ (*pSrcLine & 0xFFFFFF));
-      pSrcLine++;
-    }
-    pSrcBuf = (FX_ARGB*)((uint8_t*)pSrcBuf + srcBitmap->GetPitch());
-    pDstBuf = (FX_ARGB*)((uint8_t*)pDstBuf + dst->GetPitch());
-  }
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error CFX_Graphics::EqvDIBitmap(const CFX_DIBitmap* srcBitmap,
-                                    const CFX_RectF& rect) {
-  if (!m_renderDevice)
-    return FWL_Error::PropertyInvalid;
-  CFX_DIBitmap* dst = m_renderDevice->GetBitmap();
-  if (!dst)
-    return FWL_Error::PropertyInvalid;
-  CFX_RectF temp(rect);
-  m_info.CTM.TransformRect(temp);
-  CFX_RectF r(0, 0, (FX_FLOAT)dst->GetWidth(), (FX_FLOAT)dst->GetWidth());
-  r.Intersect(temp);
-  if (r.IsEmpty()) {
-    return FWL_Error::ParameterInvalid;
-  }
-  FX_ARGB* pSrcBuf = (FX_ARGB*)(srcBitmap->GetBuffer() +
-                                int32_t(r.top) * srcBitmap->GetPitch());
-  FX_ARGB* pDstBuf =
-      (FX_ARGB*)(dst->GetBuffer() + int32_t(r.top) * dst->GetPitch());
-  int32_t bottom = (int32_t)r.bottom();
-  int32_t right = (int32_t)r.right();
-  for (int32_t i = (int32_t)r.top; i < bottom; i++) {
-    FX_ARGB* pSrcLine = pSrcBuf + (int32_t)r.left;
-    FX_ARGB* pDstLine = pDstBuf + (int32_t)r.left;
-    for (int32_t j = (int32_t)r.left; j < right; j++) {
-      FX_ARGB c = *pDstLine;
-      *pDstLine++ =
-          ArgbEncode(FXARGB_A(c), ~((c & 0xFFFFFF) ^ (*pSrcLine & 0xFFFFFF)));
-      pSrcLine++;
-    }
-    pSrcBuf = (FX_ARGB*)((uint8_t*)pSrcBuf + srcBitmap->GetPitch());
-    pDstBuf = (FX_ARGB*)((uint8_t*)pDstBuf + dst->GetPitch());
-  }
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error CFX_Graphics::RenderDeviceSetLineDash(FX_DashStyle dashStyle) {
+void CFX_Graphics::RenderDeviceSetLineDash(FX_DashStyle dashStyle) {
   switch (dashStyle) {
     case FX_DASHSTYLE_Solid: {
       m_info.graphState.SetDashCount(0);
-      return FWL_Error::Succeeded;
+      return;
     }
     case FX_DASHSTYLE_Dash: {
       FX_FLOAT dashArray[] = {3, 1};
       SetLineDash(0, dashArray, 2);
-      return FWL_Error::Succeeded;
+      return;
     }
     case FX_DASHSTYLE_Dot: {
       FX_FLOAT dashArray[] = {1, 1};
       SetLineDash(0, dashArray, 2);
-      return FWL_Error::Succeeded;
+      return;
     }
     case FX_DASHSTYLE_DashDot: {
       FX_FLOAT dashArray[] = {3, 1, 1, 1};
       SetLineDash(0, dashArray, 4);
-      return FWL_Error::Succeeded;
+      return;
     }
     case FX_DASHSTYLE_DashDotDot: {
       FX_FLOAT dashArray[] = {4, 1, 2, 1, 2, 1};
       SetLineDash(0, dashArray, 6);
-      return FWL_Error::Succeeded;
+      return;
     }
     default:
-      return FWL_Error::ParameterInvalid;
+      return;
   }
 }
 
-FWL_Error CFX_Graphics::RenderDeviceStrokePath(CFX_Path* path,
-                                               CFX_Matrix* matrix) {
+void CFX_Graphics::RenderDeviceStrokePath(CFX_Path* path, CFX_Matrix* matrix) {
   if (!m_info.strokeColor)
-    return FWL_Error::PropertyInvalid;
+    return;
   CFX_Matrix m(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d,
                m_info.CTM.e, m_info.CTM.f);
   if (matrix) {
@@ -1155,27 +282,20 @@
   }
   switch (m_info.strokeColor->m_type) {
     case FX_COLOR_Solid: {
-      bool result =
-          m_renderDevice->DrawPath(path->GetPathData(), &m, &m_info.graphState,
-                                   0x0, m_info.strokeColor->m_info.argb, 0);
-      if (!result)
-        return FWL_Error::Indefinite;
-      return FWL_Error::Succeeded;
+      m_renderDevice->DrawPath(path->GetPathData(), &m, &m_info.graphState, 0x0,
+                               m_info.strokeColor->m_info.argb, 0);
+      return;
     }
-    case FX_COLOR_Pattern:
-      return StrokePathWithPattern(path, &m);
-    case FX_COLOR_Shading:
-      return StrokePathWithShading(path, &m);
     default:
-      return FWL_Error::PropertyInvalid;
+      return;
   }
 }
 
-FWL_Error CFX_Graphics::RenderDeviceFillPath(CFX_Path* path,
-                                             FX_FillMode fillMode,
-                                             CFX_Matrix* matrix) {
+void CFX_Graphics::RenderDeviceFillPath(CFX_Path* path,
+                                        FX_FillMode fillMode,
+                                        CFX_Matrix* matrix) {
   if (!m_info.fillColor)
-    return FWL_Error::PropertyInvalid;
+    return;
   CFX_Matrix m(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d,
                m_info.CTM.e, m_info.CTM.f);
   if (matrix) {
@@ -1183,54 +303,24 @@
   }
   switch (m_info.fillColor->m_type) {
     case FX_COLOR_Solid: {
-      bool result = m_renderDevice->DrawPath(
-          path->GetPathData(), &m, &m_info.graphState,
-          m_info.fillColor->m_info.argb, 0x0, fillMode);
-      if (!result)
-        return FWL_Error::Indefinite;
-      return FWL_Error::Succeeded;
+      m_renderDevice->DrawPath(path->GetPathData(), &m, &m_info.graphState,
+                               m_info.fillColor->m_info.argb, 0x0, fillMode);
+      return;
     }
     case FX_COLOR_Pattern:
-      return FillPathWithPattern(path, fillMode, &m);
+      FillPathWithPattern(path, fillMode, &m);
+      return;
     case FX_COLOR_Shading:
-      return FillPathWithShading(path, fillMode, &m);
+      FillPathWithShading(path, fillMode, &m);
+      return;
     default:
-      return FWL_Error::PropertyInvalid;
+      return;
   }
 }
 
-FWL_Error CFX_Graphics::RenderDeviceDrawImage(CFX_DIBSource* source,
-                                              const CFX_PointF& point,
-                                              CFX_Matrix* matrix) {
-  CFX_Matrix m1(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d,
-                m_info.CTM.e, m_info.CTM.f);
-  if (matrix) {
-    m1.Concat(*matrix);
-  }
-  CFX_Matrix m2((FX_FLOAT)source->GetWidth(), 0.0, 0.0,
-                (FX_FLOAT)source->GetHeight(), point.x, point.y);
-  m2.Concat(m1);
-  int32_t left, top;
-  std::unique_ptr<CFX_DIBitmap> bmp1 = source->FlipImage(false, true);
-  std::unique_ptr<CFX_DIBitmap> bmp2 = bmp1->TransformTo(&m2, left, top);
-  CFX_RectF r = GetClipRect();
-  CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap();
-  CFX_DIBitmap bmp;
-  if (bmp.Create(bitmap->GetWidth(), bitmap->GetHeight(), FXDIB_Argb) &&
-      m_renderDevice->GetDIBits(&bmp, 0, 0) &&
-      bmp.TransferBitmap(FXSYS_round(r.left), FXSYS_round(r.top),
-                         FXSYS_round(r.Width()), FXSYS_round(r.Height()),
-                         bmp2.get(), FXSYS_round(r.left - left),
-                         FXSYS_round(r.top - top)) &&
-      m_renderDevice->SetDIBits(&bmp, 0, 0)) {
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::Indefinite;
-}
-
-FWL_Error CFX_Graphics::RenderDeviceStretchImage(CFX_DIBSource* source,
-                                                 const CFX_RectF& rect,
-                                                 CFX_Matrix* matrix) {
+void CFX_Graphics::RenderDeviceStretchImage(CFX_DIBSource* source,
+                                            const CFX_RectF& rect,
+                                            CFX_Matrix* matrix) {
   CFX_Matrix m1(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d,
                 m_info.CTM.e, m_info.CTM.f);
   if (matrix) {
@@ -1247,52 +337,15 @@
   std::unique_ptr<CFX_DIBitmap> bmp3 = bmp2->TransformTo(&m2, left, top);
   CFX_RectF r = GetClipRect();
   CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap();
-  if (bitmap->CompositeBitmap(FXSYS_round(r.left), FXSYS_round(r.top),
-                              FXSYS_round(r.Width()), FXSYS_round(r.Height()),
-                              bmp3.get(), FXSYS_round(r.left - left),
-                              FXSYS_round(r.top - top))) {
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::Indefinite;
+  bitmap->CompositeBitmap(FXSYS_round(r.left), FXSYS_round(r.top),
+                          FXSYS_round(r.Width()), FXSYS_round(r.Height()),
+                          bmp3.get(), FXSYS_round(r.left - left),
+                          FXSYS_round(r.top - top));
 }
 
-FWL_Error CFX_Graphics::RenderDeviceShowText(const CFX_PointF& point,
-                                             const CFX_WideString& text,
-                                             CFX_Matrix* matrix) {
-  int32_t length = text.GetLength();
-  uint32_t* charCodes = FX_Alloc(uint32_t, length);
-  FXTEXT_CHARPOS* charPos = FX_Alloc(FXTEXT_CHARPOS, length);
-  CFX_RectF rect(point.x, point.y, 0, 0);
-  CalcTextInfo(text, charCodes, charPos, rect);
-  CFX_Matrix m(m_info.CTM.a, m_info.CTM.b, m_info.CTM.c, m_info.CTM.d,
-               m_info.CTM.e, m_info.CTM.f);
-  m.Translate(0.0f, m_info.fontSize * m_info.fontHScale);
-  if (matrix) {
-    m.Concat(*matrix);
-  }
-  bool result = m_renderDevice->DrawNormalText(
-      length, charPos, m_info.font, -m_info.fontSize * m_info.fontHScale, &m,
-      m_info.fillColor->m_info.argb, FXTEXT_CLEARTYPE);
-  if (!result)
-    return FWL_Error::Indefinite;
-  FX_Free(charPos);
-  FX_Free(charCodes);
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error CFX_Graphics::StrokePathWithPattern(CFX_Path* path,
-                                              CFX_Matrix* matrix) {
-  return FWL_Error::MethodNotSupported;
-}
-
-FWL_Error CFX_Graphics::StrokePathWithShading(CFX_Path* path,
-                                              CFX_Matrix* matrix) {
-  return FWL_Error::MethodNotSupported;
-}
-
-FWL_Error CFX_Graphics::FillPathWithPattern(CFX_Path* path,
-                                            FX_FillMode fillMode,
-                                            CFX_Matrix* matrix) {
+void CFX_Graphics::FillPathWithPattern(CFX_Path* path,
+                                       FX_FillMode fillMode,
+                                       CFX_Matrix* matrix) {
   CFX_Pattern* pattern = m_info.fillColor->m_info.pattern;
   CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap();
   int32_t width = bitmap->GetWidth();
@@ -1302,11 +355,8 @@
   m_renderDevice->GetDIBits(&bmp, 0, 0);
 
   FX_HatchStyle hatchStyle = m_info.fillColor->m_info.pattern->m_hatchStyle;
-  if (hatchStyle < FX_HATCHSTYLE_Horizontal ||
-      hatchStyle > FX_HATCHSTYLE_SolidDiamond) {
-    return FWL_Error::IntermediateValueInvalid;
-  }
-  const FX_HATCHDATA& data = hatchBitmapData[hatchStyle];
+  const FX_HATCHDATA& data = hatchBitmapData[static_cast<int>(hatchStyle)];
+
   CFX_DIBitmap mask;
   mask.Create(data.width, data.height, FXDIB_1bppMask);
   FXSYS_memcpy(mask.GetBuffer(), data.maskBits, mask.GetPitch() * data.height);
@@ -1330,12 +380,11 @@
   m_renderDevice->SetClip_PathFill(path->GetPathData(), matrix, fillMode);
   SetDIBitsWithMatrix(&bmp, &pattern->m_matrix);
   m_renderDevice->RestoreState(false);
-  return FWL_Error::Succeeded;
 }
 
-FWL_Error CFX_Graphics::FillPathWithShading(CFX_Path* path,
-                                            FX_FillMode fillMode,
-                                            CFX_Matrix* matrix) {
+void CFX_Graphics::FillPathWithShading(CFX_Path* path,
+                                       FX_FillMode fillMode,
+                                       CFX_Matrix* matrix) {
   CFX_DIBitmap* bitmap = m_renderDevice->GetBitmap();
   int32_t width = bitmap->GetWidth();
   int32_t height = bitmap->GetHeight();
@@ -1451,11 +500,10 @@
     SetDIBitsWithMatrix(&bmp, matrix);
     m_renderDevice->RestoreState(false);
   }
-  return result ? FWL_Error::Succeeded : FWL_Error::PropertyInvalid;
 }
 
-FWL_Error CFX_Graphics::SetDIBitsWithMatrix(CFX_DIBSource* source,
-                                            CFX_Matrix* matrix) {
+void CFX_Graphics::SetDIBitsWithMatrix(CFX_DIBSource* source,
+                                       CFX_Matrix* matrix) {
   if (matrix->IsIdentity()) {
     m_renderDevice->SetDIBits(source, 0, 0);
   } else {
@@ -1468,87 +516,23 @@
     std::unique_ptr<CFX_DIBitmap> bmp2 = bmp1->TransformTo(&m, left, top);
     m_renderDevice->SetDIBits(bmp2.get(), left, top);
   }
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error CFX_Graphics::CalcTextInfo(const CFX_WideString& text,
-                                     uint32_t* charCodes,
-                                     FXTEXT_CHARPOS* charPos,
-                                     CFX_RectF& rect) {
-  std::unique_ptr<CFX_UnicodeEncoding> encoding(
-      new CFX_UnicodeEncoding(m_info.font));
-  int32_t length = text.GetLength();
-  FX_FLOAT penX = (FX_FLOAT)rect.left;
-  FX_FLOAT penY = (FX_FLOAT)rect.top;
-  FX_FLOAT left = (FX_FLOAT)(0);
-  FX_FLOAT top = (FX_FLOAT)(0);
-  charCodes[0] = text.GetAt(0);
-  charPos[0].m_Origin = CFX_PointF(penX + left, penY + top);
-  charPos[0].m_GlyphIndex = encoding->GlyphFromCharCode(charCodes[0]);
-  charPos[0].m_FontCharWidth = FXSYS_round(
-      m_info.font->GetGlyphWidth(charPos[0].m_GlyphIndex) * m_info.fontHScale);
-  charPos[0].m_bGlyphAdjust = true;
-  charPos[0].m_AdjustMatrix[0] = -1;
-  charPos[0].m_AdjustMatrix[1] = 0;
-  charPos[0].m_AdjustMatrix[2] = 0;
-  charPos[0].m_AdjustMatrix[3] = 1;
-  penX += (FX_FLOAT)(charPos[0].m_FontCharWidth) * m_info.fontSize / 1000 +
-          m_info.fontSpacing;
-  for (int32_t i = 1; i < length; i++) {
-    charCodes[i] = text.GetAt(i);
-    charPos[i].m_Origin = CFX_PointF(penX + left, penY + top);
-    charPos[i].m_GlyphIndex = encoding->GlyphFromCharCode(charCodes[i]);
-    charPos[i].m_FontCharWidth =
-        FXSYS_round(m_info.font->GetGlyphWidth(charPos[i].m_GlyphIndex) *
-                    m_info.fontHScale);
-    charPos[i].m_bGlyphAdjust = true;
-    charPos[i].m_AdjustMatrix[0] = -1;
-    charPos[i].m_AdjustMatrix[1] = 0;
-    charPos[i].m_AdjustMatrix[2] = 0;
-    charPos[i].m_AdjustMatrix[3] = 1;
-    penX += (FX_FLOAT)(charPos[i].m_FontCharWidth) * m_info.fontSize / 1000 +
-            m_info.fontSpacing;
-  }
-  rect.width = (FX_FLOAT)penX - rect.left;
-  rect.height = rect.top + m_info.fontSize * m_info.fontHScale - rect.top;
-  return FWL_Error::Succeeded;
 }
 
 CFX_Graphics::TInfo::TInfo()
-    : isAntialiasing(true),
-      strokeAlignment(FX_STROKEALIGNMENT_Center),
-      isActOnDash(false),
-      strokeColor(nullptr),
-      fillColor(nullptr),
-      font(nullptr),
-      fontSize(40.0),
-      fontHScale(1.0),
-      fontSpacing(0.0) {}
+    : isActOnDash(false), strokeColor(nullptr), fillColor(nullptr) {}
 
 CFX_Graphics::TInfo::TInfo(const TInfo& info)
     : graphState(info.graphState),
-      isAntialiasing(info.isAntialiasing),
-      strokeAlignment(info.strokeAlignment),
       CTM(info.CTM),
       isActOnDash(info.isActOnDash),
       strokeColor(info.strokeColor),
-      fillColor(info.fillColor),
-      font(info.font),
-      fontSize(info.fontSize),
-      fontHScale(info.fontHScale),
-      fontSpacing(info.fontSpacing) {}
+      fillColor(info.fillColor) {}
 
 CFX_Graphics::TInfo& CFX_Graphics::TInfo::operator=(const TInfo& other) {
   graphState.Copy(other.graphState);
-  isAntialiasing = other.isAntialiasing;
-  strokeAlignment = other.strokeAlignment;
   CTM = other.CTM;
   isActOnDash = other.isActOnDash;
   strokeColor = other.strokeColor;
   fillColor = other.fillColor;
-  font = other.font;
-  fontSize = other.fontSize;
-  fontHScale = other.fontHScale;
-  fontSpacing = other.fontSpacing;
   return *this;
 }
diff --git a/xfa/fxgraphics/cfx_graphics.h b/xfa/fxgraphics/cfx_graphics.h
index ed219de..c18f8eb 100644
--- a/xfa/fxgraphics/cfx_graphics.h
+++ b/xfa/fxgraphics/cfx_graphics.h
@@ -16,13 +16,10 @@
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/fx_dib.h"
 #include "core/fxge/fx_font.h"
-#include "xfa/fwl/fwl_error.h"
 
 class CFX_Color;
 class CFX_Path;
-class CAGG_Graphics;
 
-using FX_DeviceCap = int32_t;
 using FX_FillMode = int32_t;
 
 enum FX_DashStyle {
@@ -33,152 +30,44 @@
   FX_DASHSTYLE_DashDotDot = 4
 };
 
-enum FX_StrokeAlignment {
-  FX_STROKEALIGNMENT_Center = 0,
-  FX_STROKEALIGNMENT_Inset = 1,
-  FX_STROKEALIGNMENT_Outset = 2,
-  FX_STROKEALIGNMENT_Left = 3,
-  FX_STROKEALIGNMENT_Right = 4
-};
-
-enum FX_HatchStyle {
-  FX_HATCHSTYLE_Horizontal = 0,
-  FX_HATCHSTYLE_Vertical = 1,
-  FX_HATCHSTYLE_ForwardDiagonal = 2,
-  FX_HATCHSTYLE_BackwardDiagonal = 3,
-  FX_HATCHSTYLE_Cross = 4,
-  FX_HATCHSTYLE_DiagonalCross = 5,
-  FX_HATCHSTYLE_05Percent = 6,
-  FX_HATCHSTYLE_10Percent = 7,
-  FX_HATCHSTYLE_20Percent = 8,
-  FX_HATCHSTYLE_25Percent = 9,
-  FX_HATCHSTYLE_30Percent = 10,
-  FX_HATCHSTYLE_40Percent = 11,
-  FX_HATCHSTYLE_50Percent = 12,
-  FX_HATCHSTYLE_60Percent = 13,
-  FX_HATCHSTYLE_70Percent = 14,
-  FX_HATCHSTYLE_75Percent = 15,
-  FX_HATCHSTYLE_80Percent = 16,
-  FX_HATCHSTYLE_90Percent = 17,
-  FX_HATCHSTYLE_LightDownwardDiagonal = 18,
-  FX_HATCHSTYLE_LightUpwardDiagonal = 19,
-  FX_HATCHSTYLE_DarkDownwardDiagonal = 20,
-  FX_HATCHSTYLE_DarkUpwardDiagonal = 21,
-  FX_HATCHSTYLE_WideDownwardDiagonal = 22,
-  FX_HATCHSTYLE_WideUpwardDiagonal = 23,
-  FX_HATCHSTYLE_LightVertical = 24,
-  FX_HATCHSTYLE_LightHorizontal = 25,
-  FX_HATCHSTYLE_NarrowVertical = 26,
-  FX_HATCHSTYLE_NarrowHorizontal = 27,
-  FX_HATCHSTYLE_DarkVertical = 28,
-  FX_HATCHSTYLE_DarkHorizontal = 29,
-  FX_HATCHSTYLE_DashedDownwardDiagonal = 30,
-  FX_HATCHSTYLE_DashedUpwardDiagonal = 31,
-  FX_HATCHSTYLE_DashedHorizontal = 32,
-  FX_HATCHSTYLE_DashedVertical = 33,
-  FX_HATCHSTYLE_SmallConfetti = 34,
-  FX_HATCHSTYLE_LargeConfetti = 35,
-  FX_HATCHSTYLE_ZigZag = 36,
-  FX_HATCHSTYLE_Wave = 37,
-  FX_HATCHSTYLE_DiagonalBrick = 38,
-  FX_HATCHSTYLE_HorizontalBrick = 39,
-  FX_HATCHSTYLE_Weave = 40,
-  FX_HATCHSTYLE_Plaid = 41,
-  FX_HATCHSTYLE_Divot = 42,
-  FX_HATCHSTYLE_DottedGrid = 43,
-  FX_HATCHSTYLE_DottedDiamond = 44,
-  FX_HATCHSTYLE_Shingle = 45,
-  FX_HATCHSTYLE_Trellis = 46,
-  FX_HATCHSTYLE_Sphere = 47,
-  FX_HATCHSTYLE_SmallGrid = 48,
-  FX_HATCHSTYLE_SmallCheckerBoard = 49,
-  FX_HATCHSTYLE_LargeCheckerBoard = 50,
-  FX_HATCHSTYLE_OutlinedDiamond = 51,
-  FX_HATCHSTYLE_SolidDiamond = 52
+enum class FX_HatchStyle {
+  Horizontal = 0,
+  Vertical = 1,
+  ForwardDiagonal = 2,
+  BackwardDiagonal = 3,
+  Cross = 4,
+  DiagonalCross = 5
 };
 
 class CFX_RenderDevice;
 
 class CFX_Graphics {
  public:
-  CFX_Graphics();
-  virtual ~CFX_Graphics();
+  explicit CFX_Graphics(CFX_RenderDevice* renderDevice);
+  ~CFX_Graphics();
 
-  FWL_Error Create(CFX_RenderDevice* renderDevice, bool isAntialiasing = true);
-  FWL_Error Create(int32_t width,
-                   int32_t height,
-                   FXDIB_Format format,
-                   bool isNative = true,
-                   bool isAntialiasing = true);
+  void SaveGraphState();
+  void RestoreGraphState();
 
-  FWL_Error GetDeviceCap(const int32_t capID, FX_DeviceCap& capVal);
-  FWL_Error IsPrinterDevice(bool& isPrinter);
-  FWL_Error EnableAntialiasing(bool isAntialiasing);
-
-  FWL_Error SaveGraphState();
-  FWL_Error RestoreGraphState();
-
-  FWL_Error GetLineCap(CFX_GraphStateData::LineCap& lineCap) const;
-  FWL_Error GetDashCount(int32_t& dashCount) const;
-  FWL_Error GetLineDash(FX_FLOAT& dashPhase, FX_FLOAT* dashArray) const;
-  FWL_Error GetLineJoin(CFX_GraphStateData::LineJoin& lineJoin) const;
-  FWL_Error GetMiterLimit(FX_FLOAT& miterLimit) const;
-  FWL_Error GetLineWidth(FX_FLOAT& lineWidth) const;
-  FWL_Error GetStrokeAlignment(FX_StrokeAlignment& strokeAlignment) const;
   CFX_RectF GetClipRect() const;
   CFX_Matrix* GetMatrix();
   CFX_RenderDevice* GetRenderDevice();
 
-  FWL_Error SetLineCap(CFX_GraphStateData::LineCap lineCap);
-  FWL_Error SetLineDash(FX_FLOAT dashPhase,
-                        FX_FLOAT* dashArray,
-                        int32_t dashCount);
-  FWL_Error SetLineDash(FX_DashStyle dashStyle);
-  FWL_Error SetLineJoin(CFX_GraphStateData::LineJoin lineJoin);
-  FWL_Error SetMiterLimit(FX_FLOAT miterLimit);
-  FWL_Error SetLineWidth(FX_FLOAT lineWidth, bool isActOnDash = false);
-  FWL_Error SetStrokeAlignment(FX_StrokeAlignment strokeAlignment);
-  FWL_Error SetStrokeColor(CFX_Color* color);
-  FWL_Error SetFillColor(CFX_Color* color);
-  FWL_Error SetClipRect(const CFX_RectF& rect);
-  FWL_Error SetFont(CFX_Font* font);
-  FWL_Error SetFontSize(const FX_FLOAT size);
-  FWL_Error SetFontHScale(const FX_FLOAT scale);
-  FWL_Error SetCharSpacing(const FX_FLOAT spacing);
-  FWL_Error SetTextDrawingMode(const int32_t mode);
-
-  FWL_Error StrokePath(CFX_Path* path, CFX_Matrix* matrix = nullptr);
-  FWL_Error FillPath(CFX_Path* path,
-                     FX_FillMode fillMode = FXFILL_WINDING,
-                     CFX_Matrix* matrix = nullptr);
-  FWL_Error ClipPath(CFX_Path* path,
-                     FX_FillMode fillMode = FXFILL_WINDING,
-                     CFX_Matrix* matrix = nullptr);
-  FWL_Error DrawImage(CFX_DIBSource* source,
-                      const CFX_PointF& point,
-                      CFX_Matrix* matrix = nullptr);
-  FWL_Error StretchImage(CFX_DIBSource* source,
-                         const CFX_RectF& rect,
-                         CFX_Matrix* matrix = nullptr);
-  FWL_Error ConcatMatrix(const CFX_Matrix* matrix);
-  FWL_Error ClearClip();
-  FWL_Error ShowText(const CFX_PointF& point,
-                     const CFX_WideString& text,
-                     CFX_Matrix* matrix = nullptr);
-  void CalcTextRect(CFX_RectF& rect,
-                    const CFX_WideString& text,
-                    bool isMultiline = false,
+  void SetLineCap(CFX_GraphStateData::LineCap lineCap);
+  void SetLineDash(FX_FLOAT dashPhase, FX_FLOAT* dashArray, int32_t dashCount);
+  void SetLineDash(FX_DashStyle dashStyle);
+  void SetLineWidth(FX_FLOAT lineWidth, bool isActOnDash = false);
+  void SetStrokeColor(CFX_Color* color);
+  void SetFillColor(CFX_Color* color);
+  void SetClipRect(const CFX_RectF& rect);
+  void StrokePath(CFX_Path* path, CFX_Matrix* matrix = nullptr);
+  void FillPath(CFX_Path* path,
+                FX_FillMode fillMode = FXFILL_WINDING,
+                CFX_Matrix* matrix = nullptr);
+  void StretchImage(CFX_DIBSource* source,
+                    const CFX_RectF& rect,
                     CFX_Matrix* matrix = nullptr);
-  FWL_Error Transfer(CFX_Graphics* graphics, const CFX_Matrix* matrix);
-  FWL_Error Transfer(CFX_Graphics* graphics,
-                     FX_FLOAT srcLeft,
-                     FX_FLOAT srcTop,
-                     const CFX_RectF& dstRect,
-                     const CFX_Matrix* matrix);
-
-  FWL_Error InverseRect(const CFX_RectF& rect);
-  FWL_Error XorDIBitmap(const CFX_DIBitmap* srcBitmap, const CFX_RectF& rect);
-  FWL_Error EqvDIBitmap(const CFX_DIBitmap* srcBitmap, const CFX_RectF& rect);
+  void ConcatMatrix(const CFX_Matrix* matrix);
 
  protected:
   int32_t m_type;
@@ -190,53 +79,32 @@
     TInfo& operator=(const TInfo& other);
 
     CFX_GraphStateData graphState;
-    bool isAntialiasing;
-    FX_StrokeAlignment strokeAlignment;
     CFX_Matrix CTM;
     bool isActOnDash;
     CFX_Color* strokeColor;
     CFX_Color* fillColor;
-    CFX_Font* font;
-    FX_FLOAT fontSize;
-    FX_FLOAT fontHScale;
-    FX_FLOAT fontSpacing;
   } m_info;
 
-  FWL_Error RenderDeviceSetLineDash(FX_DashStyle dashStyle);
-  FWL_Error RenderDeviceStrokePath(CFX_Path* path, CFX_Matrix* matrix);
-  FWL_Error RenderDeviceFillPath(CFX_Path* path,
-                                 FX_FillMode fillMode,
-                                 CFX_Matrix* matrix);
-  FWL_Error RenderDeviceDrawImage(CFX_DIBSource* source,
-                                  const CFX_PointF& point,
-                                  CFX_Matrix* matrix);
-  FWL_Error RenderDeviceStretchImage(CFX_DIBSource* source,
-                                     const CFX_RectF& rect,
-                                     CFX_Matrix* matrix);
-  FWL_Error RenderDeviceShowText(const CFX_PointF& point,
-                                 const CFX_WideString& text,
-                                 CFX_Matrix* matrix);
-
-  FWL_Error StrokePathWithPattern(CFX_Path* path, CFX_Matrix* matrix);
-  FWL_Error StrokePathWithShading(CFX_Path* path, CFX_Matrix* matrix);
-
-  FWL_Error FillPathWithPattern(CFX_Path* path,
-                                FX_FillMode fillMode,
-                                CFX_Matrix* matrix);
-  FWL_Error FillPathWithShading(CFX_Path* path,
-                                FX_FillMode fillMode,
+  void RenderDeviceSetLineDash(FX_DashStyle dashStyle);
+  void RenderDeviceStrokePath(CFX_Path* path, CFX_Matrix* matrix);
+  void RenderDeviceFillPath(CFX_Path* path,
+                            FX_FillMode fillMode,
+                            CFX_Matrix* matrix);
+  void RenderDeviceStretchImage(CFX_DIBSource* source,
+                                const CFX_RectF& rect,
                                 CFX_Matrix* matrix);
 
-  FWL_Error SetDIBitsWithMatrix(CFX_DIBSource* source, CFX_Matrix* matrix);
-  FWL_Error CalcTextInfo(const CFX_WideString& text,
-                         uint32_t* charCodes,
-                         FXTEXT_CHARPOS* charPos,
-                         CFX_RectF& rect);
+  void FillPathWithPattern(CFX_Path* path,
+                           FX_FillMode fillMode,
+                           CFX_Matrix* matrix);
+  void FillPathWithShading(CFX_Path* path,
+                           FX_FillMode fillMode,
+                           CFX_Matrix* matrix);
+
+  void SetDIBitsWithMatrix(CFX_DIBSource* source, CFX_Matrix* matrix);
 
   CFX_RenderDevice* m_renderDevice;
   std::vector<std::unique_ptr<TInfo>> m_infoStack;
-  std::unique_ptr<CAGG_Graphics> m_aggGraphics;
-  friend class CAGG_Graphics;
 };
 
 #endif  // XFA_FXGRAPHICS_CFX_GRAPHICS_H_
diff --git a/xfa/fxgraphics/cfx_pattern.cpp b/xfa/fxgraphics/cfx_pattern.cpp
index 8293ba1..a20ec24 100644
--- a/xfa/fxgraphics/cfx_pattern.cpp
+++ b/xfa/fxgraphics/cfx_pattern.cpp
@@ -11,9 +11,6 @@
                          const FX_ARGB backArgb,
                          CFX_Matrix* matrix)
     : m_hatchStyle(hatchStyle), m_foreArgb(foreArgb), m_backArgb(backArgb) {
-  ASSERT(m_hatchStyle >= FX_HATCHSTYLE_Horizontal &&
-         m_hatchStyle <= FX_HATCHSTYLE_SolidDiamond);
-
   if (matrix)
     m_matrix = *matrix;
   else
