Main Page   Class Hierarchy   Compound List   File List   Header Files   Compound Members   File Members  

toolkit.hpp

This is the verbatim text of the toolkit.hpp include file.
#ifndef __toolkit_h
#define __toolkit_h

extern "C" {
#include "config.h"
#include "config-std.h"
#include "config-io.h"
#include "config-mem.h"
#include "jni.h"
};

#include <InterfaceKit.h>
#include "cmnwnd.hpp"

extern "C" {
#include "../../../../kaffe/kaffevm/gtypes.h"
#include "../../../../kaffe/kaffevm/locks.h"
#include "../../../../include/java_lang_Object.h"
#include "../../../../kaffe/kaffevm/gc.h"

#include "../../../../kaffe/kaffevm/debug.h"
}

/*** debug ***/
#include <stdio.h>
#undef  DBG
#define DBG(_topic,_msgSpec)                    if (kaffevmDebugMask & DBG_##_topic) printf _msgSpec
#define DBG_ACTION(_topic,__action)             if (kaffevmDebugMask & DBG_##_topic) __action
#define UNIMPLEMENTED(block)    printf("unimplemented statements @ %s:%d\n", __FILE__ ,  __LINE__)      
#define TOFIX()                                 printf("incomplete function called @ %s:%d\n", __FILE__ ,  __LINE__)


/* #define D_LOOP_MODE 1
        already tried, but we are not able to natively post events from the window's thread,
        we would need the already running window's BLooper to become a Java thread, TEP  
*/
#if 0
extern "C" LRESULT WINAPI WndProc( HWND, UINT, WPARAM, LPARAM);
#endif

#define TCHAR   char

#define AWT_EXPORT              extern "C"

/*******************************************************************************
* image handling structures
*/

typedef struct _AlphaImage {       /* storage for full alpha channel images */
        unsigned char *buf;
        int           width, height;
} AlphaImage;


typedef struct _Image {
        int               trans;          /* transparent index */
        int               left, top;
        int           width, height;  /* we need this in case we are a pixmap */
        
        BBitmap *     bitmap;

#if TODO                
        int           latency;        /* between image flips, for "gif-movies" */
        int                       frame;
        struct _Image *next;          /* next movie-frame */
#endif
} Image;


/*******************************************************************************
* structure to store guessed and computed Frame/Dialog insets (titlebar, borders)
*/

typedef struct _DecoInset {
        int           left;
        int           top;
        int           right;
        int           bottom;
        char          guess;
} DecoInset;           


/*******************************************************************************
* this is the master AWT structure (singleton object), glueing it all together
*/

class EventQueue;

typedef struct _Toolkit {
/* !!!
        HDC               display;
*/
        char          *buf;
        unsigned int  nBuf;
        
        BCursor *     cursors[14];
        
        DecoInset     frameInsets;
        DecoInset     dialogInsets;
        
        KWnd          **windows;
        int           nWindows;
        
        KWnd          *lastWnd;
        BWindow       *lastNativeWnd;
        
        jobject           jEvt;
        EventQueue    *eventQueue;       
/* !!!
        int                     dspTid;

        HWND          wakeUp;
*/
} Toolkit;


/*******************************************************************************
* font struct
*/
/* !!!
typedef struct _Font {
        HFONT fnt;
        TEXTMETRIC fm;
} Font;
**/
typedef BFont   Font;

/*******************************************************************************
* global data def/decl
*/

#ifdef MAIN
Toolkit   XTk;
Toolkit   *X = &XTk;
jclass    Tlk;
JNIEnv    *JniEnv;
#else
extern Toolkit  *X;
extern jclass   Tlk;
extern JNIEnv   *JniEnv;
#endif


/*****************************************************************************************
* heap wrapper macros
*/

#undef malloc
#undef calloc
#undef free

static inline void* _awt_malloc_wrapper ( size_t size )
{
        void *adr = KMALLOC( size);
        DBG( AWT_MEM, ("malloc: %ld  -> %p\n", size, adr));
        return adr;
}

static inline void* _awt_calloc_wrapper ( int n, size_t size )
{
        void *adr = KCALLOC( n, size);
        DBG( AWT_MEM, ("calloc: %d,%ld  -> %p\n", n, size, adr));
        return adr;
}

/* !!! KFREE on non-lvalues does not support DEBUG
static inline void _awt_free_wrapper ( void* adr )
{
        DBG( awt_mem, ("free: %p\n", adr));
        KFREE( adr);
}
*/

#define AWT_MALLOC(_n) \
_awt_malloc_wrapper( _n)

#define AWT_CALLOC(_n,_sz) \
_awt_calloc_wrapper( _n, _sz)

/*
#define AWT_FREE(_adr) \
_awt_free_wrapper( _adr);
*/
#define AWT_FREE(_adr)          jfree(_adr)     /* !!! to fix DEBUG problem in jmalloc.h */

static inline void* getBuffer ( Toolkit* X, unsigned int nBytes ) {
        if ( nBytes > X->nBuf ) {
                if ( X->buf )
                        AWT_FREE( X->buf);
                X->buf  = (TCHAR*)AWT_MALLOC( nBytes * sizeof(TCHAR));
                X->nBuf = nBytes;
        }
        return X->buf;
}

static inline char* java2CString ( JNIEnv *env, Toolkit* X, jstring jstr ) {
  jboolean isCopy;
  register unsigned i;
  unsigned      n = env->GetStringLength( jstr);
  const jchar    *jc = env->GetStringChars( jstr, &isCopy);
  char         *c;

  if ( n >= X->nBuf ) {
        if ( X->buf )
          AWT_FREE( X->buf);
        X->buf = (TCHAR*) AWT_MALLOC( n+1);
        X->nBuf = n+1;
  }

  for ( i=0, c=(char*)X->buf; i<n; i++ ) *c++ = (char) jc[i];
  *c = 0;
  env->ReleaseStringChars( jstr, jc);

  return (char*)X->buf;
}

static inline char* jbyte2CString ( Toolkit* X, jbyte* jb, int len ) {
        register int i;
        
        getBuffer( X, len+1);
        
        for ( i=0; i<len; i++ ) {
                X->buf[i] = (TCHAR) jb[i];
        }
        X->buf[i] = 0;
        return (X->buf);
}


static inline char* jchar2CString ( Toolkit* X, jchar* jc, int len ) {
        register int i;
        
        getBuffer( X, len+1);
        
        for ( i=0; i<len; i++ ) {
                X->buf[i] = (TCHAR) jc[i];
        }
        X->buf[i] = 0;
        return (X->buf);
}

#if REMOVE_WHEN_READY
//---------------------------------------------------
static inline TCHAR* java2WinString ( JNIEnv *env, Toolkit* X, jstring jstr ) {
        jboolean isCopy;
        UINT i, n;
        const jchar *jc;
        
        if ( ! jstr) {
                X->buf[0] = 0;
                return X->buf;
        }
        
        n = env->GetStringLength( jstr);
    jc = env->GetStringChars( jstr, &isCopy);
        
        getBuffer( X, n+1);
        
        for ( i=0; i<n; i++ ) X->buf[i] = (TCHAR) jc[i];
    X->buf[i] = 0;
    env->ReleaseStringChars( jstr, jc);
        
    return X->buf;
}

static inline TCHAR* jbyte2WinString ( Toolkit* X, jbyte* jb, int len ) {
        register int i;
        
        getBuffer( X, len+1);
        
        for ( i=0; i<len; i++ ) {
                X->buf[i] = (TCHAR) jb[i];
        }
        X->buf[i] = 0;
        return (X->buf);
}

//---------------------------------------------------
#endif


static inline char* CString2UTF(Toolkit* X, TCHAR* str, int len) {
#if !defined(_UNICODE)
        return (str);
#else
        register int i;
        char* buf;
        
        getBuffer(X, len+1);
        buf = (char*)X->buf;
        
        for (i = 0; i < len; i++) {
                buf[i] = (char)str[i];
        }
        buf[i] = 0;
        return (buf);
#endif
}

static inline BCursor * getCursor ( jint jCursor )
{
UNIMPLEMENTED((
        if (jCursor == 2) {
                return B_CURSOR_I_BEAM;                         /*  2: TEXT_CURSOR        */
        } else {
                return B_CURSOR_SYSTEM_DEFAULT;
        }
));
        return NULL;
}

#if 0
/* !!! DO IT */
static inline KWnd* getWnd ( HWND hwnd )
{
        if ( hwnd != X->lastHwnd ){
                X->lastWnd = (KWnd*)GetWindowLong( hwnd, GWL_USERDATA);
                X->lastHwnd = hwnd;
        }

        return X->lastWnd;
}

static inline void setWnd ( HWND hwnd, KWnd* wnd )
{
        X->lastWnd = wnd;
        X->lastHwnd = hwnd;

    SetWindowLong( hwnd, GWL_USERDATA, (long)wnd);
}
#endif

extern "C" {
        jlong Java_java_awt_Toolkit_clrBright ( JNIEnv* env, jclass clazz, jint rgb );
        jlong Java_java_awt_Toolkit_clrDark ( JNIEnv* env, jclass clazz, jint rgb );
}

#define JRGB(_r,_g,_b,_a)   (_a<<24 | _r<<16 | _g<<8 | _b)      /* Java RGB color + alpha */
#define NRGB(_r,_g,_b,_a)   (_a<<24 | _b<<16 | _g<<8 | _r)      /* BeOS RGB color + alpha */
#define GetAValue(_rgb) ((_rgb & 0xff000000) >> 24)
#define GetRValue(_rgb) ((_rgb & 0xff0000) >> 16)
#define GetGValue(_rgb) ((_rgb & 0x00ff00) >> 8)
#define GetBValue(_rgb) (_rgb & 0x0000ff)

#define RGBCAST(_jint)  (*(rgb_color *)&_jint)  

static inline void
rgbValues ( Toolkit* X, unsigned long pixel, int* r, int* g, int* b )
{
        *r = GetRValue( pixel);
        *g = GetGValue( pixel);
        *b = GetBValue( pixel);
}

static inline rgb_color
ColorJ2N(int jrgb) {
        rgb_color nrgb = { GetRValue( jrgb), GetGValue( jrgb), GetBValue( jrgb), GetAValue( jrgb) };
        return ( nrgb);
}

static inline int
ColorN2J(rgb_color nrgb) {
        // !!! ALPHA IS NOT PRESERVED
        return ( JRGB( nrgb.red, nrgb.green, nrgb.blue, nrgb.alpha ));
}

/* !!! where is it used ?
static inline int
ColorN(int nrgb) {
        return (nrgb);
}
*/


/*****************************************************************************************
* image functions
*/

Image* createImage ( int width, int height);
Image* readImage( BPositionIO * stream);
void createMaskImage( Toolkit* X, Image* img);
void createClrImage ( Toolkit* X, Image* img);
void freeImage( Toolkit* X, Image* img);


/*****************************************************************************************
* clipboard functions
*/

jobject selectionClear ( JNIEnv* env, Toolkit* X );
jobject selectionRequest ( JNIEnv* env, Toolkit* X );


/*****************************************************************************************
 * file io wrapper macros (for image production)
 */

#define AWT_OPEN(_file)               open(_file, O_RDONLY|O_BINARY)
#define AWT_REWIND(_fd)               lseek(_fd, 0, SEEK_SET)
#define AWT_SETPOS(_fd,_off)          lseek(_fd, _off, SEEK_CUR)
#define AWT_READ(_fd,_buf,_count)     read(_fd,_buf,_count)
#define AWT_CLOSE(_fd)                close(_fd)

#endif

Generated at Sat Jun 10 12:37:10 2000 by doxygen 1.0.0 written by Dimitri van Heesch, © 1997-1999