/* macwindows - Macintosh window functions                             */
/* XLISP-STAT 2.1 Copyright (c) 1990, by Luke Tierney                  */
/* Additions to Xlisp 2.1, Copyright (c) 1989 by David Michael Betz    */
/* You may give out copies of this software; for conditions see the    */
/* file COPYING included with this distribution.                       */
 
#include "xlisp.h"
#include "xlstat.h"
#include "xlgraph.h"

# define screenBits qd.screenBits
#ifdef applec
VOID CtoPstr(s) char *s; {c2pstr(s);}
VOID PtoCstr(s) StringPtr s; {p2cstr(s);}
#endif /* applec */

/* external variables */
extern LVAL s_true, sk_update, sk_close, sk_activate;
extern int color_allowed;

/**************************************************************************/
/**                                                                      **/
/**                           Utility Functions                          **/
/**                                                                      **/
/**************************************************************************/

static GrafPtr current_port(void)
{
  GrafPtr port;
  
  GetPort(&port);
  return(port);
}

/**************************************************************************/
/**                                                                      **/
/**                        Window Data Functions                         **/
/**                                                                      **/
/**************************************************************************/

LVAL get_window_object(WindowPtr w)
{
  WindowData data;
  
  data = (WindowData) get_window_data(w);
  if (data == nil || ! objectp((LVAL) data->object)) return(NIL);
  else return((LVAL) data->object);
}

VOID set_window_object(WindowPtr w, LVAL object)
{
  WindowData data;
  
  data = (WindowData) get_window_data(w);
  if (data == nil) return;
  else data->object = (char *) object;
}

/**************************************************************************/
/**                                                                      **/
/**                       Standard Event Handlers                        **/
/**                                                                      **/
/**************************************************************************/

pascal VOID mac_update_action(Boolean resized)
{
  LVAL object = get_window_object(current_port());

  if (! objectp(object)) return;
  send_message_1L(object, sk_update, (resized) ? s_true : NIL);
}

pascal VOID mac_activate_action(Boolean active)
{
  LVAL object = get_window_object(current_port());
  
  if (! objectp(object)) return;
  send_message_1L(object, sk_activate, (active) ? s_true : NIL);
}

pascal VOID mac_close_action(void)
{
  LVAL object = get_window_object(current_port());
  
  if (! objectp(object)) return;
  send_message(object, sk_close);
}

/**************************************************************************/
/**                                                                      **/
/**                 General Window Information Functions                 **/
/**                                                                      **/
/**************************************************************************/

VOID StShowWindow(WindowPtr w)
{
  MyShowWindow(w);
}

VOID StHideWindow(WindowPtr w)
{
  HideWindow(w);
}

VOID StWSetTitle(WindowPtr w, char *str)
{
  Str255 pbuf;
  CintoPstring(str, pbuf, sizeof pbuf, FALSE);
  SetWTitle(w, pbuf);
}

/**************************************************************************/
/**                                                                      **/
/**                         Screen Info Functions                        **/
/**                                                                      **/
/**************************************************************************/

VOID StGetScreenSize(int *width, int *height)
{
  if (width != nil) *width = screenBits.bounds.right - screenBits.bounds.left;
  if (height != nil) *height = screenBits.bounds.bottom - screenBits.bounds.top - GetMBarHeight();
}

int StScreenHasColor(void)
{
  SysEnvRec r;
  GDHandle gd;
  static inited = FALSE, has_color = FALSE;

  if (! inited) {
    SysEnvirons(1, &r);
    if ((int) r.hasColorQD && color_allowed) {
      gd = GetGDevice();
      has_color = ((*(*gd)->gdPMap)->pixelSize > 1) ? TRUE : FALSE;
    }
    else has_color = FALSE;
    inited = TRUE;
  }
  return(has_color);
}

int StHasWindows(void) { return(TRUE); }
VOID StFlushGraphics(void) {}


syntax highlighted by Code2HTML, v. 0.9.1