diff --git a/xfa/fwl/theme/cfwl_comboboxtp.cpp b/xfa/fwl/theme/cfwl_comboboxtp.cpp
index 5ae8352..0d5695f 100644
--- a/xfa/fwl/theme/cfwl_comboboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_comboboxtp.cpp
@@ -57,27 +57,24 @@
 void CFWL_ComboBoxTP::DrawDropDownButton(const CFWL_ThemeBackground& pParams,
                                          uint32_t dwStates,
                                          const CFX_Matrix& matrix) {
-  FWLTHEME_STATE eState = FWLTHEME_STATE_Normal;
+  FWLTHEME_STATE eState;
   switch (dwStates) {
-    case CFWL_PartState_Normal: {
-      eState = FWLTHEME_STATE_Normal;
+    case CFWL_PartState_Normal:
+      eState = FWLTHEME_STATE::kNormal;
       break;
-    }
-    case CFWL_PartState_Hovered: {
-      eState = FWLTHEME_STATE_Hover;
+    case CFWL_PartState_Hovered:
+      eState = FWLTHEME_STATE::kHover;
       break;
-    }
-    case CFWL_PartState_Pressed: {
-      eState = FWLTHEME_STATE_Pressed;
+    case CFWL_PartState_Pressed:
+      eState = FWLTHEME_STATE::kPressed;
       break;
-    }
-    case CFWL_PartState_Disabled: {
-      eState = FWLTHEME_STATE_Disable;
+    case CFWL_PartState_Disabled:
+      eState = FWLTHEME_STATE::kDisable;
       break;
-    }
     default:
+      eState = FWLTHEME_STATE::kNormal;
       break;
   }
   DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
-               FWLTHEME_DIRECTION_Down, eState, pParams.m_matrix);
+               FWLTHEME_DIRECTION::kDown, eState, pParams.m_matrix);
 }
diff --git a/xfa/fwl/theme/cfwl_datetimepickertp.cpp b/xfa/fwl/theme/cfwl_datetimepickertp.cpp
index d3a1cdf..c332b1b 100644
--- a/xfa/fwl/theme/cfwl_datetimepickertp.cpp
+++ b/xfa/fwl/theme/cfwl_datetimepickertp.cpp
@@ -32,27 +32,25 @@
     const CFX_Matrix& matrix) {
   uint32_t dwStates = pParams.m_dwStates;
   dwStates &= 0x03;
-  FWLTHEME_STATE eState = FWLTHEME_STATE_Normal;
-  switch (eState & dwStates) {
-    case CFWL_PartState_Normal: {
-      eState = FWLTHEME_STATE_Normal;
+  FWLTHEME_STATE eState = FWLTHEME_STATE::kNormal;
+
+  // TODO(tsepez): enum mismatch, &ing with 1 makes no sense here.
+  switch (static_cast<uint32_t>(eState) & dwStates) {
+    case CFWL_PartState_Normal:
+      eState = FWLTHEME_STATE::kNormal;
       break;
-    }
-    case CFWL_PartState_Hovered: {
-      eState = FWLTHEME_STATE_Hover;
+    case CFWL_PartState_Hovered:
+      eState = FWLTHEME_STATE::kHover;
       break;
-    }
-    case CFWL_PartState_Pressed: {
-      eState = FWLTHEME_STATE_Pressed;
+    case CFWL_PartState_Pressed:
+      eState = FWLTHEME_STATE::kPressed;
       break;
-    }
-    case CFWL_PartState_Disabled: {
-      eState = FWLTHEME_STATE_Disable;
+    case CFWL_PartState_Disabled:
+      eState = FWLTHEME_STATE::kDisable;
       break;
-    }
     default:
       break;
   }
   DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
-               FWLTHEME_DIRECTION_Down, eState, matrix);
+               FWLTHEME_DIRECTION::kDown, eState, matrix);
 }
diff --git a/xfa/fwl/theme/cfwl_monthcalendartp.cpp b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
index de822b4..125119e 100644
--- a/xfa/fwl/theme/cfwl_monthcalendartp.cpp
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
@@ -49,13 +49,13 @@
     case CFWL_ThemePart::Part::kLBtn: {
       FWLTHEME_STATE eState = GetState(pParams.m_dwStates);
       DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
-                   FWLTHEME_DIRECTION_Left, eState, pParams.m_matrix);
+                   FWLTHEME_DIRECTION::kLeft, eState, pParams.m_matrix);
       break;
     }
     case CFWL_ThemePart::Part::kRBtn: {
       FWLTHEME_STATE eState = GetState(pParams.m_dwStates);
       DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
-                   FWLTHEME_DIRECTION_Right, eState, pParams.m_matrix);
+                   FWLTHEME_DIRECTION::kRight, eState, pParams.m_matrix);
       break;
     }
     case CFWL_ThemePart::Part::kHSeparator: {
@@ -268,8 +268,8 @@
 
 FWLTHEME_STATE CFWL_MonthCalendarTP::GetState(uint32_t dwFWLStates) {
   if (dwFWLStates & CFWL_PartState_Hovered)
-    return FWLTHEME_STATE_Hover;
+    return FWLTHEME_STATE::kHover;
   if (dwFWLStates & CFWL_PartState_Pressed)
-    return FWLTHEME_STATE_Pressed;
-  return FWLTHEME_STATE_Normal;
+    return FWLTHEME_STATE::kPressed;
+  return FWLTHEME_STATE::kNormal;
 }
diff --git a/xfa/fwl/theme/cfwl_scrollbartp.cpp b/xfa/fwl/theme/cfwl_scrollbartp.cpp
index ff9e329..7e4cfcd 100644
--- a/xfa/fwl/theme/cfwl_scrollbartp.cpp
+++ b/xfa/fwl/theme/cfwl_scrollbartp.cpp
@@ -22,27 +22,28 @@
 
 void CFWL_ScrollBarTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
   CFWL_Widget* pWidget = pParams.GetWidget();
-  FWLTHEME_STATE eState = FWLTHEME_STATE_Normal;
+  FWLTHEME_STATE eState = FWLTHEME_STATE::kNormal;
   if (pParams.m_dwStates & CFWL_PartState_Hovered)
-    eState = FWLTHEME_STATE_Hover;
+    eState = FWLTHEME_STATE::kHover;
   else if (pParams.m_dwStates & CFWL_PartState_Pressed)
-    eState = FWLTHEME_STATE_Pressed;
+    eState = FWLTHEME_STATE::kPressed;
   else if (pParams.m_dwStates & CFWL_PartState_Disabled)
-    eState = FWLTHEME_STATE_Disable;
+    eState = FWLTHEME_STATE::kDisable;
 
   CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
   bool bVert = !!pWidget->GetStyleExts();
   switch (pParams.m_iPart) {
     case CFWL_ThemePart::Part::kForeArrow: {
       DrawMaxMinBtn(pGraphics, pParams.m_PartRect,
-                    bVert ? FWLTHEME_DIRECTION_Up : FWLTHEME_DIRECTION_Left,
+                    bVert ? FWLTHEME_DIRECTION::kUp : FWLTHEME_DIRECTION::kLeft,
                     eState, pParams.m_matrix);
       break;
     }
     case CFWL_ThemePart::Part::kBackArrow: {
-      DrawMaxMinBtn(pGraphics, pParams.m_PartRect,
-                    bVert ? FWLTHEME_DIRECTION_Down : FWLTHEME_DIRECTION_Right,
-                    eState, pParams.m_matrix);
+      DrawMaxMinBtn(
+          pGraphics, pParams.m_PartRect,
+          bVert ? FWLTHEME_DIRECTION::kDown : FWLTHEME_DIRECTION::kRight,
+          eState, pParams.m_matrix);
       break;
     }
     case CFWL_ThemePart::Part::kThumb: {
@@ -70,7 +71,7 @@
                                     bool bVert,
                                     FWLTHEME_STATE eState,
                                     const CFX_Matrix& matrix) {
-  if (eState < FWLTHEME_STATE_Normal || eState > FWLTHEME_STATE_Disable)
+  if (eState < FWLTHEME_STATE::kNormal || eState > FWLTHEME_STATE::kDisable)
     return;
 
   CFX_RectF rect = input_rect;
@@ -82,14 +83,16 @@
   if (rect.IsEmpty(0.1f))
     return;
 
-  FillSolidRect(pGraphics, m_pThemeData->clrBtnBK[eState - 1][1], rect, matrix);
+  FillSolidRect(pGraphics,
+                m_pThemeData->clrBtnBK[static_cast<size_t>(eState) - 1][1],
+                rect, matrix);
 
   pGraphics->SaveGraphState();
 
   CFGAS_GEPath path;
   path.AddRectangle(rect.left, rect.top, rect.width, rect.height);
-  pGraphics->SetStrokeColor(
-      CFGAS_GEColor(m_pThemeData->clrBtnBorder[eState - 1]));
+  pGraphics->SetStrokeColor(CFGAS_GEColor(
+      m_pThemeData->clrBtnBorder[static_cast<size_t>(eState) - 1]));
   pGraphics->StrokePath(path, matrix);
   pGraphics->RestoreGraphState();
 }
@@ -100,7 +103,7 @@
                                  FWLTHEME_STATE eState,
                                  bool bLowerTrack,
                                  const CFX_Matrix& matrix) {
-  if (eState < FWLTHEME_STATE_Normal || eState > FWLTHEME_STATE_Disable)
+  if (eState < FWLTHEME_STATE::kNormal || eState > FWLTHEME_STATE::kDisable)
     return;
 
   pGraphics->SaveGraphState();
@@ -127,9 +130,10 @@
                                      FWLTHEME_DIRECTION eDict,
                                      FWLTHEME_STATE eState,
                                      const CFX_Matrix& matrix) {
-  DrawTrack(pGraphics, rect,
-            eDict == FWLTHEME_DIRECTION_Up || eDict == FWLTHEME_DIRECTION_Down,
-            eState, true, matrix);
+  DrawTrack(
+      pGraphics, rect,
+      eDict == FWLTHEME_DIRECTION::kUp || eDict == FWLTHEME_DIRECTION::kDown,
+      eState, true, matrix);
   CFX_RectF rtArrowBtn = rect;
   rtArrowBtn.Deflate(1, 1, 1, 1);
   DrawArrowBtn(pGraphics, rtArrowBtn, eDict, eState, matrix);
diff --git a/xfa/fwl/theme/cfwl_utils.h b/xfa/fwl/theme/cfwl_utils.h
index d9185c6..0e815f6 100644
--- a/xfa/fwl/theme/cfwl_utils.h
+++ b/xfa/fwl/theme/cfwl_utils.h
@@ -7,21 +7,14 @@
 #ifndef XFA_FWL_THEME_CFWL_UTILS_H_
 #define XFA_FWL_THEME_CFWL_UTILS_H_
 
+#include <stdint.h>
+
 #include "core/fxge/dib/fx_dib.h"
 
-enum FWLTHEME_STATE {
-  FWLTHEME_STATE_Normal = 1,
-  FWLTHEME_STATE_Hover,
-  FWLTHEME_STATE_Pressed,
-  FWLTHEME_STATE_Disable
-};
+// Values matter, used for indexing.
+enum class FWLTHEME_STATE : uint8_t { kNormal = 1, kHover, kPressed, kDisable };
 
-enum FWLTHEME_DIRECTION {
-  FWLTHEME_DIRECTION_Up = 0,
-  FWLTHEME_DIRECTION_Down,
-  FWLTHEME_DIRECTION_Left,
-  FWLTHEME_DIRECTION_Right
-};
+enum class FWLTHEME_DIRECTION : uint8_t { kUp = 0, kDown, kLeft, kRight };
 
 #define FWLTHEME_COLOR_EDGERB1 (ArgbEncode(255, 241, 239, 226))
 #define FWLTHEME_COLOR_Background (ArgbEncode(255, 236, 233, 216))
diff --git a/xfa/fwl/theme/cfwl_widgettp.cpp b/xfa/fwl/theme/cfwl_widgettp.cpp
index 70f33ecb..55434e5 100644
--- a/xfa/fwl/theme/cfwl_widgettp.cpp
+++ b/xfa/fwl/theme/cfwl_widgettp.cpp
@@ -146,12 +146,12 @@
                               FX_ARGB argSign,
                               const CFX_Matrix& matrix) {
   bool bVert =
-      (eDict == FWLTHEME_DIRECTION_Up || eDict == FWLTHEME_DIRECTION_Down);
+      (eDict == FWLTHEME_DIRECTION::kUp || eDict == FWLTHEME_DIRECTION::kDown);
   float fLeft = ((rect.width - (bVert ? 9 : 6)) / 2 + rect.left) + 0.5f;
   float fTop = ((rect.height - (bVert ? 6 : 9)) / 2 + rect.top) + 0.5f;
   CFGAS_GEPath path;
   switch (eDict) {
-    case FWLTHEME_DIRECTION_Down: {
+    case FWLTHEME_DIRECTION::kDown:
       path.MoveTo(CFX_PointF(fLeft, fTop + 1));
       path.LineTo(CFX_PointF(fLeft + 4, fTop + 5));
       path.LineTo(CFX_PointF(fLeft + 8, fTop + 1));
@@ -159,8 +159,7 @@
       path.LineTo(CFX_PointF(fLeft + 4, fTop + 3));
       path.LineTo(CFX_PointF(fLeft + 1, fTop));
       break;
-    }
-    case FWLTHEME_DIRECTION_Up: {
+    case FWLTHEME_DIRECTION::kUp:
       path.MoveTo(CFX_PointF(fLeft, fTop + 4));
       path.LineTo(CFX_PointF(fLeft + 4, fTop));
       path.LineTo(CFX_PointF(fLeft + 8, fTop + 4));
@@ -168,8 +167,7 @@
       path.LineTo(CFX_PointF(fLeft + 4, fTop + 2));
       path.LineTo(CFX_PointF(fLeft + 1, fTop + 5));
       break;
-    }
-    case FWLTHEME_DIRECTION_Right: {
+    case FWLTHEME_DIRECTION::kRight:
       path.MoveTo(CFX_PointF(fLeft + 1, fTop));
       path.LineTo(CFX_PointF(fLeft + 5, fTop + 4));
       path.LineTo(CFX_PointF(fLeft + 1, fTop + 8));
@@ -177,8 +175,7 @@
       path.LineTo(CFX_PointF(fLeft + 3, fTop + 4));
       path.LineTo(CFX_PointF(fLeft, fTop + 1));
       break;
-    }
-    case FWLTHEME_DIRECTION_Left: {
+    case FWLTHEME_DIRECTION::kLeft:
       path.MoveTo(CFX_PointF(fLeft, fTop + 4));
       path.LineTo(CFX_PointF(fLeft + 4, fTop));
       path.LineTo(CFX_PointF(fLeft + 5, fTop + 1));
@@ -186,7 +183,6 @@
       path.LineTo(CFX_PointF(fLeft + 5, fTop + 7));
       path.LineTo(CFX_PointF(fLeft + 4, fTop + 8));
       break;
-    }
   }
   pGraphics->SetFillColor(CFGAS_GEColor(argSign));
   pGraphics->FillPath(path, CFX_FillRenderOptions::FillType::kWinding, matrix);
@@ -197,11 +193,14 @@
                             FWLTHEME_STATE eState,
                             const CFX_Matrix& matrix) {
   InitializeArrowColorData();
-  FillSolidRect(pGraphics, m_pColorData->clrEnd[eState - 1], rect, matrix);
+  FillSolidRect(pGraphics,
+                m_pColorData->clrEnd[static_cast<size_t>(eState) - 1], rect,
+                matrix);
 
   CFGAS_GEPath path;
   path.AddRectangle(rect.left, rect.top, rect.width, rect.height);
-  pGraphics->SetStrokeColor(CFGAS_GEColor(m_pColorData->clrBorder[eState - 1]));
+  pGraphics->SetStrokeColor(
+      CFGAS_GEColor(m_pColorData->clrBorder[static_cast<size_t>(eState) - 1]));
   pGraphics->StrokePath(path, matrix);
 }
 
@@ -212,5 +211,6 @@
                                  const CFX_Matrix& matrix) {
   DrawBtn(pGraphics, rect, eState, matrix);
   InitializeArrowColorData();
-  DrawArrow(pGraphics, rect, eDict, m_pColorData->clrSign[eState - 1], matrix);
+  DrawArrow(pGraphics, rect, eDict,
+            m_pColorData->clrSign[static_cast<size_t>(eState) - 1], matrix);
 }
diff --git a/xfa/fwl/theme/cfwl_widgettp.h b/xfa/fwl/theme/cfwl_widgettp.h
index 95a7a28..b206d73 100644
--- a/xfa/fwl/theme/cfwl_widgettp.h
+++ b/xfa/fwl/theme/cfwl_widgettp.h
@@ -36,10 +36,10 @@
 
  protected:
   struct CColorData {
-    FX_ARGB clrBorder[4];
-    FX_ARGB clrStart[4];
-    FX_ARGB clrEnd[4];
-    FX_ARGB clrSign[4];
+    FX_ARGB clrBorder[4];  // Indexed by enum FWLTHEME_STATE - 1.
+    FX_ARGB clrStart[4];   // Indexed by enum FWLTHEME_STATE - 1.
+    FX_ARGB clrEnd[4];     // Indexed by enum FWLTHEME_STATE - 1.
+    FX_ARGB clrSign[4];    // Indexed by enum FWLTHEME_STATE - 1.
   };
 
   CFWL_WidgetTP();
