Logo Search packages:      
Sourcecode: xblast-tnt version File versions  Download package

w32_init.c

/*
 * file w32_init.c - initialze Win32-graphics engine
 *
 * $Id: w32_init.c,v 1.2 2004/05/14 10:00:35 alfie Exp $
 *
 * Program XBLAST 
 * (C) by Oliver Vogel (e-mail: m.vogel@ndh.net)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published
 * by the Free Software Foundation; either version 2; or (at your option)
 * any later version
 *
 * This program is distributed in the hope that it will be entertaining,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILTY 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, write to the Free Software Foundation, Inc.
 * 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
#include "gui.h"

#include "w32_config.h"
#include "w32_event.h"
#include "w32_joystick.h"
#include "w32_keysym.h"
#include "w32_pixmap.h"
#include "w32_sprite.h"
#include "w32_text.h"
#include "w32_image.h"
#include "w32_tile.h"

#include "version.h"
#include "geom.h"

/*
 * local function: InitWindow
 * description:    create the xblast main window
 * parameters:     title - title of window
 * return value:   XBTrue on success, XBFalse on error 
 */
static XBBool
InitWindow (const char *title)
{
  RECT cRect;
  RECT wRect;
  int  x, y;
  int  width, height;
  
  static WNDCLASS windowClass;

  /* register xblast class */
  windowClass.style         = 0;
  windowClass.lpfnWndProc   = WindowProc;
  windowClass.cbClsExtra    = 0;
  windowClass.cbWndExtra    = 0;
  windowClass.hInstance     = instance;
  windowClass.hIcon         = LoadIcon (instance, xblastClass);
  windowClass.hCursor       = LoadCursor (NULL, IDC_ARROW);
  windowClass.hbrBackground = GetStockObject (BLACK_BRUSH);
  windowClass.lpszClassName = xblastClass;
  if (0 == RegisterClass (&windowClass) ) {
    return XBFalse;
  }
  /* retrieve old geonetry */
  RetrieveWindowRect (&wRect);
  /* now create the window */
  window = CreateWindow (xblastClass, title, 
                   WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
                   CW_USEDEFAULT, CW_USEDEFAULT, 
                         wRect.right - wRect.left, 
                         wRect.bottom - wRect.top, 
                   NULL, NULL, instance, NULL);
  if (window == NULL) {
    return XBFalse;
  }
  /* now show it (may be moved elsewhere) */
  ShowWindow (window, SW_SHOWDEFAULT);
  UpdateWindow (window);
  /* set window size correctly */
  if (GetClientRect (window, &cRect)) {
    x      = wRect.left;
    y      = wRect.top;
    width  = wRect.right  - wRect.left;
    height = wRect.bottom - wRect.top;
    /* adjust width and height, if client region has wrong size */
    if (PIXW != cRect.right - cRect.left) {
      width -= cRect.right - cRect.left - PIXW;
    }
    if (PIXH + SCOREH != cRect.bottom - cRect.top) {
      height -=  cRect.bottom - cRect.top - PIXH - SCOREH;
    }
    Dbg_Out ("Window geom %dx%d+%d+%d\n", width, height, x, y);
    MoveWindow (window, x, y, width, height, TRUE);
  }
  /* that's all */
  Dbg_Out ("InitWindow successful\n");
  return XBTrue;
} /* InitWindow */

/*
 * local function: FinishWindow 
 * description:    clean up window and its class
 */
static void
FinishWindow (void)
{
  RECT rect;

  /* store last position */
  if (GetWindowRect (window, &rect) ) {
    StoreWindowRect (&rect);
  }
  /* delete window */
  DestroyWindow (window);
  /* unregister window class */
  UnregisterClass (xblastClass, instance);
} /* FinishWindow */

/*
 * global function:  GUI_Init
 * description:      initializes win32-display
 * parameters:       title     - window caption
 *                   icon_name - ignored
 * return value:     0 on success, -1 on failure
 */
XBBool
GUI_Init (int argc, char *argv[])
{
  /* get program instance */
  instance = GetModuleHandleA (0);
  /* create game window */
  if (! InitWindow ("XBlast TNT " VERSION_STRING)) {
    return XBFalse;
  }
  /* init image loading */
  if (! InitImages ()) {
    return XBFalse;
  }
  /* create bitmap for double buffering */
  if (! InitPixmap ()) {
    return XBFalse;
  }
  /* setup text output and fonts */
  if (! InitText ()) {
    return XBFalse;
  }
  /* setup tile output */
  if (! InitTiles ()) {
    return XBFalse;
  }
  /* create sprites */
  if (! InitSprites ()) {
    return XBFalse;
  }
  /* setup keysmbol table */
  if (! InitKeysym ()) {
    return XBFalse;
  }
  /* Setup Event handler */
  if (! InitEvent () ) {
    return XBFalse;
  }
  /* Setup Joystick Handler */
  if (! InitJoystick ()) {
    return XBFalse;
  }
  return XBTrue;
} /* GUI_Init */

/*
 * global function: GUI_Finish
 * description:     shutdown win32 interface
 */
void
GUI_Finish (void)
{
  /* cleanup joystick */
  FinishJoystick ();
  /* clean up event handling */
  FinishEvent ();
  /* setup keysmbol table */
  FinishKeysym ();
  /* remove all sprite bitmaps */
  FinishSprites ();
  /* romve all tiles */
  FinishTiles ();
  /* unload fonts etc */
  FinishText ();
  /* clear image conversion data structures */
  FinishImages ();
  /* remove double buffer */
  FinishPixmap ();
  /* remove window */
  FinishWindow ();
} /* GUI_Finish */

/*
 * end of file w32_init.c
 */

Generated by  Doxygen 1.6.0   Back to index