tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

PrintTranslator.h (5526B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef mozilla_layout_PrintTranslator_h
      8 #define mozilla_layout_PrintTranslator_h
      9 
     10 #include <istream>
     11 
     12 #include "DrawEventRecorder.h"
     13 #include "mozilla/gfx/2D.h"
     14 #include "mozilla/gfx/Filters.h"
     15 #include "mozilla/gfx/RecordedEvent.h"
     16 
     17 class nsDeviceContext;
     18 
     19 namespace mozilla {
     20 namespace layout {
     21 
     22 using gfx::DrawTarget;
     23 using gfx::FilterNode;
     24 using gfx::GradientStops;
     25 using gfx::NativeFontResource;
     26 using gfx::Path;
     27 using gfx::ReferencePtr;
     28 using gfx::ScaledFont;
     29 using gfx::SourceSurface;
     30 using gfx::Translator;
     31 using gfx::UnscaledFont;
     32 
     33 class PrintTranslator final : public Translator {
     34 public:
     35  explicit PrintTranslator(nsDeviceContext* aDeviceContext);
     36 
     37  bool TranslateRecording(PRFileDescStream& aRecording);
     38 
     39  DrawTarget* LookupDrawTarget(ReferencePtr aRefPtr) final {
     40    DrawTarget* result = mDrawTargets.GetWeak(aRefPtr);
     41    MOZ_ASSERT(result);
     42    return result;
     43  }
     44 
     45  Path* LookupPath(ReferencePtr aRefPtr) final {
     46    Path* result = mPaths.GetWeak(aRefPtr);
     47    MOZ_ASSERT(result);
     48    return result;
     49  }
     50 
     51  SourceSurface* LookupSourceSurface(ReferencePtr aRefPtr) final {
     52    SourceSurface* result = mSourceSurfaces.GetWeak(aRefPtr);
     53    MOZ_ASSERT(result);
     54    return result;
     55  }
     56 
     57  FilterNode* LookupFilterNode(ReferencePtr aRefPtr) final {
     58    FilterNode* result = mFilterNodes.GetWeak(aRefPtr);
     59    MOZ_ASSERT(result);
     60    return result;
     61  }
     62 
     63  already_AddRefed<GradientStops> LookupGradientStops(
     64      ReferencePtr aRefPtr) final {
     65    return mGradientStops.Get(aRefPtr);
     66  }
     67 
     68  ScaledFont* LookupScaledFont(ReferencePtr aRefPtr) final {
     69    ScaledFont* result = mScaledFonts.GetWeak(aRefPtr);
     70    MOZ_ASSERT(result);
     71    return result;
     72  }
     73 
     74  UnscaledFont* LookupUnscaledFont(ReferencePtr aRefPtr) final {
     75    UnscaledFont* result = mUnscaledFonts.GetWeak(aRefPtr);
     76    MOZ_ASSERT(result);
     77    return result;
     78  }
     79 
     80  NativeFontResource* LookupNativeFontResource(uint64_t aKey) final {
     81    NativeFontResource* result = mNativeFontResources.GetWeak(aKey);
     82    MOZ_ASSERT(result);
     83    return result;
     84  }
     85 
     86  void AddDrawTarget(ReferencePtr aRefPtr, DrawTarget* aDT) final {
     87    RefPtr<DrawTarget>& value = mDrawTargets.LookupOrInsert(aRefPtr);
     88    if (mCurrentDT && mCurrentDT == value) {
     89      mCurrentDT = nullptr;
     90    }
     91    value = aDT;
     92  }
     93 
     94  void AddPath(ReferencePtr aRefPtr, Path* aPath) final {
     95    mPaths.InsertOrUpdate(aRefPtr, RefPtr{aPath});
     96  }
     97 
     98  void AddSourceSurface(ReferencePtr aRefPtr, SourceSurface* aSurface) final {
     99    mSourceSurfaces.InsertOrUpdate(aRefPtr, RefPtr{aSurface});
    100  }
    101 
    102  void AddFilterNode(ReferencePtr aRefPtr, FilterNode* aFilter) final {
    103    mFilterNodes.InsertOrUpdate(aRefPtr, RefPtr{aFilter});
    104  }
    105 
    106  void AddGradientStops(ReferencePtr aRefPtr, GradientStops* aStops) final {
    107    mGradientStops.InsertOrUpdate(aRefPtr, RefPtr{aStops});
    108  }
    109 
    110  void AddScaledFont(ReferencePtr aRefPtr, ScaledFont* aScaledFont) final {
    111    mScaledFonts.InsertOrUpdate(aRefPtr, RefPtr{aScaledFont});
    112  }
    113 
    114  void AddUnscaledFont(ReferencePtr aRefPtr,
    115                       UnscaledFont* aUnscaledFont) final {
    116    mUnscaledFonts.InsertOrUpdate(aRefPtr, RefPtr{aUnscaledFont});
    117  }
    118 
    119  void AddNativeFontResource(uint64_t aKey,
    120                             NativeFontResource* aScaledFontResouce) final {
    121    mNativeFontResources.InsertOrUpdate(aKey, RefPtr{aScaledFontResouce});
    122  }
    123 
    124  void RemoveDrawTarget(ReferencePtr aRefPtr) final {
    125    RefPtr<DrawTarget> removedDT;
    126    if (mDrawTargets.Remove(aRefPtr, getter_AddRefs(removedDT)) &&
    127        mCurrentDT == removedDT) {
    128      mCurrentDT = nullptr;
    129    }
    130  }
    131 
    132  bool SetCurrentDrawTarget(ReferencePtr aRefPtr) final {
    133    mCurrentDT = mDrawTargets.GetWeak(aRefPtr);
    134    return !!mCurrentDT;
    135  }
    136 
    137  void RemovePath(ReferencePtr aRefPtr) final { mPaths.Remove(aRefPtr); }
    138 
    139  void RemoveSourceSurface(ReferencePtr aRefPtr) final {
    140    mSourceSurfaces.Remove(aRefPtr);
    141  }
    142 
    143  void RemoveFilterNode(ReferencePtr aRefPtr) final {
    144    mFilterNodes.Remove(aRefPtr);
    145  }
    146 
    147  void RemoveGradientStops(ReferencePtr aRefPtr) final {
    148    mGradientStops.Remove(aRefPtr);
    149  }
    150 
    151  void RemoveScaledFont(ReferencePtr aRefPtr) final {
    152    mScaledFonts.Remove(aRefPtr);
    153  }
    154 
    155  void RemoveUnscaledFont(ReferencePtr aRefPtr) final {
    156    mUnscaledFonts.Remove(aRefPtr);
    157  }
    158 
    159  already_AddRefed<DrawTarget> CreateDrawTarget(
    160      ReferencePtr aRefPtr, const gfx::IntSize& aSize,
    161      gfx::SurfaceFormat aFormat) final;
    162 
    163  mozilla::gfx::DrawTarget* GetReferenceDrawTarget() final { return mBaseDT; }
    164 
    165 private:
    166  RefPtr<nsDeviceContext> mDeviceContext;
    167  RefPtr<DrawTarget> mBaseDT;
    168 
    169  nsRefPtrHashtable<nsPtrHashKey<void>, DrawTarget> mDrawTargets;
    170  nsRefPtrHashtable<nsPtrHashKey<void>, Path> mPaths;
    171  nsRefPtrHashtable<nsPtrHashKey<void>, SourceSurface> mSourceSurfaces;
    172  nsRefPtrHashtable<nsPtrHashKey<void>, FilterNode> mFilterNodes;
    173  nsRefPtrHashtable<nsPtrHashKey<void>, GradientStops> mGradientStops;
    174  nsRefPtrHashtable<nsPtrHashKey<void>, ScaledFont> mScaledFonts;
    175  nsRefPtrHashtable<nsPtrHashKey<void>, UnscaledFont> mUnscaledFonts;
    176  nsRefPtrHashtable<nsUint64HashKey, NativeFontResource> mNativeFontResources;
    177 };
    178 
    179 }  // namespace layout
    180 }  // namespace mozilla
    181 
    182 #endif  // mozilla_layout_PrintTranslator_h