fune/gfx/layers/composite/TextRenderer.h
Daniel Holbert 126bd9e1a4 Bug 1412427 part 8: (automated patch) Switch a bunch of C++ files in gfx to use our standard mode lines. r=jrmuizel
This patch was generated automatically by the "modeline.py" script, available
here: https://github.com/amccreight/moz-source-tools/blob/master/modeline.py

For every file that is modified in this patch, the changes are as follows:
 (1) The patch changes the file to use the exact C++ mode lines from the
     Mozilla coding style guide, available here:
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#Mode_Line

 (2) The patch deletes any blank lines between the mode line & the MPL
     boilerplate comment.

 (3) If the file previously had the mode lines and MPL boilerplate in a
     single contiguous C++ comment, then the patch splits them into
     separate C++ comments, to match the boilerplate in the coding style.

MozReview-Commit-ID: 77D61xpSmIl

--HG--
extra : rebase_source : c6162fa3cf539a07177a19838324bf368faa162b
2017-10-27 16:10:06 -07:00

95 lines
2.4 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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