Home | History | Annotate | Download | only in example
      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 
     33     DeviceType getDeviceType() const { return fType; }
     34 
     35 protected:
     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