-
/*
* Copyright 2011 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
+
#include "SkWindow.h"
#include "SkCanvas.h"
-#include "SkDevice.h"
#include "SkOSMenu.h"
+#include "SkSurface.h"
#include "SkSystemEventTypes.h"
#include "SkTime.h"
#define SK_EventDelayInval "\xd" "n" "\xa" "l"
-#define TEST_BOUNDERx
-
-#include "SkBounder.h"
-class test_bounder : public SkBounder {
-public:
- test_bounder(const SkBitmap& bm) : fCanvas(bm) {}
-protected:
- virtual bool onIRect(const SkIRect& r)
- {
- SkRect rr;
-
- rr.set(SkIntToScalar(r.fLeft), SkIntToScalar(r.fTop),
- SkIntToScalar(r.fRight), SkIntToScalar(r.fBottom));
-
- SkPaint p;
-
- p.setStyle(SkPaint::kStroke_Style);
- p.setColor(SK_ColorYELLOW);
-
-#if 0
- rr.inset(SK_ScalarHalf, SK_ScalarHalf);
-#else
- rr.inset(-SK_ScalarHalf, -SK_ScalarHalf);
-#endif
-
- fCanvas.drawRect(rr, p);
- return true;
- }
-private:
- SkCanvas fCanvas;
-};
-
-SkWindow::SkWindow() : fFocusView(NULL)
-{
+SkWindow::SkWindow() : fFocusView(NULL) {
fClicks.reset();
fWaitingOnInval = false;
#ifdef SK_BUILD_FOR_WINCE
- fConfig = SkBitmap::kRGB_565_Config;
+ fColorType = kRGB_565_SkColorType;
#else
- fConfig = SkBitmap::kARGB_8888_Config;
+ fColorType = kN32_SkColorType;
#endif
fMatrix.reset();
}
-SkWindow::~SkWindow()
-{
+SkWindow::~SkWindow() {
fClicks.deleteAll();
fMenus.deleteAll();
}
-SkCanvas* SkWindow::createCanvas() {
- return new SkCanvas(this->getBitmap());
+SkSurface* SkWindow::createSurface() {
+ const SkBitmap& bm = this->getBitmap();
+ return SkSurface::NewRasterDirect(bm.info(), bm.getPixels(), bm.rowBytes());
}
void SkWindow::setMatrix(const SkMatrix& matrix) {
this->setMatrix(m);
}
-void SkWindow::setConfig(SkBitmap::Config config)
-{
- this->resize(fBitmap.width(), fBitmap.height(), config);
+void SkWindow::setColorType(SkColorType ct) {
+ this->resize(fBitmap.width(), fBitmap.height(), ct);
}
-void SkWindow::resize(int width, int height, SkBitmap::Config config)
-{
- if (config == SkBitmap::kNo_Config)
- config = fConfig;
+void SkWindow::resize(int width, int height, SkColorType ct) {
+ if (ct == kUnknown_SkColorType)
+ ct = fColorType;
- if (width != fBitmap.width() || height != fBitmap.height() || config != fConfig)
- {
- fConfig = config;
- fBitmap.setConfig(config, width, height, 0, kOpaque_SkAlphaType);
- fBitmap.allocPixels();
+ if (width != fBitmap.width() || height != fBitmap.height() || ct != fColorType) {
+ fColorType = ct;
+ fBitmap.allocPixels(SkImageInfo::Make(width, height,
+ ct, kPremul_SkAlphaType));
this->setSize(SkIntToScalar(width), SkIntToScalar(height));
this->inval(NULL);
}
}
-void SkWindow::eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
-{
- fBitmap.eraseARGB(a, r, g, b);
-}
-
-void SkWindow::eraseRGB(U8CPU r, U8CPU g, U8CPU b)
-{
- fBitmap.eraseARGB(0xFF, r, g, b);
-}
-
-bool SkWindow::handleInval(const SkRect* localR)
-{
- SkIRect ir;
+bool SkWindow::handleInval(const SkRect* localR) {
+ SkIRect ir;
if (localR) {
SkRect devR;
devR.round(&ir);
} else {
ir.set(0, 0,
- SkScalarRound(this->width()),
- SkScalarRound(this->height()));
+ SkScalarRoundToInt(this->width()),
+ SkScalarRoundToInt(this->height()));
}
fDirtyRgn.op(ir, SkRegion::kUnion_Op);
void SkWindow::forceInvalAll() {
fDirtyRgn.setRect(0, 0,
- SkScalarCeil(this->width()),
- SkScalarCeil(this->height()));
+ SkScalarCeilToInt(this->width()),
+ SkScalarCeilToInt(this->height()));
}
#if defined(SK_BUILD_FOR_WINCE) && defined(USE_GX_SCREEN)
extern bool gEnableControlledThrow;
#endif
-bool SkWindow::update(SkIRect* updateArea)
-{
- if (!fDirtyRgn.isEmpty())
- {
+bool SkWindow::update(SkIRect* updateArea) {
+ if (!fDirtyRgn.isEmpty()) {
SkBitmap bm = this->getBitmap();
#if defined(SK_BUILD_FOR_WINCE) && defined(USE_GX_SCREEN)
bm.setPixels(buffer);
#endif
- SkAutoTUnref<SkCanvas> canvas(this->createCanvas());
+ SkAutoTUnref<SkSurface> surface(this->createSurface());
+ SkCanvas* canvas = surface->getCanvas();
canvas->clipRegion(fDirtyRgn);
if (updateArea)
// might be made during the draw call.
fDirtyRgn.setEmpty();
-#ifdef TEST_BOUNDER
- test_bounder b(bm);
- canvas->setBounder(&b);
-#endif
#ifdef SK_SIMULATE_FAILED_MALLOC
gEnableControlledThrow = true;
#endif
#ifdef SK_SIMULATE_FAILED_MALLOC
gEnableControlledThrow = false;
#endif
-#ifdef TEST_BOUNDER
- canvas->setBounder(NULL);
-#endif
#if defined(SK_BUILD_FOR_WINCE) && defined(USE_GX_SCREEN)
GXEndDraw();
return false;
}
-bool SkWindow::handleChar(SkUnichar uni)
-{
+bool SkWindow::handleChar(SkUnichar uni) {
if (this->onHandleChar(uni))
return true;
return focus->doEvent(evt);
}
-bool SkWindow::handleKey(SkKey key)
-{
+bool SkWindow::handleKey(SkKey key) {
if (key == kNONE_SkKey)
return false;
return true;
}
- if (key == kUp_SkKey || key == kDown_SkKey)
- {
+ if (key == kUp_SkKey || key == kDown_SkKey) {
if (this->moveFocus(key == kUp_SkKey ? kPrev_FocusDirection : kNext_FocusDirection) == NULL)
this->onSetFocusView(NULL);
return true;
return false;
}
-bool SkWindow::handleKeyUp(SkKey key)
-{
+bool SkWindow::handleKeyUp(SkKey key) {
if (key == kNONE_SkKey)
return false;
this->onSetTitle(title);
}
-//////////////////////////////////////////////////////////////////////
-
-bool SkWindow::onEvent(const SkEvent& evt)
-{
- if (evt.isType(SK_EventDelayInval))
- {
- SkRegion::Iterator iter(fDirtyRgn);
-
- for (; !iter.done(); iter.next())
+bool SkWindow::onEvent(const SkEvent& evt) {
+ if (evt.isType(SK_EventDelayInval)) {
+ for (SkRegion::Iterator iter(fDirtyRgn); !iter.done(); iter.next())
this->onHandleInval(iter.rect());
fWaitingOnInval = false;
return true;
return this->INHERITED::onEvent(evt);
}
-bool SkWindow::onGetFocusView(SkView** focus) const
-{
+bool SkWindow::onGetFocusView(SkView** focus) const {
if (focus)
*focus = fFocusView;
return true;
}
-bool SkWindow::onSetFocusView(SkView* focus)
-{
- if (fFocusView != focus)
- {
+bool SkWindow::onSetFocusView(SkView* focus) {
+ if (fFocusView != focus) {
if (fFocusView)
fFocusView->onFocusChange(false);
fFocusView = focus;
return true;
}
-//////////////////////////////////////////////////////////////////////
-
-void SkWindow::onHandleInval(const SkIRect&)
-{
+void SkWindow::onHandleInval(const SkIRect&) {
}
-bool SkWindow::onHandleChar(SkUnichar)
-{
+bool SkWindow::onHandleChar(SkUnichar) {
return false;
}
-bool SkWindow::onHandleKey(SkKey)
-{
+bool SkWindow::onHandleKey(SkKey) {
return false;
}
-bool SkWindow::onHandleKeyUp(SkKey)
-{
+bool SkWindow::onHandleKeyUp(SkKey) {
return false;
}