1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
   |  
#include <gtk/gtk.h> 
#define WIDTH 500 
#define HEIGHT 300 
 
typedef struct APPLICATION 
{ 
  GtkWidget *pWin; 
  GtkWidget *pDrawArea; 
  GtkWidget *pVBox; 
  GtkWidget *pScrollBar; 
 
}APPLICATION; 
 
GdkPixmap *pPixmap = NULL; 
 
static gboolean configure_event(GtkWidget *widget, GdkEventConfigure *event) 
{ 
  if(pPixmap) g_object_unref(pPixmap); 
 
  pPixmap = gdk_pixmap_new(widget->window, widget->allocation.width, 
                                          widget->allocation.height, -1); 
  gdk_draw_rectangle (pPixmap, widget->style->white_gc, TRUE, 0, 0, 
                                                     widget->allocation.width, 
                                                     widget->allocation.height); 
  return TRUE; 
} 
 
static gboolean draw_cb(GtkWidget *drawArea, GdkEventExpose *event, gpointer userData) 
{ 
   gdk_draw_drawable(drawArea->window, drawArea->style->fg_gc[GTK_WIDGET_STATE (drawArea)], 
                                        pPixmap, event->area.x, event->area.y, 
                                        event->area.x, event->area.y, 
                                        event->area.width, event->area.height); 
 
   PangoContext *pContext = gtk_widget_get_pango_context(drawArea); 
   PangoLayout *pLayout = pango_layout_new(pContext); 
    int i; 
    for(i = 0; i < 30; i++) 
    { 
      pango_layout_set_text (pLayout, "Test clipping", 14); 
     gdk_draw_layout (drawArea->window, drawArea->style->fg_gc[GTK_WIDGET_STATE(drawArea)], 
                                                                         0,i * 15, pLayout); 
    } 
   g_object_unref(pLayout); 
   return FALSE; 
} 
 
int main (int argc, char *argv[]) 
{ 
  APPLICATION myApp; 
  gtk_init(&argc, &argv); 
 
  myApp.pWin = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
  gtk_window_set_default_size(GTK_WINDOW(myApp.pWin), WIDTH, HEIGHT); 
  g_signal_connect(G_OBJECT(myApp.pWin), "destroy", G_CALLBACK(gtk_main_quit), NULL); 
  myApp.pVBox = gtk_vbox_new(FALSE, 0); 
  gtk_container_add(GTK_CONTAINER(myApp.pWin), myApp.pVBox); 
  myApp.pScrollBar = gtk_scrolled_window_new(NULL,NULL); 
  gtk_box_pack_start(GTK_BOX(myApp.pVBox), myApp.pScrollBar, TRUE, TRUE, 0); 
  myApp.pDrawArea = gtk_drawing_area_new (); 
  gtk_box_pack_start(GTK_BOX(myApp.pScrollBar), myApp.pDrawArea, TRUE, TRUE, 0); 
  gtk_widget_set_size_request (myApp.pDrawArea, myApp.pWin->allocation.width, 500); 
  g_signal_connect(G_OBJECT(myApp.pDrawArea),"expose_event",G_CALLBACK(draw_cb), &myApp); 
  g_signal_connect(G_OBJECT(myApp.pDrawArea),"configure_event", G_CALLBACK (configure_event), NULL); 
  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(myApp.pScrollBar), myApp.pDrawArea); 
  gtk_window_set_title(GTK_WINDOW(myApp.pWin), "GTK-Win"); 
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(myApp.pScrollBar), GTK_POLICY_NEVER,GTK_POLICY_AUTOMATIC); 
 
  gtk_widget_show_all (myApp.pWin); 
  gtk_main (); 
  return 0; 
} |