#include "config.h"
#include "Widget.h"
#include "Cursor.h"
#include "Font.h"
#include "FrameGdk.h"
#include "GraphicsContext.h"
#include "IntRect.h"
#include "RenderObject.h"
#include <gdk/gdk.h>
namespace WebCore {
class WidgetPrivate {
public:
GdkDrawable* drawable;
WidgetClient* client;
IntRect geometry;
Font font;
};
Widget::Widget()
: data(new WidgetPrivate)
{
data->drawable = 0;
}
Widget::Widget(GdkDrawable* drawable)
: data(new WidgetPrivate)
{
setDrawable(drawable);
}
GdkDrawable* Widget::drawable() const
{
return data->drawable;
}
void Widget::setDrawable(GdkDrawable* drawable)
{
data->drawable = drawable;
}
Widget::~Widget()
{
delete data;
}
void Widget::setClient(WidgetClient* c)
{
data->client = c;
}
WidgetClient* Widget::client() const
{
return data->client;
}
IntRect Widget::frameGeometry() const
{
return data->geometry;
}
bool Widget::hasFocus() const
{
return false;
}
void Widget::setFocus()
{
GdkDrawable* drawable = data->drawable;
if (!drawable || !GDK_IS_WINDOW(drawable))
return;
GdkWindow* window = GDK_WINDOW(drawable);
gdk_window_focus(window, GDK_CURRENT_TIME);
}
void Widget::clearFocus()
{
}
const Font& Widget::font() const
{
return data->font;
}
void Widget::setFont(const Font& font)
{
data->font = font;
}
void Widget::setCursor(const Cursor& cursor)
{
GdkCursor* pcur = cursor.impl();
if (!pcur)
return;
GdkDrawable* drawable = data->drawable;
if (!drawable || !GDK_IS_WINDOW(drawable))
return;
GdkWindow* window = GDK_WINDOW(drawable);
gdk_window_set_cursor(window, pcur);
}
void Widget::show()
{
GdkDrawable* drawable = data->drawable;
if (!drawable || !GDK_IS_WINDOW(drawable))
return;
GdkWindow* window = GDK_WINDOW(drawable);
gdk_window_show(window);
}
void Widget::hide()
{
GdkDrawable* drawable = data->drawable;
if (!drawable || !GDK_IS_WINDOW(drawable))
return;
GdkWindow* window = GDK_WINDOW(drawable);
gdk_window_hide(window);
}
void Widget::setFrameGeometry(const IntRect& r)
{
data->geometry = r;
GdkDrawable* drawable = data->drawable;
if (!drawable || !GDK_IS_WINDOW(drawable))
return;
GdkWindow* window = GDK_WINDOW(drawable);
gdk_window_move_resize(window, r.x(), r.y(), r.width(), r.height());
}
IntPoint Widget::mapFromGlobal(const IntPoint& p) const
{
GdkDrawable* drawable = data->drawable;
if (!drawable || !GDK_IS_WINDOW(drawable))
return p;
GdkWindow* window = GDK_WINDOW(drawable);
gint x, y;
gdk_window_get_origin(window, &x, &y);
return IntPoint(p.x() - x, p.y() - y);
}
float Widget::scaleFactor() const
{
return 1.0f;
}
}