2017-11-19 18:20:13 +00:00
|
|
|
|
/*
|
|
|
|
|
* Copyright 2017 Google Inc.
|
|
|
|
|
*
|
|
|
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
|
|
|
* found in the LICENSE file.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef SkAtlasTextTarget_DEFINED
|
|
|
|
|
#define SkAtlasTextTarget_DEFINED
|
|
|
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
|
#include "SkRefCnt.h"
|
|
|
|
|
#include "SkScalar.h"
|
|
|
|
|
|
|
|
|
|
class SkAtlasTextContext;
|
|
|
|
|
class SkAtlasTextFont;
|
2017-11-20 18:17:43 +00:00
|
|
|
|
struct SkPoint;
|
2017-11-19 18:20:13 +00:00
|
|
|
|
|
|
|
|
|
/** Represents a client-created renderable surface and is used to draw text into the surface. */
|
|
|
|
|
class SK_API SkAtlasTextTarget {
|
|
|
|
|
public:
|
|
|
|
|
virtual ~SkAtlasTextTarget();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Creates a text drawing target. ‘handle’ is used to identify this rendering surface when
|
|
|
|
|
* draws are flushed to the SkAtlasTextContext's SkAtlasTextRenderer.
|
|
|
|
|
*/
|
|
|
|
|
static std::unique_ptr<SkAtlasTextTarget> Make(sk_sp<SkAtlasTextContext>, int width, int height,
|
|
|
|
|
void* handle);
|
|
|
|
|
|
|
|
|
|
/**
|
2017-11-20 18:17:43 +00:00
|
|
|
|
* Enqueues a text draw in the target. The caller provides an array of glyphs and their
|
|
|
|
|
* positions. The meaning of 'color' here is interpreted by the client's SkAtlasTextRenderer
|
|
|
|
|
* when it actually renders the text.
|
2017-11-19 18:20:13 +00:00
|
|
|
|
*/
|
2017-11-20 18:17:43 +00:00
|
|
|
|
virtual void drawText(const SkGlyphID[], const SkPoint[], int glyphCnt, uint32_t color,
|
|
|
|
|
const SkAtlasTextFont&) = 0;
|
2017-11-19 18:20:13 +00:00
|
|
|
|
|
|
|
|
|
/** Issues all queued text draws to SkAtlasTextRenderer. */
|
|
|
|
|
virtual void flush() = 0;
|
|
|
|
|
|
|
|
|
|
int width() const { return fWidth; }
|
|
|
|
|
int height() const { return fHeight; }
|
|
|
|
|
|
|
|
|
|
void* handle() const { return fHandle; }
|
|
|
|
|
|
|
|
|
|
SkAtlasTextContext* context() const { return fContext.get(); }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
SkAtlasTextTarget(sk_sp<SkAtlasTextContext>, int width, int height, void* handle);
|
|
|
|
|
|
|
|
|
|
void* const fHandle;
|
|
|
|
|
const sk_sp<SkAtlasTextContext> fContext;
|
|
|
|
|
const int fWidth;
|
|
|
|
|
const int fHeight;
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
SkAtlasTextTarget() = delete;
|
|
|
|
|
SkAtlasTextTarget(const SkAtlasTextContext&) = delete;
|
|
|
|
|
SkAtlasTextTarget& operator=(const SkAtlasTextContext&) = delete;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|