diff --git a/xfa/fwl/cfwl_edit.cpp b/xfa/fwl/cfwl_edit.cpp
index fa65bca..2f26706 100644
--- a/xfa/fwl/cfwl_edit.cpp
+++ b/xfa/fwl/cfwl_edit.cpp
@@ -36,7 +36,7 @@
 
 namespace {
 
-const int kEditMargin = 3;
+constexpr int kEditMargin = 3;
 
 #if defined(OS_MACOSX)
 constexpr int kEditingModifier = FWL_KEYFLAG_Command;
diff --git a/xfa/fwl/cfwl_monthcalendar.cpp b/xfa/fwl/cfwl_monthcalendar.cpp
index d5296e5..a856af2 100644
--- a/xfa/fwl/cfwl_monthcalendar.cpp
+++ b/xfa/fwl/cfwl_monthcalendar.cpp
@@ -138,7 +138,7 @@
   DrawHeadBK(pGraphics, pTheme, &matrix);
   DrawLButton(pGraphics, pTheme, &matrix);
   DrawRButton(pGraphics, pTheme, &matrix);
-  DrawSeperator(pGraphics, pTheme, &matrix);
+  DrawSeparator(pGraphics, pTheme, &matrix);
   DrawDatesInBK(pGraphics, pTheme, &matrix);
   DrawDatesInCircle(pGraphics, pTheme, &matrix);
   DrawCaption(pGraphics, pTheme, &matrix);
@@ -231,7 +231,7 @@
   pTheme->DrawText(textParam);
 }
 
-void CFWL_MonthCalendar::DrawSeperator(CXFA_Graphics* pGraphics,
+void CFWL_MonthCalendar::DrawSeparator(CXFA_Graphics* pGraphics,
                                        IFWL_ThemeProvider* pTheme,
                                        const CFX_Matrix* pMatrix) {
   CFWL_ThemeBackground params;
diff --git a/xfa/fwl/cfwl_monthcalendar.h b/xfa/fwl/cfwl_monthcalendar.h
index 1bb0bd2..a00ea0f 100644
--- a/xfa/fwl/cfwl_monthcalendar.h
+++ b/xfa/fwl/cfwl_monthcalendar.h
@@ -103,7 +103,7 @@
   void DrawCaption(CXFA_Graphics* pGraphics,
                    IFWL_ThemeProvider* pTheme,
                    const CFX_Matrix* pMatrix);
-  void DrawSeperator(CXFA_Graphics* pGraphics,
+  void DrawSeparator(CXFA_Graphics* pGraphics,
                      IFWL_ThemeProvider* pTheme,
                      const CFX_Matrix* pMatrix);
   void DrawDatesInBK(CXFA_Graphics* pGraphics,
diff --git a/xfa/fwl/theme/cfwl_checkboxtp.cpp b/xfa/fwl/theme/cfwl_checkboxtp.cpp
index 297810b..d678281 100644
--- a/xfa/fwl/theme/cfwl_checkboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_checkboxtp.cpp
@@ -19,7 +19,7 @@
 
 namespace {
 
-const int kSignPath = 100;
+constexpr int kSignPath = 100;
 
 CFX_PointF ScaleBezierPoint(const CFX_PointF& point) {
   CFX_PointF scaled_point(point);
@@ -30,9 +30,7 @@
 
 }  // namespace
 
-CFWL_CheckBoxTP::CFWL_CheckBoxTP() : m_pThemeData(new CKBThemeData) {
-  SetThemeData();
-}
+CFWL_CheckBoxTP::CFWL_CheckBoxTP() = default;
 
 CFWL_CheckBoxTP::~CFWL_CheckBoxTP() {
   if (m_pCheckPath)
@@ -172,44 +170,6 @@
   pGraphics->RestoreGraphState();
 }
 
-void CFWL_CheckBoxTP::SetThemeData() {
-  uint32_t* pData = (uint32_t*)&m_pThemeData->clrBoxBk;
-
-  *pData++ = 0;
-  *pData++ = 0;
-  *pData++ = ArgbEncode(255, 220, 220, 215),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 255, 240, 207),
-  *pData++ = ArgbEncode(255, 248, 179, 48),
-  *pData++ = ArgbEncode(255, 176, 176, 167),
-  *pData++ = ArgbEncode(255, 241, 239, 239),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 220, 220, 215),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 255, 240, 207),
-  *pData++ = ArgbEncode(255, 248, 179, 48),
-  *pData++ = ArgbEncode(255, 176, 176, 167),
-  *pData++ = ArgbEncode(255, 241, 239, 239),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 220, 220, 215),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 255, 240, 207),
-  *pData++ = ArgbEncode(255, 248, 179, 48),
-  *pData++ = ArgbEncode(255, 176, 176, 167),
-  *pData++ = ArgbEncode(255, 241, 239, 239),
-  *pData++ = ArgbEncode(255, 255, 255, 255),
-  *pData++ = ArgbEncode(255, 255, 255, 255);
-  m_pThemeData->clrSignBorderNormal = ArgbEncode(255, 28, 81, 128);
-  m_pThemeData->clrSignBorderDisable = ArgbEncode(255, 202, 200, 187);
-  m_pThemeData->clrSignCheck = ArgbEncode(255, 28, 81, 128);
-  m_pThemeData->clrSignNeutral = ArgbEncode(255, 28, 134, 26);
-  m_pThemeData->clrSignNeutralNormal = ArgbEncode(255, 114, 192, 113);
-  m_pThemeData->clrSignNeutralHover = ArgbEncode(255, 33, 161, 33);
-  m_pThemeData->clrSignNeutralPressed = ArgbEncode(255, 28, 134, 26);
-}
-
 void CFWL_CheckBoxTP::InitCheckPath(float fCheckLen) {
   if (!m_pCheckPath) {
     m_pCheckPath = pdfium::MakeUnique<CXFA_GEPath>();
diff --git a/xfa/fwl/theme/cfwl_checkboxtp.h b/xfa/fwl/theme/cfwl_checkboxtp.h
index e576be3..5bdd8e2 100644
--- a/xfa/fwl/theme/cfwl_checkboxtp.h
+++ b/xfa/fwl/theme/cfwl_checkboxtp.h
@@ -9,7 +9,6 @@
 
 #include <memory>
 
-#include "xfa/fwl/theme/cfwl_utils.h"
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_Widget;
@@ -26,17 +25,6 @@
   void DrawText(const CFWL_ThemeText& pParams) override;
 
  private:
-  struct CKBThemeData {
-    FX_ARGB clrSignBorderNormal;
-    FX_ARGB clrSignBorderDisable;
-    FX_ARGB clrSignCheck;
-    FX_ARGB clrSignNeutral;
-    FX_ARGB clrSignNeutralNormal;
-    FX_ARGB clrSignNeutralHover;
-    FX_ARGB clrSignNeutralPressed;
-    FX_ARGB clrBoxBk[13][2];
-  };
-
   void DrawCheckSign(CFWL_Widget* pWidget,
                      CXFA_Graphics* pGraphics,
                      const CFX_RectF& pRtBox,
@@ -68,9 +56,7 @@
                     const CFX_Matrix& matrix);
 
   void InitCheckPath(float fCheckLen);
-  void SetThemeData();
 
-  std::unique_ptr<CKBThemeData> m_pThemeData;
   std::unique_ptr<CXFA_GEPath> m_pCheckPath;
 };
 
diff --git a/xfa/fwl/theme/cfwl_comboboxtp.cpp b/xfa/fwl/theme/cfwl_comboboxtp.cpp
index 486fa05..6cc842d 100644
--- a/xfa/fwl/theme/cfwl_comboboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_comboboxtp.cpp
@@ -14,9 +14,9 @@
 #include "xfa/fxgraphics/cxfa_gecolor.h"
 #include "xfa/fxgraphics/cxfa_gepath.h"
 
-CFWL_ComboBoxTP::CFWL_ComboBoxTP() {}
+CFWL_ComboBoxTP::CFWL_ComboBoxTP() = default;
 
-CFWL_ComboBoxTP::~CFWL_ComboBoxTP() {}
+CFWL_ComboBoxTP::~CFWL_ComboBoxTP() = default;
 
 void CFWL_ComboBoxTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
   switch (pParams.m_iPart) {
diff --git a/xfa/fwl/theme/cfwl_listboxtp.cpp b/xfa/fwl/theme/cfwl_listboxtp.cpp
index 2188aeb..28b5e34 100644
--- a/xfa/fwl/theme/cfwl_listboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_listboxtp.cpp
@@ -14,9 +14,9 @@
 #include "xfa/fxgraphics/cxfa_gecolor.h"
 #include "xfa/fxgraphics/cxfa_gepath.h"
 
-CFWL_ListBoxTP::CFWL_ListBoxTP() {}
+CFWL_ListBoxTP::CFWL_ListBoxTP() = default;
 
-CFWL_ListBoxTP::~CFWL_ListBoxTP() {}
+CFWL_ListBoxTP::~CFWL_ListBoxTP() = default;
 
 void CFWL_ListBoxTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
   switch (pParams.m_iPart) {
diff --git a/xfa/fwl/theme/cfwl_monthcalendartp.cpp b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
index 750c3d7..08a7c4e 100644
--- a/xfa/fwl/theme/cfwl_monthcalendartp.cpp
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
@@ -16,11 +16,21 @@
 #include "xfa/fxgraphics/cxfa_gecolor.h"
 #include "xfa/fxgraphics/cxfa_gepath.h"
 
-CFWL_MonthCalendarTP::CFWL_MonthCalendarTP() : m_pThemeData(new MCThemeData) {
-  SetThemeData();
-}
+namespace {
 
-CFWL_MonthCalendarTP::~CFWL_MonthCalendarTP() {}
+constexpr FX_ARGB kCaptionColor = ArgbEncode(0xff, 0, 153, 255);
+constexpr FX_ARGB kSeparatorColor = ArgbEncode(0xff, 141, 161, 239);
+constexpr FX_ARGB kDatesHoverBackgroundColor = ArgbEncode(0xff, 193, 211, 251);
+constexpr FX_ARGB kDatesSelectedBackgroundColor =
+    ArgbEncode(0xff, 173, 188, 239);
+constexpr FX_ARGB kDatesCircleColor = ArgbEncode(0xff, 103, 144, 209);
+constexpr FX_ARGB kBackgroundColor = ArgbEncode(0xff, 255, 255, 255);
+
+}  // namespace
+
+CFWL_MonthCalendarTP::CFWL_MonthCalendarTP() = default;
+
+CFWL_MonthCalendarTP::~CFWL_MonthCalendarTP() = default;
 
 void CFWL_MonthCalendarTP::Initialize() {
   CFWL_WidgetTP::Initialize();
@@ -59,7 +69,7 @@
       break;
     }
     case CFWL_Part::HSeparator: {
-      DrawHSeperator(pParams, pParams.m_matrix);
+      DrawHSeparator(pParams, pParams.m_matrix);
       break;
     }
     case CFWL_Part::DatesIn: {
@@ -93,7 +103,7 @@
        (CFWL_PartState_Hovered | CFWL_PartState_Selected))) {
     m_pTextOut->SetTextColor(0xFFFFFFFF);
   } else if (pParams.m_iPart == CFWL_Part::Caption) {
-    m_pTextOut->SetTextColor(m_pThemeData->clrCaption);
+    m_pTextOut->SetTextColor(kCaptionColor);
   } else {
     m_pTextOut->SetTextColor(0xFF000000);
   }
@@ -106,7 +116,7 @@
   CFX_RectF rtTotal(pParams.m_rtPart);
   path.AddRectangle(rtTotal.left, rtTotal.top, rtTotal.width, rtTotal.height);
   pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetFillColor(CXFA_GEColor(m_pThemeData->clrBK));
+  pParams.m_pGraphics->SetFillColor(CXFA_GEColor(kBackgroundColor));
   pParams.m_pGraphics->FillPath(&path, FXFILL_WINDING, &matrix);
   pParams.m_pGraphics->RestoreGraphState();
 }
@@ -117,7 +127,7 @@
   CFX_RectF rtHead = pParams.m_rtPart;
   path.AddRectangle(rtHead.left, rtHead.top, rtHead.width, rtHead.height);
   pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetFillColor(CXFA_GEColor(m_pThemeData->clrBK));
+  pParams.m_pGraphics->SetFillColor(CXFA_GEColor(kBackgroundColor));
   pParams.m_pGraphics->FillPath(&path, FXFILL_WINDING, &matrix);
   pParams.m_pGraphics->RestoreGraphState();
 }
@@ -188,14 +198,14 @@
   pParams.m_pGraphics->RestoreGraphState();
 }
 
-void CFWL_MonthCalendarTP::DrawHSeperator(const CFWL_ThemeBackground& pParams,
+void CFWL_MonthCalendarTP::DrawHSeparator(const CFWL_ThemeBackground& pParams,
                                           const CFX_Matrix& matrix) {
   CXFA_GEPath path;
   CFX_RectF rtHSep = pParams.m_rtPart;
   path.MoveTo(CFX_PointF(rtHSep.left, rtHSep.top + rtHSep.height / 2));
   path.LineTo(CFX_PointF(rtHSep.right(), rtHSep.top + rtHSep.height / 2));
   pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetStrokeColor(CXFA_GEColor(m_pThemeData->clrSeperator));
+  pParams.m_pGraphics->SetStrokeColor(CXFA_GEColor(kSeparatorColor));
   pParams.m_pGraphics->StrokePath(&path, &matrix);
   pParams.m_pGraphics->RestoreGraphState();
 }
@@ -207,7 +217,7 @@
   path.MoveTo(rtWeekSep.TopLeft());
   path.LineTo(rtWeekSep.BottomLeft());
   pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetStrokeColor(CXFA_GEColor(m_pThemeData->clrSeperator));
+  pParams.m_pGraphics->SetStrokeColor(CXFA_GEColor(kSeparatorColor));
   pParams.m_pGraphics->StrokePath(&path, &matrix);
   pParams.m_pGraphics->RestoreGraphState();
 }
@@ -221,15 +231,14 @@
     path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width,
                       rtSelDay.height);
     pParams.m_pGraphics->SetFillColor(
-        CXFA_GEColor(m_pThemeData->clrDatesSelectedBK));
+        CXFA_GEColor(kDatesSelectedBackgroundColor));
     pParams.m_pGraphics->FillPath(&path, FXFILL_WINDING, &matrix);
   } else if (pParams.m_dwStates & CFWL_PartState_Hovered) {
     CXFA_GEPath path;
     CFX_RectF rtSelDay = pParams.m_rtPart;
     path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width,
                       rtSelDay.height);
-    pParams.m_pGraphics->SetFillColor(
-        CXFA_GEColor(m_pThemeData->clrDatesHoverBK));
+    pParams.m_pGraphics->SetFillColor(CXFA_GEColor(kDatesHoverBackgroundColor));
     pParams.m_pGraphics->FillPath(&path, FXFILL_WINDING, &matrix);
   }
   pParams.m_pGraphics->RestoreGraphState();
@@ -243,8 +252,7 @@
   path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width,
                     rtSelDay.height);
   pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetStrokeColor(
-      CXFA_GEColor(m_pThemeData->clrDatesCircle));
+  pParams.m_pGraphics->SetStrokeColor(CXFA_GEColor(kDatesCircleColor));
   pParams.m_pGraphics->StrokePath(&path, &matrix);
   pParams.m_pGraphics->RestoreGraphState();
 }
@@ -256,8 +264,7 @@
   path.AddRectangle(rtTodayCircle.left, rtTodayCircle.top, rtTodayCircle.width,
                     rtTodayCircle.height);
   pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetStrokeColor(
-      CXFA_GEColor(m_pThemeData->clrDatesCircle));
+  pParams.m_pGraphics->SetStrokeColor(CXFA_GEColor(kDatesCircleColor));
   pParams.m_pGraphics->StrokePath(&path, &matrix);
   pParams.m_pGraphics->RestoreGraphState();
 }
@@ -269,13 +276,3 @@
     return FWLTHEME_STATE_Pressed;
   return FWLTHEME_STATE_Normal;
 }
-
-void CFWL_MonthCalendarTP::SetThemeData() {
-  m_pThemeData->clrCaption = ArgbEncode(0xff, 0, 153, 255);
-  m_pThemeData->clrSeperator = ArgbEncode(0xff, 141, 161, 239);
-  m_pThemeData->clrDatesHoverBK = ArgbEncode(0xff, 193, 211, 251);
-  m_pThemeData->clrDatesSelectedBK = ArgbEncode(0xff, 173, 188, 239);
-  m_pThemeData->clrDatesCircle = ArgbEncode(0xff, 103, 144, 209);
-  m_pThemeData->clrToday = ArgbEncode(0xff, 0, 0, 0);
-  m_pThemeData->clrBK = ArgbEncode(0xff, 255, 255, 255);
-}
diff --git a/xfa/fwl/theme/cfwl_monthcalendartp.h b/xfa/fwl/theme/cfwl_monthcalendartp.h
index b731ca9..1892b3b 100644
--- a/xfa/fwl/theme/cfwl_monthcalendartp.h
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.h
@@ -7,8 +7,6 @@
 #ifndef XFA_FWL_THEME_CFWL_MONTHCALENDARTP_H_
 #define XFA_FWL_THEME_CFWL_MONTHCALENDARTP_H_
 
-#include <memory>
-
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
 class CFWL_MonthCalendarTP final : public CFWL_WidgetTP {
@@ -23,16 +21,6 @@
   void DrawText(const CFWL_ThemeText& pParams) override;
 
  private:
-  struct MCThemeData {
-    FX_ARGB clrCaption;
-    FX_ARGB clrSeperator;
-    FX_ARGB clrDatesHoverBK;
-    FX_ARGB clrDatesSelectedBK;
-    FX_ARGB clrDatesCircle;
-    FX_ARGB clrToday;
-    FX_ARGB clrBK;
-  };
-
   void DrawTotalBK(const CFWL_ThemeBackground& pParams,
                    const CFX_Matrix& matrix);
   void DrawHeadBk(const CFWL_ThemeBackground& pParams,
@@ -47,15 +35,11 @@
                          const CFX_Matrix& matrix);
   void DrawTodayCircle(const CFWL_ThemeBackground& pParams,
                        const CFX_Matrix& matrix);
-  void DrawHSeperator(const CFWL_ThemeBackground& pParams,
+  void DrawHSeparator(const CFWL_ThemeBackground& pParams,
                       const CFX_Matrix& matrix);
   void DrawWeekNumSep(const CFWL_ThemeBackground& pParams,
                       const CFX_Matrix& matrix);
   FWLTHEME_STATE GetState(uint32_t dwFWLStates);
-  void SetThemeData();
-
-  std::unique_ptr<MCThemeData> m_pThemeData;
-  WideString wsResource;
 };
 
 #endif  // XFA_FWL_THEME_CFWL_MONTHCALENDARTP_H_
diff --git a/xfa/fwl/theme/cfwl_widgettp.cpp b/xfa/fwl/theme/cfwl_widgettp.cpp
index f00e8b6..19e795b 100644
--- a/xfa/fwl/theme/cfwl_widgettp.cpp
+++ b/xfa/fwl/theme/cfwl_widgettp.cpp
@@ -24,10 +24,9 @@
 #include "xfa/fxgraphics/cxfa_gepath.h"
 #include "xfa/fxgraphics/cxfa_geshading.h"
 
-CFWL_WidgetTP::CFWL_WidgetTP()
-    : m_dwRefCount(1), m_pFDEFont(nullptr), m_pColorData(nullptr) {}
+CFWL_WidgetTP::CFWL_WidgetTP() = default;
 
-CFWL_WidgetTP::~CFWL_WidgetTP() {}
+CFWL_WidgetTP::~CFWL_WidgetTP() = default;
 
 void CFWL_WidgetTP::Initialize() {}
 
@@ -161,8 +160,8 @@
                               const CFX_Matrix& matrix) {
   bool bVert =
       (eDict == FWLTHEME_DIRECTION_Up || eDict == FWLTHEME_DIRECTION_Down);
-  float fLeft = (float)(((rect.width - (bVert ? 9 : 6)) / 2 + rect.left) + 0.5);
-  float fTop = (float)(((rect.height - (bVert ? 6 : 9)) / 2 + rect.top) + 0.5);
+  float fLeft = ((rect.width - (bVert ? 9 : 6)) / 2 + rect.left) + 0.5f;
+  float fTop = ((rect.height - (bVert ? 6 : 9)) / 2 + rect.top) + 0.5f;
   CXFA_GEPath path;
   switch (eDict) {
     case FWLTHEME_DIRECTION_Down: {
diff --git a/xfa/fwl/theme/cfwl_widgettp.h b/xfa/fwl/theme/cfwl_widgettp.h
index 63648ff..030e7c8 100644
--- a/xfa/fwl/theme/cfwl_widgettp.h
+++ b/xfa/fwl/theme/cfwl_widgettp.h
@@ -76,7 +76,7 @@
                     FWLTHEME_STATE eState,
                     const CFX_Matrix& matrix);
 
-  uint32_t m_dwRefCount;
+  uint32_t m_dwRefCount = 1;
   std::unique_ptr<CFDE_TextOut> m_pTextOut;
   RetainPtr<CFGAS_GEFont> m_pFDEFont;
   std::unique_ptr<CColorData> m_pColorData;
