コード例 #1
0
ファイル: gtkplotgdk.c プロジェクト: deweerdt/TSP
static void gtk_plot_gdk_draw_pixmap                (GtkPlotPC *pc,
                                                     GdkPixmap *pixmap,
                                                     GdkBitmap *mask,
                                                     gint xsrc, gint ysrc,
                                                     gint xdest, gint ydest,
                                                     gint width,
                                                     gint height,
                                                     gdouble scale_x, 
                                                     gdouble scale_y)
{
  GdkGC *gc;
  GdkPixmap *new_pixmap;
  GdkBitmap *new_mask = NULL;

  if(!GTK_PLOT_GDK(pc)->drawable) return;
  if(!GTK_PLOT_GDK(pc)->window) return;
  if(!GTK_PLOT_GDK(pc)->gc) return;

  gc = GTK_PLOT_GDK(pc)->gc;

  if(!gc) return;

  new_pixmap = scale_pixmap(GTK_PLOT_GDK(pc)->window, pixmap, scale_x, scale_y);
  
  if(mask)
    new_mask = scale_bitmap(GTK_PLOT_GDK(pc)->window, mask, scale_x, scale_y);

  gtk_plot_pc_clip_mask(pc, xdest, ydest, new_mask);
  gdk_draw_pixmap(GTK_PLOT_GDK(pc)->drawable, gc, new_pixmap,
                  xsrc, ysrc, xdest, ydest, width*scale_x, height*scale_y);
  gtk_plot_pc_clip_mask(pc, xdest, ydest, NULL);

  if(new_mask) gdk_bitmap_unref(new_mask);
  gdk_pixmap_unref(new_pixmap);
}
コード例 #2
0
ファイル: main.c プロジェクト: tlwg/xiterm-thai
/*
 * XTerm escape sequences: ESC ] Ps;Pt BEL
 *       0 = change iconName/title
 *       1 = change iconName
 *       2 = change title
 *      46 = change logfile (not implemented)
 *      50 = change font
 *
 * rxvt extensions:
 *      10 = menu
 *      20 = bg pixmap
 *      39 = change default fg color
 *      49 = change default bg color
 */
void
xterm_seq (int op, char *str)
{
  int changed = 0;

  assert (str != NULL);
  switch (op)
    {
    case XTerm_name:
      set_title (str);		/* drop */
    case XTerm_iconName:
      set_iconName (str);
      break;
    case XTerm_title:
      set_title (str);
      break;
    case XTerm_Menu:
      menubar_dispatch (str);
      break;
    case XTerm_Pixmap:
#ifdef XPM_BACKGROUND
      if (*str != ';')
	set_bgPixmap (str);

      while ((str = strchr (str, ';')) != NULL)
	{
	  str++;
	  changed += scale_pixmap (str);
	}
      if (changed)
	{
	  resize_pixmap ();
	  scr_touch ();
	}
#endif /* XPM_BACKGROUND */
      break;

    case XTerm_restoreFG:
      set_window_color (fgColor, str);
      break;
    case XTerm_restoreBG:
      set_window_color (bgColor, str);
      break;
    case XTerm_logfile:
      break;
    case XTerm_font:
      change_font (0, str);
      break;
    }
}
コード例 #3
0
ファイル: widget-box.c プロジェクト: AlfredArouna/grub2
static void
set_content_size (grub_gfxmenu_box_t self,
                  int width, int height)
{
  self->content_width = width;
  self->content_height = height;

  /* Resize sides to match the width and height.  */
  /* It is assumed that the corners width/height match the adjacent sides.  */

  /* Resize N and S sides to match width.  */
  if (scale_pixmap(self, BOX_PIXMAP_N, width, -1) != GRUB_ERR_NONE)
    return;
  if (scale_pixmap(self, BOX_PIXMAP_S, width, -1) != GRUB_ERR_NONE)
    return;

  /* Resize E and W sides to match height.  */
  if (scale_pixmap(self, BOX_PIXMAP_E, -1, height) != GRUB_ERR_NONE)
      return;
  if (scale_pixmap(self, BOX_PIXMAP_W, -1, height) != GRUB_ERR_NONE)
    return;

  /* Don't scale the corners--they are assumed to match the sides. */
  if (scale_pixmap(self, BOX_PIXMAP_NW, -1, -1) != GRUB_ERR_NONE)
    return;
  if (scale_pixmap(self, BOX_PIXMAP_SW, -1, -1) != GRUB_ERR_NONE)
    return;
  if (scale_pixmap(self, BOX_PIXMAP_NE, -1, -1) != GRUB_ERR_NONE)
    return;
  if (scale_pixmap(self, BOX_PIXMAP_SE, -1, -1) != GRUB_ERR_NONE)
    return;

  /* Scale the center area. */
  if (scale_pixmap(self, BOX_PIXMAP_CENTER, width, height) != GRUB_ERR_NONE)
    return;
}
コード例 #4
0
ファイル: main.c プロジェクト: tlwg/xiterm-thai
/*{{{ Create_Windows() - Open and map the window */
static void
Create_Windows (int argc, char *argv[])
{
  Cursor cursor;
  XClassHint classHint;
  XWMHints wmHint;
  int i, x, y, flags;
  unsigned int width, height;

  /*
   * grab colors before netscape does
   */
  for (i = 0;
       i < (Xdepth <= 2 ? 2 : NRS_COLORS);
       i++)
    {
      const char *const msg = "can't load color \"%s\"";
      XColor xcol;

      if (!rs_color[i])
	continue;

      if (!XParseColor (Xdisplay, Xcmap, rs_color[i], &xcol) ||
	  !XAllocColor (Xdisplay, Xcmap, &xcol))
	{
	  print_error (msg, rs_color[i]);
	  rs_color[i] = def_colorName[i];
	  if (!rs_color[i])
	    continue;
	  if (!XParseColor (Xdisplay, Xcmap, rs_color[i], &xcol) ||
	      !XAllocColor (Xdisplay, Xcmap, &xcol))
	    {
	      print_error (msg, rs_color[i]);
	      switch (i)
		{
		case fgColor:
		case bgColor:
		  /* fatal: need bg/fg color */
		  print_error ("aborting");
		  exit (EXIT_FAILURE);
		  break;
#ifndef NO_CURSORCOLOR
		case cursorColor:
		  xcol.pixel = PixColors[bgColor];
		  break;
		case cursorColor2:
		  xcol.pixel = PixColors[fgColor];
		  break;
#endif /* NO_CURSORCOLOR */
		default:
		  xcol.pixel = PixColors[bgColor];	/* None */
		  break;
		}
	    }
	}
      PixColors[i] = xcol.pixel;
    }

#ifndef NO_CURSORCOLOR
  if (Xdepth <= 2 || !rs_color[cursorColor])
    PixColors[cursorColor] = PixColors[bgColor];
  if (Xdepth <= 2 || !rs_color[cursorColor2])
    PixColors[cursorColor2] = PixColors[fgColor];
#endif /* NO_CURSORCOLOR */

#ifndef NO_BOLDUNDERLINE
  if (Xdepth <= 2 || !rs_color[colorBD])
    PixColors[colorBD] = PixColors[fgColor];
  if (Xdepth <= 2 || !rs_color[colorUL])
    PixColors[colorUL] = PixColors[fgColor];
#endif /* NO_BOLDUNDERLINE */

  /*
   * get scrollBar/menuBar shadow colors
   *
   * The calculations of topShadow/bottomShadow values are adapted
   * from the fvwm window manager.
   */
#ifndef XTERM_SCROLLBAR
  if (Xdepth <= 2)		/* Monochrome */
    {
      PixColors[scrollColor] = PixColors[bgColor];
      PixColors[topShadowColor] = PixColors[fgColor];
      PixColors[bottomShadowColor] = PixColors[fgColor];
    }
  else
    {
      XColor xcol, white;

      /* bottomShadowColor */
      xcol.pixel = PixColors[scrollColor];
      XQueryColor (Xdisplay, Xcmap, &xcol);

      xcol.red = ((xcol.red) / 2);
      xcol.green = ((xcol.green) / 2);
      xcol.blue = ((xcol.blue) / 2);

      if (!XAllocColor (Xdisplay, Xcmap, &xcol))
	{
	  print_error ("can't allocate %s", "bottomShadowColor");
	  xcol.pixel = PixColors[minColor];
	}
      PixColors[bottomShadowColor] = xcol.pixel;

      /* topShadowColor */
      white.pixel = WhitePixel (Xdisplay, Xscreen);
      XQueryColor (Xdisplay, Xcmap, &white);

      xcol.pixel = PixColors[scrollColor];
      XQueryColor (Xdisplay, Xcmap, &xcol);

#ifndef min
#define min(a,b) (((a)<(b)) ? (a) : (b))
#define max(a,b) (((a)>(b)) ? (a) : (b))
#endif
      xcol.red = max ((white.red / 5), xcol.red);
      xcol.green = max ((white.green / 5), xcol.green);
      xcol.blue = max ((white.blue / 5), xcol.blue);

      xcol.red = min (white.red, (xcol.red * 7) / 5);
      xcol.green = min (white.green, (xcol.green * 7) / 5);
      xcol.blue = min (white.blue, (xcol.blue * 7) / 5);

      if (!XAllocColor (Xdisplay, Xcmap, &xcol))
	{
	  print_error ("can't allocate %s", "topShadowColor");
	  xcol.pixel = PixColors[whiteColor];
	}
      PixColors[topShadowColor] = xcol.pixel;
    }
#endif /* XTERM_SCROLLBAR */

  szHint.base_width = (2 * TermWin_internalBorder +
		       (Options & Opt_scrollBar ? SB_WIDTH : 0));
  szHint.base_height = (2 * TermWin_internalBorder);

  flags = (rs_geometry ?
	   XParseGeometry (rs_geometry, &x, &y, &width, &height) : 0);

  if (flags & WidthValue)
    {
      szHint.width = width;
      szHint.flags |= USSize;
    }
  if (flags & HeightValue)
    {
      szHint.height = height;
      szHint.flags |= USSize;
    }

  TermWin.ncol = szHint.width;
  TermWin.nrow = szHint.height;

  change_font (1, NULL);

  if (flags & XValue)
    {
      if (flags & XNegative)
	{
	  x += (DisplayWidth (Xdisplay, Xscreen)
		- (szHint.width + TermWin_internalBorder));
	  szHint.win_gravity = NorthEastGravity;
	}
      szHint.x = x;
      szHint.flags |= USPosition;
    }
  if (flags & YValue)
    {
      if (flags & YNegative)
	{
	  y += (DisplayHeight (Xdisplay, Xscreen)
		- (szHint.height + TermWin_internalBorder));
	  szHint.win_gravity = (szHint.win_gravity == NorthEastGravity ?
				SouthEastGravity : SouthWestGravity);
	}
      szHint.y = y;
      szHint.flags |= USPosition;
    }

  /* parent window - reverse video so we can see placement errors
   * sub-window placement & size in resize_subwindows()
   */

  TermWin.parent = XCreateSimpleWindow (Xdisplay, Xroot,
					szHint.x, szHint.y,
					szHint.width, szHint.height,
					BORDERWIDTH,
					PixColors[bgColor],
					PixColors[fgColor]);

  xterm_seq (XTerm_title, rs_title);
  xterm_seq (XTerm_iconName, rs_iconName);
  /* ignore warning about discarded `const' */
  classHint.res_name = rs_name;
  classHint.res_class = APL_CLASS;
  wmHint.input = True;
  wmHint.initial_state = (Options & Opt_iconic ? IconicState : NormalState);
  wmHint.flags = (InputHint | StateHint);

  XSetWMProperties (Xdisplay, TermWin.parent, NULL, NULL, argv, argc,
		    &szHint, &wmHint, &classHint);

  XSelectInput (Xdisplay, TermWin.parent,
		(KeyPressMask | FocusChangeMask |
		 StructureNotifyMask | VisibilityChangeMask)
    );

  /* vt cursor: Black-on-White is standard, but this is more popular */
  TermWin_cursor = XCreateFontCursor (Xdisplay, XC_xterm);
  {
    XColor fg, bg;
    fg.pixel = PixColors[fgColor];
    XQueryColor (Xdisplay, Xcmap, &fg);
    bg.pixel = PixColors[bgColor];
    XQueryColor (Xdisplay, Xcmap, &bg);
    XRecolorCursor (Xdisplay, TermWin_cursor, &fg, &bg);
  }

  /* cursor (menuBar/scrollBar): Black-on-White */
  cursor = XCreateFontCursor (Xdisplay, XC_left_ptr);

  /* the vt window */
  TermWin.vt = XCreateSimpleWindow (Xdisplay, TermWin.parent,
				    0, 0,
				    szHint.width, szHint.height,
				    0,
				    PixColors[fgColor],
				    PixColors[bgColor]);

  XDefineCursor (Xdisplay, TermWin.vt, TermWin_cursor);
  XSelectInput (Xdisplay, TermWin.vt,
		(ExposureMask | ButtonPressMask | ButtonReleaseMask |
		 Button1MotionMask | Button3MotionMask));

  XMapWindow (Xdisplay, TermWin.vt);
  XMapWindow (Xdisplay, TermWin.parent);

  /* scrollBar: size doesn't matter */
  scrollBar.win = XCreateSimpleWindow (Xdisplay, TermWin.parent,
				       0, 0,
				       1, 1,
				       0,
				       PixColors[fgColor],
				       PixColors[bgColor]);

  XDefineCursor (Xdisplay, scrollBar.win, cursor);
  XSelectInput (Xdisplay, scrollBar.win,
		(ExposureMask | ButtonPressMask | ButtonReleaseMask |
		 Button1MotionMask | Button2MotionMask | Button3MotionMask)
    );

#ifndef NO_MENUBAR
  /* menuBar: size doesn't matter */
  menuBar.win = XCreateSimpleWindow (Xdisplay, TermWin.parent,
				     0, 0,
				     1, 1,
				     0,
				     PixColors[fgColor],
				     PixColors[scrollColor]);
  XDefineCursor (Xdisplay, menuBar.win, cursor);
  XSelectInput (Xdisplay, menuBar.win,
		(ExposureMask | ButtonPressMask | ButtonReleaseMask |
		 Button1MotionMask)
    );
#endif /* NO_MENUBAR */

#ifdef XPM_BACKGROUND
  if (rs_backgroundPixmap != NULL)
    {
      char *p = rs_backgroundPixmap;
      if ((p = strchr (p, ';')) != NULL)
	{
	  p++;
	  scale_pixmap (p);
	}

      set_bgPixmap (rs_backgroundPixmap);
    }
#endif /* XPM_BACKGROUND */

  /* graphics context for the vt window */
  {
    XGCValues gcvalue;
    gcvalue.font = TermWin.font->fid;
    gcvalue.foreground = PixColors[fgColor];
    gcvalue.background = PixColors[bgColor];
    TermWin.gc = XCreateGC (Xdisplay, TermWin.vt,
			    GCForeground | GCBackground | GCFont,
			    &gcvalue);
  }
}