diff --git a/core/fpdfapi/page/cpdf_sampledfunc.cpp b/core/fpdfapi/page/cpdf_sampledfunc.cpp
index 32723c4..05c0148 100644
--- a/core/fpdfapi/page/cpdf_sampledfunc.cpp
+++ b/core/fpdfapi/page/cpdf_sampledfunc.cpp
@@ -174,7 +174,7 @@
   return true;
 }
 
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 RetainPtr<CPDF_StreamAcc> CPDF_SampledFunc::GetSampleStream() const {
   return m_pSampleStream;
 }
diff --git a/core/fpdfapi/page/cpdf_sampledfunc.h b/core/fpdfapi/page/cpdf_sampledfunc.h
index 520b692..fa129ac 100644
--- a/core/fpdfapi/page/cpdf_sampledfunc.h
+++ b/core/fpdfapi/page/cpdf_sampledfunc.h
@@ -41,7 +41,7 @@
   }
   uint32_t GetBitsPerSample() const { return m_nBitsPerSample; }
 
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
   RetainPtr<CPDF_StreamAcc> GetSampleStream() const;
 #endif
 
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 9b951d3..5770b69 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -37,7 +37,7 @@
 #include "core/fxge/dib/cfx_imagetransformer.h"
 #include "third_party/base/stl_util.h"
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 #include "core/fxge/skia/fx_skia_device.h"
 #endif
 
@@ -329,7 +329,7 @@
   if (!bitmap_device1.Create(rect.Width(), rect.Height(), FXDIB_Rgb32, nullptr))
     return true;
 
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   bitmap_device1.Clear(0xffffff);
 #else
   bitmap_device1.GetBitmap()->Clear(0xffffff);
@@ -349,14 +349,14 @@
                              nullptr))
     return true;
 
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   bitmap_device2.Clear(0);
 #else
   bitmap_device2.GetBitmap()->Clear(0);
 #endif
   CalculateDrawImage(&bitmap_device1, &bitmap_device2, m_Loader.GetMask(),
                      new_matrix, rect);
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   m_pRenderStatus->GetRenderDevice()->SetBitsWithMask(
       bitmap_device1.GetBitmap(), bitmap_device2.GetBitmap(), rect.left,
       rect.top, m_BitmapAlpha, m_BlendType);
@@ -367,7 +367,7 @@
     bitmap_device1.GetBitmap()->MultiplyAlpha(m_BitmapAlpha);
   m_pRenderStatus->GetRenderDevice()->SetDIBitsWithBlend(
       bitmap_device1.GetBitmap(), rect.left, rect.top, m_BlendType);
-#endif  //  _SKIA_SUPPORT_
+#endif  //  defined(_SKIA_SUPPORT_)
   return false;
 }
 
@@ -385,7 +385,7 @@
       m_ResampleOptions.bInterpolateBilinear = true;
     }
   }
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   RetainPtr<CFX_DIBitmap> premultiplied = m_pDIBBase->Clone(nullptr);
   if (m_pDIBBase->HasAlpha())
     CFX_SkiaDeviceDriver::PreMultiply(premultiplied);
@@ -408,7 +408,7 @@
     }
     return false;
   }
-#endif
+#endif  // defined(_SKIA_SUPPORT_)
 
   if ((fabs(m_ImageMatrix.b) >= 0.5f || m_ImageMatrix.a == 0) ||
       (fabs(m_ImageMatrix.c) >= 0.5f || m_ImageMatrix.d == 0)) {
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 5926db8..6b0d8c1 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -65,7 +65,7 @@
 #include "third_party/base/logging.h"
 #include "third_party/base/stl_util.h"
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 #include "core/fxge/skia/fx_skia_device.h"
 #endif
 
@@ -193,7 +193,7 @@
 void CPDF_RenderStatus::RenderObjectList(
     const CPDF_PageObjectHolder* pObjectHolder,
     const CFX_Matrix& mtObj2Device) {
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   DebugVerifyDeviceIsPreMultiplied();
 #endif
   CFX_FloatRect clip_rect = mtObj2Device.GetInverse().TransformRect(
@@ -216,14 +216,14 @@
     if (m_bStopped)
       return;
   }
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   DebugVerifyDeviceIsPreMultiplied();
 #endif
 }
 
 void CPDF_RenderStatus::RenderSingleObject(CPDF_PageObject* pObj,
                                            const CFX_Matrix& mtObj2Device) {
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   DebugVerifyDeviceIsPreMultiplied();
 #endif
   AutoRestorer<int> restorer(&g_CurrentRecursionDepth);
@@ -240,7 +240,7 @@
     return;
   }
   ProcessObjectNoClip(pObj, mtObj2Device);
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   DebugVerifyDeviceIsPreMultiplied();
 #endif
 }
@@ -294,7 +294,7 @@
 
 void CPDF_RenderStatus::ProcessObjectNoClip(CPDF_PageObject* pObj,
                                             const CFX_Matrix& mtObj2Device) {
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   DebugVerifyDeviceIsPreMultiplied();
 #endif
   bool bRet = false;
@@ -317,7 +317,7 @@
   }
   if (!bRet)
     DrawObjWithBackground(pObj, mtObj2Device);
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   DebugVerifyDeviceIsPreMultiplied();
 #endif
 }
@@ -366,7 +366,7 @@
 
 bool CPDF_RenderStatus::ProcessForm(const CPDF_FormObject* pFormObj,
                                     const CFX_Matrix& mtObj2Device) {
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   DebugVerifyDeviceIsPreMultiplied();
 #endif
   const CPDF_Dictionary* pOC = pFormObj->form()->GetDict()->GetDictFor("OC");
@@ -390,7 +390,7 @@
     status.RenderObjectList(pFormObj->form(), matrix);
     m_bStopped = status.m_bStopped;
   }
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   DebugVerifyDeviceIsPreMultiplied();
 #endif
   return true;
@@ -587,7 +587,7 @@
 
 bool CPDF_RenderStatus::ProcessTransparency(CPDF_PageObject* pPageObj,
                                             const CFX_Matrix& mtObj2Device) {
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   DebugVerifyDeviceIsPreMultiplied();
 #endif
   const BlendMode blend_type = pPageObj->m_GeneralState.GetBlendType();
@@ -689,7 +689,7 @@
   bitmap_render.SetFormResource(pFormResource);
   bitmap_render.Initialize(nullptr, nullptr);
   bitmap_render.ProcessObjectNoClip(pPageObj, new_matrix);
-#if defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   bitmap_device.Flush(true);
   bitmap->UnPreMultiply();
 #endif
@@ -709,7 +709,7 @@
   int32_t blitAlpha = 255;
   if (group_alpha != 1.0f && transparency.IsGroup()) {
     blitAlpha = (int32_t)(group_alpha * 255);
-#ifndef _SKIA_SUPPORT_
+#if !defined(_SKIA_SUPPORT_)
     bitmap->MultiplyAlpha(blitAlpha);
     blitAlpha = 255;
 #endif
@@ -720,7 +720,7 @@
   }
   CompositeDIBitmap(bitmap, rect.left, rect.top, 0, blitAlpha, blend_type,
                     transparency);
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   DebugVerifyDeviceIsPreMultiplied();
 #endif
   return true;
@@ -788,7 +788,7 @@
   return pStates;
 }
 
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 void CPDF_RenderStatus::DebugVerifyDeviceIsPreMultiplied() const {
   m_pDevice->DebugVerifyBitmapIsPreMultiplied();
 }
@@ -1256,7 +1256,7 @@
   if (blend_mode == BlendMode::kNormal) {
     if (!pDIBitmap->IsAlphaMask()) {
       if (bitmap_alpha < 255) {
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
         std::unique_ptr<CFX_ImageRenderer> dummy;
         CFX_Matrix m = CFX_RenderDevice::GetFlipMatrix(
             pDIBitmap->GetWidth(), pDIBitmap->GetHeight(), left, top);
@@ -1267,7 +1267,7 @@
         pDIBitmap->MultiplyAlpha(bitmap_alpha);
 #endif
       }
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
       CFX_SkiaDeviceDriver::PreMultiply(pDIBitmap);
 #endif
       if (m_pDevice->SetDIBits(pDIBitmap, left, top)) {
@@ -1398,7 +1398,8 @@
   int width = pClipRect->right - pClipRect->left;
   int height = pClipRect->bottom - pClipRect->top;
   FXDIB_Format format;
-#if defined(OS_MACOSX) || defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(OS_MACOSX) || defined(_SKIA_SUPPORT_) || \
+    defined(_SKIA_SUPPORT_PATHS_)
   format = bLuminosity ? FXDIB_Rgb32 : FXDIB_8bppMask;
 #else
   format = bLuminosity ? FXDIB_Rgb : FXDIB_8bppMask;
diff --git a/core/fpdfapi/render/cpdf_renderstatus.h b/core/fpdfapi/render/cpdf_renderstatus.h
index 3de7206..dc2c61e 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.h
+++ b/core/fpdfapi/render/cpdf_renderstatus.h
@@ -92,7 +92,7 @@
   CFX_RenderDevice* GetRenderDevice() const { return m_pDevice; }
   const CPDF_RenderOptions& GetRenderOptions() const { return m_Options; }
 
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   void DebugVerifyDeviceIsPreMultiplied() const;
 #endif
 
diff --git a/core/fpdfapi/render/cpdf_rendertiling.cpp b/core/fpdfapi/render/cpdf_rendertiling.cpp
index 97f537a..73b2ecd 100644
--- a/core/fpdfapi/render/cpdf_rendertiling.cpp
+++ b/core/fpdfapi/render/cpdf_rendertiling.cpp
@@ -56,7 +56,7 @@
   CPDF_RenderContext context(pDoc, nullptr, pCache);
   context.AppendLayer(pPatternForm, &mtPattern2Bitmap);
   context.Render(&bitmap_device, &options, nullptr);
-#if defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   bitmap_device.Flush(true);
   pBitmap->UnPreMultiply();
 #endif
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index 629e2ee..440335a 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -1573,7 +1573,7 @@
   return !m_pBitmap->GetBuffer() || pHandle->Continue(pPause);
 }
 
-#ifndef _SKIA_SUPPORT_
+#if !defined(_SKIA_SUPPORT_)
 CFX_DefaultRenderDevice::CFX_DefaultRenderDevice() {}
 
 CFX_DefaultRenderDevice::~CFX_DefaultRenderDevice() = default;
@@ -1607,4 +1607,4 @@
   return true;
 }
 
-#endif
+#endif  // !defined(_SKIA_SUPPORT_)
diff --git a/core/fxge/apple/fx_apple_platform.cpp b/core/fxge/apple/fx_apple_platform.cpp
index 04dc9e3..4d927ef 100644
--- a/core/fxge/apple/fx_apple_platform.cpp
+++ b/core/fxge/apple/fx_apple_platform.cpp
@@ -22,11 +22,11 @@
 #include "core/fxge/text_char_pos.h"
 #include "third_party/base/span.h"
 
-#ifndef _SKIA_SUPPORT_
+#if !defined(_SKIA_SUPPORT_)
 #include "core/fxge/agg/fx_agg_driver.h"
 #endif
 
-#ifndef _SKIA_SUPPORT_
+#if !defined(_SKIA_SUPPORT_)
 
 namespace {
 
@@ -161,7 +161,7 @@
   return ret;
 }
 
-#endif  // _SKIA_SUPPORT_
+#endif  // !defined(_SKIA_SUPPORT_)
 
 void CFX_GlyphCache::InitPlatform() {}
 
diff --git a/core/fxge/apple/fx_quartz_device.cpp b/core/fxge/apple/fx_quartz_device.cpp
index e272cb1..e65ad7f 100644
--- a/core/fxge/apple/fx_quartz_device.cpp
+++ b/core/fxge/apple/fx_quartz_device.cpp
@@ -13,7 +13,7 @@
 #include "core/fxge/dib/cfx_dibitmap.h"
 #include "core/fxge/fx_freetype.h"
 
-#if !defined _SKIA_SUPPORT_ && !defined _SKIA_SUPPORT_PATHS_
+#if !defined(_SKIA_SUPPORT_) && !defined(_SKIA_SUPPORT_PATHS_)
 #include "core/fxge/agg/fx_agg_driver.h"
 #endif
 
diff --git a/core/fxge/cfx_defaultrenderdevice.h b/core/fxge/cfx_defaultrenderdevice.h
index d001775..4e1e051 100644
--- a/core/fxge/cfx_defaultrenderdevice.h
+++ b/core/fxge/cfx_defaultrenderdevice.h
@@ -26,7 +26,7 @@
               FXDIB_Format format,
               const RetainPtr<CFX_DIBitmap>& pBackdropBitmap);
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   bool AttachRecorder(SkPictureRecorder* recorder);
   void Clear(uint32_t color);
   SkPictureRecorder* CreateRecorder(int size_x, int size_y);
diff --git a/core/fxge/cfx_font.cpp b/core/fxge/cfx_font.cpp
index 59fc8cb..2d42e81 100644
--- a/core/fxge/cfx_font.cpp
+++ b/core/fxge/cfx_font.cpp
@@ -505,7 +505,7 @@
   return m_Face && FXFT_Is_Face_fixedwidth(m_Face->GetRec()) != 0;
 }
 
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 bool CFX_Font::IsSubstFontBold() const {
   CFX_SubstFont* subst_font = GetSubstFont();
   return subst_font && subst_font->GetOriginalWeight() >= FXFONT_FW_BOLD;
@@ -726,7 +726,7 @@
   return GetOrCreateGlyphCache()->LoadGlyphPath(this, glyph_index, dest_width);
 }
 
-#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 CFX_TypeFace* CFX_Font::GetDeviceCache() const {
   return GetOrCreateGlyphCache()->GetDeviceCache(this);
 }
diff --git a/core/fxge/cfx_font.h b/core/fxge/cfx_font.h
index e3822b4..e669cfe 100644
--- a/core/fxge/cfx_font.h
+++ b/core/fxge/cfx_font.h
@@ -19,7 +19,7 @@
 #include "core/fxge/fx_freetype.h"
 #include "third_party/base/span.h"
 
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 #include "core/fxge/fx_font.h"
 #endif
 
@@ -79,7 +79,7 @@
   const CFX_PathData* LoadGlyphPath(uint32_t glyph_index,
                                     uint32_t dest_width) const;
 
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
   CFX_TypeFace* GetDeviceCache() const;
 #endif
 
@@ -90,7 +90,7 @@
   bool IsItalic() const;
   bool IsBold() const;
   bool IsFixedWidth() const;
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
   bool IsSubstFontBold() const;
 #endif
   bool IsVertical() const { return m_bVertical; }
diff --git a/core/fxge/cfx_fontcache.cpp b/core/fxge/cfx_fontcache.cpp
index 2278e53..195e974 100644
--- a/core/fxge/cfx_fontcache.cpp
+++ b/core/fxge/cfx_fontcache.cpp
@@ -31,7 +31,7 @@
   return new_cache;
 }
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 CFX_TypeFace* CFX_FontCache::GetDeviceCache(const CFX_Font* pFont) {
   return GetGlyphCache(pFont)->GetDeviceCache(pFont);
 }
diff --git a/core/fxge/cfx_fontcache.h b/core/fxge/cfx_fontcache.h
index 515811b..51fcac1 100644
--- a/core/fxge/cfx_fontcache.h
+++ b/core/fxge/cfx_fontcache.h
@@ -22,7 +22,7 @@
   ~CFX_FontCache();
 
   RetainPtr<CFX_GlyphCache> GetGlyphCache(const CFX_Font* pFont);
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   CFX_TypeFace* GetDeviceCache(const CFX_Font* pFont);
 #endif
 
diff --git a/core/fxge/cfx_glyphcache.cpp b/core/fxge/cfx_glyphcache.cpp
index 10e9428..17a6b96 100644
--- a/core/fxge/cfx_glyphcache.cpp
+++ b/core/fxge/cfx_glyphcache.cpp
@@ -24,7 +24,7 @@
 #include "core/fxge/scoped_font_transform.h"
 #include "third_party/base/numerics/safe_math.h"
 
-#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 #include "third_party/skia/include/core/SkStream.h"  // nogncheck
 #include "third_party/skia/include/core/SkTypeface.h"  // nogncheck
 
@@ -265,8 +265,8 @@
   GenKey(&keygen, pFont, matrix, dest_width, anti_alias, bNative);
   ByteString FaceGlyphsKey(keygen.key_, keygen.key_len_);
 
-#if defined(OS_MACOSX) && !defined _SKIA_SUPPORT_ && \
-    !defined _SKIA_SUPPORT_PATHS_
+#if defined(OS_MACOSX) && !defined(_SKIA_SUPPORT_) && \
+    !defined(_SKIA_SUPPORT_PATHS_)
   const bool bDoLookUp = !text_options->native_text;
 #else
   const bool bDoLookUp = true;
@@ -276,8 +276,8 @@
                              bFontStyle, dest_width, anti_alias);
   }
 
-#if defined(OS_MACOSX) && !defined _SKIA_SUPPORT_ && \
-    !defined _SKIA_SUPPORT_PATHS_
+#if defined(OS_MACOSX) && !defined(_SKIA_SUPPORT_) && \
+    !defined(_SKIA_SUPPORT_PATHS_)
   std::unique_ptr<CFX_GlyphBitmap> pGlyphBitmap;
   auto it = m_SizeMap.find(FaceGlyphsKey);
   if (it != m_SizeMap.end()) {
@@ -314,7 +314,7 @@
 #endif
 }
 
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 CFX_TypeFace* CFX_GlyphCache::GetDeviceCache(const CFX_Font* pFont) {
   if (!m_pTypeface) {
     pdfium::span<const uint8_t> span = pFont->GetFontSpan();
@@ -331,7 +331,7 @@
 #endif  // defined(OS_WIN)
   return m_pTypeface.get();
 }
-#endif  // defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#endif  // defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 
 #if !defined(OS_MACOSX)
 void CFX_GlyphCache::InitPlatform() {}
diff --git a/core/fxge/cfx_glyphcache.h b/core/fxge/cfx_glyphcache.h
index a969e0c..9e85fe9 100644
--- a/core/fxge/cfx_glyphcache.h
+++ b/core/fxge/cfx_glyphcache.h
@@ -16,7 +16,7 @@
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxge/cfx_face.h"
 
-#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 #include "core/fxge/fx_font.h"
 #include "third_party/skia/include/core/SkTypeface.h"  // nogncheck
 #endif
@@ -46,7 +46,7 @@
   RetainPtr<CFX_Face> GetFace() { return m_Face; }
   FXFT_FaceRec* GetFaceRec() { return m_Face ? m_Face->GetRec() : nullptr; }
 
-#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
   CFX_TypeFace* GetDeviceCache(const CFX_Font* pFont);
 #endif
 
@@ -82,7 +82,7 @@
   RetainPtr<CFX_Face> const m_Face;
   std::map<ByteString, SizeGlyphCache> m_SizeMap;
   std::map<PathMapKey, std::unique_ptr<CFX_PathData>> m_PathMap;
-#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
   sk_sp<SkTypeface> m_pTypeface;
 #endif
 };
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index 2f1546a..e5de85e 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -30,7 +30,7 @@
 #include "core/fxge/text_glyph_pos.h"
 #include "third_party/base/span.h"
 
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 #include "third_party/skia/include/core/SkTypes.h"  // nogncheck
 #endif
 
@@ -376,7 +376,7 @@
 
 CFX_RenderDevice::~CFX_RenderDevice() {
   RestoreState(false);
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
   Flush(true);
 #endif
 }
@@ -389,7 +389,7 @@
   return CFX_Matrix(width, 0, 0, -height, left, top + height);
 }
 
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 void CFX_RenderDevice::Flush(bool release) {
   if (release)
     m_pDeviceDriver.reset();
@@ -454,7 +454,7 @@
   }
   if (m_RenderCaps & FXRC_BYTEMASK_OUTPUT)
     return pDIB->Create(width, height, FXDIB_8bppMask);
-#if defined(OS_MACOSX) || defined _SKIA_SUPPORT_PATHS_
+#if defined(OS_MACOSX) || defined(_SKIA_SUPPORT_PATHS_)
   constexpr FXDIB_Format kPlatformFormat = FXDIB_Rgb32;
 #else
   constexpr FXDIB_Format kPlatformFormat = FXDIB_Rgb;
@@ -685,7 +685,7 @@
           fill_options, blend_type)) {
     return false;
   }
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
   bitmap_device.GetDeviceDriver()->Flush();
 #endif
   FX_RECT src_rect(0, 0, rect.Width(), rect.Height());
@@ -859,7 +859,7 @@
   return m_pDeviceDriver->ContinueDIBits(handle, pPause);
 }
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 void CFX_RenderDevice::DebugVerifyBitmapIsPreMultiplied() const {
   NOTREACHED();
 }
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index 393a93d..65a5cac 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -209,7 +209,7 @@
                   int32_t nStartGray,
                   int32_t nEndGray);
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   virtual void DebugVerifyBitmapIsPreMultiplied() const;
   virtual bool SetBitsWithMask(const RetainPtr<CFX_DIBBase>& pBitmap,
                                const RetainPtr<CFX_DIBBase>& pMask,
@@ -218,7 +218,7 @@
                                int bitmap_alpha,
                                BlendMode blend_type);
 #endif
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
   void Flush(bool release);
 #endif
 
diff --git a/core/fxge/dib/cfx_dibbase.h b/core/fxge/dib/cfx_dibbase.h
index 15d37b7..a24e846 100644
--- a/core/fxge/dib/cfx_dibbase.h
+++ b/core/fxge/dib/cfx_dibbase.h
@@ -99,7 +99,7 @@
                       int& src_top,
                       const CFX_ClipRgn* pClipRgn);
 
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
   void DebugVerifyBitmapIsPreMultiplied(void* buffer) const;
 #endif
 
diff --git a/core/fxge/dib/cfx_dibitmap.cpp b/core/fxge/dib/cfx_dibitmap.cpp
index def197a..f719e16 100644
--- a/core/fxge/dib/cfx_dibitmap.cpp
+++ b/core/fxge/dib/cfx_dibitmap.cpp
@@ -26,7 +26,7 @@
 
 CFX_DIBitmap::CFX_DIBitmap() {
   m_pPalette = nullptr;
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   m_nFormat = Format::kCleared;
 #endif
 }
@@ -168,7 +168,7 @@
     case FXDIB_Rgb32:
     case FXDIB_Argb: {
       color = IsCmykImage() ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
       if (FXDIB_Rgb32 == GetFormat() && !IsCmykImage())
         color |= 0xFF000000;
 #endif
diff --git a/core/fxge/dib/cfx_dibitmap.h b/core/fxge/dib/cfx_dibitmap.h
index 41b40ab..5c59c7a 100644
--- a/core/fxge/dib/cfx_dibitmap.h
+++ b/core/fxge/dib/cfx_dibitmap.h
@@ -99,10 +99,10 @@
                                     uint32_t* pitch,
                                     uint32_t* size);
 
-#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
   void PreMultiply();
 #endif
-#if defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   void UnPreMultiply();
 #endif
 
@@ -111,12 +111,12 @@
   CFX_DIBitmap(const CFX_DIBitmap& src);
   ~CFX_DIBitmap() override;
 
-#if defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   enum class Format { kCleared, kPreMultiplied, kUnPreMultiplied };
 #endif
 
   MaybeOwned<uint8_t, FxFreeDeleter> m_pBuffer;
-#if defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   Format m_nFormat;
 #endif
 
diff --git a/core/fxge/fx_font.h b/core/fxge/fx_font.h
index 0c2229a..df59db3 100644
--- a/core/fxge/fx_font.h
+++ b/core/fxge/fx_font.h
@@ -44,7 +44,7 @@
 #define GET_TT_LONG(w) \
   (uint32_t)(((w)[0] << 24) | ((w)[1] << 16) | ((w)[2] << 8) | (w)[3])
 
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 class SkTypeface;
 
 using CFX_TypeFace = SkTypeface;
diff --git a/core/fxge/renderdevicedriver_iface.cpp b/core/fxge/renderdevicedriver_iface.cpp
index 699009b..782a796 100644
--- a/core/fxge/renderdevicedriver_iface.cpp
+++ b/core/fxge/renderdevicedriver_iface.cpp
@@ -92,6 +92,6 @@
   return false;
 }
 
-#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 void RenderDeviceDriverIface::Flush() {}
 #endif
diff --git a/core/fxge/renderdevicedriver_iface.h b/core/fxge/renderdevicedriver_iface.h
index 025356c..aaa4540 100644
--- a/core/fxge/renderdevicedriver_iface.h
+++ b/core/fxge/renderdevicedriver_iface.h
@@ -115,7 +115,7 @@
                                int top,
                                int bitmap_alpha,
                                BlendMode blend_type);
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
   virtual void Flush();
 #endif
 };
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index d780302..1735895 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -51,19 +51,19 @@
 #include "third_party/skia/include/effects/SkGradientShader.h"
 #include "third_party/skia/include/pathops/SkPathOps.h"
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
 #include "core/fxge/cfx_cliprgn.h"
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 #include "third_party/skia/include/core/SkColorFilter.h"
 #include "third_party/skia/include/core/SkMaskFilter.h"
 #include "third_party/skia/include/core/SkPictureRecorder.h"
-#endif  // _SKIA_SUPPORT_
+#endif
 
 namespace {
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
 void RgbByteOrderTransferBitmap(const RetainPtr<CFX_DIBitmap>& pBitmap,
                                 int dest_left,
                                 int dest_top,
@@ -163,7 +163,7 @@
   NOTREACHED();
 }
 
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif  // defined(_SKIA_SUPPORT_PATHS_)
 
 #define SHOW_SKIA_PATH 0  // set to 1 to print the path contents
 #if SHOW_SKIA_PATH
@@ -271,7 +271,7 @@
 
 #endif  // DRAW_SKIA_CLIP
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 static void DebugValidate(const RetainPtr<CFX_DIBitmap>& bitmap,
                           const RetainPtr<CFX_DIBitmap>& device) {
   if (bitmap) {
@@ -287,7 +287,7 @@
     }
   }
 }
-#endif  // _SKIA_SUPPORT_
+#endif  // defined(_SKIA_SUPPORT_)
 
 SkColorType Get32BitSkColorType(bool is_rgb_byte_order) {
   return is_rgb_byte_order ? kRGBA_8888_SkColorType : kBGRA_8888_SkColorType;
@@ -592,7 +592,7 @@
   clip->lineTo(IntersectSides(rectPts[maxBounds], slope, startEdgePt));
 }
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 void SetBitmapMatrix(const CFX_Matrix& m,
                      int width,
                      int height,
@@ -708,7 +708,7 @@
   *heightPtr = height;
   return true;
 }
-#endif  // _SKIA_SUPPORT_
+#endif  // defined(_SKIA_SUPPORT_)
 
 }  // namespace
 
@@ -808,18 +808,18 @@
       }
       skPaint.setStyle(SkPaint::kFill_Style);
       skPaint.setColor(m_fillColor);
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
       m_pDriver->PreMultiply();
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
       DebugShowSkiaDrawPath(m_pDriver.Get(), skCanvas, skPaint, *fillPath);
       skCanvas->drawPath(*fillPath, skPaint);
     }
     if (stroke_alpha && do_stroke) {
       skPaint.setStyle(SkPaint::kStroke_Style);
       skPaint.setColor(m_strokeColor);
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
       m_pDriver->PreMultiply();
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
       DebugShowSkiaDrawPath(m_pDriver.Get(), skCanvas, skPaint, m_skPath);
       skCanvas->drawPath(m_skPath, skPaint);
     }
@@ -977,9 +977,9 @@
     SkMatrix skMatrix = ToFlippedSkMatrix(m_drawMatrix, flip);
     skCanvas->concat(skMatrix);
     const SkTDArray<uint16_t>& glyphs = m_charDetails.GetGlyphs();
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
     m_pDriver->PreMultiply();
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
 #if SHOW_TEXT_GLYPHS
     SkTDArray<SkUnichar> text;
     // TODO(nigi): |m_glyphs| are deprecated and glyphToUnichars() takes 4
@@ -1610,9 +1610,9 @@
       m_pBackdropBitmap(pBackdropBitmap),
       m_pRecorder(nullptr),
       m_pCache(new SkiaState(this)),
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
       m_pClipRgn(nullptr),
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
       m_bRgbByteOrder(bRgbByteOrder),
       m_bGroupKnockout(bGroupKnockout) {
   SkBitmap skBitmap;
@@ -1634,7 +1634,7 @@
   m_pCanvas = new SkCanvas(skBitmap);
 }
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 CFX_SkiaDeviceDriver::CFX_SkiaDeviceDriver(int size_x, int size_y)
     : m_pBitmap(nullptr),
       m_pBackdropBitmap(nullptr),
@@ -1653,7 +1653,7 @@
       m_bGroupKnockout(false) {
   m_pCanvas = m_pRecorder->getRecordingCanvas();
 }
-#endif  // _SKIA_SUPPORT_
+#endif  // defined(_SKIA_SUPPORT_)
 
 CFX_SkiaDeviceDriver::~CFX_SkiaDeviceDriver() {
   Flush();
@@ -1731,9 +1731,9 @@
     printf("%lc", text[i]);
   printf("\n");
 #endif
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   m_pBitmap->PreMultiply();
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
   if (useRSXform) {
     SkTDArray<SkRSXform> xforms;
     xforms.setCount(nChars);
@@ -1825,7 +1825,7 @@
 
 int CFX_SkiaDeviceDriver::GetDeviceCaps(int caps_id) const {
   switch (caps_id) {
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
     case FXDC_PIXEL_WIDTH:
       return m_pCanvas->imageInfo().width();
     case FXDC_PIXEL_HEIGHT:
@@ -1839,9 +1839,9 @@
       return FXRC_GET_BITS | FXRC_ALPHA_PATH | FXRC_ALPHA_IMAGE |
              FXRC_BLEND_MODE | FXRC_SOFT_CLIP | FXRC_ALPHA_OUTPUT |
              FXRC_FILLSTROKE_PATH | FXRC_SHADING;
-#endif  // _SKIA_SUPPORT_
+#endif  // defined(_SKIA_SUPPORT_)
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
     case FXDC_PIXEL_WIDTH:
       return m_pBitmap->GetWidth();
     case FXDC_PIXEL_HEIGHT:
@@ -1868,7 +1868,7 @@
       }
       return flags;
     }
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif  // defined(_SKIA_SUPPORT_PATHS_)
 
     default:
       NOTREACHED();
@@ -1881,7 +1881,7 @@
   if (!m_pCache->ClipSave())
     m_pCanvas->save();
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
 #if SHOW_SKIA_PATH
   printf("SaveState %zd\n", stack().size());
 #endif
@@ -1889,11 +1889,11 @@
   if (m_pClipRgn)
     pClip = std::make_unique<CFX_ClipRgn>(*m_pClipRgn);
   m_StateStack.push_back(std::move(pClip));
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif  // defined(_SKIA_SUPPORT_PATHS_)
 }
 
 void CFX_SkiaDeviceDriver::RestoreState(bool bKeepSaved) {
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   m_pClipRgn.reset();
 
   if (m_StateStack.empty())
@@ -1906,7 +1906,7 @@
     m_pCanvas->restore();
   if (bKeepSaved && !m_pCache->ClipSave())
     m_pCanvas->save();
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
 #if SHOW_SKIA_PATH
   printf("RestoreState %zd %s\n", m_StateStack.size(),
          bKeepSaved ? "bKeepSaved" : "");
@@ -1919,10 +1919,10 @@
     m_StateStack.pop_back();
   }
   m_pCache->DebugCheckClip();
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif  // defined(_SKIA_SUPPORT_PATHS_)
 }
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
 void CFX_SkiaDeviceDriver::SetClipMask(const FX_RECT& clipBox,
                                        const SkPath& path) {
   FX_RECT path_rect(clipBox.left, clipBox.top, clipBox.right + 1,
@@ -1947,7 +1947,7 @@
   canvas->drawPath(path, paint);
   m_pClipRgn->IntersectMaskF(path_rect.left, path_rect.top, pThisLayer);
 }
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif  // defined(_SKIA_SUPPORT_PATHS_)
 
 bool CFX_SkiaDeviceDriver::SetClip_PathFill(
     const CFX_PathData* pPathData,     // path info
@@ -1957,12 +1957,12 @@
   CFX_Matrix identity;
   const CFX_Matrix* deviceMatrix = pObject2Device ? pObject2Device : &identity;
   bool cached = m_pCache->SetClipFill(pPathData, deviceMatrix, fill_options);
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   if (!m_pClipRgn) {
     m_pClipRgn = std::make_unique<CFX_ClipRgn>(
         GetDeviceCaps(FXDC_PIXEL_WIDTH), GetDeviceCaps(FXDC_PIXEL_HEIGHT));
   }
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
   if (pPathData->GetPoints().size() == 5 ||
       pPathData->GetPoints().size() == 4) {
     Optional<CFX_FloatRect> maybe_rectf = pPathData->GetRect(deviceMatrix);
@@ -1979,10 +1979,10 @@
         m_pCanvas->clipRect(skClipRect, SkClipOp::kIntersect, true);
       }
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
       FX_RECT rect = rectf.GetOuterRect();
       m_pClipRgn->IntersectRect(rect);
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
       DebugShowCanvasClip(this, m_pCanvas);
       return true;
     }
@@ -1996,11 +1996,11 @@
     DebugDrawSkiaClipPath(m_pCanvas, skClipPath);
     m_pCanvas->clipPath(skClipPath, SkClipOp::kIntersect, true);
   }
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   FX_RECT clipBox(0, 0, GetDeviceCaps(FXDC_PIXEL_WIDTH),
                   GetDeviceCaps(FXDC_PIXEL_HEIGHT));
   SetClipMask(clipBox, skClipPath);
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
   DebugShowCanvasClip(this, m_pCanvas);
   return true;
 }
@@ -2012,12 +2012,12 @@
     ) {
   bool cached = m_pCache->SetClipStroke(pPathData, pObject2Device, pGraphState);
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   if (!m_pClipRgn) {
     m_pClipRgn = std::make_unique<CFX_ClipRgn>(
         GetDeviceCaps(FXDC_PIXEL_WIDTH), GetDeviceCaps(FXDC_PIXEL_HEIGHT));
   }
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
   // build path data
   SkPath skPath = BuildPath(pPathData);
   SkMatrix skMatrix = ToSkMatrix(*pObject2Device);
@@ -2030,11 +2030,11 @@
     DebugDrawSkiaClipPath(m_pCanvas, dst_path);
     m_pCanvas->clipPath(dst_path, SkClipOp::kIntersect, true);
   }
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   FX_RECT clipBox(0, 0, GetDeviceCaps(FXDC_PIXEL_WIDTH),
                   GetDeviceCaps(FXDC_PIXEL_HEIGHT));
   SetClipMask(clipBox, dst_path);
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
   DebugShowCanvasClip(this, m_pCanvas);
   return true;
 }
@@ -2089,18 +2089,18 @@
     }
     skPaint.setStyle(SkPaint::kFill_Style);
     skPaint.setColor(fill_color);
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
     m_pBitmap->PreMultiply();
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
     DebugShowSkiaDrawPath(this, m_pCanvas, skPaint, *fillPath);
     m_pCanvas->drawPath(*fillPath, skPaint);
   }
   if (is_paint_stroke && do_stroke) {
     skPaint.setStyle(SkPaint::kStroke_Style);
     skPaint.setColor(stroke_color);
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
     m_pBitmap->PreMultiply();
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
     DebugShowSkiaDrawPath(this, m_pCanvas, skPaint, skPath);
     m_pCanvas->drawPath(skPath, skPaint);
   }
@@ -2316,7 +2316,7 @@
 }
 
 bool CFX_SkiaDeviceDriver::GetClipBox(FX_RECT* pRect) {
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   if (!m_pClipRgn) {
     pRect->left = pRect->top = 0;
     pRect->right = GetDeviceCaps(FXDC_PIXEL_WIDTH);
@@ -2343,7 +2343,7 @@
   uint8_t* srcBuffer = m_pBitmap->GetBuffer();
   if (!srcBuffer)
     return true;
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   m_pCache->FlushForDraw();
   int srcWidth = m_pBitmap->GetWidth();
   int srcHeight = m_pBitmap->GetHeight();
@@ -2365,9 +2365,9 @@
   SkCanvas canvas(skDstBitmap);
   canvas.drawBitmap(skSrcBitmap, left, top, nullptr);
   return true;
-#endif  // _SKIA_SUPPORT_
+#endif  // defined(_SKIA_SUPPORT_)
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   Flush();
   m_pBitmap->UnPreMultiply();
   FX_RECT rect(left, top, left + pBitmap->GetWidth(),
@@ -2397,7 +2397,7 @@
                                    left, top);
   }
   return bRet;
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif  // defined(_SKIA_SUPPORT_PATHS_)
 }
 
 RetainPtr<CFX_DIBitmap> CFX_SkiaDeviceDriver::GetBackDrop() {
@@ -2413,15 +2413,15 @@
   if (!m_pBitmap || !m_pBitmap->GetBuffer())
     return true;
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   CFX_Matrix m = CFX_RenderDevice::GetFlipMatrix(
       pBitmap->GetWidth(), pBitmap->GetHeight(), left, top);
   std::unique_ptr<CFX_ImageRenderer> dummy;
   return StartDIBits(pBitmap, 0xFF, argb, m, FXDIB_ResampleOptions(), &dummy,
                      blend_type);
-#endif  // _SKIA_SUPPORT_
+#endif
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   Flush();
   if (pBitmap->IsAlphaMask()) {
     return m_pBitmap->CompositeMask(left, top, src_rect.Width(),
@@ -2432,7 +2432,7 @@
   return m_pBitmap->CompositeBitmap(
       left, top, src_rect.Width(), src_rect.Height(), pBitmap, src_rect.left,
       src_rect.top, blend_type, m_pClipRgn.get(), m_bRgbByteOrder);
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif  // defined(_SKIA_SUPPORT_PATHS_)
 }
 
 bool CFX_SkiaDeviceDriver::StretchDIBits(const RetainPtr<CFX_DIBBase>& pSource,
@@ -2444,7 +2444,7 @@
                                          const FX_RECT* pClipRect,
                                          const FXDIB_ResampleOptions& options,
                                          BlendMode blend_type) {
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   m_pCache->FlushForDraw();
   if (!m_pBitmap->GetBuffer())
     return true;
@@ -2458,9 +2458,9 @@
   std::unique_ptr<CFX_ImageRenderer> dummy;
   return StartDIBits(pSource, 0xFF, argb, m, FXDIB_ResampleOptions(), &dummy,
                      blend_type);
-#endif  // _SKIA_SUPPORT_
+#endif  // defined(_SKIA_SUPPORT_)
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   if (dest_width == pSource->GetWidth() &&
       dest_height == pSource->GetHeight()) {
     FX_RECT rect(0, 0, dest_width, dest_height);
@@ -2481,7 +2481,7 @@
   if (stretcher.Start())
     stretcher.Continue(nullptr);
   return true;
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif  // defined(_SKIA_SUPPORT_PATHS_)
 }
 
 bool CFX_SkiaDeviceDriver::StartDIBits(
@@ -2492,7 +2492,7 @@
     const FXDIB_ResampleOptions& options,
     std::unique_ptr<CFX_ImageRenderer>* handle,
     BlendMode blend_type) {
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   m_pCache->FlushForDraw();
   DebugValidate(m_pBitmap, m_pBackdropBitmap);
   std::unique_ptr<uint8_t, FxFreeDeleter> dst8Storage;
@@ -2530,9 +2530,9 @@
     }
   }
   DebugValidate(m_pBitmap, m_pBackdropBitmap);
-#endif  // _SKIA_SUPPORT_
+#endif  // defined(_SKIA_SUPPORT_)
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   Flush();
   if (!m_pBitmap->GetBuffer())
     return true;
@@ -2540,32 +2540,32 @@
   *handle = std::make_unique<CFX_ImageRenderer>(
       m_pBitmap, m_pClipRgn.get(), pSource, bitmap_alpha, argb, matrix, options,
       m_bRgbByteOrder);
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif  // defined(_SKIA_SUPPORT_PATHS_)
   return true;
 }
 
 bool CFX_SkiaDeviceDriver::ContinueDIBits(CFX_ImageRenderer* handle,
                                           PauseIndicatorIface* pPause) {
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   m_pCache->FlushForDraw();
   return false;
-#endif  // _SKIA_SUPPORT_
+#endif
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   Flush();
   if (!m_pBitmap->GetBuffer()) {
     return true;
   }
   return handle->Continue(pPause);
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif
 }
 
-#if defined _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 void CFX_SkiaDeviceDriver::PreMultiply(
     const RetainPtr<CFX_DIBitmap>& pDIBitmap) {
   pDIBitmap->PreMultiply();
 }
-#endif  // _SKIA_SUPPORT_
+#endif
 
 void CFX_DIBitmap::PreMultiply() {
   if (this->GetBPP() != 32)
@@ -2573,7 +2573,7 @@
   void* buffer = this->GetBuffer();
   if (!buffer)
     return;
-#if defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   Format priorFormat = m_nFormat;
   m_nFormat = Format::kPreMultiplied;
   if (priorFormat != Format::kUnPreMultiplied)
@@ -2592,7 +2592,7 @@
   this->DebugVerifyBitmapIsPreMultiplied(nullptr);
 }
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
 void CFX_DIBitmap::UnPreMultiply() {
   if (this->GetBPP() != 32)
     return;
@@ -2615,9 +2615,9 @@
   SkPixmap unpremultiplied(unpremultipliedInfo, buffer, rowBytes);
   premultiplied.readPixels(unpremultiplied);
 }
-#endif  // _SKIA_SUPPORT_PATHS_
+#endif  // defined(_SKIA_SUPPORT_PATHS_)
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 bool CFX_SkiaDeviceDriver::DrawBitsWithMask(
     const RetainPtr<CFX_DIBBase>& pSource,
     const RetainPtr<CFX_DIBBase>& pMask,
@@ -2678,25 +2678,25 @@
 void CFX_SkiaDeviceDriver::Clear(uint32_t color) {
   m_pCanvas->clear(color);
 }
-#endif  // _SKIA_SUPPORT_
+#endif  // defined(_SKIA_SUPPORT_)
 
 void CFX_SkiaDeviceDriver::Dump() const {
-#if SHOW_SKIA_PATH && defined _SKIA_SUPPORT_
+#if SHOW_SKIA_PATH && defined(_SKIA_SUPPORT_)
   if (m_pCache)
     m_pCache->Dump(this);
-#endif  // SHOW_SKIA_PATH && defined _SKIA_SUPPORT_
+#endif
 }
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 void CFX_SkiaDeviceDriver::DebugVerifyBitmapIsPreMultiplied() const {
   if (m_pBackdropBitmap)
     m_pBackdropBitmap->DebugVerifyBitmapIsPreMultiplied(nullptr);
 }
-#endif  // _SKIA_SUPPORT_
+#endif
 
 CFX_DefaultRenderDevice::CFX_DefaultRenderDevice() {}
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 void CFX_DefaultRenderDevice::Clear(uint32_t color) {
   CFX_SkiaDeviceDriver* skDriver =
       static_cast<CFX_SkiaDeviceDriver*>(GetDeviceDriver());
@@ -2709,7 +2709,7 @@
   SetDeviceDriver(pdfium::WrapUnique(skDriver));
   return skDriver->GetRecorder();
 }
-#endif  // _SKIA_SUPPORT_
+#endif  // defined(_SKIA_SUPPORT_)
 
 bool CFX_DefaultRenderDevice::Attach(
     const RetainPtr<CFX_DIBitmap>& pBitmap,
@@ -2724,14 +2724,14 @@
   return true;
 }
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 bool CFX_DefaultRenderDevice::AttachRecorder(SkPictureRecorder* recorder) {
   if (!recorder)
     return false;
   SetDeviceDriver(std::make_unique<CFX_SkiaDeviceDriver>(recorder));
   return true;
 }
-#endif  // _SKIA_SUPPORT_
+#endif
 
 bool CFX_DefaultRenderDevice::Create(
     int width,
@@ -2752,7 +2752,7 @@
   Flush(true);
 }
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 void CFX_DefaultRenderDevice::DebugVerifyBitmapIsPreMultiplied() const {
 #ifdef SK_DEBUG
   CFX_SkiaDeviceDriver* skDriver =
@@ -2776,7 +2776,7 @@
                                      blend_type);
   return false;
 }
-#endif  // _SKIA_SUPPORT_
+#endif  // defined(_SKIA_SUPPORT_)
 
 void CFX_DIBBase::DebugVerifyBitmapIsPreMultiplied(void* opt) const {
 #ifdef SK_DEBUG
diff --git a/core/fxge/skia/fx_skia_device.h b/core/fxge/skia/fx_skia_device.h
index f43038d..cc73c2e 100644
--- a/core/fxge/skia/fx_skia_device.h
+++ b/core/fxge/skia/fx_skia_device.h
@@ -5,7 +5,7 @@
 #ifndef CORE_FXGE_SKIA_FX_SKIA_DEVICE_H_
 #define CORE_FXGE_SKIA_FX_SKIA_DEVICE_H_
 
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 
 #include <memory>
 #include <vector>
@@ -30,7 +30,7 @@
                        bool bRgbByteOrder,
                        const RetainPtr<CFX_DIBitmap>& pBackdropBitmap,
                        bool bGroupKnockout);
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   explicit CFX_SkiaDeviceDriver(SkPictureRecorder* recorder);
   CFX_SkiaDeviceDriver(int size_x, int size_y);
 #endif
@@ -93,7 +93,7 @@
                  int dest_left,
                  int dest_top,
                  BlendMode blend_type) override;
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   bool SetBitsWithMask(const RetainPtr<CFX_DIBBase>& pBitmap,
                        const RetainPtr<CFX_DIBBase>& pMask,
                        int dest_left,
@@ -102,7 +102,7 @@
                        BlendMode blend_type) override;
 #endif
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   void SetClipMask(const FX_RECT& clipBox, const SkPath& skClipPath);
 #endif
 
@@ -164,7 +164,7 @@
 
   bool GetGroupKnockout() const { return m_bGroupKnockout; }
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   const CFX_ClipRgn* clip_region() const { return m_pClipRgn.get(); }
   const std::vector<std::unique_ptr<CFX_ClipRgn>>& stack() const {
     return m_StateStack;
@@ -177,7 +177,7 @@
   SkCanvas* m_pCanvas;
   SkPictureRecorder* const m_pRecorder;
   std::unique_ptr<SkiaState> m_pCache;
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   std::unique_ptr<CFX_ClipRgn> m_pClipRgn;
   std::vector<std::unique_ptr<CFX_ClipRgn>> m_StateStack;
 #endif
@@ -185,6 +185,6 @@
   bool m_bRgbByteOrder;
   bool m_bGroupKnockout;
 };
-#endif  // defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#endif  // defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
 
 #endif  // CORE_FXGE_SKIA_FX_SKIA_DEVICE_H_
diff --git a/core/fxge/skia/fx_skia_device_embeddertest.cpp b/core/fxge/skia/fx_skia_device_embeddertest.cpp
index f8bb383..4001fbc 100644
--- a/core/fxge/skia/fx_skia_device_embeddertest.cpp
+++ b/core/fxge/skia/fx_skia_device_embeddertest.cpp
@@ -161,7 +161,7 @@
                         State::Graphic::kPath, 0xFF112233});
 }
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 // TODO(crbug.com/pdfium/11): Fix this test and enable.
 TEST(fxge, DISABLED_SkiaStateText) {
   Harness(&CommonTest,
diff --git a/core/fxge/win32/fx_win32_device.cpp b/core/fxge/win32/fx_win32_device.cpp
index de6b7c9..1f405bd 100644
--- a/core/fxge/win32/fx_win32_device.cpp
+++ b/core/fxge/win32/fx_win32_device.cpp
@@ -31,7 +31,7 @@
 #include "third_party/base/stl_util.h"
 #include "third_party/base/win/win_util.h"
 
-#ifndef _SKIA_SUPPORT_
+#if !defined(_SKIA_SUPPORT_)
 #include "core/fxge/agg/fx_agg_driver.h"
 #endif
 
@@ -207,7 +207,7 @@
   EndPath(hDC);
 }
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 // TODO(caryclark)  This antigrain function is duplicated here to permit
 // removing the last remaining dependency. Eventually, this will be elminiated
 // altogether and replace by Skia code.
@@ -310,7 +310,7 @@
   }
   return np;
 }
-#endif  // _SKIA_SUPPORT_
+#endif  //  defined(_SKIA_SUPPORT_)
 
 class CFX_Win32FallbackFontInfo final : public CFX_FolderFontInfo {
  public:
@@ -934,7 +934,7 @@
       float x[2];
       float y[2];
       int np;
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
       // TODO(caryclark) temporary replacement of antigrain in line function
       // to permit removing antigrain altogether
       rect_base rect = {0.0f, 0.0f, (float)(m_Width), (float)(m_Height)};
diff --git a/fpdfsdk/fpdf_formfill.cpp b/fpdfsdk/fpdf_formfill.cpp
index bbfc64b..e26f163 100644
--- a/fpdfsdk/fpdf_formfill.cpp
+++ b/fpdfsdk/fpdf_formfill.cpp
@@ -195,7 +195,7 @@
   CFX_Matrix matrix = pPage->GetDisplayMatrix(rect, rotate);
 
   auto pDevice = std::make_unique<CFX_DefaultRenderDevice>();
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
   pDevice->AttachRecorder(static_cast<SkPictureRecorder*>(recorder));
 #endif
 
@@ -220,7 +220,7 @@
       pPageView->PageView_OnDraw(pDevice.get(), matrix, &options, rect);
   }
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   pDevice->Flush(true);
   holder->UnPreMultiply();
 #endif
@@ -671,7 +671,7 @@
             rotate, flags);
 }
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 FPDF_EXPORT void FPDF_CALLCONV FPDF_FFLRecord(FPDF_FORMHANDLE hHandle,
                                               FPDF_RECORDER recorder,
                                               FPDF_PAGE page,
diff --git a/fpdfsdk/fpdf_progressive.cpp b/fpdfsdk/fpdf_progressive.cpp
index 4ccc738..46febcf 100644
--- a/fpdfsdk/fpdf_progressive.cpp
+++ b/fpdfsdk/fpdf_progressive.cpp
@@ -18,7 +18,7 @@
 #include "fpdfsdk/cpdfsdk_renderpage.h"
 #include "public/fpdfview.h"
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
 #include "core/fxge/cfx_renderdevice.h"
 #endif
 
@@ -74,7 +74,7 @@
                                 size_y, rotate, flags, color_scheme,
                                 /*need_to_restore=*/false, &pause_adapter);
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   pDevice->Flush(false);
   pBitmap->UnPreMultiply();
 #endif
@@ -115,7 +115,7 @@
 
   CPDFSDK_PauseAdapter pause_adapter(pause);
   pContext->m_pRenderer->Continue(&pause_adapter);
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   CFX_RenderDevice* pDevice = pContext->m_pDevice.get();
   pDevice->Flush(false);
   pDevice->GetBitmap()->UnPreMultiply();
@@ -126,7 +126,7 @@
 FPDF_EXPORT void FPDF_CALLCONV FPDF_RenderPage_Close(FPDF_PAGE page) {
   CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
   if (pPage) {
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
     auto* pContext =
         static_cast<CPDF_PageRenderContext*>(pPage->GetRenderContext());
     if (pContext && pContext->m_pRenderer) {
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index a090367..260a20d 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -626,7 +626,7 @@
                                 /*need_to_restore=*/true,
                                 /*pause=*/nullptr);
 
-#ifdef _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_PATHS_)
   pDevice->Flush(true);
   pBitmap->UnPreMultiply();
 #endif
@@ -670,7 +670,7 @@
                      /*color_scheme=*/nullptr);
 }
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 FPDF_EXPORT FPDF_RECORDER FPDF_CALLCONV FPDF_RenderPageSkp(FPDF_PAGE page,
                                                            int size_x,
                                                            int size_y) {
@@ -693,7 +693,7 @@
 
   return recorder;
 }
-#endif  // _SKIA_SUPPORT_
+#endif  // defined(_SKIA_SUPPORT_)
 
 FPDF_EXPORT void FPDF_CALLCONV FPDF_ClosePage(FPDF_PAGE page) {
   if (!page)
diff --git a/fpdfsdk/fpdf_view_c_api_test.c b/fpdfsdk/fpdf_view_c_api_test.c
index 7aaa1d4..9486e29 100644
--- a/fpdfsdk/fpdf_view_c_api_test.c
+++ b/fpdfsdk/fpdf_view_c_api_test.c
@@ -281,7 +281,7 @@
     CHK(FPDFPage_FormFieldZOrderAtPoint);
     CHK(FPDFPage_HasFormFieldAtPoint);
     CHK(FPDF_FFLDraw);
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
     CHK(FPDF_FFLRecord);
 #endif
     CHK(FPDF_GetFormType);
@@ -463,7 +463,7 @@
 #endif
     CHK(FPDF_RenderPageBitmap);
     CHK(FPDF_RenderPageBitmapWithMatrix);
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
     CHK(FPDF_RenderPageSkp);
 #endif
 #if defined(_WIN32)
diff --git a/public/fpdf_formfill.h b/public/fpdf_formfill.h
index 8f9c94d7..f2402bc 100644
--- a/public/fpdf_formfill.h
+++ b/public/fpdf_formfill.h
@@ -1879,7 +1879,7 @@
                                             int rotate,
                                             int flags);
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 FPDF_EXPORT void FPDF_CALLCONV FPDF_FFLRecord(FPDF_FORMHANDLE hHandle,
                                               FPDF_RECORDER recorder,
                                               FPDF_PAGE page,
diff --git a/public/fpdfview.h b/public/fpdfview.h
index 47cc97c..27df9bd 100644
--- a/public/fpdfview.h
+++ b/public/fpdfview.h
@@ -877,7 +877,7 @@
                                 const FS_RECTF* clipping,
                                 int flags);
 
-#ifdef _SKIA_SUPPORT_
+#if defined(_SKIA_SUPPORT_)
 FPDF_EXPORT FPDF_RECORDER FPDF_CALLCONV FPDF_RenderPageSkp(FPDF_PAGE page,
                                                            int size_x,
                                                            int size_y);
diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc
index 957acf2..9ad851f 100644
--- a/samples/pdfium_test.cc
+++ b/samples/pdfium_test.cc
@@ -14,11 +14,11 @@
 #include <string>
 #include <vector>
 
-#if defined PDF_ENABLE_SKIA && !defined _SKIA_SUPPORT_
+#if defined(PDF_ENABLE_SKIA) && !defined(_SKIA_SUPPORT_)
 #define _SKIA_SUPPORT_
 #endif
 
-#if defined PDF_ENABLE_SKIA_PATHS && !defined _SKIA_SUPPORT_PATHS_
+#if defined(PDF_ENABLE_SKIA_PATHS) && !defined(_SKIA_SUPPORT_PATHS_)
 #define _SKIA_SUPPORT_PATHS_
 #endif
 
diff --git a/xfa/fde/cfde_textout.cpp b/xfa/fde/cfde_textout.cpp
index ef1df9b..0aaad35 100644
--- a/xfa/fde/cfde_textout.cpp
+++ b/xfa/fde/cfde_textout.cpp
@@ -114,7 +114,7 @@
     bRet = device->DrawNormalText(iCurCount, pCurCP, font, -fFontSize, matrix,
                                   color, options);
   }
-#if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_
+#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
   device->Flush(false);
 #endif
 
