Home | History | Annotate | Download | only in effects
      1 /*
      2  * Copyright 2012 The Android Open Source Project
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "SkOffsetImageFilter.h"
      9 #include "SkBitmap.h"
     10 #include "SkMatrix.h"
     11 #include "SkFlattenableBuffers.h"
     12 
     13 bool SkOffsetImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& source,
     14                                         const SkMatrix& matrix,
     15                                         SkBitmap* result,
     16                                         SkIPoint* loc) {
     17     SkBitmap src = source;
     18     if (getInput(0) && !getInput(0)->filterImage(proxy, source, matrix, &src, loc)) {
     19         return false;
     20     }
     21 
     22     SkVector vec;
     23     matrix.mapVectors(&vec, &fOffset, 1);
     24 
     25     loc->fX += SkScalarRoundToInt(vec.fX);
     26     loc->fY += SkScalarRoundToInt(vec.fY);
     27     *result = src;
     28     return true;
     29 }
     30 
     31 bool SkOffsetImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& ctm,
     32                                          SkIRect* dst) {
     33     SkVector vec;
     34     ctm.mapVectors(&vec, &fOffset, 1);
     35 
     36     *dst = src;
     37     dst->offset(SkScalarRoundToInt(vec.fX), SkScalarRoundToInt(vec.fY));
     38     return true;
     39 }
     40 
     41 void SkOffsetImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const {
     42     this->INHERITED::flatten(buffer);
     43     buffer.writePoint(fOffset);
     44 }
     45 
     46 SkOffsetImageFilter::SkOffsetImageFilter(SkScalar dx, SkScalar dy,
     47                                          SkImageFilter* input) : INHERITED(input) {
     48     fOffset.set(dx, dy);
     49 }
     50 
     51 SkOffsetImageFilter::SkOffsetImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {
     52     buffer.readPoint(&fOffset);
     53 }
     54