// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
/*
* Copyright (C) 2011 Canonical Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
* Authored by: Gordon Allott
*/
#ifndef PLACES_TILE_H
#define PLACES_TILE_H
#include
#include
#include
#include
#include
#include "StaticCairoText.h"
#include "Introspectable.h"
#include
#include
#include
#include
class PlacesTile : public nux::View
{
public:
typedef enum
{
STATE_DEFAULT,
STATE_HOVER,
STATE_PRESSED,
STATE_ACTIVATED,
} TileState;
PlacesTile (NUX_FILE_LINE_PROTO);
~PlacesTile ();
// mainly for testing
virtual void SetState (TileState state);
virtual TileState GetState ();
sigc::signal sigClick;
sigc::signal sigToggled;
sigc::signal sigStateChanged;
sigc::signal MouseDown;
sigc::signal MouseUp;
sigc::signal MouseEnter;
sigc::signal MouseLeave;
sigc::signal MouseClick;
protected:
virtual long ProcessEvent (nux::IEvent &ievent, long TraverseInfo, long ProcessEventInfo);
virtual void Draw (nux::GraphicsEngine &GfxContext, bool force_draw);
virtual void DrawContent (nux::GraphicsEngine &GfxContext, bool force_draw);
virtual void PostDraw (nux::GraphicsEngine &GfxContext, bool force_draw);
virtual void PreLayoutManagement ();
virtual long PostLayoutManagement (long LayoutResult);
void RecvMouseEnter (int x, int y, unsigned long button_flags, unsigned long key_flags);
void RecvMouseLeave (int x, int y, unsigned long button_flags, unsigned long key_flags);
void RecvMouseDown (int x, int y, unsigned long button_flags, unsigned long key_flags);
void RecvMouseUp (int x, int y, unsigned long button_flags, unsigned long key_flags);
void RecvMouseClick (int x, int y, unsigned long button_flags, unsigned long key_flags);
void RecvMouseMove (int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags);
//void RecvMouseDrag (int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags);
sigc::signal sigMouseEnter;
sigc::signal sigMouseLeave;
sigc::signal sigMouseReleased;
sigc::signal sigMouseClick;
sigc::signal sigMouseDrag;
TileState _state;
nux::Layout *_layout;
nux::BaseTexture *_hilight_background;
nux::View *_hilight_view;
nux::TextureLayer *_hilight_layer;
void UpdateBackground ();
void DrawRoundedRectangle (cairo_t* cr,
double aspect,
double x,
double y,
double cornerRadius,
double width,
double height);
private:
int _last_width;
int _last_height;
};
#endif // PLACE_TILE_H