152edc4d05380c88de5b334479ad8e537ef2b4925caryclark/* 252edc4d05380c88de5b334479ad8e537ef2b4925caryclark * Copyright 2015 Google Inc. 352edc4d05380c88de5b334479ad8e537ef2b4925caryclark * 452edc4d05380c88de5b334479ad8e537ef2b4925caryclark * 552edc4d05380c88de5b334479ad8e537ef2b4925caryclark * Use of this source code is governed by a BSD-style license that can be 652edc4d05380c88de5b334479ad8e537ef2b4925caryclark * found in the LICENSE file. 752edc4d05380c88de5b334479ad8e537ef2b4925caryclark * 852edc4d05380c88de5b334479ad8e537ef2b4925caryclark */ 952edc4d05380c88de5b334479ad8e537ef2b4925caryclark 1052edc4d05380c88de5b334479ad8e537ef2b4925caryclark#ifndef HelloWorld_DEFINED 1152edc4d05380c88de5b334479ad8e537ef2b4925caryclark#define HelloWorld_DEFINED 1252edc4d05380c88de5b334479ad8e537ef2b4925caryclark 1352edc4d05380c88de5b334479ad8e537ef2b4925caryclark#include "SkSurface.h" 1452edc4d05380c88de5b334479ad8e537ef2b4925caryclark#include "SkWindow.h" 1552edc4d05380c88de5b334479ad8e537ef2b4925caryclark 1652edc4d05380c88de5b334479ad8e537ef2b4925caryclarkclass GrContext; 1752edc4d05380c88de5b334479ad8e537ef2b4925caryclarkstruct GrGLInterface; 1852edc4d05380c88de5b334479ad8e537ef2b4925caryclarkclass GrRenderTarget; 1952edc4d05380c88de5b334479ad8e537ef2b4925caryclarkclass SkCanvas; 2052edc4d05380c88de5b334479ad8e537ef2b4925caryclark 2152edc4d05380c88de5b334479ad8e537ef2b4925caryclarkclass HelloWorldWindow : public SkOSWindow { 2252edc4d05380c88de5b334479ad8e537ef2b4925caryclarkpublic: 2352edc4d05380c88de5b334479ad8e537ef2b4925caryclark enum DeviceType { 2452edc4d05380c88de5b334479ad8e537ef2b4925caryclark kRaster_DeviceType, 2552edc4d05380c88de5b334479ad8e537ef2b4925caryclark kGPU_DeviceType, 2652edc4d05380c88de5b334479ad8e537ef2b4925caryclark }; 2752edc4d05380c88de5b334479ad8e537ef2b4925caryclark HelloWorldWindow(void* hwnd); 2836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein virtual ~HelloWorldWindow() override; 2952edc4d05380c88de5b334479ad8e537ef2b4925caryclark 3052edc4d05380c88de5b334479ad8e537ef2b4925caryclark // Changes the device type of the object. 3152edc4d05380c88de5b334479ad8e537ef2b4925caryclark bool setUpBackend(); 3252edc4d05380c88de5b334479ad8e537ef2b4925caryclark 3352edc4d05380c88de5b334479ad8e537ef2b4925caryclark DeviceType getDeviceType() const { return fType; } 3452edc4d05380c88de5b334479ad8e537ef2b4925caryclark 3552edc4d05380c88de5b334479ad8e537ef2b4925caryclarkprotected: 3636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkSurface* createSurface() override { 37702edbd4bc41230902b5fe69d14d15763c27faferobertphillips SkSurfaceProps props(INHERITED::getSurfaceProps()); 3852edc4d05380c88de5b334479ad8e537ef2b4925caryclark if (kGPU_DeviceType == fType) { 3952edc4d05380c88de5b334479ad8e537ef2b4925caryclark return SkSurface::NewRenderTargetDirect(fRenderTarget, &props); 4052edc4d05380c88de5b334479ad8e537ef2b4925caryclark } 4152edc4d05380c88de5b334479ad8e537ef2b4925caryclark static const SkImageInfo info = SkImageInfo::MakeN32Premul( 4252edc4d05380c88de5b334479ad8e537ef2b4925caryclark SkScalarRoundToInt(this->width()), SkScalarRoundToInt(this->height())); 43702edbd4bc41230902b5fe69d14d15763c27faferobertphillips return fSurface = SkSurface::NewRaster(info, &props); 44702edbd4bc41230902b5fe69d14d15763c27faferobertphillips } 4552edc4d05380c88de5b334479ad8e537ef2b4925caryclark 4636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void draw(SkCanvas* canvas) override; 4752edc4d05380c88de5b334479ad8e537ef2b4925caryclark void drawContents(SkCanvas* canvas); 4852edc4d05380c88de5b334479ad8e537ef2b4925caryclark 4936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onSizeChange() override; 5052edc4d05380c88de5b334479ad8e537ef2b4925caryclark 5152edc4d05380c88de5b334479ad8e537ef2b4925caryclarkprivate: 5252edc4d05380c88de5b334479ad8e537ef2b4925caryclark bool findNextMatch(); // Set example to the first one that matches FLAGS_match. 5352edc4d05380c88de5b334479ad8e537ef2b4925caryclark void setTitle(); 5452edc4d05380c88de5b334479ad8e537ef2b4925caryclark void setUpRenderTarget(); 5536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein bool onHandleChar(SkUnichar unichar) override; 5652edc4d05380c88de5b334479ad8e537ef2b4925caryclark void tearDownBackend(); 5752edc4d05380c88de5b334479ad8e537ef2b4925caryclark 5852edc4d05380c88de5b334479ad8e537ef2b4925caryclark // draw contents 5952edc4d05380c88de5b334479ad8e537ef2b4925caryclark SkScalar fRotationAngle; 6052edc4d05380c88de5b334479ad8e537ef2b4925caryclark 6152edc4d05380c88de5b334479ad8e537ef2b4925caryclark // support framework 6252edc4d05380c88de5b334479ad8e537ef2b4925caryclark DeviceType fType; 6352edc4d05380c88de5b334479ad8e537ef2b4925caryclark SkSurface* fSurface; 6452edc4d05380c88de5b334479ad8e537ef2b4925caryclark GrContext* fContext; 6552edc4d05380c88de5b334479ad8e537ef2b4925caryclark GrRenderTarget* fRenderTarget; 6652edc4d05380c88de5b334479ad8e537ef2b4925caryclark AttachmentInfo fAttachmentInfo; 6752edc4d05380c88de5b334479ad8e537ef2b4925caryclark const GrGLInterface* fInterface; 6852edc4d05380c88de5b334479ad8e537ef2b4925caryclark 6952edc4d05380c88de5b334479ad8e537ef2b4925caryclark typedef SkOSWindow INHERITED; 7052edc4d05380c88de5b334479ad8e537ef2b4925caryclark}; 7152edc4d05380c88de5b334479ad8e537ef2b4925caryclark 7252edc4d05380c88de5b334479ad8e537ef2b4925caryclark#endif 73