#include <owl/gadget.h>
#include <owl/uihelper.h>
#include <winsys/uimetric.h>
//
// TFlatButtonGadget class
// ~~~~~~~~~~~~~~~~~~~~~~~
// Implements a flat "IE 3" style button gadget. Currently
// does not support button gadgets used as "radio" buttons.
//
class TFlatButtonGadget : public TButtonGadget {
public:
TFlatButtonGadget(TResId glyphResIdOrIndex, int id, TType type = Command, bool enabled = false, TState state = Up, bool sharedGlyph = false);
virtual ~TFlatButtonGadget();
protected:
bool MouseIsIn;
public:
virtual void PaintBorder(TDC& dc);
virtual void MouseEnter(uint modKeys, TPoint& point);
virtual void MouseLeave(uint modKeys, TPoint& point);
};
TFlatButtonGadget::TFlatButtonGadget(TResId glyphResIdOrIndex, int id, TType type, bool enabled, TState state, bool sharedGlyph)
: TButtonGadget(glyphResIdOrIndex, id, type, enabled, state, sharedGlyph),
MouseIsIn(false)
{
SetBorderStyle(Raised);
}
TFlatButtonGadget::~TFlatButtonGadget()
{
}
void TFlatButtonGadget::PaintBorder(TDC& dc)
{
if ((MouseIsIn && GetEnabled()) || GetButtonState())
{
TRect rect(0, 0, Bounds.Width(), Bounds.Height());
TUIBorder::DrawEdge(dc, rect, Pressed || GetButtonState() ?
TUIBorder::SunkenOuter :
TUIBorder::RaisedInner, TUIBorder::Rect);
}
}
void TFlatButtonGadget::MouseEnter(uint modKeys, TPoint& point)
{
TButtonGadget::MouseEnter(modKeys, point);
MouseIsIn = true;
Invalidate();
}
void TFlatButtonGadget::MouseLeave(uint modKeys, TPoint& point)
{
MouseIsIn = false;
TGadget::Invalidate(true);
TButtonGadget::MouseLeave(modKeys, point);
}
//
// TFlatSeparatorGadget
// ~~~~~~~~~~~~~~~~~~~~
// Draws an etched vertical line as a separator.
//
class TFlatSeparatorGadget : public TSeparatorGadget {
public:
TFlatSeparatorGadget(int width = 0, int height = 0, int id = 0);
virtual ~TFlatSeparatorGadget();
public:
virtual void Paint(TDC& dc);
};
TFlatSeparatorGadget::TFlatSeparatorGadget(int width, int height, int id)
: TSeparatorGadget(width, id)
{
Bounds.bottom = (height ? height : TUIMetric::CySizeFrame * 5);
}
TFlatSeparatorGadget::~TFlatSeparatorGadget()
{
}
void TFlatSeparatorGadget::Paint(TDC& dc)
{
TSeparatorGadget::Paint(dc);
if (!IsEndOfRow())
{
TRect rect(0, 0, Bounds.Width() / 2 + 1, Bounds.Height());
TUIBorder::DrawEdge(dc, rect, TUIBorder::EdgeEtched, TUIBorder::Right);
}
}