summaryrefslogtreecommitdiffstats
path: root/macosx/tkMacOSXBitmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'macosx/tkMacOSXBitmap.c')
-rw-r--r--macosx/tkMacOSXBitmap.c270
1 files changed, 140 insertions, 130 deletions
diff --git a/macosx/tkMacOSXBitmap.c b/macosx/tkMacOSXBitmap.c
index 369759e..9735d98 100644
--- a/macosx/tkMacOSXBitmap.c
+++ b/macosx/tkMacOSXBitmap.c
@@ -1,34 +1,36 @@
-/*
+/*
* tkMacOSXBitmap.c --
*
- * This file handles the implementation of native bitmaps.
+ * This file handles the implementation of native bitmaps.
*
* Copyright (c) 1996-1997 Sun Microsystems, Inc.
* Copyright 2001, Apple Computer, Inc.
*
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkMacOSXBitmap.c,v 1.4 2006/03/24 14:58:01 das Exp $
+ * RCS: @(#) $Id: tkMacOSXBitmap.c,v 1.5 2007/04/13 14:51:17 dkf Exp $
*/
#include "tkMacOSXInt.h"
/*
- * Depending on the resource type there are different ways to
- * draw native icons.
+ * Depending on the resource type there are different ways to draw native
+ * icons.
*/
-#define TYPE1 0 /* Family icon suite. */
-#define TYPE2 1 /* ICON resource. */
-#define TYPE3 2 /* cicn resource. */
+
+#define TYPE1 0 /* Family icon suite. */
+#define TYPE2 1 /* ICON resource. */
+#define TYPE3 2 /* cicn resource. */
/*
- * This data structure describes the id and type of a given icon.
- * It is used as the source for native icons.
+ * This data structure describes the id and type of a given icon. It is used
+ * as the source for native icons.
*/
+
typedef struct {
- int id; /* Resource Id for Icon. */
- long int type; /* Type of icon. */
+ int id; /* Resource Id for Icon. */
+ long int type; /* Type of icon. */
} NativeIcon;
/*
@@ -36,35 +38,35 @@ typedef struct {
*/
typedef struct {
- char *name; /* Name of icon. */
- long int type; /* Type of icon. */
- int id; /* Id of icon. */
- int size; /* Size of icon. */
+ char *name; /* Name of icon. */
+ long int type; /* Type of icon. */
+ int id; /* Id of icon. */
+ int size; /* Size of icon. */
} BuiltInIcon;
/*
- * This array mapps a string name to the supported builtin icons
- * on the Macintosh.
+ * This array mapps a string name to the supported builtin icons on the
+ * Macintosh.
*/
static BuiltInIcon builtInIcons[] = {
- {"document", TYPE1, kGenericDocumentIconResource, 32},
- {"stationery", TYPE1, kGenericStationeryIconResource, 32},
- {"edition", TYPE1, kGenericEditionFileIconResource, 32},
- {"application", TYPE1, kGenericApplicationIconResource, 32},
- {"accessory", TYPE1, kGenericDeskAccessoryIconResource, 32},
- {"folder", TYPE1, kGenericFolderIconResource, 32},
- {"pfolder", TYPE1, kPrivateFolderIconResource, 32},
- {"trash", TYPE1, kTrashIconResource, 32},
- {"floppy", TYPE1, kFloppyIconResource, 32},
- {"ramdisk", TYPE1, kGenericRAMDiskIconResource, 32},
- {"cdrom", TYPE1, kGenericCDROMIconResource, 32},
- {"preferences", TYPE1, kGenericPreferencesIconResource, 32},
- {"querydoc", TYPE1, kGenericQueryDocumentIconResource, 32},
- {"stop", TYPE2, kStopIcon, 32},
- {"note", TYPE2, kNoteIcon, 32},
- {"caution", TYPE2, kCautionIcon, 32},
- {(char *) NULL, 0, 0, 0}
+ {"document", TYPE1, kGenericDocumentIconResource, 32},
+ {"stationery", TYPE1, kGenericStationeryIconResource, 32},
+ {"edition", TYPE1, kGenericEditionFileIconResource, 32},
+ {"application", TYPE1, kGenericApplicationIconResource, 32},
+ {"accessory", TYPE1, kGenericDeskAccessoryIconResource, 32},
+ {"folder", TYPE1, kGenericFolderIconResource, 32},
+ {"pfolder", TYPE1, kPrivateFolderIconResource, 32},
+ {"trash", TYPE1, kTrashIconResource, 32},
+ {"floppy", TYPE1, kFloppyIconResource, 32},
+ {"ramdisk", TYPE1, kGenericRAMDiskIconResource, 32},
+ {"cdrom", TYPE1, kGenericCDROMIconResource, 32},
+ {"preferences", TYPE1, kGenericPreferencesIconResource, 32},
+ {"querydoc", TYPE1, kGenericQueryDocumentIconResource, 32},
+ {"stop", TYPE2, kStopIcon, 32},
+ {"note", TYPE2, kNoteIcon, 32},
+ {"caution", TYPE2, kCautionIcon, 32},
+ {(char *) NULL, 0, 0, 0}
};
/*
@@ -72,46 +74,46 @@ static BuiltInIcon builtInIcons[] = {
*
* TkpDefineNativeBitmaps --
*
- * Add native bitmaps.
+ * Add native bitmaps.
*
* Results:
- * A standard Tcl result. If an error occurs then TCL_ERROR is
- * returned and a message is left in the interp's result.
+ * A standard Tcl result. If an error occurs then TCL_ERROR is returned
+ * and a message is left in the interp's result.
*
* Side effects:
- * "Name" is entered into the bitmap table and may be used from
- * here on to refer to the given bitmap.
+ * "Name" is entered into the bitmap table and may be used from here on
+ * to refer to the given bitmap.
*
*----------------------------------------------------------------------
*/
void
-TkpDefineNativeBitmaps()
+TkpDefineNativeBitmaps(void)
{
- int new;
- Tcl_HashEntry *predefHashPtr;
- TkPredefBitmap *predefPtr;
- CONST char * name;
+ Tcl_HashTable *tablePtr = TkGetBitmapPredefTable();
BuiltInIcon *builtInPtr;
- NativeIcon *nativeIconPtr;
- Tcl_HashTable *tablePtr;
-
- for (builtInPtr = builtInIcons; builtInPtr->name != NULL; builtInPtr++) {
- name = Tk_GetUid(builtInPtr->name);
- tablePtr = TkGetBitmapPredefTable();
- predefHashPtr = Tcl_CreateHashEntry(tablePtr, name, &new);
- if (!new) {
- continue;
- }
- predefPtr = (TkPredefBitmap *) ckalloc(sizeof(TkPredefBitmap));
- nativeIconPtr = (NativeIcon *) ckalloc(sizeof(NativeIcon));
- nativeIconPtr->id = builtInPtr->id;
- nativeIconPtr->type = builtInPtr->type;
- predefPtr->source = (char *) nativeIconPtr;
- predefPtr->width = builtInPtr->size;
- predefPtr->height = builtInPtr->size;
- predefPtr->native = 1;
- Tcl_SetHashValue(predefHashPtr, predefPtr);
+
+ for (builtInPtr=builtInIcons ; builtInPtr->name!=NULL ; builtInPtr++) {
+ Tcl_HashEntry *predefHashPtr;
+ CONST char *name;
+ int isNew;
+
+ name = Tk_GetUid(builtInPtr->name);
+ predefHashPtr = Tcl_CreateHashEntry(tablePtr, name, &isNew);
+ if (isNew) {
+ TkPredefBitmap *predefPtr = (TkPredefBitmap *)
+ ckalloc(sizeof(TkPredefBitmap));
+ NativeIcon *nativeIconPtr = (NativeIcon *)
+ ckalloc(sizeof(NativeIcon));
+
+ nativeIconPtr->id = builtInPtr->id;
+ nativeIconPtr->type = builtInPtr->type;
+ predefPtr->source = (char *) nativeIconPtr;
+ predefPtr->width = builtInPtr->size;
+ predefPtr->height = builtInPtr->size;
+ predefPtr->native = 1;
+ Tcl_SetHashValue(predefHashPtr, predefPtr);
+ }
}
}
@@ -120,15 +122,15 @@ TkpDefineNativeBitmaps()
*
* TkpCreateNativeBitmap --
*
- * Add native bitmaps.
+ * Add native bitmaps.
*
* Results:
- * A standard Tcl result. If an error occurs then TCL_ERROR is
- * returned and a message is left in the interp's result.
+ * A standard Tcl result. If an error occurs then TCL_ERROR is returned
+ * and a message is left in the interp's result.
*
* Side effects:
- * "Name" is entered into the bitmap table and may be used from
- * here on to refer to the given bitmap.
+ * "Name" is entered into the bitmap table and may be used from here on
+ * to refer to the given bitmap.
*
*----------------------------------------------------------------------
*/
@@ -136,16 +138,15 @@ TkpDefineNativeBitmaps()
Pixmap
TkpCreateNativeBitmap(
Display *display,
- CONST char * source) /* Info about the icon to build. */
+ CONST char *source) /* Info about the icon to build. */
{
Pixmap pix;
GWorldPtr destPort;
Rect destRect;
- Handle icon;
CGrafPtr saveWorld;
GDHandle saveDevice;
NativeIcon *nativeIconPtr;
-
+
pix = Tk_GetPixmap(display, None, 32, 32, 0);
destPort = TkMacOSXGetDrawablePort(pix);
@@ -155,20 +156,21 @@ TkpCreateNativeBitmap(
nativeIconPtr = (NativeIcon *) source;
SetRect(&destRect, 0, 0, 32, 32);
if (nativeIconPtr->type == TYPE1) {
- RGBColor white = {0xFFFF, 0xFFFF, 0xFFFF};
+ RGBColor white = {0xFFFF, 0xFFFF, 0xFFFF};
- RGBForeColor(&white);
- PaintRect(&destRect);
- PlotIconID(&destRect, atAbsoluteCenter, ttNone, nativeIconPtr->id);
+ RGBForeColor(&white);
+ PaintRect(&destRect);
+ PlotIconID(&destRect, atAbsoluteCenter, ttNone, nativeIconPtr->id);
} else if (nativeIconPtr->type == TYPE2) {
- icon = GetIcon(nativeIconPtr->id);
- if (icon != NULL) {
- RGBColor black = {0, 0, 0};
-
- RGBForeColor(&black);
- PlotIcon(&destRect, icon);
- ReleaseResource(icon);
- }
+ Handle icon = GetIcon(nativeIconPtr->id);
+
+ if (icon != NULL) {
+ RGBColor black = {0, 0, 0};
+
+ RGBForeColor(&black);
+ PlotIcon(&destRect, icon);
+ ReleaseResource(icon);
+ }
}
SetGWorld(saveWorld, saveDevice);
@@ -180,24 +182,24 @@ TkpCreateNativeBitmap(
*
* TkpGetNativeAppBitmap --
*
- * Add native bitmaps.
+ * Add native bitmaps.
*
* Results:
- * A standard Tcl result. If an error occurs then TCL_ERROR is
- * returned and a message is left in the interp's result.
+ * A standard Tcl result. If an error occurs then TCL_ERROR is returned
+ * and a message is left in the interp's result.
*
* Side effects:
- * "Name" is entered into the bitmap table and may be used from
- * here on to refer to the given bitmap.
+ * "Name" is entered into the bitmap table and may be used from here on
+ * to refer to the given bitmap.
*
*----------------------------------------------------------------------
*/
Pixmap
TkpGetNativeAppBitmap(
- Display *display, /* The display. */
- CONST char *name, /* The name of the bitmap. */
- int *width, /* The width & height of the bitmap. */
+ Display *display, /* The display. */
+ CONST char *name, /* The name of the bitmap. */
+ int *width, /* The width & height of the bitmap. */
int *height)
{
Pixmap pix;
@@ -208,66 +210,74 @@ TkpGetNativeAppBitmap(
Handle resource;
int type = -1, destWrote;
Str255 nativeName;
-
+
/*
* macRoman is the encoding that the resource fork uses.
*/
Tcl_UtfToExternal(NULL, Tcl_GetEncoding(NULL, "macRoman"), name,
- strlen(name), 0, NULL,
- (char *) &nativeName[1],
- 255, NULL, &destWrote, NULL); /* Internalize native */
+ strlen(name), 0, NULL, (char *) &nativeName[1], 255, NULL,
+ &destWrote, NULL); /* Internalize native */
nativeName[0] = destWrote;
resource = GetNamedResource('cicn', nativeName);
if (resource != NULL) {
- type = TYPE3;
+ type = TYPE3;
} else {
- resource = GetNamedResource('ICON', nativeName);
- if (resource != NULL) {
- type = TYPE2;
- }
+ resource = GetNamedResource('ICON', nativeName);
+ if (resource != NULL) {
+ type = TYPE2;
+ }
}
-
+
if (resource == NULL) {
- return (Pixmap) NULL;
+ return (Pixmap) NULL;
}
-
+
pix = Tk_GetPixmap(display, None, 32, 32, 0);
destPort = TkMacOSXGetDrawablePort(pix);
GetGWorld(&saveWorld, &saveDevice);
SetGWorld(destPort, NULL);
-
+
SetRect(&destRect, 0, 0, 32, 32);
if (type == TYPE2) {
- RGBColor black = {0, 0, 0};
-
- RGBForeColor(&black);
- PlotIcon(&destRect, resource);
- ReleaseResource(resource);
+ RGBColor black = {0, 0, 0};
+
+ RGBForeColor(&black);
+ PlotIcon(&destRect, resource);
+ ReleaseResource(resource);
} else if (type == TYPE3) {
- RGBColor white = {0xFFFF, 0xFFFF, 0xFFFF};
- short id;
- ResType theType;
- Str255 dummy;
-
- /*
- * We need to first paint the background white. Also, for
- * some reason we *must* use GetCIcon instead of GetNamedResource
- * for PlotCIcon to work - so we use GetResInfo to get the id.
- */
- RGBForeColor(&white);
- PaintRect(&destRect);
- GetResInfo(resource, &id, &theType, dummy);
- ReleaseResource(resource);
- resource = (Handle) GetCIcon(id);
- PlotCIcon(&destRect, (CIconHandle) resource);
- DisposeCIcon((CIconHandle) resource);
+ RGBColor white = {0xFFFF, 0xFFFF, 0xFFFF};
+ short id;
+ ResType theType;
+ Str255 dummy;
+
+ /*
+ * We need to first paint the background white. Also, for some reason
+ * we *must* use GetCIcon instead of GetNamedResource for PlotCIcon to
+ * work - so we use GetResInfo to get the id.
+ */
+
+ RGBForeColor(&white);
+ PaintRect(&destRect);
+ GetResInfo(resource, &id, &theType, dummy);
+ ReleaseResource(resource);
+ resource = (Handle) GetCIcon(id);
+ PlotCIcon(&destRect, (CIconHandle) resource);
+ DisposeCIcon((CIconHandle) resource);
}
-
+
*width = 32;
*height = 32;
SetGWorld(saveWorld, saveDevice);
return pix;
}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 4
+ * fill-column: 78
+ * End:
+ */