// 2011.07.28 # Doj
// Виндовые и графические функции функции

include" units\statements\switch.de"

include" units\headers\windows.de"
include" units\headers\gl.de"

27 constant KEY_ESCAPE
VK_LEFT constant KEY_LEFT
VK_RIGHT constant KEY_RIGHT
VK_UP constant KEY_UP
VK_DOWN constant KEY_DOWN

pchar" DEMBRO_WND" constant DEMBRO_WND
  WS_VISIBLE
  // WS_OVERLAPPEDWINDOW or
  // WS_POPUP or 
  // WS_CAPTION or 
  constant DEMBRO_STYLE
800 constant WIDTH
800 constant HEIGHT

variable *exit?
variable *handle
variable *dc
variable *rc
variable *pixel-format

create *window-rect
  0 , // left
  0 , // top
  0 , // right
  0 , // bottom

: window-x *window-rect @ ;
: window-y *window-rect cell+ @ ;
: window-width *window-rect 2 cells + @ ;
: window-height *window-rect 3 cells + @ ;
// Изначально в *window-rect записываются координаты верхнего левого и нижнего
// правого углов. Эта команда преобразует координаты нижнего правого угла в
// размеры окна
: calc-window-size 
                     window-width  window-x - *window-rect 2 cells + ! 
                     window-height window-y - *window-rect 3 cells + ! 
;
: update-window-rect *handle @ *window-rect GetWindowRect drop
                     calc-window-size
;

create *mouse
  0 , // x
  0 , // y

: update-mouse-pos *mouse GetCursorPos drop
                   update-window-rect
                   *mouse @ *window-rect @ - *mouse ! 
                   *mouse cell+ @ *window-rect cell+ @ - *mouse cell+ ! 
;
: mouse-x *mouse @ ;
: mouse-y *mouse cell+ @ ;

: Quit *exit? on 0 PostQuitMessage ;
create *window-rect
  0 , // left
  0 , // top
  0 , // right
  0 , // bottom

: window-x *window-rect @ ;
: window-y *window-rect cell+ @ ;
: window-width *window-rect 2 cells + @ ;
: window-height *window-rect 3 cells + @ ;
// Изначально в *window-rect записываются координаты верхнего левого и нижнего
// правого углов. Эта команда преобразует координаты нижнего правого угла в
// размеры окна
: calc-window-size 
                     window-width  window-x - *window-rect 2 cells + ! 
                     window-height window-y - *window-rect 3 cells + ! 
;
: update-window-rect *handle @ *window-rect GetWindowRect drop
                     calc-window-size
;

create *mouse
  0 , // x
  0 , // y

: update-mouse-pos *mouse GetCursorPos drop
                   update-window-rect
                   *mouse @ *window-rect @ - *mouse ! 
                   *mouse cell+ @ *window-rect cell+ @ - *mouse cell+ ! 
;
: mouse-x *mouse @ ;
: mouse-y *mouse cell+ @ ;

: Quit *exit? on 0 PostQuitMessage ;
