1 /* 2 * Copyright 2015 Google Inc. 3 * 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 * 8 */ 9 10 #ifndef HelloWorld_DEFINED 11 #define HelloWorld_DEFINED 12 13 #include "SkSurface.h" 14 #include "SkWindow.h" 15 16 class GrContext; 17 struct GrGLInterface; 18 class GrRenderTarget; 19 class SkCanvas; 20 21 class HelloWorldWindow : public SkOSWindow { 22 public: 23 enum DeviceType { 24 kRaster_DeviceType, 25 kGPU_DeviceType, 26 }; 27 HelloWorldWindow(void* hwnd); 28 virtual ~HelloWorldWindow() override; 29 30 // Changes the device type of the object. 31 bool setUpBackend(); 32 getDeviceType()33 DeviceType getDeviceType() const { return fType; } 34 35 protected: makeSurface()36 sk_sp<SkSurface> makeSurface() override { 37 SkSurfaceProps props(INHERITED::getSurfaceProps()); 38 if (kGPU_DeviceType == fType) { 39 return fGpuSurface; 40 } 41 const SkImageInfo info = SkImageInfo::MakeN32Premul(SkScalarRoundToInt(this->width()), 42 SkScalarRoundToInt(this->height())); 43 fRasterSurface = SkSurface::MakeRaster(info, &props); 44 return fRasterSurface; 45 } 46 47 void draw(SkCanvas* canvas) override; 48 void drawContents(SkCanvas* canvas); 49 50 void onSizeChange() override; 51 52 private: 53 bool findNextMatch(); // Set example to the first one that matches FLAGS_match. 54 void setTitle(); 55 void setUpGpuBackedSurface(); 56 bool onHandleChar(SkUnichar unichar) override; 57 void tearDownBackend(); 58 59 // draw contents 60 SkScalar fRotationAngle; 61 62 // support framework 63 DeviceType fType; 64 sk_sp<SkSurface> fRasterSurface; 65 GrContext* fContext; 66 sk_sp<SkSurface> fGpuSurface; 67 AttachmentInfo fAttachmentInfo; 68 const GrGLInterface* fInterface; 69 70 typedef SkOSWindow INHERITED; 71 }; 72 73 #endif 74