haiku/src/apps/icon-o-matic/CanvasView.h

124 lines
2.8 KiB
C++

/*
* Copyright 2006-2007, 2011, Stephan Aßmus <superstippi@gmx.de>
* All rights reserved. Distributed under the terms of the MIT License.
*/
#ifndef CANVAS_VIEW_H
#define CANVAS_VIEW_H
#include "Icon.h"
#include "Scrollable.h"
#include "StateView.h"
class BBitmap;
_BEGIN_ICON_NAMESPACE
class IconRenderer;
_END_ICON_NAMESPACE
_USING_ICON_NAMESPACE
enum {
SNAPPING_OFF = 0,
SNAPPING_64,
SNAPPING_32,
SNAPPING_16,
};
class CanvasView : public StateView, public Scrollable, public IconListener {
public:
CanvasView(BRect frame);
virtual ~CanvasView();
// StateView interface
virtual void AttachedToWindow();
virtual void FrameResized(float width, float height);
virtual void Draw(BRect updateRect);
virtual void MouseDown(BPoint where);
virtual void MouseUp(BPoint where);
virtual void MouseMoved(BPoint where, uint32 transit,
const BMessage* dragMessage);
virtual void FilterMouse(BPoint* where) const;
virtual bool MouseWheelChanged(BPoint where,
float x, float y);
// Scrollable interface
protected:
virtual void SetScrollOffset(BPoint newOffset);
virtual void ScrollOffsetChanged(BPoint oldOffset,
BPoint newOffset);
virtual void VisibleSizeChanged(float oldWidth,
float oldHeight, float newWidth,
float newHeight);
// IconListener interface
public:
virtual void AreaInvalidated(const BRect& area);
// CanvasView
void SetIcon(Icon* icon);
inline float ZoomLevel() const
{ return fZoomLevel; }
void SetMouseFilterMode(uint32 mode);
uint32 MouseFilterMode() const
{ return fMouseFilterMode; }
void ConvertFromCanvas(BPoint* point) const;
void ConvertToCanvas(BPoint* point) const;
void ConvertFromCanvas(BRect* rect) const;
void ConvertToCanvas(BRect* rect) const;
protected:
// StateView interface
virtual bool _HandleKeyDown(uint32 key, uint32 modifiers);
virtual bool _HandleKeyUp(uint32 key, uint32 modifiers);
// CanvasView
BRect _CanvasRect() const;
void _AllocBackBitmap(float width,
float height);
void _FreeBackBitmap();
void _DrawInto(BView* view,
BRect updateRect);
void _MakeBackground();
void _UpdateToolCursor();
private:
double _NextZoomInLevel(double zoom) const;
double _NextZoomOutLevel(double zoom) const;
void _SetZoom(double zoomLevel,
bool mouseIsAnchor = true);
BRect _LayoutCanvas();
private:
BBitmap* fBitmap;
BBitmap* fBackground;
Icon* fIcon;
IconRenderer* fRenderer;
BRect fDirtyIconArea;
BPoint fCanvasOrigin;
double fZoomLevel;
bool fSpaceHeldDown;
bool fInScrollTo;
bool fScrollTracking;
BPoint fScrollTrackingStart;
BPoint fScrollOffsetStart;
uint32 fMouseFilterMode;
};
#endif // CANVAS_VIEW_H