X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=src%2Fconsole-msw.h;h=1aad49f8c74588b00ee1390fd424ffd863f0a956;hp=25d3293b674df919796835aa379bc137c12e2dcf;hb=2fd9701a4f902054649dde9143a3f77809afee8f;hpb=cb9f6f4eadc44f1becb32cbbd1db26449e347755 diff --git a/src/console-msw.h b/src/console-msw.h index 25d3293..1aad49f 100644 --- a/src/console-msw.h +++ b/src/console-msw.h @@ -29,16 +29,14 @@ Boston, MA 02111-1307, USA. */ Rewritten for mswindows by Jonathan Harris, November 1997 for 21.0. */ -#ifndef _XEMACS_CONSOLE_MSW_H_ -#define _XEMACS_CONSOLE_MSW_H_ +#ifndef INCLUDED_console_msw_h_ +#define INCLUDED_console_msw_h_ #include "console.h" -#ifdef CONST /* I suspect this is safe */ -#undef CONST -#endif #include #include /* DDE management library */ -#ifndef __CYGWIN32__ +#if !defined(__CYGWIN32__) && !defined(__MINGW32__) \ + || CYGWIN_VERSION_DLL_MAJOR > 20 #include /* FileManager/Explorer drag and drop */ #include #endif @@ -47,25 +45,10 @@ Boston, MA 02111-1307, USA. */ #include #endif -/* - * XXX FIXME: The following X modifier defs in events-mod.h clash with win32 - * hotkey defs in winuser.h. For the moment lose the win32 versions. - * Maybe we should rename all of MOD_* to something that doesn't clash. - */ -#ifdef MOD_CONTROL -# undef MOD_CONTROL -#endif -#ifdef MOD_ALT -# undef MOD_ALT -#endif -#ifdef MOD_SHIFT -# undef MOD_SHIFT -#endif - - /* The name of the main window class */ #define XEMACS_CLASS "XEmacs" +#define XEMACS_CONTROL_CLASS "XEmacsControl" /* * Console @@ -78,6 +61,7 @@ struct mswindows_console int infd, outfd; }; +DECLARE_CONSOLE_TYPE (msprinter); /* * Device @@ -85,12 +69,6 @@ struct mswindows_console #define MSW_FONTSIZE (LF_FACESIZE*4+12) -struct mswindows_font_enum -{ - char fontname[MSW_FONTSIZE]; - struct mswindows_font_enum *next; -}; - struct mswindows_device { int logpixelsx, logpixelsy; @@ -98,7 +76,8 @@ struct mswindows_device int horzres, vertres; /* Size in pixels */ int horzsize, vertsize; /* Size in mm */ int bitspixel; - struct mswindows_font_enum *fontlist; + Lisp_Object fontlist; /* List of strings, device fonts */ + HDC hcdc; /* Compatible DC */ }; #define DEVICE_MSWINDOWS_DATA(d) DEVICE_TYPE_DATA (d, mswindows) @@ -112,7 +91,59 @@ struct mswindows_device #define DEVICE_MSWINDOWS_VERTSIZE(d) (DEVICE_MSWINDOWS_DATA (d)->vertsize) #define DEVICE_MSWINDOWS_BITSPIXEL(d) (DEVICE_MSWINDOWS_DATA (d)->bitspixel) #define DEVICE_MSWINDOWS_FONTLIST(d) (DEVICE_MSWINDOWS_DATA (d)->fontlist) +#define DEVICE_MSWINDOWS_HCDC(d) (DEVICE_MSWINDOWS_DATA (d)->hcdc) + +struct msprinter_device +{ + HDC hdc, hcdc; /* Printer and the comp. DCs */ + HANDLE hprinter; + Lisp_Object fontlist; + char* name; + DEVMODE *devmode, *devmode_mirror; + size_t devmode_size; +}; +#define DEVICE_MSPRINTER_DATA(d) DEVICE_TYPE_DATA (d, msprinter) +#define DEVICE_MSPRINTER_HDC(d) (DEVICE_MSPRINTER_DATA (d)->hdc) +#define DEVICE_MSPRINTER_HCDC(d) (DEVICE_MSPRINTER_DATA (d)->hcdc) +#define DEVICE_MSPRINTER_HPRINTER(d) (DEVICE_MSPRINTER_DATA (d)->hprinter) +#define DEVICE_MSPRINTER_FONTLIST(d) (DEVICE_MSPRINTER_DATA (d)->fontlist) +#define DEVICE_MSPRINTER_NAME(d) (DEVICE_MSPRINTER_DATA (d)->name) +#define DEVICE_MSPRINTER_DEVMODE(d) (DEVICE_MSPRINTER_DATA (d)->devmode) +#define DEVICE_MSPRINTER_DEVMODE_MIRROR(d) \ + (DEVICE_MSPRINTER_DATA (d)->devmode_mirror) +#define DEVICE_MSPRINTER_DEVMODE_SIZE(d) \ + (DEVICE_MSPRINTER_DATA (d)->devmode_size) + +#define CONSOLE_TYPESYM_MSPRINTER_P(typesym) EQ (typesym, Qmsprinter) +#define DEVICE_MSPRINTER_P(dev) CONSOLE_TYPESYM_MSPRINTER_P (DEVICE_TYPE (dev)) +#define CHECK_MSPRINTER_DEVICE(z) CHECK_DEVICE_TYPE (z, msprinter) +#define CONCHECK_MSPRINTER_DEVICE(z) CONCHECK_DEVICE_TYPE (z, msprinter) + +/* Printer functions in device-msw.c */ +DEVMODE* msprinter_get_devmode_copy (struct device *d); +void msprinter_apply_devmode (struct device *d, DEVMODE *devmode); + +/* Printer functions in frame-msw.c */ +void msprinter_start_page (struct frame *f); + +/* Common checks */ + +#define DEVICE_MSGDI_P(dev) (DEVICE_MSWINDOWS_P(dev) || DEVICE_MSPRINTER_P(dev)) +#define CHECK_MSGDI_DEVICE(d) \ + do { \ + CHECK_DEVICE (d); \ + if (!(DEVICEP (d) && DEVICE_MSGDI_P(XDEVICE(d)))) \ + dead_wrong_type_argument \ + (list3 (Qor, Qmswindows, Qmsprinter), d); \ + } while (0) +#define CONCHECK_MSGDI_DEVICE(d) \ + do { \ + CHECK_DEVICE (d); \ + if (!(DEVICEP (d) && DEVICE_MSGDI_P(XDEVICE(d)))) \ + wrong_type_argument \ + (list3 (Qor, Qmswindows, Qmsprinter), d); \ + } while (0) /* * Frame @@ -133,9 +164,6 @@ struct mswindows_frame /* DC for this win32 window */ HDC hdc; - /* compatible DC for bitmap operations */ - HDC cdc; - /* Time of last click event, for button 2 emul */ DWORD last_click_time; @@ -170,6 +198,7 @@ struct mswindows_frame int ignore_next_lbutton_up : 1; int ignore_next_rbutton_up : 1; int sizing : 1; + int paint_pending : 1; /* Whether a WM_PAINT magic event has been queued */ /* Geometry, in characters, as specified by proplist during frame creation. Memebers are set to -1 for unspecified */ @@ -180,7 +209,6 @@ struct mswindows_frame #define FRAME_MSWINDOWS_HANDLE(f) (FRAME_MSWINDOWS_DATA (f)->hwnd) #define FRAME_MSWINDOWS_DC(f) (FRAME_MSWINDOWS_DATA (f)->hdc) -#define FRAME_MSWINDOWS_CDC(f) (FRAME_MSWINDOWS_DATA (f)->cdc) #define FRAME_MSWINDOWS_MENU_HASH_TABLE(f) (FRAME_MSWINDOWS_DATA (f)->menu_hash_table) #define FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE(f) \ (FRAME_MSWINDOWS_DATA (f)->toolbar_hash_table) @@ -204,6 +232,31 @@ struct mswindows_frame #define XWL_COUNT 1 /* Number of LONGs that we use */ #define MSWINDOWS_WINDOW_EXTRA_BYTES (XWL_COUNT*4) +/* + * Printer frame, aka printer job + */ + +struct msprinter_frame +{ + int left_margin, top_margin, /* All in twips */ + right_margin, bottom_margin; + int charheight, charwidth; /* As per proplist or -1 if not gven */ + Lisp_Object orientation, duplex; /* nil for printer's default */ + int job_started : 1; + int page_started : 1; +}; + +#define FRAME_MSPRINTER_DATA(f) FRAME_TYPE_DATA (f, msprinter) +#define FRAME_MSPRINTER_LEFT_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->left_margin) +#define FRAME_MSPRINTER_RIGHT_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->top_margin) +#define FRAME_MSPRINTER_TOP_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->right_margin) +#define FRAME_MSPRINTER_BOTTOM_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->bottom_margin) +#define FRAME_MSPRINTER_JOB_STARTED(f) (FRAME_MSPRINTER_DATA (f)->job_started) +#define FRAME_MSPRINTER_PAGE_STARTED(f) (FRAME_MSPRINTER_DATA (f)->page_started) +#define FRAME_MSPRINTER_ORIENTATION(f) (FRAME_MSPRINTER_DATA (f)->orientation) +#define FRAME_MSPRINTER_DUPLEX(f) (FRAME_MSPRINTER_DATA (f)->duplex) +#define FRAME_MSPRINTER_CHARWIDTH(f) (FRAME_MSPRINTER_DATA (f)->charheight) +#define FRAME_MSPRINTER_CHARHEIGHT(f) (FRAME_MSPRINTER_DATA (f)->charwidth) /* * Events @@ -224,11 +277,14 @@ struct mswindows_frame /* win32 "Windows" procedure */ LRESULT WINAPI mswindows_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); +LRESULT WINAPI mswindows_control_wnd_proc (HWND hwnd, + UINT msg, WPARAM wParam, + LPARAM lParam); void mswindows_redraw_exposed_area (struct frame *f, int x, int y, int width, int height); void mswindows_size_frame_internal (struct frame* f, XEMACS_RECT_WH* dest); -void mswindows_enqueue_magic_event (HWND hwnd, UINT message); +void mswindows_enqueue_magic_event (HWND hwnd, UINT msg); /* win32 DDE management library */ #define MSWINDOWS_DDE_ITEM_OPEN "Open" @@ -237,25 +293,58 @@ extern HSZ mswindows_dde_service; extern HSZ mswindows_dde_topic_system; extern HSZ mswindows_dde_item_open; HDDEDATA CALLBACK mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv, - HSZ hszTopic, HSZ hszItem, HDDEDATA hdata, + HSZ hszTopic, HSZ hszItem, + HDDEDATA hdata, DWORD dwData1, DWORD dwData2); void mswindows_enqueue_misc_user_event (Lisp_Object channel, Lisp_Object function, Lisp_Object object); -Lisp_Object mswindows_cancel_dispatch_event (struct Lisp_Event* event); +Lisp_Object mswindows_cancel_dispatch_event (Lisp_Event* event); Lisp_Object mswindows_pump_outstanding_events (void); -Lisp_Object mswindows_protect_modal_loop (Lisp_Object (*bfun) (Lisp_Object barg), +Lisp_Object mswindows_protect_modal_loop (Lisp_Object (*bfun) + (Lisp_Object barg), Lisp_Object barg); void mswindows_unmodalize_signal_maybe (void); +COLORREF mswindows_string_to_color (const char *name); +USID emacs_mswindows_create_stream_pair (void* inhandle, void* outhandle, + Lisp_Object* instream, + Lisp_Object* outstream, + int flags); +USID emacs_mswindows_delete_stream_pair (Lisp_Object instream, + Lisp_Object outstream); + #ifdef HAVE_WIN32_PROCESSES -HANDLE get_nt_process_handle (struct Lisp_Process *p); +HANDLE get_nt_process_handle (Lisp_Process *p); #endif extern Lisp_Object Vmswindows_frame_being_created; extern Lisp_Object mswindows_frame_being_created; -void mswindows_enumerate_fonts (struct device *d); +void msw_get_workspace_coords (RECT *rc); + +HWND msw_get_console_hwnd (void); +void msw_hide_console (void); +void msw_show_console (void); +int msw_output_console_string (CONST Extbyte *str, Extcount len); + +Lisp_Object mswindows_enumerate_fonts (HDC hdc); + +int msw_char_is_accelerator (struct frame *f, Emchar ch); +Bytecount msw_translate_menu_or_dialog_item (Bufbyte *item, Bytecount len, + Bytecount maxlen, Emchar *accel, + Lisp_Object error_name); + +#ifdef HAVE_TOOLBARS +Lisp_Object mswindows_get_toolbar_button_text (struct frame* f, + int command_id); +Lisp_Object mswindows_handle_toolbar_wm_command (struct frame* f, + HWND ctrl, WORD id); +#endif +Lisp_Object mswindows_handle_gui_wm_command (struct frame* f, + HWND ctrl, LPARAM id); + +int msw_windows9x_p (void); -#endif /* _XEMACS_CONSOLE_MSW_H_ */ +#endif /* INCLUDED_console_msw_h_ */