skia2/experimental/SkiaExamples/SkExample.h
commit-bot@chromium.org b09bfcb7b1 add virtual destructor for SkExample to fix build error.
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
2013-12-17 23:37:38 +00:00

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