Blame tests/testcellrenderertext.c

Packit 98cdb6
/* GTK - The GIMP Toolkit
Packit 98cdb6
 * testcellrenderertext.c: Tests for the various properties of GtkCellRendererText
Packit 98cdb6
 * Copyright (C) 2005, Novell, Inc.
Packit 98cdb6
 *
Packit 98cdb6
 * Authors:
Packit 98cdb6
 *   Federico Mena-Quintero <federico@novell.com>
Packit 98cdb6
 *
Packit 98cdb6
 * This library is free software; you can redistribute it and/or
Packit 98cdb6
 * modify it under the terms of the GNU Lesser General Public
Packit 98cdb6
 * License as published by the Free Software Foundation; either
Packit 98cdb6
 * version 2 of the License, or (at your option) any later version.
Packit 98cdb6
 *
Packit 98cdb6
 * This library is distributed in the hope that it will be useful,
Packit 98cdb6
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 98cdb6
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 98cdb6
 * Lesser General Public License for more details.
Packit 98cdb6
 *
Packit 98cdb6
 * You should have received a copy of the GNU Lesser General Public
Packit 98cdb6
 * License along with this library; if not, write to the
Packit 98cdb6
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 98cdb6
 * Boston, MA 02111-1307, USA.
Packit 98cdb6
 */
Packit 98cdb6
Packit 98cdb6
#include <gtk/gtk.h>
Packit 98cdb6
Packit 98cdb6
#define COL_BACKGROUND 15
Packit 98cdb6
#define COL_LINE_NUM   16
Packit 98cdb6
#define NUM_COLS       17 /* change this when adding columns */
Packit 98cdb6
Packit 98cdb6
struct cell_params {
Packit 98cdb6
  char *description;			/* 0 */
Packit 98cdb6
  char *test;				/* 1 */
Packit 98cdb6
  int xpad;				/* 2 */
Packit 98cdb6
  int ypad;				/* 3 */
Packit 98cdb6
  double xalign;			/* 4 */
Packit 98cdb6
  double yalign;			/* 5 */
Packit 98cdb6
  gboolean sensitive;			/* 6 */
Packit 98cdb6
  int width;				/* 7 */
Packit 98cdb6
  int height;				/* 8 */
Packit 98cdb6
  int width_chars;			/* 9 */
Packit 98cdb6
  int wrap_width;			/* 10 */
Packit 98cdb6
  PangoWrapMode wrap_mode;		/* 11 */
Packit 98cdb6
  gboolean single_paragraph_mode;	/* 12 */
Packit 98cdb6
  PangoEllipsizeMode ellipsize;		/* 13 */
Packit 98cdb6
  PangoAlignment alignment;			/* 14 */
Packit 98cdb6
  /* COL_BACKGROUND	 */		/* 15 */
Packit 98cdb6
  /* COL_LINE_NUM */			/* 16 */
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
#define WO PANGO_WRAP_WORD
Packit 98cdb6
#define CH PANGO_WRAP_CHAR
Packit 98cdb6
#define WC PANGO_WRAP_WORD_CHAR
Packit 98cdb6
Packit 98cdb6
#define NO PANGO_ELLIPSIZE_NONE
Packit 98cdb6
#define ST PANGO_ELLIPSIZE_START
Packit 98cdb6
#define MI PANGO_ELLIPSIZE_MIDDLE
Packit 98cdb6
#define EN PANGO_ELLIPSIZE_END
Packit 98cdb6
Packit 98cdb6
#define AL PANGO_ALIGN_LEFT
Packit 98cdb6
#define AC PANGO_ALIGN_CENTER
Packit 98cdb6
#define AR PANGO_ALIGN_RIGHT
Packit 98cdb6
Packit 98cdb6
#define TESTL "LEFT JUSTIFIED This is really truly verily some very long text\n\330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205 \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205 \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205"
Packit 98cdb6
Packit 98cdb6
#define TESTC "CENTERED This is really truly verily some very long text\n\330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205 \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205 \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205"
Packit 98cdb6
Packit 98cdb6
#define TESTR "RIGHT JUSTIFIED This is really truly verily some very long text\n\330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205 \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205 \330\247\331\204\330\263\331\204\330\247\331\205 \330\271\331\204\331\212\331\203\331\205"
Packit 98cdb6
Packit 98cdb6
Packit 98cdb6
/* DO NOT CHANGE THE ROWS!  They are numbered so that we can refer to
Packit 98cdb6
 * problematic rows in bug reports.  If you need a different test, just add a
Packit 98cdb6
 * new row at the bottom.  Also, please add your new row numbers to this column -------------------------------+
Packit 98cdb6
 * to keep things tidy.                                                                                        v
Packit 98cdb6
 */
Packit 98cdb6
static const struct cell_params cell_params[] = {
Packit 98cdb6
  { "xp yp xa ya se wi he wc ww wm sp el", "",    0,  0, 0.0, 0.5, TRUE,  -1, -1, -1, -1, CH, FALSE, NO },  /* 0 */
Packit 98cdb6
Packit 98cdb6
  /* Test alignment */
Packit 98cdb6
Packit 98cdb6
  { "0  0  0  0  T  -1 -1 -1 -1 CH F  NO", TESTL,  0,  0, 0.0, 0.0, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 1 */
Packit 98cdb6
  { "0  0  .5 0  T  -1 -1 -1 -1 CH F  NO", TESTC,  0,  0, 0.5, 0.0, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 2 */
Packit 98cdb6
  { "0  0  1  0  T  -1 -1 -1 -1 CH F  NO", TESTR,  0,  0, 1.0, 0.0, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 3 */
Packit 98cdb6
  { "0  0  0  .5 T  -1 -1 -1 -1 CH F  NO", TESTL,  0,  0, 0.0, 0.5, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 4 */
Packit 98cdb6
  { "0  0  .5 .5 T  -1 -1 -1 -1 CH F  NO", TESTC,  0,  0, 0.5, 0.5, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 5 */
Packit 98cdb6
  { "0  0  1  .5 T  -1 -1 -1 -1 CH F  NO", TESTR,  0,  0, 1.0, 0.5, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 6 */
Packit 98cdb6
  { "0  0  0  1  T  -1 -1 -1 -1 CH F  NO", TESTL,  0,  0, 0.0, 1.0, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 7 */
Packit 98cdb6
  { "0  0  .5 1  T  -1 -1 -1 -1 CH F  NO", TESTC,  0,  0, 0.5, 1.0, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 8 */
Packit 98cdb6
  { "0  0  1  1  T  -1 -1 -1 -1 CH F  NO", TESTR,  0,  0, 1.0, 1.0, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 9 */
Packit 98cdb6
Packit 98cdb6
  /* Test padding */
Packit 98cdb6
Packit 98cdb6
  { "10 10 0  0  T  -1 -1 -1 -1 CH F  NO", TESTL, 10, 10, 0.0, 0.0, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 10 */
Packit 98cdb6
  { "10 10 .5 0  T  -1 -1 -1 -1 CH F  NO", TESTC, 10, 10, 0.5, 0.0, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 11 */
Packit 98cdb6
  { "10 10 1  0  T  -1 -1 -1 -1 CH F  NO", TESTR, 10, 10, 1.0, 0.0, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 12 */
Packit 98cdb6
  { "10 10 0  .5 T  -1 -1 -1 -1 CH F  NO", TESTL, 10, 10, 0.0, 0.5, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 13 */
Packit 98cdb6
  { "10 10 .5 .5 T  -1 -1 -1 -1 CH F  NO", TESTC, 10, 10, 0.5, 0.5, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 14 */
Packit 98cdb6
  { "10 10 1  .5 T  -1 -1 -1 -1 CH F  NO", TESTR, 10, 10, 1.0, 0.5, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 15 */
Packit 98cdb6
  { "10 10 0  1  T  -1 -1 -1 -1 CH F  NO", TESTL, 10, 10, 0.0, 1.0, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 16 */
Packit 98cdb6
  { "10 10 .5 1  T  -1 -1 -1 -1 CH F  NO", TESTC, 10, 10, 0.5, 1.0, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 17 */
Packit 98cdb6
  { "10 10 1  1  T  -1 -1 -1 -1 CH F  NO", TESTR, 10, 10, 1.0, 1.0, TRUE,  -1, -1, -1, -1, CH, FALSE, NO , AL }, /* 18 */
Packit 98cdb6
Packit 98cdb6
  /* Test Pango alignment (not xalign) */
Packit 98cdb6
  { "0  0  0  0  T  -1 -1 -1 -1 CH F  NO AL", TESTL,  0,  0, 0.0, 0.0, TRUE,  -1, -1, -1, 20, WO, FALSE, NO , AL }, /* 19 */
Packit 98cdb6
  { "0  0  0  0  T  -1 -1 -1 -1 CH F  NO AC", TESTC,  0,  0, 0.0, 0.0, TRUE,  -1, -1, -1, 20, WO, FALSE, NO , AC }, /* 20 */
Packit 98cdb6
  { "0  0  0  0  T  -1 -1 -1 -1 CH F  NO AR", TESTR,  0,  0, 0.0, 0.0, TRUE,  -1, -1, -1, 20, WO, FALSE, NO , AR }, /* 21 */
Packit 98cdb6
};
Packit 98cdb6
Packit 98cdb6
static GtkListStore *
Packit 98cdb6
create_list_store (void)
Packit 98cdb6
{
Packit 98cdb6
  GtkListStore *list_store;
Packit 98cdb6
  int i;
Packit 98cdb6
Packit 98cdb6
  list_store = gtk_list_store_new (NUM_COLS,
Packit 98cdb6
				   G_TYPE_STRING,		/* 0 */ 
Packit 98cdb6
				   G_TYPE_STRING,		/* 1 */ 
Packit 98cdb6
				   G_TYPE_INT,			/* 2 */ 
Packit 98cdb6
				   G_TYPE_INT,			/* 3 */ 
Packit 98cdb6
				   G_TYPE_DOUBLE,		/* 4 */ 
Packit 98cdb6
				   G_TYPE_DOUBLE,		/* 5 */ 
Packit 98cdb6
				   G_TYPE_BOOLEAN,		/* 6 */ 
Packit 98cdb6
				   G_TYPE_INT,			/* 7 */ 
Packit 98cdb6
				   G_TYPE_INT,			/* 8 */ 
Packit 98cdb6
				   G_TYPE_INT,			/* 9 */ 
Packit 98cdb6
				   G_TYPE_INT,			/* 10 */
Packit 98cdb6
				   PANGO_TYPE_WRAP_MODE,	/* 11 */
Packit 98cdb6
				   G_TYPE_BOOLEAN,		/* 12 */
Packit 98cdb6
				   PANGO_TYPE_ELLIPSIZE_MODE,	/* 13 */
Packit 98cdb6
				   PANGO_TYPE_ALIGNMENT,	/* 14 */
Packit 98cdb6
				   G_TYPE_STRING,		/* 15 */
Packit 98cdb6
				   G_TYPE_STRING);		/* 16 */
Packit 98cdb6
Packit 98cdb6
  for (i = 0; i < G_N_ELEMENTS (cell_params); i++)
Packit 98cdb6
    {
Packit 98cdb6
      const struct cell_params *p;
Packit 98cdb6
      GtkTreeIter iter;
Packit 98cdb6
      char buf[50];
Packit 98cdb6
Packit 98cdb6
      p = cell_params + i;
Packit 98cdb6
Packit 98cdb6
      g_snprintf (buf, sizeof (buf), "%d", i);
Packit 98cdb6
Packit 98cdb6
      gtk_list_store_append (list_store, &iter);
Packit 98cdb6
      gtk_list_store_set (list_store, &iter,
Packit 98cdb6
			  0, p->description,
Packit 98cdb6
			  1, p->test,
Packit 98cdb6
			  2, p->xpad,
Packit 98cdb6
			  3, p->ypad,
Packit 98cdb6
			  4, p->xalign,
Packit 98cdb6
			  5, p->yalign,
Packit 98cdb6
			  6, p->sensitive,
Packit 98cdb6
			  7, p->width,
Packit 98cdb6
			  8, p->height,
Packit 98cdb6
			  9, p->width_chars,
Packit 98cdb6
			  10, p->wrap_width,
Packit 98cdb6
			  11, p->wrap_mode,
Packit 98cdb6
			  12, p->single_paragraph_mode,
Packit 98cdb6
			  13, p->ellipsize,
Packit 98cdb6
			  14, p->alignment,
Packit 98cdb6
			  15, (i % 2 == 0) ? "gray50" : "gray80",
Packit 98cdb6
			  16, buf,
Packit 98cdb6
			  -1);
Packit 98cdb6
    }
Packit 98cdb6
Packit 98cdb6
  return list_store;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static GtkWidget *
Packit 98cdb6
create_tree (gboolean rtl)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *sw;
Packit 98cdb6
  GtkWidget *treeview;
Packit 98cdb6
  GtkListStore *list_store;
Packit 98cdb6
  GtkTreeViewColumn *column;
Packit 98cdb6
  GtkCellRenderer *renderer;
Packit 98cdb6
  GdkPixbuf *pixbuf;
Packit 98cdb6
Packit 98cdb6
  sw = gtk_scrolled_window_new (NULL, NULL);
Packit 98cdb6
  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);
Packit 98cdb6
  gtk_widget_set_direction (sw, rtl ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR);
Packit 98cdb6
Packit 98cdb6
  list_store = create_list_store ();
Packit 98cdb6
Packit 98cdb6
  treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
Packit 98cdb6
  gtk_widget_set_direction (treeview, rtl ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR);
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (sw), treeview);
Packit 98cdb6
Packit 98cdb6
  /* Line number */
Packit 98cdb6
Packit 98cdb6
  renderer = gtk_cell_renderer_text_new ();
Packit 98cdb6
  column = gtk_tree_view_column_new_with_attributes ("#",
Packit 98cdb6
						     renderer,
Packit 98cdb6
						     "text", COL_LINE_NUM,
Packit 98cdb6
						     NULL);
Packit 98cdb6
  gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
Packit 98cdb6
Packit 98cdb6
  /* Description */
Packit 98cdb6
Packit 98cdb6
  renderer = gtk_cell_renderer_text_new ();
Packit 98cdb6
  g_object_set (renderer,
Packit 98cdb6
		"font", "monospace",
Packit 98cdb6
		NULL);
Packit 98cdb6
  column = gtk_tree_view_column_new_with_attributes ("Description",
Packit 98cdb6
						     renderer,
Packit 98cdb6
						     "text", 0,
Packit 98cdb6
						     NULL);
Packit 98cdb6
  gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
Packit 98cdb6
Packit 98cdb6
  /* Test text */
Packit 98cdb6
Packit 98cdb6
  renderer = gtk_cell_renderer_text_new ();
Packit 98cdb6
  column = gtk_tree_view_column_new_with_attributes ("Test",
Packit 98cdb6
						     renderer,
Packit 98cdb6
						     "text", 1,
Packit 98cdb6
						     "xpad", 2,
Packit 98cdb6
						     "ypad", 3,
Packit 98cdb6
						     "xalign", 4,
Packit 98cdb6
						     "yalign", 5,
Packit 98cdb6
						     "sensitive", 6,
Packit 98cdb6
						     "width", 7,
Packit 98cdb6
						     "height", 8,
Packit 98cdb6
						     "width_chars", 9,
Packit 98cdb6
						     "wrap_width", 10,
Packit 98cdb6
						     "wrap_mode", 11,
Packit 98cdb6
						     "single_paragraph_mode", 12,
Packit 98cdb6
						     "ellipsize", 13,
Packit 98cdb6
						     "alignment", 14,
Packit 98cdb6
						     "cell_background", 15,
Packit 98cdb6
						     NULL);
Packit 98cdb6
  gtk_tree_view_column_set_resizable (column, TRUE);
Packit 98cdb6
  gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
Packit 98cdb6
Packit 98cdb6
  /* Empty column */
Packit 98cdb6
Packit 98cdb6
  pixbuf = gdk_pixbuf_new_from_file ("apple-red.png", NULL);
Packit 98cdb6
Packit 98cdb6
  renderer = gtk_cell_renderer_pixbuf_new ();
Packit 98cdb6
  g_object_set (renderer,
Packit 98cdb6
		"pixbuf", pixbuf,
Packit 98cdb6
		"xpad", 10,
Packit 98cdb6
		"ypad", 10,
Packit 98cdb6
		NULL);
Packit 98cdb6
  column = gtk_tree_view_column_new_with_attributes ("Empty",
Packit 98cdb6
						     renderer,
Packit 98cdb6
						     NULL);
Packit 98cdb6
  gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
Packit 98cdb6
Packit 98cdb6
  return sw;
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
int
Packit 98cdb6
main (int argc, char **argv)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *window;
Packit 98cdb6
  GtkWidget *vbox;
Packit 98cdb6
  GtkWidget *label;
Packit 98cdb6
  GtkWidget *tree;
Packit 98cdb6
Packit 98cdb6
  gtk_init (&argc, &argv);
Packit 98cdb6
Packit 98cdb6
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Packit 98cdb6
  g_signal_connect (window, "destroy",
Packit 98cdb6
		    G_CALLBACK (gtk_main_quit), NULL);
Packit 98cdb6
  gtk_container_set_border_width (GTK_CONTAINER (window), 12);
Packit 98cdb6
Packit 98cdb6
  vbox = gtk_vbox_new (FALSE, 12);
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (window), vbox);
Packit 98cdb6
Packit 98cdb6
  /* LTR */
Packit 98cdb6
Packit 98cdb6
  label = gtk_label_new ("Left to right");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  tree = create_tree (FALSE);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), tree, TRUE, TRUE, 0);
Packit 98cdb6
Packit 98cdb6
  /* RTL */
Packit 98cdb6
Packit 98cdb6
  label = gtk_label_new ("Right to left");
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
Packit 98cdb6
Packit 98cdb6
  tree = create_tree (TRUE);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), tree, TRUE, TRUE, 0);
Packit 98cdb6
Packit 98cdb6
  gtk_widget_show_all (window);
Packit 98cdb6
  gtk_main ();
Packit 98cdb6
Packit 98cdb6
  return 0;
Packit 98cdb6
}