8ceee43de4
Bug: skia: Change-Id: Ie31a3c764e4f88f2b08f4198bd253841a2d8c264 Reviewed-on: https://skia-review.googlesource.com/79100 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
120 lines
3.5 KiB
C++
120 lines
3.5 KiB
C++
|
|
/*
|
|
* Copyright 2006 The Android Open Source Project
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
|
|
#ifndef SkView_DEFINED
|
|
#define SkView_DEFINED
|
|
|
|
#include "SkEventSink.h"
|
|
#include "SkRect.h"
|
|
#include "SkMatrix.h"
|
|
#include "SkMetaData.h"
|
|
|
|
class SkCanvas;
|
|
|
|
/** \class SkView
|
|
|
|
SkView is the base class for screen management. All widgets and controls inherit
|
|
from SkView.
|
|
*/
|
|
class SkView : public SkEventSink {
|
|
public:
|
|
enum Flag_Shift {
|
|
kVisible_Shift,
|
|
kNoClip_Shift,
|
|
|
|
kFlagShiftCount
|
|
};
|
|
enum Flag_Mask {
|
|
kVisible_Mask = 1 << kVisible_Shift, //!< set if the view is visible
|
|
kNoClip_Mask = 1 << kNoClip_Shift, //!< set if the view is not clipped to its bounds
|
|
|
|
kAllFlagMasks = (uint32_t)(0 - 1) >> (32 - kFlagShiftCount)
|
|
};
|
|
|
|
SkView(uint32_t flags = 0);
|
|
virtual ~SkView();
|
|
|
|
/** Return the flags associated with the view
|
|
*/
|
|
uint32_t getFlags() const { return fFlags; }
|
|
/** Set the flags associated with the view
|
|
*/
|
|
void setFlags(uint32_t flags);
|
|
|
|
/** Helper that returns non-zero if the kVisible_Mask bit is set in the view's flags
|
|
*/
|
|
int isVisible() const { return fFlags & kVisible_Mask; }
|
|
int isClipToBounds() const { return !(fFlags & kNoClip_Mask); }
|
|
/** Helper to set/clear the view's kVisible_Mask flag */
|
|
void setVisibleP(bool);
|
|
void setClipToBounds(bool);
|
|
|
|
/** Return the view's width */
|
|
SkScalar width() const { return fWidth; }
|
|
/** Return the view's height */
|
|
SkScalar height() const { return fHeight; }
|
|
/** Set the view's width and height. These must both be >= 0. This does not affect the view's loc */
|
|
void setSize(SkScalar width, SkScalar height);
|
|
void setSize(const SkPoint& size) { this->setSize(size.fX, size.fY); }
|
|
void setWidth(SkScalar width) { this->setSize(width, fHeight); }
|
|
void setHeight(SkScalar height) { this->setSize(fWidth, height); }
|
|
|
|
/** Call this to have the view draw into the specified canvas. */
|
|
virtual void draw(SkCanvas* canvas);
|
|
|
|
// Click handling
|
|
|
|
class Click {
|
|
public:
|
|
Click(SkView* target);
|
|
virtual ~Click();
|
|
|
|
enum State {
|
|
kDown_State,
|
|
kMoved_State,
|
|
kUp_State
|
|
};
|
|
SkPoint fOrig, fPrev, fCurr;
|
|
SkIPoint fIOrig, fIPrev, fICurr;
|
|
State fState;
|
|
unsigned fModifierKeys;
|
|
|
|
SkMetaData fMeta;
|
|
private:
|
|
SkEventSinkID fTargetID;
|
|
|
|
friend class SkView;
|
|
};
|
|
Click* findClickHandler(SkScalar x, SkScalar y, unsigned modifierKeys);
|
|
|
|
static void DoClickDown(Click*, int x, int y, unsigned modi);
|
|
static void DoClickMoved(Click*, int x, int y, unsigned modi);
|
|
static void DoClickUp(Click*, int x, int y, unsigned modi);
|
|
|
|
protected:
|
|
/** Override this to draw inside the view. Be sure to call the inherited version too */
|
|
virtual void onDraw(SkCanvas*);
|
|
/** Override this to be notified when the view's size changes. Be sure to call the inherited version too */
|
|
virtual void onSizeChange();
|
|
|
|
/** Override this if you might handle the click
|
|
*/
|
|
virtual Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi);
|
|
/** Override this to track clicks, returning true as long as you want to track
|
|
the pen/mouse.
|
|
*/
|
|
virtual bool onClick(Click*);
|
|
|
|
private:
|
|
SkScalar fWidth, fHeight;
|
|
uint8_t fFlags;
|
|
};
|
|
|
|
#endif
|