void Widget::setFont(Font &font) {
  widget->font = font.font->font;
  SendMessage(widget->window, WM_SETFONT, (WPARAM)font.font->font, 0);
}

bool Widget::visible() {
  return GetWindowLong(widget->window, GWL_STYLE) & WS_VISIBLE;
}

void Widget::setVisible(bool visible) {
  ShowWindow(widget->window, visible ? SW_SHOWNORMAL : SW_HIDE);
}

bool Widget::enabled() {
  return IsWindowEnabled(widget->window);
}

void Widget::setEnabled(bool enabled) {
  EnableWindow(widget->window, enabled);
}

bool Widget::focused() {
  return (GetForegroundWindow() == widget->window);
}

void Widget::setFocused() {
  if(visible() == false) setVisible(true);
  SetFocus(widget->window);
}

void Widget::setGeometry(unsigned x, unsigned y, unsigned width, unsigned height) {
  SetWindowPos(widget->window, NULL, x, y, width, height, SWP_NOZORDER);
}

Widget::Widget() {
  OS::os->objects.append(this);
  widget = new Widget::Data;
  widget->window = 0;
  widget->font = OS::os->proportionalFont;
}
