gecko-dev/gfx/layers/composite/TextRenderer.h
Ryan Hunt cfc792bc4c Bug 1351783 part 1 - Add includes for unified build issues. r=kats
MozReview-Commit-ID: D57bbW4pmPZ

--HG--
extra : rebase_source : 9af2973a112c7ea641876c1f945797f2c7c945ce
2017-06-05 18:03:02 -05:00

95 lines
2.4 KiB
C++

/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef GFX_TextRenderer_H
#define GFX_TextRenderer_H
#include "mozilla/EnumeratedArray.h"
#include "mozilla/gfx/2D.h"
#include "mozilla/UniquePtr.h"
#include "nsISupportsImpl.h"
#include <string>
namespace mozilla {
namespace layers {
class Compositor;
class TextureSource;
class TextureSourceProvider;
struct FontBitmapInfo;
class TextRenderer
{
~TextRenderer();
public:
NS_INLINE_DECL_REFCOUNTING(TextRenderer)
enum class FontType {
Default,
FixedWidth,
NumTypes
};
explicit TextRenderer()
{}
RefPtr<TextureSource>
RenderText(TextureSourceProvider* aProvider,
const std::string& aText,
uint32_t aTextSize,
uint32_t aTargetPixelWidth,
FontType aFontType);
void RenderText(Compositor* aCompositor,
const std::string& aText,
const gfx::IntPoint& aOrigin,
const gfx::Matrix4x4& aTransform, uint32_t aTextSize,
uint32_t aTargetPixelWidth,
FontType aFontType = FontType::Default);
struct FontCache {
~FontCache();
RefPtr<gfx::DataSourceSurface> mGlyphBitmaps;
gfx::DataSourceSurface::MappedSurface mMap;
const FontBitmapInfo* mInfo;
};
protected:
// Note that this may still fail to set mGlyphBitmaps to a valid value
// if the underlying CreateDataSourceSurface fails for some reason.
bool EnsureInitialized(FontType aType);
static const FontBitmapInfo* GetFontInfo(FontType aType);
private:
EnumeratedArray<FontType, FontType::NumTypes, UniquePtr<FontCache>> mFonts;
};
struct FontBitmapInfo {
Maybe<unsigned int> mGlyphWidth;
Maybe<const unsigned short*> mGlyphWidths;
unsigned int mTextureWidth;
unsigned int mTextureHeight;
unsigned int mCellWidth;
unsigned int mCellHeight;
unsigned int mFirstChar;
const unsigned char* mPNG;
size_t mPNGLength;
unsigned int GetGlyphWidth(char aGlyph) const {
if (mGlyphWidth) {
return mGlyphWidth.value();
}
MOZ_ASSERT(unsigned(aGlyph) >= mFirstChar);
return mGlyphWidths.value()[unsigned(aGlyph) - mFirstChar];
}
};
} // namespace layers
} // namespace mozilla
#endif