screenhack.c
来自「编译后直接运行的MP3播放器全部C语言源代码 一个包含FAT文件系统、系统」· C语言 代码 · 共 552 行 · 第 1/2 页
C
552 行
break; default: break; case ClientMessage: { if (event->xclient.message_type != XA_WM_PROTOCOLS) { char *s = XGetAtomName(dpy, event->xclient.message_type); if (!s) s = "(null)"; fprintf (stderr, "%s: unknown ClientMessage %s received!\n", progname, s); } else if (event->xclient.data.l[0] != (int)XA_WM_DELETE_WINDOW) { char *s1 = XGetAtomName(dpy, event->xclient.message_type); char *s2 = XGetAtomName(dpy, event->xclient.data.l[0]); if (!s1) s1 = "(null)"; if (!s2) s2 = "(null)"; fprintf (stderr, "%s: unknown ClientMessage %s[%s] received!\n", progname, s1, s2); } else { exit (0); } } break; } return key;}int screenhack_handle_events(bool *release, bool *repeat){ int key=0; if(XPending(dpy)) { XEvent event; XNextEvent(dpy, &event); key=screenhack_handle_event(dpy, &event, release, repeat); } return key;}static Visual *pick_visual (Screen *screen){#ifdef USE_GL /* If we're linking against GL (that is, this is the version of screenhack.o that the GL hacks will use, which is different from the one that the non-GL hacks will use) then try to pick the "best" visual by interrogating the GL library instead of by asking Xlib. GL knows better. */ Visual *v = 0; char *string = get_string_resource ("visualID", "VisualID"); char *s; if (string) for (s = string; *s; s++) if (isupper (*s)) *s = _tolower (*s); if (!string || !*string || !strcmp (string, "gl") || !strcmp (string, "best") || !strcmp (string, "color") || !strcmp (string, "default")) v = get_gl_visual (screen); /* from ../utils/visual-gl.c */ if (string) free (string); if (v) return v;#endif /* USE_GL */ return get_visual_resource (screen, "visualID", "VisualID", False);}int main (int argc, char **argv){ Widget toplevel; Display *dpy; Window window; Screen *screen; Visual *visual; Colormap cmap; XEvent event; char version[255]; sprintf(version,"rockboxui %s",ROCKBOXUI_VERSION);#ifdef HAVE_LCD_BITMAP display_zoom=2; { char *env=getenv("RECORDER_ZOOM"); if (env) { display_zoom=atoi(env); } }#else display_zoom=1; { char *env=getenv("PLAYER_ZOOM"); if (env) { display_zoom=atoi(env); } }#endif if (argc > 1) { int x; for (x=1; x<argc; x++) { if (!strcmp("--old_lcd", argv[x])) { having_new_lcd=FALSE; printf("Using old LCD layout.\n"); } else if (!strcmp("--recorder_zoom", argv[x])) { x++;#ifdef HAVE_LCD_BITMAP display_zoom=atoi(argv[x]); printf("Window zoom is %d\n", display_zoom);#endif } else if (!strcmp("--player_zoom", argv[x])) { x++;#ifndef HAVE_LCD_BITMAP display_zoom=atoi(argv[x]); printf("Window zoom is %d\n", display_zoom);#endif } else { printf("rockboxui\n"); printf("Arguments:\n"); printf(" --old_lcd \t [Player] simulate old playermodel (ROM version<4.51)\n"); printf(" --player_zoom \t [Player] window zoom\n"); printf(" --recorder_zoom \t [Recorder] window zoom\n"); printf(KEYBOARD_GENERIC KEYBOARD_SPECIFIC); exit(0); } } } { static char geometry[40];#ifdef HAVE_LCD_BITMAP snprintf(geometry, 40, "*geometry: %dx%d", 120*display_zoom, 68*display_zoom);#else snprintf(geometry, 40, "*geometry: %dx%d", 280*display_zoom, 132*display_zoom);#endif default_defaults[GEOMETRY_POSITION]=geometry; } printf(KEYBOARD_GENERIC KEYBOARD_SPECIFIC); merge_options ();#ifdef __sgi /* We have to do this on SGI to prevent the background color from being overridden by the current desktop color scheme (we'd like our backgrounds to be black, thanks.) This should be the same as setting the "*useSchemes: none" resource, but it's not -- if that resource is present in the `default_defaults' above, it doesn't work, though it does work when passed as an -xrm arg on the command line. So screw it, turn them off from C instead. */ SgiUseSchemes ("none"); #endif /* __sgi */ toplevel = XtAppInitialize (&app, progclass, merged_options, merged_options_size, &argc, argv, merged_defaults, 0, 0); dpy = XtDisplay (toplevel); screen = XtScreen (toplevel); db = XtDatabase (dpy); XtGetApplicationNameAndClass (dpy, &progname, &progclass); /* half-assed way of avoiding buffer-overrun attacks. */ if (strlen (progname) >= 100) progname[100] = 0; XSetErrorHandler (screenhack_ehandler); XA_WM_PROTOCOLS = XInternAtom (dpy, "WM_PROTOCOLS", False); XA_WM_DELETE_WINDOW = XInternAtom (dpy, "WM_DELETE_WINDOW", False); if (CellsOfScreen (DefaultScreenOfDisplay (dpy)) <= 2) mono_p = True; { Boolean def_visual_p; visual = pick_visual (screen); if (toplevel->core.width <= 0) toplevel->core.width = 600; if (toplevel->core.height <= 0) toplevel->core.height = 480; def_visual_p = (visual == DefaultVisualOfScreen (screen)); if (!def_visual_p) { unsigned int bg, bd; Widget new; cmap = XCreateColormap (dpy, RootWindowOfScreen(screen), visual, AllocNone); bg = get_pixel_resource ("background", "Background", dpy, cmap); bd = get_pixel_resource ("borderColor", "Foreground", dpy, cmap); new = XtVaAppCreateShell (progname, progclass, topLevelShellWidgetClass, dpy, XtNmappedWhenManaged, False, XtNvisual, visual, XtNdepth, visual_depth (screen, visual), XtNwidth, toplevel->core.width, XtNheight, toplevel->core.height, XtNcolormap, cmap, XtNbackground, (Pixel) bg, XtNborderColor, (Pixel) bd, XtNinput, True, /* for WM_HINTS */ 0); XtDestroyWidget (toplevel); toplevel = new; XtRealizeWidget (toplevel); window = XtWindow (toplevel); } else { XtVaSetValues (toplevel, XtNmappedWhenManaged, False, XtNinput, True, /* for WM_HINTS */ 0); XtRealizeWidget (toplevel); window = XtWindow (toplevel); if (get_boolean_resource ("installColormap", "InstallColormap")) { cmap = XCreateColormap (dpy, window, DefaultVisualOfScreen (XtScreen (toplevel)), AllocNone); XSetWindowColormap (dpy, window, cmap); } else { cmap = DefaultColormap (dpy, DefaultScreen (dpy)); } } XtPopup (toplevel, XtGrabNone); XtVaSetValues(toplevel, XtNtitle, version, 0); /* For screenhack_handle_events(): select KeyPress, and announce that we accept WM_DELETE_WINDOW. */ { XWindowAttributes xgwa; XGetWindowAttributes (dpy, window, &xgwa); XSelectInput (dpy, window, xgwa.your_event_mask | KeyPressMask | KeyRelease | ButtonPressMask | ExposureMask); XChangeProperty (dpy, window, XA_WM_PROTOCOLS, XA_ATOM, 32, PropModeReplace, (unsigned char *) &XA_WM_DELETE_WINDOW, 1); } } XSetWindowBackground (dpy, window, get_pixel_resource ("background", "Background", dpy, cmap)); XClearWindow (dpy, window); /* wait for it to be mapped */ XIfEvent (dpy, &event, MapNotify_event_p, (XPointer) window); XSync (dpy, False); screenhack (dpy, window); /* doesn't return */ return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?