📄 create.c
字号:
DefaultColormap(display, DefaultScreen(display)), "black", &s_bdr_color, &color_def) ) ; else ; def_val = XGetDefault(display, def_env, "SelectionBorderWidth"); if (def_val != NULL) s_bdr_width = atoi(def_val); def_val = XGetDefault(display, def_env, "SelectionSpread"); if (def_val != NULL) s_spread = atof(def_val); /* * Create and store the inactive pattern pixmap. */ switch (inact_pnum) { case 0: inact_bitmap = XCreateBitmapFromData( display, RootWindow(display, DefaultScreen(display)), dimple1_bits, 16, 16 ); break; case 1: inact_bitmap = XCreateBitmapFromData( display, RootWindow(display, DefaultScreen(display)), dimple3_bits, 16,16); break; case 2: inact_bitmap = XCreateBitmapFromData( display, RootWindow(display, DefaultScreen(display)), gray1_bits, 16, 16); break; case 3: inact_bitmap = XCreateBitmapFromData( display, RootWindow(display, DefaultScreen(display)), gray3_bits, 16, 16); break; case 4: inact_bitmap = XCreateBitmapFromData( display, RootWindow(display, DefaultScreen(display)), cross_weave_bits, 16, 16); break; default: break; } if (inact_bitmap == NULL) { _XMErrorCode = XME_STORE_BITMAP; return(NULL); } /* * Load the mouse cursor. */ switch (menu_style) { case LEFT: cursor = XCreateBitmapFromData(display, RootWindow(display, DefaultScreen(display)), left_ptr_bits, left_ptr_width, left_ptr_height); cursor_mask = XCreateBitmapFromData(display, RootWindow(display, DefaultScreen(display)), left_ptrmsk_bits, left_ptrmsk_width, left_ptrmsk_height); mouse_cursor = XCreatePixmapCursor( display, cursor, cursor_mask, &mouse_color, &bkgnd_color, left_ptr_x_hot, left_ptr_y_hot ); XFreePixmap(display, cursor); XFreePixmap(display, cursor_mask); break; case RIGHT: cursor = XCreateBitmapFromData(display, RootWindow(display, DefaultScreen(display)), right_ptr_bits, right_ptr_width, right_ptr_height); cursor_mask = XCreateBitmapFromData(display, RootWindow(display, DefaultScreen(display)), right_ptrmsk_bits, right_ptrmsk_width, right_ptrmsk_height); mouse_cursor = XCreatePixmapCursor( display, cursor, cursor_mask, &mouse_color, &bkgnd_color, right_ptr_x_hot, right_ptr_y_hot ); XFreePixmap(display, cursor); XFreePixmap(display, cursor_mask); break; case CENTER: cursor = XCreateBitmapFromData(display, RootWindow(display, DefaultScreen(display)), cntr_ptr_bits, cntr_ptr_width, cntr_ptr_height); cursor_mask = XCreateBitmapFromData(display, RootWindow(display, DefaultScreen(display)), cntr_ptrmsk_bits, cntr_ptrmsk_width, cntr_ptrmsk_height); mouse_cursor = XCreatePixmapCursor( display, cursor, cursor_mask, &mouse_color, &bkgnd_color, cntr_ptr_x_hot, cntr_ptr_y_hot ); XFreePixmap(display, cursor); XFreePixmap(display, cursor_mask); break; default: /* Error! Invalid style parameter. */ _XMErrorCode = XME_STYLE_PARAM; return(NULL); } if (mouse_cursor == _X_FAILURE) { _XMErrorCode = XME_CREATE_CURSOR; return(NULL); } /* * Open the pane and selection fonts. */ p_fnt_info = XLoadQueryFont(display, p_fnt_name); if (p_fnt_info == NULL) { _XMErrorCode = XME_OPEN_FONT; return(NULL); } s_fnt_info = XLoadQueryFont(display, s_fnt_name); if (s_fnt_info == NULL) { _XMErrorCode = XME_OPEN_FONT; return(NULL); } /* * Calculate the fixed padding value in pixels for each font. */ p_fnt_height = p_fnt_info->max_bounds.ascent + p_fnt_info->max_bounds.descent; s_fnt_height = s_fnt_info->max_bounds.ascent + s_fnt_info->max_bounds.descent; p_fnt_pad = s_spread * p_fnt_height; s_fnt_pad = s_spread * s_fnt_height; /* * Calculate fixed height and offset requirements. */ flag_height = p_fnt_height + (p_fnt_pad << 1); p_height = 0; p_y_off = flag_height + p_bdr_width; p_x_off = p_y_off * p_spread; s_height = s_fnt_height + (s_fnt_pad << 1) + (s_bdr_width << 1); s_y_off = s_height; s_x_off = p_x_off; /* * Set up the pane list header. */ pane->next = pane; pane->prev = pane; pane->type = PL_HEADER; pane->serial = -1; /* * Initialize the internal pane and selection creation queues. */ _XMWinQueInit(); /* * Create pane, active, and inactive GC's. */ values = (XGCValues *)malloc(sizeof(XGCValues)); valuemask = (GCForeground | GCBackground | GCFont | GCLineWidth); /* * First, pane. */ values->foreground = p_frg_color.pixel; values->background = bkgnd_color.pixel; values->font = p_fnt_info->fid; values->line_width = p_bdr_width; pane_GC = XCreateGC( display, RootWindow(display, DefaultScreen(display)), valuemask, values); /* * Then normal video selection. */ values->foreground = s_frg_color.pixel; values->background = bkgnd_color.pixel; values->font = s_fnt_info->fid; values->line_width = s_bdr_width; normal_select_GC = XCreateGC(display, RootWindow(display, DefaultScreen(display)), valuemask, values); /* * Inverse video selection. */ values->foreground = bkgnd_color.pixel; values->background = s_frg_color.pixel; values->font = s_fnt_info->fid; values->line_width = s_bdr_width; inverse_select_GC = XCreateGC(display, RootWindow(display, DefaultScreen(display)), valuemask, values); stipple_pixmap = XCreateBitmapFromData(display, RootWindow(display, DefaultScreen(display)), stipple_bits, stipple_width, stipple_height); /* * Finally, inactive pane header and selections */ valuemask |= (GCFillStyle | GCStipple); values->foreground = s_frg_color.pixel; values->background = bkgnd_color.pixel; values->font = s_fnt_info->fid; values->line_width = s_bdr_width; values->fill_style = FillStippled; values->stipple = stipple_pixmap; inact_GC = XCreateGC(display, RootWindow(display, DefaultScreen(display)), valuemask, values); valuemask |= (GCGraphicsExposures); values->graphics_exposures = False; inact_GC_noexpose = XCreateGC (display, RootWindow (display, DefaultScreen (display)), valuemask, values); /* * Construct the XMenu object. */ /* -------------------- Menu data -------------------- */ menu->menu_style = menu_style; menu->menu_mode = menu_mode; menu->freeze = freeze; menu->aeq = 0; menu->recompute = 1; menu->parent = parent; menu->height = 0; menu->width = 0; menu->mouse_cursor = mouse_cursor; menu->assoc_tab = assoc_tab; menu->p_list = pane; /* -------------------- Pane window data -------------------- */ menu->p_style = p_style; menu->p_events = DEF_P_EVENTS; menu->p_fnt_info = p_fnt_info; menu->p_fnt_pad = p_fnt_pad; menu->p_spread = p_spread; menu->p_bdr_width = p_bdr_width; menu->flag_height = flag_height; menu->p_width = 0; menu->p_height = p_height; menu->p_x_off = p_x_off; menu->p_y_off = p_y_off; menu->p_count = 0; menu->pane_GC = pane_GC; menu->x_pos = 0; menu->y_pos = 0; /* -------------------- Selection window data -------------------- */ menu->s_style = s_style; menu->s_events = DEF_S_EVENTS; menu->s_fnt_info = s_fnt_info; menu->s_fnt_pad = s_fnt_pad; menu->s_spread = s_spread; menu->s_bdr_width = s_bdr_width; /* unnecessary */ menu->s_width = 0; menu->s_height = s_height; menu->s_x_off = s_x_off; menu->s_y_off = s_y_off; menu->s_count = 0; menu->normal_select_GC = normal_select_GC; menu->inverse_select_GC = inverse_select_GC; menu->inact_GC = inact_GC; /* -------------------- Color data -------------------- */ menu->p_bdr_color = p_bdr_color.pixel; menu->s_bdr_color = s_bdr_color.pixel; menu->p_frg_color = p_frg_color.pixel; menu->s_frg_color = s_frg_color.pixel; menu->bkgnd_color = bkgnd_color.pixel; /* -------------------- Pixmap data -------------------- */ menu->p_bdr_pixmap = NULL; menu->s_bdr_pixmap = NULL; menu->p_frg_pixmap = NULL; menu->s_frg_pixmap = NULL; menu->bkgnd_pixmap = NULL; if (DisplayPlanes (display, DefaultScreen (display)) == 1) menu->inact_pixmap = inact_bitmap; else { int loop; menu->inact_pixmap = XCreatePixmap (display, parent, 16, 16, DisplayPlanes (display, DefaultScreen (display))); if (menu->inact_pixmap == NULL) { _XMErrorCode = XME_STORE_BITMAP; return(NULL); } XCopyPlane (display, inact_bitmap, menu->inact_pixmap, inact_GC_noexpose, 0, 0, 16, 16, 0, 0, 1);/* for (loop = 0; loop < DisplayPlanes (display, DefaultScreen (display)); loop++) { XCopyPlane (display, inact_bitmap, menu->inact_pixmap, inact_GC, 0, 0, 16, 16, 0, 0, (1 << loop)); }*/ } /* * Return the completed XMenu. */ _XMErrorCode = XME_NO_ERROR; return(menu);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -