b09bfcb7b1
The original SkExample have virtual function draw(), but have no virtual destructor. This may lead to memory leak when free the instance of derived class of SkExample. The latest skia code show error when build SkiaExamples by "ninja -C out/Release SkiaExamples": error: ‘class SkExample’ has virtual functions and accessible non-virtual destructor. R=caryclark@google.com Author: yunchao.he@intel.com Review URL: https://codereview.chromium.org/98463013 git-svn-id: http://skia.googlecode.com/svn/trunk@12728 2bbb7eff-a529-9590-31e7-b0007b416f81
83 lines
1.8 KiB
C++
83 lines
1.8 KiB
C++
/*
|
|
* Copyright 2013 Google Inc.
|
|
*
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*
|
|
*/
|
|
|
|
#ifndef SkExample_DEFINED
|
|
#define SkExample_DEFINED
|
|
|
|
#include "SkWindow.h"
|
|
#include "SkTRegistry.h"
|
|
|
|
class GrContext;
|
|
struct GrGLInterface;
|
|
class GrRenderTarget;
|
|
class SkCanvas;
|
|
class SkExampleWindow;
|
|
|
|
class SkExample : public SkNoncopyable {
|
|
public:
|
|
SkExample(SkExampleWindow* window) : fWindow(window) {}
|
|
|
|
virtual ~SkExample() {}
|
|
|
|
// Your class should override this method to do its thing.
|
|
virtual void draw(SkCanvas* canvas) = 0;
|
|
|
|
SkString getName() { return fName; };
|
|
// Use this public registry to tell the world about your sample.
|
|
typedef SkTRegistry<SkExample*(*)(SkExampleWindow*)> Registry;
|
|
|
|
protected:
|
|
SkExampleWindow* fWindow;
|
|
SkString fName;
|
|
};
|
|
|
|
class SkExampleWindow : public SkOSWindow {
|
|
public:
|
|
enum DeviceType {
|
|
kRaster_DeviceType,
|
|
kGPU_DeviceType,
|
|
};
|
|
SkExampleWindow(void* hwnd);
|
|
|
|
// Changes the device type of the object.
|
|
bool setupBackend(DeviceType type);
|
|
void tearDownBackend();
|
|
|
|
DeviceType getDeviceType() const { return fType; }
|
|
|
|
protected:
|
|
virtual void draw(SkCanvas* canvas) SK_OVERRIDE;
|
|
|
|
virtual void onSizeChange() SK_OVERRIDE;
|
|
|
|
#ifdef SK_BUILD_FOR_WIN
|
|
virtual void onHandleInval(const SkIRect&) SK_OVERRIDE;
|
|
#endif
|
|
|
|
SkCanvas* createCanvas() SK_OVERRIDE;
|
|
|
|
private:
|
|
bool findNextMatch(); // Set example to the first one that matches FLAGS_match.
|
|
void setupRenderTarget();
|
|
bool onHandleChar(SkUnichar unichar) SK_OVERRIDE;
|
|
|
|
DeviceType fType;
|
|
|
|
SkExample* fCurrExample;
|
|
const SkExample::Registry* fRegistry;
|
|
GrContext* fContext;
|
|
GrRenderTarget* fRenderTarget;
|
|
AttachmentInfo fAttachmentInfo;
|
|
const GrGLInterface* fInterface;
|
|
|
|
typedef SkOSWindow INHERITED;
|
|
};
|
|
|
|
#endif
|