| Index: src/image/SkSurface.cpp
|
| diff --git a/src/image/SkSurface.cpp b/src/image/SkSurface.cpp
|
| index 3a28e421a880df9ff6ae9962aa504c6bd63bb040..861515dd8347d955a70e3222c10f5229ec157a9b 100644
|
| --- a/src/image/SkSurface.cpp
|
| +++ b/src/image/SkSurface.cpp
|
| @@ -9,14 +9,56 @@
|
| #include "SkImagePriv.h"
|
| #include "SkCanvas.h"
|
|
|
| +#include "SkFontLCDConfig.h"
|
| +static SkPixelGeometry compute_default_geometry() {
|
| + SkFontLCDConfig::LCDOrder order = SkFontLCDConfig::GetSubpixelOrder();
|
| + if (SkFontLCDConfig::kNONE_LCDOrder == order) {
|
| + return kUnknown_SkPixelGeometry;
|
| + } else {
|
| + // Bit0 is RGB(0), BGR(1)
|
| + // Bit1 is H(0), V(1)
|
| + const SkPixelGeometry gGeo[] = {
|
| + kRGB_H_SkPixelGeometry,
|
| + kBGR_H_SkPixelGeometry,
|
| + kRGB_V_SkPixelGeometry,
|
| + kBGR_V_SkPixelGeometry,
|
| + };
|
| + int index = 0;
|
| + if (SkFontLCDConfig::kBGR_LCDOrder == order) {
|
| + index |= 1;
|
| + }
|
| + if (SkFontLCDConfig::kVertical_LCDOrientation == SkFontLCDConfig::GetSubpixelOrientation()){
|
| + index |= 2;
|
| + }
|
| + return gGeo[index];
|
| + }
|
| +}
|
| +
|
| +SkSurfaceProps::SkSurfaceProps() : fFlags(0), fPixelGeometry(kUnknown_SkPixelGeometry) {}
|
| +
|
| +SkSurfaceProps::SkSurfaceProps(InitType) : fFlags(0), fPixelGeometry(compute_default_geometry()) {}
|
| +
|
| +SkSurfaceProps::SkSurfaceProps(uint32_t flags, InitType)
|
| + : fFlags(flags)
|
| + , fPixelGeometry(compute_default_geometry())
|
| +{}
|
| +
|
| +SkSurfaceProps::SkSurfaceProps(uint32_t flags, SkPixelGeometry pg)
|
| + : fFlags(flags), fPixelGeometry(pg)
|
| +{}
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkSurface_Base::SkSurface_Base(int width, int height) : INHERITED(width, height) {
|
| +SkSurface_Base::SkSurface_Base(int width, int height, const SkSurfaceProps* props)
|
| + : INHERITED(width, height, props)
|
| +{
|
| fCachedCanvas = NULL;
|
| fCachedImage = NULL;
|
| }
|
|
|
| -SkSurface_Base::SkSurface_Base(const SkImageInfo& info) : INHERITED(info) {
|
| +SkSurface_Base::SkSurface_Base(const SkImageInfo& info, const SkSurfaceProps* props)
|
| + : INHERITED(info, props)
|
| +{
|
| fCachedCanvas = NULL;
|
| fCachedImage = NULL;
|
| }
|
| @@ -31,8 +73,7 @@ SkSurface_Base::~SkSurface_Base() {
|
| SkSafeUnref(fCachedCanvas);
|
| }
|
|
|
| -void SkSurface_Base::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y,
|
| - const SkPaint* paint) {
|
| +void SkSurface_Base::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint) {
|
| SkImage* image = this->newImageSnapshot();
|
| if (image) {
|
| image->draw(canvas, x, y, paint);
|
| @@ -74,13 +115,17 @@ static SkSurface_Base* asSB(SkSurface* surface) {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkSurface::SkSurface(int width, int height) : fWidth(width), fHeight(height) {
|
| +SkSurface::SkSurface(int width, int height, const SkSurfaceProps* props)
|
| + : fProps(SkSurfacePropsCopyOrDefault(props)), fWidth(width), fHeight(height)
|
| +{
|
| SkASSERT(fWidth >= 0);
|
| SkASSERT(fHeight >= 0);
|
| fGenerationID = 0;
|
| }
|
|
|
| -SkSurface::SkSurface(const SkImageInfo& info) : fWidth(info.width()), fHeight(info.height()) {
|
| +SkSurface::SkSurface(const SkImageInfo& info, const SkSurfaceProps* props)
|
| + : fProps(SkSurfacePropsCopyOrDefault(props)), fWidth(info.width()), fHeight(info.height())
|
| +{
|
| SkASSERT(fWidth >= 0);
|
| SkASSERT(fHeight >= 0);
|
| fGenerationID = 0;
|
| @@ -119,3 +164,50 @@ void SkSurface::draw(SkCanvas* canvas, SkScalar x, SkScalar y,
|
| const void* SkSurface::peekPixels(SkImageInfo* info, size_t* rowBytes) {
|
| return this->getCanvas()->peekPixels(info, rowBytes);
|
| }
|
| +
|
| +//////////////////////////////////////////////////////////////////////////////////////
|
| +#ifdef SK_SUPPORT_LEGACY_TEXTRENDERMODE
|
| +
|
| +static SkSurfaceProps make_props(SkSurface::TextRenderMode trm) {
|
| + uint32_t propsFlags = 0;
|
| + if (SkSurface::kDistanceField_TextRenderMode == trm) {
|
| + propsFlags |= SkSurfaceProps::kUseDistanceFieldFonts_Flag;
|
| + }
|
| + return SkSurfaceProps(propsFlags, SkSurfaceProps::kLegacyFontHost_InitType);
|
| +}
|
| +
|
| +SkSurface* SkSurface::NewRenderTargetDirect(GrRenderTarget* target, TextRenderMode trm) {
|
| + SkSurfaceProps props = make_props(trm);
|
| + return NewRenderTargetDirect(target, &props);
|
| +}
|
| +
|
| +SkSurface* SkSurface::NewRenderTarget(GrContext* gr, const SkImageInfo& info, int sampleCount,
|
| + TextRenderMode trm) {
|
| + SkSurfaceProps props = make_props(trm);
|
| + return NewRenderTarget(gr, info, sampleCount, &props);
|
| +}
|
| +
|
| +SkSurface* SkSurface::NewScratchRenderTarget(GrContext* gr, const SkImageInfo& info, int sampleCount,
|
| + TextRenderMode trm) {
|
| + SkSurfaceProps props = make_props(trm);
|
| + return NewScratchRenderTarget(gr, info, sampleCount, &props);
|
| +}
|
| +
|
| +#endif
|
| +
|
| +#if !SK_SUPPORT_GPU
|
| +
|
| +SkSurface* SkSurface::NewRenderTargetDirect(GrRenderTarget*, const SkSurfaceProps*) {
|
| + return NULL;
|
| +}
|
| +
|
| +SkSurface* SkSurface::NewRenderTarget(GrContext*, const SkImageInfo&, int, const SkSurfaceProps*) {
|
| + return NULL;
|
| +}
|
| +
|
| +SkSurface* SkSurface::NewScratchRenderTarget(GrContext*, const SkImageInfo&, int sampleCount,
|
| + const SkSurfaceProps*) {
|
| + return NULL;
|
| +}
|
| +
|
| +#endif
|
|
|