e606d6e210
SkHitBox is a class that determines which draw command is associated with the pixel located at x,y. By calculating a single point instead of the entire bitmap at once there is no visible performance slowdown. Review URL: https://codereview.appspot.com/6350098 git-svn-id: http://skia.googlecode.com/svn/trunk@4565 2bbb7eff-a529-9590-31e7-b0007b416f81
82 lines
1.8 KiB
C++
82 lines
1.8 KiB
C++
|
|
/*
|
|
* Copyright 2012 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
|
|
#ifndef SKHITBOX_H_
|
|
#define SKHITBOX_H_
|
|
|
|
#include "SkBitmap.h"
|
|
#include "SkUnPreMultiply.h"
|
|
|
|
/* NOTE(chudy): It's possible that this class can be entirely static similar to
|
|
* SkObjectParser. We will have to pass in the fHitBox void * every call.
|
|
*/
|
|
class SkHitBox {
|
|
public:
|
|
SkHitBox();
|
|
~SkHitBox();
|
|
|
|
/**
|
|
Allocates enough space in memory for our hitbox pointer to contain
|
|
a layer value for every pixel. Initializes every value to 0.
|
|
*/
|
|
void alloc(int width, int height);
|
|
|
|
/**
|
|
Compares the new SkBitmap compared to the SkBitmap from the last
|
|
call. Updates our hitbox with the draw command number if different.
|
|
*/
|
|
void updateHitBox(SkBitmap* newBitmap, int layer);
|
|
|
|
/**
|
|
Compares point x,y in the new bitmap compared to the saved previous
|
|
one. Updates hitpoint with the draw command number if different.
|
|
*/
|
|
void updateHitPoint(SkBitmap* newBitmap, int layer);
|
|
|
|
/**
|
|
Sets the target hitpoint we are attempting to find the layer of.
|
|
*/
|
|
void setHitPoint(int x, int y) {
|
|
fX = x;
|
|
fY = y;
|
|
fLayer = 0;
|
|
}
|
|
|
|
/**
|
|
Returns a pointer to the start of the hitbox.
|
|
*/
|
|
int* getHitBox() {
|
|
return fHitBox;
|
|
}
|
|
|
|
/**
|
|
Returns the layer numbr corresponding to the point (fX, fY) in this class.
|
|
*/
|
|
int getPoint() {
|
|
return fLayer;
|
|
}
|
|
|
|
/**
|
|
Checks to see if a mouse click has been passed in.
|
|
*/
|
|
bool pointIsSet() {
|
|
return !(fX == -1 && fY == -1);
|
|
}
|
|
|
|
private:
|
|
SkBitmap fPrev;
|
|
int* fHitBox;
|
|
int fX;
|
|
int fY;
|
|
int fLayer;
|
|
};
|
|
|
|
|
|
#endif /* SKHITBOX_H_ */
|