⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtk+-2.4.14-xynth.diff

📁 CS架构的多平台的GUI系统
💻 DIFF
📖 第 1 页 / 共 5 页
字号:
-  return 0;-}--static int-gdk_fb_setup_mode_from_name (struct fb_var_screeninfo *modeinfo,-			     char *modename)-{-  GScanner *scanner;-  char *filename;-  gint result;-  int fd, i;-  int retval;--  retval = 0;-  -  filename = "/etc/fb.modes";-  -  fd = open (filename, O_RDONLY);-  if (fd < 0)-    {-      g_warning ("Cannot read %s", filename);-      return retval;-    }-  -  scanner = g_scanner_new ((GScannerConfig *) &fb_modes_scanner_config);-  scanner->input_name = filename;--  for (i = 0; i < sizeof(fb_modes_keywords)/sizeof(fb_modes_keywords[0]); i++)-    g_scanner_scope_add_symbol (scanner, 0, fb_modes_keywords[i], GINT_TO_POINTER (i));--  g_scanner_input_file (scanner, fd);-  -  while (1) {-    if (g_scanner_peek_next_token (scanner) == G_TOKEN_EOF) {-      break;-    } -    result = fb_modes_parse_mode (scanner, modeinfo, modename);-      -    if (result < 0) {-      g_warning ("parse error in %s at line %d", filename, scanner->line);-      break;-    }-    if (result > 0)-      {-	retval = 1;-	break;-      }-  }-  -  g_scanner_destroy (scanner);-  -  close (fd);-  -  return retval;-}-  --static int-gdk_fb_set_mode (GdkFBDisplay *display)-{-  char *env, *end;-  int depth, height, width;-  gboolean changed;-  -  if (ioctl (display->fb_fd, FBIOGET_VSCREENINFO, &display->modeinfo) < 0)-    return -1;--  display->orig_modeinfo = display->modeinfo;--  changed = FALSE;-  -  env = getenv ("GDK_DISPLAY_MODE");-  if (env)-    {-      if (gdk_fb_setup_mode_from_name (&display->modeinfo, env))-	changed = TRUE;-      else-	g_warning ("Couldn't find mode named '%s'", env);-    }--  env = getenv ("GDK_DISPLAY_DEPTH");-  if (env)-    {-      depth = strtol (env, &end, 10);-      if (env != end)-	{-	  changed = TRUE;-	  display->modeinfo.bits_per_pixel = depth;-	}-    }-  -  env = getenv ("GDK_DISPLAY_WIDTH");-  if (env)-    {-      width = strtol (env, &end, 10);-      if (env != end)-	{-	  changed = TRUE;-	  display->modeinfo.xres = width;-	  display->modeinfo.xres_virtual = width;-	}-    }-    -  env = getenv ("GDK_DISPLAY_HEIGHT");-  if (env)-    {-      height = strtol (env, &end, 10);-      if (env != end)-	{-	  changed = TRUE;-	  display->modeinfo.yres = height;-	  display->modeinfo.yres_virtual = height;-	}-    }--  if (changed &&-      (ioctl (display->fb_fd, FBIOPUT_VSCREENINFO, &display->modeinfo) < 0))-    {-      g_warning ("Couldn't set specified mode");-      return -1;-    }-  -  /* ask for info back to make sure of what we got */-  if (ioctl (display->fb_fd, FBIOGET_VSCREENINFO, &display->modeinfo) < 0)-    {-      g_warning ("Error getting var screen info");-      return -1;-    }-  -  if (ioctl (display->fb_fd, FBIOGET_FSCREENINFO, &display->sinfo) < 0)-    {-      g_warning ("Error getting fixed screen info");-      return -1;-    }-  return 0;-}--#ifdef ENABLE_FB_MANAGER-static void-gdk_fb_switch_from (void)-{-  g_print ("Switch from\n");-  gdk_shadow_fb_stop_updates ();-  gdk_fb_mouse_close ();-  gdk_fb_keyboard_close ();-}--static void-gdk_fb_switch_to (void)-{-  g_print ("switch_to\n");-  gdk_shadow_fb_update (0, 0, -			gdk_display->fb_width, -			gdk_display->fb_height);--  if (!gdk_fb_keyboard_open ())-    g_warning ("Failed to re-initialize keyboard");-  -  if (!gdk_fb_mouse_open ())-    g_warning ("Failed to re-initialize mouse");--}---static gboolean-gdk_fb_manager_callback (GIOChannel *gioc,-			 GIOCondition cond,-			 gpointer data)-{-  struct FBManagerMessage msg;-  GdkFBDisplay *display;-  int res;--  display = data;--  res = recv (display->manager_fd, &msg, sizeof (msg), 0);--  if (res==0)-    {-      g_source_remove (gdk_display->manager_tag);-      /*g_io_channel_unref (kb->io);*/-      close (gdk_display->manager_fd);--    }--  if (res != sizeof (msg))-    {-      g_warning ("Got wrong size message");-      return TRUE;-    }-  -  switch (msg.msg_type)-    {-    case FB_MANAGER_SWITCH_FROM:-      g_print ("Got switch from message\n");-      display->manager_blocked = TRUE;-      gdk_fb_switch_from ();-      msg.msg_type = FB_MANAGER_ACK;-      send (display->manager_fd, &msg, sizeof (msg), 0);-      break;-    case FB_MANAGER_SWITCH_TO:-      g_print ("Got switch to message\n");-      display->manager_blocked = FALSE;-      gdk_fb_switch_to ();-      break;-    default:-      g_warning ("Got unknown message");-    }-  return TRUE;-}--#endif /* ENABLE_FB_MANAGER */--static void-gdk_fb_manager_connect (GdkFBDisplay *display)-{-#ifdef ENABLE_FB_MANAGER-  int fd;-  struct sockaddr_un addr;-  struct msghdr msg = {0};-  struct cmsghdr *cmsg;-  struct ucred credentials;-  struct FBManagerMessage init_msg;-  struct iovec iov;-  char buf[CMSG_SPACE (sizeof (credentials))];  /* ancillary data buffer */-  int *fdptr;-  int res;--  display->manager_blocked = FALSE;-  display->manager_fd = -1;--  fd = socket (PF_UNIX, SOCK_STREAM, 0);-  -  g_print ("socket: %d\n", fd);--  if (fd < 0)-    return;--  addr.sun_family = AF_UNIX;-  strcpy (addr.sun_path, "/tmp/.fb.manager");--  if (connect(fd, (struct sockaddr *)&addr, sizeof (addr)) < 0) -    {-      g_print ("connect failed\n");-      close (fd);-      return;-    }-  -  credentials.pid = getpid ();-  credentials.uid = geteuid ();-  credentials.gid = getegid ();--  init_msg.msg_type = FB_MANAGER_NEW_CLIENT;-  iov.iov_base = &init_msg;-  iov.iov_len = sizeof (init_msg);--  msg.msg_name = NULL;-  msg.msg_namelen = 0;-  msg.msg_iov = &iov;-  msg.msg_iovlen = 1;-  msg.msg_control = buf;-  msg.msg_controllen = sizeof buf;-  cmsg = CMSG_FIRSTHDR(&msg);-  cmsg->cmsg_level = SOL_SOCKET;-  cmsg->cmsg_type = SCM_CREDENTIALS;-  cmsg->cmsg_len = CMSG_LEN (sizeof (credentials));-  /* Initialize the payload: */-  fdptr = (int *)CMSG_DATA (cmsg);-  memcpy (fdptr, &credentials, sizeof (credentials));-  /* Sum of the length of all control messages in the buffer: */-  msg.msg_controllen = cmsg->cmsg_len;--  res = sendmsg (fd, &msg, 0);--  display->manager_fd = fd;-  display->manager_blocked = TRUE;--  display->manager_tag = g_io_add_watch (g_io_channel_unix_new (fd),-					 G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL,-					 gdk_fb_manager_callback,-					 display);--  init_msg.msg_type = FB_MANAGER_REQUEST_SWITCH_TO_PID;-  init_msg.data = getpid ();--  /* Request a switch-to */-  send (fd, &init_msg, sizeof (init_msg), 0);-#endif-}--static void-gdk_fb_switch (int sig)-{-  if (sig == SIGUSR1)-    {-      ioctl (gdk_display->tty_fd, VT_RELDISP, 1);-      _gdk_fb_is_active_vt = FALSE;-      gdk_shadow_fb_stop_updates ();-      gdk_fb_mouse_close ();-      gdk_fb_keyboard_close ();-    }-  else-    {-      GdkColormap *cmap;-      ioctl (gdk_display->tty_fd, VT_RELDISP, VT_ACKACQ);-      _gdk_fb_is_active_vt = TRUE;--      /* XXX: is it dangerous to put all this stuff in a signal handler? */-      cmap = gdk_screen_get_default_colormap (_gdk_screen);-      gdk_colormap_change (cmap, cmap->size);--      gdk_shadow_fb_update (0, 0,-			    gdk_display->fb_width,-			    gdk_display->fb_height);--      if (!gdk_fb_keyboard_open ())-        g_warning ("Failed to re-initialize keyboard");--      if (!gdk_fb_mouse_open ())-        g_warning ("Failed to re-initialize mouse");--      gdk_fb_redraw_all ();-    }-}--static GdkFBDisplay *-gdk_fb_display_new ()+static GdkFBDisplay * gdk_fb_display_new () {-  GdkFBDisplay *display;-  gchar *fb_filename;-  struct vt_stat vs;-  struct vt_mode vtm;-  int vt, n;-  gchar *s, *send;-  char buf[32];--  display = g_new0 (GdkFBDisplay, 1);--  display->console_fd = open ("/dev/console", O_RDWR);-  if (display->console_fd < 0)-    {-      g_warning ("Can't open /dev/console: %s", strerror (errno));-      g_free (display);-      return NULL;-    }-  -  ioctl (display->console_fd, VT_GETSTATE, &vs);-  display->start_vt = vs.v_active;--  vt = display->start_vt;-  s = getenv("GDK_VT");-  if (s)-    {-      if (g_ascii_strcasecmp ("new", s)==0)-	{-	  n = ioctl (display->console_fd, VT_OPENQRY, &vt);-	  if (n < 0 || vt == -1)-	    g_error("Cannot allocate new VT");-	}-      else-	{-	  vt = strtol (s, &send, 10);-	  if (s==send)-	    {-	      g_warning ("Cannot parse GDK_VT");-	      vt = display->start_vt;-	    }-	}-      -    }--  display->vt = vt;-  -  /* Switch to the new VT */-  if (vt != display->start_vt)-    {-      ioctl (display->console_fd, VT_ACTIVATE, vt);-      ioctl (display->console_fd, VT_WAITACTIVE, vt);-    }-  -  /* Open the tty */-  g_snprintf (buf, sizeof(buf), "/dev/tty%d", vt);-  display->tty_fd = open (buf, O_RDWR|O_NONBLOCK);-  if (display->tty_fd < 0)-    {-      g_warning ("Can't open %s: %s", buf, strerror (errno));-      close (display->console_fd);-      g_free (display);-      return NULL;-    }--  /* set up switch signals */-  if (ioctl (display->tty_fd, VT_GETMODE, &vtm) >= 0)-    {-      signal (SIGUSR1, gdk_fb_switch);-      signal (SIGUSR2, gdk_fb_switch);-      vtm.mode = VT_PROCESS;-      vtm.waitv = 0;-      vtm.relsig = SIGUSR1;-      vtm.acqsig = SIGUSR2;-      ioctl (display->tty_fd, VT_SETMODE, &vtm);-    }-  _gdk_fb_is_active_vt = TRUE;-  -  fb_filename = gdk_get_display ();-  display->fb_fd = open (fb_filename, O_RDWR);-  if (display->fb_fd < 0)-    {-      g_warning ("Can't open %s: %s", fb_filename, strerror (errno));-      g_free (fb_filename);-      close (display->tty_fd);-      close (display->console_fd);-      g_free (display);-      return NULL;-    }-  g_free (fb_filename);+	s_window_t *window;+	GdkFBDisplay *display; -  if (gdk_fb_set_mode (display) < 0)-    {-      close (display->fb_fd);-      close (display->tty_fd);-      close (display->console_fd);-      g_free (display);-      return NULL;-    }+	display = g_new0(GdkFBDisplay, 1); -  /* Disable normal text on the console */-  ioctl (display->fb_fd, KDSETMODE, KD_GRAPHICS);+	s_client_init(&window);+	s_window_new(window, WINDOW_MAIN | NO_FORM, NULL);+	s_window_set_coor(window, 0, 0, 0, window->surface->width, window->surface->height); -  ioctl (display->fb_fd, FBIOBLANK, 0);+	display->modeinfo.red.length		= window->surface->redlength;+	display->modeinfo.green.length		= window->surface->greenlength;+	display->modeinfo.blue.length		= window->surface->bluelength;+	display->modeinfo.red.offset		= window->surface->redoffset;+	display->modeinfo.green.offset		= window->surface->greenoffset;+	display->modeinfo.blue.offset		= window->surface->blueoffset;+	display->modeinfo.bits_per_pixel	= window->surface->bitsperpixel;+	display->modeinfo.xres			= window->surface->width;+	display->modeinfo.yres			= window->surface->height;+	display->modeinfo.xres_virtual		= window->surface->width;+	display->modeinfo.yres_virtual		= window->surface->height;+	display->sinfo.line_length		= window->surface->width * window->surface->bytesperpixel;+	display->sinfo.smem_len			= window->surface->width * window->surface->bytesperpixel;+	display->sinfo.visual			= FB_VISUAL_TRUECOLOR; -  /* We used to use sinfo.smem_len, but that seemed to be broken in many cases */-  display->fb_mmap = mmap (NULL,-			   display->modeinfo.yres * display->sinfo.line_length,-			   PROT_READ|PROT_WRITE,-			   MAP_SHARED,-			   display->fb_fd,-			   0);-  g_assert (display->fb_mmap != MAP_FAILED);+	display->fb_mmap = window->surface->vbuf; -  if (display->sinfo.visual == FB_VISUAL_TRUECOLOR)-    {-      display->red_byte = display->modeinfo.red.offset >> 3;-      display->green_byte = display->modeinfo.green.offset >> 3;-      display->blue_byte = display->modeinfo.blue.offset >> 3;-    }+	display->red_byte = display->modeinfo.red.offset >> 3;+	display->green_byte = display->modeinfo.green.offset >> 3;+	display->blue_byte = display->modeinfo.blue.offset >> 3;  #ifdef ENABLE_SHADOW_FB-  if (_gdk_fb_screen_angle % 2 == 0)-    {-      display->fb_width = display->modeinfo.xres;-      display->fb_height = display->modeinfo.yres;-    } -  else-    {-      display->fb_width = display->modeinfo.yres;-      display->fb_height = display->modeinfo.xres;-    }-  display->fb_stride =-    display->fb_width * (display->modeinfo.bits_per_pixel / 8);-  display->fb_mem = g_malloc(display->fb_height * display->fb_stride);+	if (_gdk_fb_screen_angle % 2 == 0) {+		display->fb_width = display->modeinfo.xres;+		display->fb_height = display->modeinfo.yres;+	} else {+		display->fb_width = display->modeinfo.yres;+		display->fb_height = display->modeinfo.xres;+	}+	display->fb_stride = display->sinfo.line_length;+	display->fb_mem = g_malloc(display->fb_height * display->fb_stride); #else-  display->fb_mem = display->fb_mmap;-  display->fb_width = display->modeinfo.xres;-  display->fb_height = display->modeinfo.yres;-  display->fb_stride = display->sinfo.line_length;+	display->fb_mem = display->fb_mmap;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -