emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to src/nsterm.h


From: Adrian Robert
Subject: [Emacs-diffs] Changes to src/nsterm.h
Date: Tue, 15 Jul 2008 18:16:07 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Adrian Robert <arobert> 08/07/15 18:15:19

Index: src/nsterm.h
===================================================================
RCS file: src/nsterm.h
diff -N src/nsterm.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ src/nsterm.h        15 Jul 2008 18:15:16 -0000      1.1
@@ -0,0 +1,827 @@
+/* Definitions and headers for communication with NeXT/Open/GNUstep API.
+   Copyright (C) 1989, 1993, 2005, 2008 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs 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 3, or (at your option)
+any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY 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 GNU Emacs; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+#include "dispextern.h"
+#include "frame.h"
+#include "character.h"
+#include "font.h"
+
+#ifdef HAVE_NS
+
+#ifdef __OBJC__
+
+/* ==========================================================================
+
+   The Emacs application
+
+   ========================================================================== 
*/
+
+/* We override sendEvent: as a means to stop/start the event loop */
address@hidden EmacsApp : NSApplication
+{
+}
+- (void)sendEvent: (NSEvent *)theEvent;
+- (void)showPreferencesWindow: (id)sender;
address@hidden
+
+
+/* ==========================================================================
+
+   The main Emacs view
+
+   ========================================================================== 
*/
+
address@hidden EmacsToolbar;
+
address@hidden EmacsView : NSView <NSTextInput>
+   {
+   char *old_title;
+   BOOL windowClosing;
+   NSString *workingText;
+   BOOL processingCompose;
address@hidden
+   struct frame *emacsframe;
+   int rows, cols;
+   int scrollbarsNeedingUpdate;
+   EmacsToolbar *toolbar;
+   }
+
+/* AppKit-side interface */
+- menuDown: sender;
+- toolbarClicked: (id)item;
+- toggleToolbar: (id)sender;
+- (void)keyDown: (NSEvent *)theEvent;
+- (void)mouseDown: (NSEvent *)theEvent;
+- (void)mouseUp: (NSEvent *)theEvent;
+- setMiniwindowImage: (BOOL)setMini;
+
+/* Emacs-side interface */
+- initFrameFromEmacs: (struct frame *) f;
+- (void) setRows: (int) r andColumns: (int) c;
+- (void) setWindowClosing: (BOOL)closing;
+- (EmacsToolbar *) toolbar;
+- (void) deleteWorkingText;
address@hidden
+
+
+/* Small utility used for processing resize events under Cocoa. */
address@hidden EmacsWindow : NSWindow
+{
+  NSPoint grabOffset;
+}
address@hidden
+
+
+/* ==========================================================================
+
+   The main menu implementation
+
+   ========================================================================== 
*/
+
address@hidden EmacsMenu : NSMenu
+{
+  struct frame *frame;
+  unsigned long keyEquivModMask;
+}
+
+- initWithTitle: (NSString *)title frame: (struct frame *)f;
+- (void)setFrame: (struct frame *)f;
+- (void)menuNeedsUpdate: (NSMenu *)menu; /* (delegate method) */
+- (NSString *)parseKeyEquiv: (char *)key;
+- (id <NSMenuItem>)addItemWithWidgetValue: (void *)wvptr;
+- (void)fillWithWidgetValue: (void *)wvptr;
+- (EmacsMenu *)addSubmenuWithTitle: (char *)title forFrame: (struct frame *)f;
+- (void) clear;
+- (Lisp_Object)runMenuAt: (NSPoint)p forFrame: (struct frame *)f
+                 keymaps: (int)keymaps;
address@hidden
+
+
+/* ==========================================================================
+
+   Toolbar
+
+   ========================================================================== 
*/
+
address@hidden EmacsImage;
+
address@hidden EmacsToolbar : NSToolbar
+   {
+     EmacsView *emacsView;
+     NSMutableDictionary *identifierToItem;
+     NSMutableArray *activeIdentifiers;
+     NSArray *prevIdentifiers;
+     unsigned long enablement, prevEnablement;
+   }
+- initForView: (EmacsView *)view withIdentifier: (NSString *)identifier;
+- (void) clearActive;
+- (BOOL) changed;
+- (void) addDisplayItemWithImage: (EmacsImage *)img idx: (int)idx
+                        helpText: (char *)help
+                         enabled: (BOOL)enabled;
+/* delegate methods */
+- (NSToolbarItem *)toolbar: (NSToolbar *)toolbar
+     itemForItemIdentifier: (NSString *)itemIdentifier
+ willBeInsertedIntoToolbar: (BOOL)flag;
+- (NSArray *)toolbarDefaultItemIdentifiers: (NSToolbar *)toolbar;
+- (NSArray *)toolbarAllowedItemIdentifiers: (NSToolbar *)toolbar;
address@hidden
+
+
+/* ==========================================================================
+
+   Message / question windows
+
+   ========================================================================== 
*/
+
address@hidden EmacsDialogPanel : NSPanel
+   {
+   NSTextField *command;
+   NSTextField *title;
+   NSMatrix *matrix;
+   int rows, cols;
+   }
+- initFromContents: (Lisp_Object)menu isQuestion: (BOOL)isQ;
+- addButton: (char *)str value: (Lisp_Object)val row: (int)row;
+- addString: (char *)str row: (int)row;
+- addSplit;
+- (Lisp_Object)runDialogAt: (NSPoint)p;
address@hidden
+
address@hidden EmacsTooltip : NSObject
+  {
+    NSWindow *win;
+    NSTextField *textField;
+    NSTimer *timer;
+  }
+- init;
+- (void) setText: (char *)text;
+- (void) showAtX: (int)x Y: (int)y for: (int)seconds;
+- (void) hide;
+- (BOOL) isActive;
+- (NSRect) frame;
address@hidden
+
+
+/* ==========================================================================
+
+   File open/save panels
+   This and next override methods to work around OS X behavior of
+   restarting application loop when user dismisses panel.
+
+   ========================================================================== 
*/
+
address@hidden EmacsSavePanel : NSSavePanel
+{
+}
address@hidden
address@hidden EmacsOpenPanel : NSOpenPanel
+{
+}
address@hidden
+
address@hidden EmacsFileDelegate : NSObject
+{
+}
+- (BOOL)panel: (id)sender isValidFilename: (NSString *)filename;
+- (BOOL)panel: (id)sender shouldShowFilename: (NSString *)filename;
+- (NSString *)panel: (id)sender userEnteredFilename: (NSString *)filename
+          confirmed: (BOOL)okFlag;
address@hidden
+
+
+/* ==========================================================================
+
+   Images and stippling
+
+   ========================================================================== 
*/
+
address@hidden EmacsImage : NSImage
+{
+  id imageListNext;
+  int refCount;
+  NSBitmapImageRep *bmRep; /* used for accessing pixel data */
+  unsigned char *pixmapData[5]; /* shortcut to access pixel data */
+  BOOL onTiger;
+  NSColor *stippleMask;
+}
++ allocInitFromFile: (Lisp_Object)file;
+- reference;
+- imageListSetNext: (id)arg;
+- imageListNext;
+- (void)dealloc;
+- initFromXBM: (unsigned char *)bits width: (int)w height: (int)h
+         flip: (BOOL)flip;
+- initFromSkipXBM: (unsigned char *)bits width: (int)w height: (int)h
+             flip: (BOOL)flip length: (int)length;
+- setXBMColor: (NSColor *)color;
+- initForXPMWithDepth: (int)depth width: (int)width height: (int)height;
+- (void)setPixmapData;
+- (unsigned long)getPixelAtX: (int)x Y: (int)y;
+- (void)setPixelAtX: (int)x Y: (int)y toRed: (unsigned char)r
+               green: (unsigned char)g blue: (unsigned char)b
+              alpha:(unsigned char)a;
+- (void)setAlphaAtX: (int)x Y: (int)y to: (unsigned char)a;
+- (NSColor *)stippleMask;
address@hidden
+
+
+/* ==========================================================================
+
+   Scrollbars
+
+   ========================================================================== 
*/
+
address@hidden EmacsScroller : NSScroller
+  {
+   Lisp_Object win;
+   struct frame *frame;
+   NSResponder *prevResponder;
+
+   /* offset to the bottom of knob of last mouse down */
+   float last_mouse_offset;
+   float min_portion;
+   int pixel_height;
+   int last_hit_part;
+
+   BOOL condemned;
+
+   /* optimize against excessive positioning calls generated by emacs */
+   int em_position;
+   int em_portion;
+   int em_whole;
+   }
+
+- initFrame: (NSRect )r window: (Lisp_Object)win;
+- (void)setFrame: (NSRect)r;
+- (void)dealloc;
+
+- setPosition: (int) position portion: (int) portion whole: (int) whole;
+- (int) checkSamePosition: (int)position portion: (int)portion
+                    whole: (int)whole;
+- (void) getMouseMotionPart: (int *)part window: (Lisp_Object *)window
+                          x: (Lisp_Object *)x y: ( Lisp_Object *)y;
+- (void) sendScrollEventAtLoc: (float)loc fromEvent: (NSEvent *)e;
+- repeatScroll: (NSTimer *)sender;
+- condemn;
+- reprieve;
+- judge;
address@hidden
+
+
+/* ==========================================================================
+
+   Rendering on Panther and above
+
+   ========================================================================== 
*/
+
+#ifdef NS_IMPL_COCOA
+/* rendering util */
address@hidden EmacsGlyphStorage : NSObject <NSGlyphStorage>
+{
address@hidden
+  NSAttributedString *attrStr;
+  NSMutableDictionary *dict;
+  CGGlyph *cglyphs;
+  unsigned long maxChar, maxGlyph;
+  long i, len;
+}
+- initWithCapacity: (unsigned long) c;
+- (void) setString: (NSString *)str font: (NSFont *)font;
address@hidden
+#endif /* NS_IMPL_COCOA */
+
+
+/* ==========================================================================
+
+   Running the preferences window
+
+   ========================================================================== 
*/
+
address@hidden EmacsPrefsController : NSObject
+{
+    struct frame *frame;
+    IBOutlet NSWindow *prefsWindow;
+    IBOutlet NSPopUpButton *alternateModMenu;
+    IBOutlet NSPopUpButton *commandModMenu;
+#ifdef NS_IMPL_COCOA
+    IBOutlet NSPopUpButton *controlModMenu;
+    IBOutlet NSPopUpButton *functionModMenu;
+#endif
+    IBOutlet NSMatrix *cursorTypeMatrix;
+    IBOutlet NSSlider *cursorBlinkSlider;
+    IBOutlet NSSlider *expandSpaceSlider;
+#ifdef NS_IMPL_COCOA
+    IBOutlet NSButton *smoothFontsCheck;
+    IBOutlet NSButton *useQuickdrawCheck;
+    IBOutlet NSButton *useSysHiliteCheck;
+    BOOL prevUseHighlightColor;
+#endif
+    float prevExpandSpace;
+    float prevBlinkRate;
+}
+- (IBAction)cancel: (id)sender;
+- (IBAction)ok: (id)sender;
+- (IBAction)resetToDefaults: (id)sender;
+- (IBAction)runHelp: (id)sender;
+- (IBAction)setColors: (id)sender;
+- (IBAction)setDefaultFont: (id)sender;
+
+- (void) showForFrame: (struct frame *)f;
+- (void) setPanelFromValues;
+- (void) setValuesFromPanel;
address@hidden
+
+extern NSArray *ns_send_types, *ns_return_types;
+extern EmacsMenu *mainMenu, *svcsMenu;
+
+/* Apple removed the declaration, but kept the implementation */
+#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MIN_REQUIRED >= 
MAC_OS_X_VERSION_10_4
address@hidden NSApplication (EmacsApp)
+- (void)setAppleMenu: (NSMenu *)menu;
address@hidden
+#endif
+
+#endif  /* __OBJC__ */
+
+
+
+/* ==========================================================================
+
+   Non-OO stuff
+
+   ========================================================================== 
*/
+
+enum ns_cursor_types
+{
+   no_highlight =0,
+   filled_box,
+   hollow_box,
+   underscore,
+   bar
+};
+
+
+/* could use list to store these, but rest of emacs has a big infrastructure
+   for managing a table of bitmap "records" */
+struct ns_bitmap_record
+{
+#ifdef __OBJC__
+  EmacsImage *img;
+#else
+  void *img;
+#endif
+  char *file;
+  int refcount;
+  int height, width, depth;
+};
+
+/* this to map between emacs color indices and NSColor objects */
+struct ns_color_table
+{
+  unsigned int size;
+  unsigned int avail;
+#ifdef __OBJC__
+  NSColor **colors;
+  NSMutableSet *empty_indices;
+#else
+  void **items;
+  void *availIndices;
+#endif
+};
+#define NS_COLOR_CAPACITY 256
+
+#define RGB_TO_ULONG(r, g, b) (((r) << 16) | ((g) << 8) | (b))
+#define ARGB_TO_ULONG(a, r, g, b) (((a) << 24) | ((r) << 16) | ((g) << 8) | 
(b))
+
+#define ALPHA_FROM_ULONG(color) ((color) >> 24)
+#define RED_FROM_ULONG(color) (((color) >> 16) & 0xff)
+#define GREEN_FROM_ULONG(color) (((color) >> 8) & 0xff)
+#define BLUE_FROM_ULONG(color) ((color) & 0xff)
+
+/* Do not change `* 0x101' in the following lines to `<< 8'.  If
+   changed, image masks in 1-bit depth will not work. */
+#define RED16_FROM_ULONG(color) (RED_FROM_ULONG(color) * 0x101)
+#define GREEN16_FROM_ULONG(color) (GREEN_FROM_ULONG(color) * 0x101)
+#define BLUE16_FROM_ULONG(color) (BLUE_FROM_ULONG(color) * 0x101)
+
+/* this extends font backend font */
+struct nsfont_info
+{
+  struct font font;
+
+  char *name;  /* postscript name, uniquely identifies on NS systems */
+  float width;  /* this and following metrics stored as float rather than int 
*/
+  float height;
+  float underpos;
+  float underwidth;
+  float size;
+#ifdef __OBJC__
+  NSFont *nsfont;
+  /* cgfont and synthItal are used only on OS X 10.3+ */
+#if defined (NS_IMPL_COCOA) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 
MAC_OS_X_VERSION_10_3)
+  CGFontRef cgfont;
+#else /* GNUstep or OS X < 10.3 */
+  void *cgfont;
+#endif
+#else /* ! OBJC */
+  void *nsfont;
+  void *cgfont;
+#endif
+  char bold, ital;  /* convenience flags */
+  char synthItal;
+  float voffset;  /* mean of ascender/descender offsets */
+  XCharStruct max_bounds; /* 23 */
+  /* we compute glyph codes and metrics on-demand in blocks of 256 indexed
+     by hibyte, lobyte */
+  unsigned short **glyphs; /* map unicode index to glyph */
+  struct font_metrics **metrics;
+};
+
+
+/* init'd in ns_initialize_display_info () */
+struct ns_display_info
+{
+  /* Chain of all ns_display_info structures.  */
+  struct ns_display_info *next;
+
+  /* The generic display parameters corresponding to this NS display. */
+  struct terminal *terminal;
+
+  /* This is a cons cell of the form (NAME . FONT-LIST-CACHE).
+     The same cons cell also appears in ns_display_name_list.  */
+  Lisp_Object name_list_element;
+
+  /* The number of fonts loaded. */
+  int n_fonts;
+
+  /* Minimum width over all characters in all fonts in font_table.  */
+  int smallest_char_width;
+
+  /* Minimum font height over all fonts in font_table.  */
+  int smallest_font_height;
+
+  struct kboard *kboard;
+
+  /*/23 */
+  struct ns_bitmap_record *bitmaps;
+  int bitmaps_size;
+  int bitmaps_last;
+
+  /* 23 */
+  struct image_cache *image_cache;
+
+  struct ns_color_table *color_table;
+
+  /* 23: Dimensions and DPI resolution of this screen */
+  int height, width;
+  double resx, resy;
+
+  /* 23: Mask of things that cause the mouse to be grabbed */
+  int grabbed;
+
+  /* 23 */
+  int n_planes;
+
+  /* 23 */
+  int color_p;
+
+  /* 23 */
+  Window root_window;
+
+  /* 23: Xism */
+  XrmDatabase xrdb;
+
+  /* 23: The cursor to use for vertical scroll bars. */
+  Cursor vertical_scroll_bar_cursor;
+
+  /* 23: most mouse face stuff moved in here (and reasonably so) */
+  int mouse_face_beg_row, mouse_face_beg_col;
+  int mouse_face_end_row, mouse_face_end_col;
+  int mouse_face_beg_x, mouse_face_beg_y;
+  int mouse_face_end_x, mouse_face_end_y;
+  int mouse_face_past_end;
+  Lisp_Object mouse_face_window;
+  int mouse_face_face_id;
+  int mouse_face_deferred_gc;
+  Lisp_Object mouse_face_overlay;
+  FRAME_PTR mouse_face_mouse_frame;
+  int mouse_face_mouse_x, mouse_face_mouse_y;
+  int mouse_face_defer;
+  int mouse_face_hidden;
+  int mouse_face_image_state;
+
+  /* these are general, but we redefine due to Xism */
+  struct frame *ns_highlight_frame;
+  struct frame *ns_focus_frame;
+#define x_highlight_frame ns_highlight_frame
+#define x_focus_frame ns_focus_frame
+};
+
+/* This is a chain of structures for all the NS displays currently in use.  */
+extern struct ns_display_info *ns_display_list;
+/* handle Xism */
+#define x_display_list ns_display_list
+
+extern Lisp_Object ns_display_name_list;
+extern struct ns_display_info *ns_display_info_for_name ();
+
+/* 23: PENDING: these functions (we defined in nsfns) are used in various
+       places, but no prototypes are provided */
+struct ns_display_info *check_x_display_info (Lisp_Object frame);
+FRAME_PTR check_x_frame (Lisp_Object frame);
+
+
+struct ns_output
+{
+#ifdef __OBJC__
+  EmacsView *view;
+  id miniimage;
+  NSColor *current_cursor_color;
+  NSColor *desired_cursor_color;
+  NSColor *foreground_color;
+  NSColor *background_color;
+  EmacsToolbar *toolbar;
+#else
+  void *view;
+  void *miniimage;
+  void *current_cursor_color;
+  void *desired_cursor_color;
+  void *foreground_color;
+  void *background_color;
+  void *toolbar;
+#endif
+
+  /* 23: NSCursors init'ed in initFrameFromEmacs */
+  Cursor text_cursor;
+  Cursor nontext_cursor;
+  Cursor modeline_cursor;
+  Cursor hand_cursor;
+  Cursor hourglass_cursor;
+  Cursor horizontal_drag_cursor;
+
+  /* 23: NS-specific */
+  Cursor current_pointer;
+
+  /* 23: lord knows why Emacs needs to know about our Window ids.. */
+  Window window_desc, parent_desc;
+  char explicit_parent;
+
+  struct font *font;
+  int baseline_offset;
+
+  /* If a fontset is specified for this frame instead of font, this
+     value contains an ID of the fontset, else -1.  */
+  int fontset; /* only used with font_backend */
+
+  Lisp_Object icon_top;
+  Lisp_Object icon_left;
+  enum ns_cursor_types current_cursor, desired_cursor;
+  unsigned char last_inactive;
+
+  /* The size of the extra width currently allotted for vertical
+     scroll bars, in pixels.  */
+  int vertical_scroll_bar_extra;
+
+  /* The height of the titlebar decoration (included in NSWindow's frame). */
+  int titlebar_height;
+
+  /* The height of the toolbar if displayed, else 0. */
+  int toolbar_height;
+
+  /* This is the Emacs structure for the NS display this frame is on.  */
+  struct ns_display_info *display_info;
+};
+
+/* 23: this dummy decl now needed to support TTYs */
+struct x_output
+{
+  unsigned long background_pixel;
+  unsigned long foreground_pixel;
+};
+
+
+/* This gives the ns_display_info structure for the display F is on.  */
+#define FRAME_NS_DISPLAY_INFO(f) ((f)->output_data.ns->display_info)
+/* the primacy of X must be constantly worked with... */
+#define FRAME_X_DISPLAY_INFO(f) ((f)->output_data.ns->display_info)
+#define FRAME_X_OUTPUT(f) ((f)->output_data.ns)
+#define FRAME_NS_WINDOW(f) ((f)->output_data.ns->window_desc)
+#define FRAME_X_WINDOW(f) ((f)->output_data.ns->window_desc)
+
+/* This is the `Display *' which frame F is on.  */
+#define FRAME_NS_DISPLAY(f) (0)
+#define FRAME_X_DISPLAY(f) (0)
+
+#define FRAME_FOREGROUND_COLOR(f) ((f)->output_data.ns->foreground_color)
+#define FRAME_BACKGROUND_COLOR(f) ((f)->output_data.ns->background_color)
+
+#define FRAME_X_IMAGE_CACHE(F) FRAME_NS_DISPLAY_INFO ((F))->image_cache
+
+#define NS_FACE_FOREGROUND(f) ((f)->foreground)
+#define NS_FACE_BACKGROUND(f) ((f)->background)
+#define FRAME_NS_TITLEBAR_HEIGHT(f) ((f)->output_data.ns->titlebar_height)
+#define FRAME_NS_TOOLBAR_HEIGHT(f) ((f)->output_data.ns->toolbar_height)
+
+#define FONT_WIDTH(f)  ((f)->max_width)
+#define FONT_HEIGHT(f) ((f)->height)
+/*#define FONT_BASE(f)    ((f)->ascent) */
+#define FONT_BASE(f)    (((struct nsfont_info *)f)->max_bounds.ascent)
+/*#define FONT_DESCENT(f) ((f)->descent) */
+#define FONT_DESCENT(f) (((struct nsfont_info *)f)->max_bounds.descent)
+
+#define FRAME_DEFAULT_FACE(f) FACE_FROM_ID (f, DEFAULT_FACE_ID)
+
+#define FRAME_NS_VIEW(f) ((f)->output_data.ns->view)
+#define FRAME_CURSOR(f)  ((f)->output_data.ns->current_cursor)
+#define FRAME_CURSOR_COLOR(f) ((f)->output_data.ns->current_cursor_color)
+#define FRAME_NEW_CURSOR_COLOR(f) ((f)->output_data.ns->desired_cursor_color)
+#define FRAME_NEW_CURSOR(f)  ((f)->output_data.ns->desired_cursor)
+#define FRAME_POINTER_TYPE(f) ((f)->output_data.ns->current_pointer)
+#define FRAME_LAST_INACTIVE(f) ((f)->output_data.ns->last_inactive)
+
+#define FRAME_FONT(f) ((f)->output_data.ns->font)
+
+#ifdef __OBJC__
+#define XNS_SCROLL_BAR(vec) ((id) XSAVE_VALUE (vec)->pointer)
+#else
+#define XNS_SCROLL_BAR(vec) XSAVE_VALUE (vec)->pointer
+#endif
+
+/* Compute pixel size for vertical scroll bars */
+#define NS_SCROLL_BAR_WIDTH(f)                              \
+(FRAME_HAS_VERTICAL_SCROLL_BARS (f)                          \
+ ? rint (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0               \
+        ? FRAME_CONFIG_SCROLL_BAR_WIDTH (f)                 \
+        : (FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f)))   \
+ : 0)
+
+/* Difference btwn char-column-calculated and actual SB widths.
+   This is only a concern for rendering when SB on left. */
+#define NS_SCROLL_BAR_ADJUST(w, f)             \
+(WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w) ?  \
+    (FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f)        \
+        - NS_SCROLL_BAR_WIDTH (f)) : 0)
+
+/*PENDING: fix for GNUstep inconsistent accounting for titlebar */
+#ifdef NS_IMPL_GNUSTEP
+#define NS_TOP_POS(f) ((f)->top_pos + 18)
+#else
+#define NS_TOP_POS(f) ((f)->top_pos)
+#endif
+
+#define FRAME_NS_FONT_TABLE(f) (FRAME_NS_DISPLAY_INFO (f)->font_table)
+
+#define FRAME_FONTSET(f) ((f)->output_data.ns->fontset)
+
+/* 23 */
+#define FRAME_SMALLEST_CHAR_WIDTH(f)  \
+  (FRAME_NS_DISPLAY_INFO (f)->smallest_char_width)
+#define FRAME_SMALLEST_FONT_HEIGHT(f) \
+  (FRAME_NS_DISPLAY_INFO (f)->smallest_font_height)
+#define FONT_TYPE_FOR_UNIBYTE(font, ch)   0
+#define FONT_TYPE_FOR_MULTIBYTE(font, ch) 0
+#define FRAME_BASELINE_OFFSET(f) ((f)->output_data.ns->baseline_offset)
+#define BLACK_PIX_DEFAULT(f) 0x000000
+#define WHITE_PIX_DEFAULT(f) 0xFFFFFF
+
+/* First position where characters can be shown (instead of scrollbar, if
+   it is on left. */
+#define FIRST_CHAR_POSITION(f) \
+  (! (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT (f)) ? 0 \
+   : FRAME_SCROLL_BAR_COLS (f))
+
+extern struct ns_display_info *ns_term_init ();
+extern void ns_term_shutdown (int sig);
+
+/* constants for text rendering */
+#define NS_DUMPGLYPH_NORMAL             0
+#define NS_DUMPGLYPH_CURSOR             1
+#define NS_DUMPGLYPH_FOREGROUND         2
+#define NS_DUMPGLYPH_MOUSEFACE          3
+
+
+/* In nsfont, called from fontset.c */
+extern void nsfont_make_fontset_for_font (Lisp_Object name,
+                                         Lisp_Object font_object);
+
+/* In nsfont, for debugging */
+struct glyph_string;
+void dump_glyphstring (struct glyph_string *s);
+
+/* Implemented in nsterm, published in or needed from nsfns. */
+extern Lisp_Object Qfontsize;
+extern Lisp_Object ns_list_fonts (FRAME_PTR f, Lisp_Object pattern,
+                                  int size, int maxnames);
+extern void ns_clear_frame (struct frame *f);
+
+#ifdef __OBJC__
+extern const char *ns_font_to_xlfd (NSFont *font);
+#endif
+extern const char *ns_fontname_to_xlfd (const char *name);
+extern const char *ns_xlfd_to_fontname (const char *xlfd);
+
+extern void check_ns (void);
+extern Lisp_Object ns_map_event_to_object ();
+extern Lisp_Object ns_string_from_pasteboard ();
+extern void ns_string_to_pasteboard ();
+extern void nxatoms_of_nsselect ();
+extern int ns_lisp_to_cursor_type ();
+extern Lisp_Object ns_cursor_type_to_lisp (int arg);
+extern Lisp_Object Qnone;
+
+/* XColor defined in dispextern.h (we use color_def->pixel = NSColor id), but
+   this causes an #include snafu, so we can't declare it.
+    extern int ns_defined_color (struct frame *f, char *name, XColor 
*color_def,
+                                int alloc); */
+
+#ifdef __OBJC__
+extern int ns_lisp_to_color (Lisp_Object color, NSColor **col);
+extern NSColor *ns_lookup_indexed_color (unsigned long idx, struct frame *f);
+extern unsigned long ns_index_color (NSColor *color, struct frame *f);
+extern void ns_free_indexed_color (unsigned long idx, struct frame *f);
+#endif
+
+/* C access to ObjC functionality */
+extern void  ns_release_object (void *obj);
+extern void  ns_retain_object (void *obj);
+extern void *ns_alloc_autorelease_pool ();
+extern void ns_release_autorelease_pool ();
+
+/* in nsmenu */
+extern void update_frame_tool_bar (FRAME_PTR f);
+extern void free_frame_tool_bar (FRAME_PTR f);
+extern void find_and_call_menu_selection (FRAME_PTR f,
+    EMACS_INT menu_bar_items_used, Lisp_Object vector, void *client_data);
+extern Lisp_Object find_and_return_menu_selection (FRAME_PTR f,
+                                                   int keymaps,
+                                                   void *client_data);
+extern Lisp_Object ns_popup_dialog (Lisp_Object position, Lisp_Object contents,
+                                    Lisp_Object header);
+
+/* two more prototypes that should be moved to a more general include file */
+extern void set_frame_menubar (struct frame *f, int first_time, int deep_p);
+extern void x_set_window_size (struct frame *f, int change_grav,
+                              int cols, int rows);
+
+/* From nsimage.m, needed in image.c */
+struct image;
+extern void *ns_image_from_XBM (unsigned char *bits, int width, int height);
+extern void *ns_image_for_XPM (int width, int height, int depth);
+extern void *ns_image_from_file (Lisp_Object file);
+extern int ns_load_image (struct frame *f, struct image *img,
+                          Lisp_Object spec_file, Lisp_Object spec_data);
+extern int ns_image_width (void *img);
+extern int ns_image_height (void *img);
+extern unsigned long ns_get_pixel (void *img, int x, int y);
+extern void ns_put_pixel (void *img, int x, int y, unsigned long argb);
+extern void ns_set_alpha (void *img, int x, int y, unsigned char a);
+
+/* This in nsterm.m */
+extern unsigned long ns_get_rgb_color (struct frame *f,
+                                       float r, float g, float b, float a);
+extern NSPoint last_mouse_motion_position;
+
+#ifdef NS_IMPL_GNUSTEP
+extern char gnustep_base_version[];  /* version tracking */
+#endif
+
+#define MINWIDTH 10
+#define MINHEIGHT 10
+
+/* Screen max coordinate
+ Using larger coordinates causes movewindow/placewindow to abort */
+#define SCREENMAX 16000
+
+#define NS_SCROLL_BAR_WIDTH_DEFAULT     [EmacsScroller scrollerWidth]
+/* This is to match emacs on other platforms, ugly though it is. */
+#define NS_SELECTION_COLOR_DEFAULT     @"LightGoldenrod2";
+#define RESIZE_HANDLE_SIZE 12
+
+/* Little utility macros */
+#define IN_BOUND(min, x, max) (((x) < (min)) \
+                                ? (min) : (((x)>(max)) ? (max) : (x)))
+#define SCREENMAXBOUND(x) (IN_BOUND (-SCREENMAX, x, SCREENMAX))
+
+/* 23: needed somewhere... */
+#define VERTICAL_SCROLL_BAR_WIDTH_TRIM (0)
+
+
+#endif /* HAVE_NS */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]