Revert r2250 - removal of setMatrixClip() - because Chrome makes heavy use

of those functions in a way we're not yet ready to clean up.



git-svn-id: http://skia.googlecode.com/svn/trunk@2254 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
tomhudson@google.com 2011-09-13 14:41:06 +00:00
parent f2068adc2c
commit 8a0b0291ae
7 changed files with 38 additions and 65 deletions

View File

@ -73,14 +73,14 @@ public:
kVector_Capability = 0x2, //!< mask indicating a vector representation
kAll_Capabilities = 0x3
};
virtual uint32_t getDeviceCapabilities();
virtual uint32_t getDeviceCapabilities() { return 0; }
/** Return the width of the device (in pixels).
*/
virtual int width() const;
virtual int width() const { return fBitmap.width(); }
/** Return the height of the device (in pixels).
*/
virtual int height() const;
virtual int height() const { return fBitmap.height(); }
/**
* Return the bounds of the device in the coordinate space of the root
@ -154,22 +154,25 @@ protected:
virtual bool filterTextFlags(const SkPaint& paint, TextFlags*);
/**
* Let the device know that its matrix has changed; it can query the
* matrix when it needs it.
*/
virtual void markMatrixDirty();
/**
* Let the device know that its clip has changed; it can query the
* clip (region or stack) when or if it needs it.
*/
virtual void markClipDirty();
* Called with the correct matrix and clip before this device is drawn
* to using those settings. If your subclass overrides this, be sure to
* call through to the base class as well.
*
* The clipstack is another view of the clip. It records the actual
* geometry that went into building the region. It is present for devices
* that want to parse it, but is not required: the region is a complete
* picture of the current clip. (i.e. if you regionize all of the geometry
* in the clipstack, you will arrive at an equivalent region to the one
* passed in).
*/
virtual void setMatrixClip(const SkMatrix&, const SkRegion&,
const SkClipStack&);
/** Called when this device gains focus (i.e becomes the current device
for drawing).
*/
virtual void gainFocus(SkCanvas*, const SkMatrix&, const SkRegion&,
const SkClipStack&);
const SkClipStack&) {}
/** Clears the entire device to the specified color (including alpha).
* Ignores the clip.
@ -287,7 +290,7 @@ private:
/** Causes any deferred drawing to the device to be completed.
*/
virtual void flush();
virtual void flush() {}
SkBitmap fBitmap;
SkIPoint fOrigin;

View File

@ -71,8 +71,8 @@ public:
virtual bool readPixels(const SkIRect& srcRect, SkBitmap* bitmap);
virtual void writePixels(const SkBitmap& bitmap, int x, int y);
virtual void markMatrixDirty();
virtual void markClipDirty();
virtual void setMatrixClip(const SkMatrix& matrix, const SkRegion& clip,
const SkClipStack&);
virtual void drawPaint(const SkDraw&, const SkPaint& paint);
virtual void drawPoints(const SkDraw&, SkCanvas::PointMode mode, size_t count,

View File

@ -163,6 +163,8 @@ public:
// TODO(vandebo): Remove this as soon as Chrome's Platform device goes away.
void setOrigin(int x, int y);
virtual void setMatrixClip(const SkMatrix& m, const SkRegion& r,
const SkClipStack& c);
private:
typedef SkDevice INHERITED;

View File

@ -118,9 +118,7 @@ struct DeviceCM {
SkRegion::kDifference_Op);
}
//fDevice->setMatrixClip(*fMatrix, fClip, clipStack);
fDevice->markMatrixDirty();
fDevice->markClipDirty();
fDevice->setMatrixClip(*fMatrix, fClip, clipStack);
#ifdef SK_DEBUG
if (!fClip.isEmpty()) {
@ -214,19 +212,14 @@ private:
class SkDrawIter : public SkDraw {
public:
SkDrawIter(SkCanvas* canvas, bool skipEmptyClips = true)
: fCanvas(canvas)
, fCurrLayer(NULL)
, fSkipEmptyClips(skipEmptyClips) {
if (!canvas) {
return;
}
SkDrawIter(SkCanvas* canvas, bool skipEmptyClips = true) {
fCanvas = canvas;
canvas->updateDeviceCMCache();
fClipStack = &canvas->getTotalClipStack();
fBounder = canvas->getBounder();
fCurrLayer = canvas->fMCRec->fTopLayer;
fSkipEmptyClips = skipEmptyClips;
}
bool next() {

View File

@ -63,18 +63,6 @@ SkMetaData& SkDevice::getMetaData() {
return *fMetaData;
}
uint32_t SkDevice::getDeviceCapabilities() {
return 0;
}
int SkDevice::width() const {
return fBitmap.width();
}
int SkDevice::height() const {
return fBitmap.height();
}
void SkDevice::lockPixels() {
if (fBitmap.lockPixelsAreWritable()) {
fBitmap.lockPixels();
@ -106,8 +94,10 @@ void SkDevice::clear(SkColor color) {
fBitmap.eraseColor(color);
}
void SkDevice::onAccessBitmap(SkBitmap* bitmap) {
void SkDevice::onAccessBitmap(SkBitmap* bitmap) {}
void SkDevice::setMatrixClip(const SkMatrix& matrix, const SkRegion& region,
const SkClipStack& clipStack) {
}
///////////////////////////////////////////////////////////////////////////////
@ -252,20 +242,3 @@ bool SkDevice::filterTextFlags(const SkPaint& paint, TextFlags* flags) {
return false;
}
void SkDevice::markMatrixDirty() {
}
void SkDevice::markClipDirty() {
}
void SkDevice::gainFocus(SkCanvas*, const SkMatrix&, const SkRegion&,
const SkClipStack&) {
}
void SkDevice::flush() {
}

View File

@ -338,13 +338,10 @@ void SkGpuDevice::prepareRenderTarget(const SkDraw& draw) {
}
}
void SkGpuDevice::markMatrixDirty() {
INHERITED::markMatrixDirty();
fNeedPrepareRenderTarget = true;
}
void SkGpuDevice::markClipDirty() {
INHERITED::markClipDirty();
void SkGpuDevice::setMatrixClip(const SkMatrix& matrix, const SkRegion& clip,
const SkClipStack& clipStack) {
this->INHERITED::setMatrixClip(matrix, clip, clipStack);
// We don't need to set them now because the context may not reflect this device.
fNeedPrepareRenderTarget = true;
}

View File

@ -1135,6 +1135,11 @@ void SkPDFDevice::setOrigin(int x, int y) {
INHERITED::setOrigin(x, y);
}
void SkPDFDevice::setMatrixClip(const SkMatrix& m, const SkRegion& r,
const SkClipStack& c) {
INHERITED::setMatrixClip(m, r, c);
}
void SkPDFDevice::createFormXObjectFromDevice(
SkRefPtr<SkPDFFormXObject>* xobject) {
*xobject = new SkPDFFormXObject(this);