105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2010 Google Inc.
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger */
805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
1105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#ifndef GrTextContext_DEFINED
1205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#define GrTextContext_DEFINED
1305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
1405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#include "GrGlyph.h"
1505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#include "GrPaint.h"
1635e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger#include "GrMatrix.h"
1705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
1805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerstruct GrGpuTextVertex;
1905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerclass GrContext;
2005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerclass GrTextStrike;
2105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerclass GrFontScaler;
2205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerclass GrDrawTarget;
2305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
2405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerclass GrTextContext {
2505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerpublic:
2605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrTextContext(GrContext*,
2705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger                  const GrPaint& paint,
2805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger                  const GrMatrix* extMatrix = NULL);
2905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    ~GrTextContext();
3005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
3105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    void drawPackedGlyph(GrGlyph::PackedID, GrFixed left, GrFixed top,
3205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger                         GrFontScaler*);
3305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
3405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    void flush();   // optional; automatically called by destructor
3505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
3605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerprivate:
3705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrPaint         fPaint;
3805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrVertexLayout  fVertexLayout;
3905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrContext*      fContext;
4005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrDrawTarget*   fDrawTarget;
4105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
4205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrMatrix        fExtMatrix;
4305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrFontScaler*   fScaler;
4405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrTextStrike*   fStrike;
4505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
4605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    inline void flushGlyphs();
471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    void setupDrawTarget();
4805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
4905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    enum {
5005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger        kMinRequestedGlyphs      = 1,
5105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger        kDefaultRequestedGlyphs  = 64,
5205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger        kMinRequestedVerts       = kMinRequestedGlyphs * 4,
5305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger        kDefaultRequestedVerts   = kDefaultRequestedGlyphs * 4,
5405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    };
5505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
5605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrGpuTextVertex* fVertices;
5705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
5805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    int32_t     fMaxVertices;
5905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrTexture*  fCurrTexture;
6005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    int         fCurrVertex;
6105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
6205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrIRect     fClipRect;
6305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrMatrix    fOrigViewMatrix;    // restore previous viewmatrix
6405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger};
6505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
6605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#endif
6705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
6805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
69