diff options
author | Glenn Morris <rgm@gnu.org> | 2010-10-11 20:55:21 -0700 |
---|---|---|
committer | Glenn Morris <rgm@gnu.org> | 2010-10-11 20:55:21 -0700 |
commit | 16a0af11eca9b08d30e210b69452b36c1e3693e4 (patch) | |
tree | ddf2cdd635a2c8e15961470eee23887e2d18ac54 /nextstep | |
parent | 07277eb8060ecd1310bbbe27d27f58713b1f4d53 (diff) | |
download | emacs-16a0af11eca9b08d30e210b69452b36c1e3693e4.tar.gz |
Move nextstep/DEV-NOTES to admin/notes/nextstep.
Diffstat (limited to 'nextstep')
-rw-r--r-- | nextstep/ChangeLog | 4 | ||||
-rw-r--r-- | nextstep/DEV-NOTES | 159 |
2 files changed, 4 insertions, 159 deletions
diff --git a/nextstep/ChangeLog b/nextstep/ChangeLog index 17df993cab7..aa856ce6ed0 100644 --- a/nextstep/ChangeLog +++ b/nextstep/ChangeLog @@ -1,3 +1,7 @@ +2010-10-12 Glenn Morris <rgm@gnu.org> + + * DEV-NOTES: Move to ../admin/notes/nextstep. + 2010-05-07 Chong Yidong <cyd@stupidchicken.com> * Version 23.2 released. diff --git a/nextstep/DEV-NOTES b/nextstep/DEV-NOTES deleted file mode 100644 index 462101f9abf..00000000000 --- a/nextstep/DEV-NOTES +++ /dev/null @@ -1,159 +0,0 @@ -This file summarizes primary aspects of the NS port architecture. If -possible, it should be updated for changes. - -Currently it summarizes the state as of: - - summer 2008 shortly after merging to trunk - - - -Startup -------- - -Init sequence: - emacs.c: ns_alloc_autorelease_pool() nsterm.m - emacs.c: ns_init_paths() nsterm.m - - override EMACSLOADPATH, etc. so resources can be found in-bundle - emacs.c: init_display() dispnew.c - - sets Vwindow_system (window-system) to 'ns - emacs.c: loadup.el -> startup.el -> ns-initialize-window-system - -> x-open-connection (nsfns.m) - - ns-list-services - -> nsterm.m: ns_term_init() - - EmacsApp sharedApplication - - read NS defaults (org.gnu.Emacs.plist) - - init X-style color list - - ns_create_terminal() - - NSApp run (goes to applicationDidFinishLaunching which terminates - event loop -- see below) - - - -Event Loop ----------- - -In an NS application, the event loop is normally managed by system and all -user code is event-driven. [NSApp run] is called by user and never returns. - -In Emacs, the event loop is managed by emacs itself. - -The NS port mediates between these two styles by intercepting the NS event -dispatch at [NSApp sendEvent]. If a special event is detected, the event loop -is broken, and control returned to Emacs. This special event is sent by -ns_send_appdefined, which is called under these circumstances: - - - if a user input event is received - - when a timeout fires - -NS event processing is instigated from Emacs through ns_select() and -ns_read_socket() in nsterm.m. Parts of the codepaths leading to these -functions are: - - - keyboard.c:read_avail_input() - -> ns_read_socket (ns_send_appdefined) -> [NSApp run] - - process.c:wait_reading_process_output() - -> ns_select -> gobble_input (global inNsSelect=1) - -> ns_read_socket (ns_send_appdefined if !expected) -> [NSApp run] - - sysdep.c:sys_select() -> read_input_waiting() - -> ns_read_socket (send_appdefined) -> [NSApp run] - [this codepath may not be used] - - -Currently ctrl-g is not detected in as many circumstances as other emacsen. -It is not certain whether this is due to the means of event loop integration, -or errors of omission in the NS code. This is an area for improvement. -Also, see the article here and its containing thread: - -http://article.gmane.org/gmane.emacs.devel/92021/match=handling%5fsignal - - - - -Text Rendering and Font Handling --------------------------------- - -nsfont.m implements the font driver, responsible for managing fonts and -rendering text. Fonts are obtained through NSFontManager. Rendering must be -done at a low level due to emacs' fine control over this process, therefore -there are different approachs under Cocoa and GNUstep. Under GNUstep, the -original NeXT Display PostScript (DPS) APIs are available and used. Under -Cocoa, these were removed and Quartz drawing functions replaced them. - -In both cases, font glyphs are accessed through UTF8 character -representations. It would be preferable to use unicode indices, but prior -attempts at this have failed. - -Multi-script fontsets are auto-created in nsfont_make_fontset_for_font() using -the facilities of NSTextStorage and NSLayoutManager. - - -Object Architecture -------------------- - -Unlike the other GUIs, the NS interface is based on a high-level and -object-oriented API. This creates some tension in the code because emacs -itself has been architected around the low-level Xlib and Xt APIs. The NS -port tries to strike a balance between simplifying code on its side using OO -features, and keeping code as similar as possible to other ports to ease -maintenance. The following are the main classes (see nsterm.h): - -EmacsApp : NSApplication - - event loop integration, interapp comms point for Finder (NSWorkspace) msgs, - Services - - one global instance (NSApp) - - nsterm.m - -EmacsView : NSView <TextInput> - - handles rendering of text and fringe, interapp comms for drag/drop - - instance for each frame - - child of window's content view - - nsterm.m - -EmacsWindow : NSWindow - - utility override for resize handling - -EmacsScroller : NSScroller - - instance for each emacs window, renders scrollbar - - child of window's content view - - nsterm.m - -EmacsImage : NSImage - - image rendering, toolbar icons, stippling, fringe bitmaps - - instance for each image - - nsimage.m - -EmacsMenu : NSMenu - - menu management - - one tree of instances for menubar, one instance for each popup menu - - nsmenu.m - -EmacsToolbar : NSToolbar - - toolbar management, one instance for each frame - - nsmenu.m - - -EmacsDialogPanel : NSPanel - - popup dialogs, one instance for each - - nsmenu.m - -EmacsTooltip : NSObject - - tooltip popups, one instance for each - - nsmenu.m - -EmacsGlyphStorage : NSObject <NSGlyphStorage> - - utility for text rendering - - nsfont.m - -EmacsPrefsController : NSObject - - utility for preferences panel management, one global instance - - nsterm.m - - nextstep/Cocoa/Emacs.base/Contents/Resources/preferences.nib - - nextstep/GNUstep/Emacs.base/Resources/preferences.gorm - -EmacsSavePanel : NSSavePanel -EmacsOpenPanel : NSOpenPanel - - utility override for panel notifications - |