Code Search for Developers
 
 
  

main2.cc from gzz at Krugle


Show main2.cc syntax highlighted

#include "ZZBLines.h"
#include "ZZBSizes.h" 
#include "ZZBRenderer.h"
#include "ZZBBulge.h"

#include <gtk/gtk.h>

#include <libart_lgpl/art_misc.h>
#include <libart_lgpl/art_rgb_bitmap_affine.h>
#include <libart_lgpl/art_affine.h>
#include <unistd.h>
#include "suckfont.h"
#include <math.h>
#include <gdk/gdkkeysyms.h>

// for file reading
#include <fstream.h>

// for oGL stuff
#include <GL/glut.h>
// use openGL ?
//#define OPEN_GL
//#undef GDKRGB

/* Use gdkrgb instead of imlib? */
#define GDKRGB
/* Use a pixmap between the rendering and the window? */
#undef USE_PIXMAP

#ifndef GDKRGB
extern "C" {
#include <Imlib2.h>
}
#endif

#define IMGX 500
#define IMGY 600

/* gtk widgets */
GtkWidget *window1;
GtkWidget *table1;
GtkWidget *handlebox;
GtkWidget *table_handle;
GtkWidget *drawingarea;


#ifdef USE_PIXMAP
GdkPixmap *pixmap;
#else 
#define pixmap w
#endif

GdkColormap *bestcmap=0;

GdkVisual *bestvisual;

ZZBBulge *b;
ZZBLines *lines;
GdkGC    *gc;
guchar   img[IMGX*IMGY];

int bulge;

unsigned argbimg[IMGX*IMGY];

ZZBRenderer *r;
GdkWindow *w;

// mouse button press coords
int but_x, but_y;


int updateadded = 0;

inline gint update_drawing_really (void *ptr) {
  if(!bestcmap) {
    bestcmap = gdk_window_get_colormap(
				       GTK_WIDGET(window1)->window);
  }
  updateadded = 0;
  // if(!ptr) return 0;
  r->renderLines(img, lines,  "-*-courier-*-*-*-*-60-*-*-*-*-*-*-*",0,0);
  //if ( j == 0 ) j = IMGX;
#ifdef GDKRGB
  gdk_draw_gray_image(pixmap,gc,0,0,IMGX, IMGY, GDK_RGB_DITHER_NONE, img, IMGX);
#else
  /*  
      for(int i=0; i<IMGX*IMGY; i++) {
      ((unsigned *)argbimg)[i] =
      (img[i] + (img[i] << 8) + (img[i] << 16));
      }
      Imlib_Image im = imlib_create_image_using_data(IMGX, IMGY, argbimg);
      imlib_render_image_on_drawable(im, 
      GDK_WINDOW_XDISPLAY(w),
      GDK_WINDOW_XWINDOW(pixmap),
      GDK_VISUAL_XVISUAL(bestvisual),
      GDK_COLORMAP_XCOLORMAP(bestcmap),
      16, 0, 0,
      0, 0, 0,IMLIB_OP_COPY);
  */ 
#endif
  
#ifdef USE_PIXMAP
  gdk_draw_pixmap(w,gc,pixmap,0,0,0,0, IMGX, IMGY );
#endif
  // gdk_flush();
  return 0;
} 

void update_drawing() {
  if(!updateadded) {
    gtk_idle_add(update_drawing_really, 0);
    updateadded = 1;
  }
}

/*
 * deleteEvent
 */

gint delete_event( GtkWidget *widget, GdkEvent  *event, gpointer   data ){
  gtk_main_quit();
  return FALSE;
}

gint button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data){
  but_x = event->x;
  but_y = event->y; 
}

static gint motion_notify_event (GtkWidget *widget, GdkEventMotion *event)
{
  int x, y;
  GdkModifierType state;
  
  if (event->is_hint)
    gdk_window_get_pointer (event->window, &x, &y, &state);
  else
    {
      x = event->x;
      y = event->y;
      state = (GdkModifierType)event->state;
    }
  int i=0,j=0;
  if (state & GDK_BUTTON1_MASK && pixmap != NULL) {
    //b->moveBulge( (y - but_y)/2);
    lines->move_bulge( bulge, (y - but_y)/2);
    update_drawing();
    but_x = x;
    but_y = y;
  }
  return TRUE;
}

static gint key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data){   
  int i=0,j=0;
  //if ( b == NULL ) return 0;
  switch (event->keyval) {
    
  case GDK_Up:
    //g_print("up");
    lines->move_bulge(bulge,-1);
    break;
  case GDK_Down:
    //g_print("down");
    lines->move_bulge( bulge,1);
    break;
  case GDK_Page_Down:
    //g_print("down");
    lines->move_bulge( bulge, 10 );
    break;
  case GDK_Page_Up:
    //g_print("down");
    lines->move_bulge( bulge, -10);
    break;
    
  }
  update_drawing();
  return 0;
  
  //r->flush(img);
}

gint expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) {
  
  gdk_draw_pixmap(widget->window,
		  widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
		  pixmap,
		  event->area.x, event->area.y,
		  event->area.x, event->area.y,           
		  event->area.width, event->area.height);
  
  //r->renderLines(img, lines,  "-*-courier-*-*-*-*-60-*-*-*-*-*-*-*",1);
  //r->flush();
  return TRUE;
} 

/*
 * readFile
 */


ZZBLines *readFile(char *file){
  ifstream istr(file);
  if ( ! istr  ) return NULL;
  char txt[81]; 
  
  istr.getline(txt,80);
  txt[81] = '\0';
  
  ZZBLines *lines = new ZZBLines();
  int i = 0;
  while ( istr /* i < 200*/ ){
    lines->setLine(i, NULL, txt, 2);
    istr.getline(txt,80, '\n');
    txt[81]=0;
    
    g_print("%d: %s\n",i, lines->getLine(i,NULL));
    
    i++;
    
  }  
  return lines;
  
}
#ifdef OPEN_GL
void init();
void display();
void reshape(int w, int h);

void init(void)
{    
  glClearColor (0.0, 0.0, 0.0, 0.0);
  glShadeModel(GL_FLAT);
  //makeCheckImage();
  glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
}

inline void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  glRasterPos2i(0, 0);
  //glRasterPos2i(0, IMGY);
  //glPixelZoom(1.0,-1.0);
  glDrawPixels(IMGX, IMGY, /*GL_RGB*/ GL_LUMINANCE, 
  	       GL_UNSIGNED_BYTE, img);
  //glPixelZoom(1,1);
  glutSwapBuffers();
  //glutPostRedisplay();
  //glFlush();
}

void reshape(int w, int h)
{
  glViewport(0, 0, (GLsizei) w, (GLsizei) h);
  //height = (GLint) h;
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h );
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}

void motion(int x, int y){
  
  //static GLint screeny;
  
  //screeny = height - (GLint) y;
  //glRasterPos2i (x, screeny);
  //glPixelZoom (1.0, -1.0);
  //glCopyPixels (0, 0, IMGX, IMGY, GL_COLOR);
  //glPixelZoom (1.0, 1.0);
  //glutSwapBuffers();
  //glFlush ();
}

inline void keyboard(unsigned char key, int x, int y){   
  //int i=0,j=0;
  //if ( b == NULL ) return 0;
  switch (key) {
    
  case 'e':
    //g_print("up");
    lines->move_bulge(bulge,-1);
    break;
  case 'c':
    //g_print("down");
    lines->move_bulge( bulge,1);
    break;
    //case GDK_Page_Down:
    //g_print("down");
    //lines->move_bulge( bulge, 10 );
    //break;
    //case GDK_Page_Up:
    //g_print("down");
    //lines->move_bulge( bulge, -10);
  default:
    return;
    break;
    
  }
    //update_drawing();
  //update_drawing();
  if ( updateadded ) {
    r->renderLines(img, lines,  "-*-courier-*-*-*-*-60-*-*-*-*-*-*-*",0,0);
    glutPostRedisplay();
    updateadded = 0;
  }
  else 
    updateadded = 1;
  //return 0;
  
  //r->flush(img);
}


#endif



/*
 * createWindow
 */


void createWindow(){
  
  window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_object_set_data (GTK_OBJECT (window1), "window1", window1);
  gtk_window_set_title (GTK_WINDOW (window1), "window1");
  gtk_window_set_default_size(GTK_WINDOW(window1),400,400);
  
  gtk_signal_connect(GTK_OBJECT(window1), "delete_event",
                     GTK_SIGNAL_FUNC(delete_event), NULL );
  
  
  table1 = gtk_table_new (10, 10, FALSE);
  gtk_widget_ref (table1);
  
  gtk_object_set_data_full (GTK_OBJECT (window1), "table1", table1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (table1);
  gtk_container_add (GTK_CONTAINER (window1), table1);
  
  handlebox = gtk_handle_box_new ();
  gtk_widget_ref (handlebox);
  gtk_object_set_data_full (GTK_OBJECT (window1), "handlebox", handlebox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (handlebox);
  
  gtk_table_attach (GTK_TABLE (table1), handlebox, 0, 10, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0,0);
  gtk_container_set_border_width (GTK_CONTAINER (handlebox), 2);
  
  table_handle = gtk_table_new (2, 6, FALSE);
  gtk_widget_ref (table_handle);
  gtk_object_set_data_full (GTK_OBJECT (window1), "table_handle", table_handle,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (table_handle);
  
  gtk_container_add (GTK_CONTAINER (handlebox), table_handle);
  drawingarea = gtk_drawing_area_new ();
  gtk_widget_ref (drawingarea);
  gtk_object_set_data_full (GTK_OBJECT (window1), "drawingarea", drawingarea,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (drawingarea);
  
  gtk_signal_connect (GTK_OBJECT (drawingarea),"expose_event",
                      GTK_SIGNAL_FUNC (expose_event), NULL);
  
  //  gtk_widget_set_events (drawingarea, GDK_BUTTON_PRESS_MASK|GDK_KEY_PRESS_MASK);
  gtk_widget_set_events (drawingarea, GDK_EXPOSURE_MASK
			 | GDK_LEAVE_NOTIFY_MASK
			 | GDK_BUTTON_PRESS_MASK
			 | GDK_POINTER_MOTION_MASK
			 | GDK_POINTER_MOTION_HINT_MASK);  
  gtk_signal_connect (GTK_OBJECT (window1), "button_press_event",
                     (GtkSignalFunc) button_press_event, NULL);

  gtk_signal_connect(GTK_OBJECT(window1), "key_press_event",
                     GTK_SIGNAL_FUNC(key_press_event), NULL);
  gtk_signal_connect (GTK_OBJECT (drawingarea), "motion_notify_event",
		      (GtkSignalFunc) motion_notify_event, NULL);  
  

  gtk_table_attach (GTK_TABLE (table1), drawingarea, 1, 9, 1, 9,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 1,0);
  gtk_widget_set_usize(drawingarea, IMGX,IMGY);
  gtk_widget_show(window1);
  gtk_widget_grab_focus(drawingarea);
   
}


/*
 * Main
 */
int main(int argc, char **argv)
{
  
  //  ZZBLines *l = new ZZBLines();
  //l->setLine(1, NULL, "Testi");
  //l->setLine(2, NULL, "Toinen, joskin hieman pitempi rivi asdfasdf as");
  //l->setLine(3, NULL, "Kolmas lyhyt rivi      ");
  //for ( int i = 4; i < 1000; i++ )
  // l->setLine(i, NULL, "Kolmas, joskin asf asdf");
  //char *s = l->getLine(1,NULL);
  
  lines = readFile("./test");
  
  if(!lines) {
    printf("No lines\n");
    exit(1);
  }
  //    line, big size,above, below, ascent ,descent 
  bulge = lines->new_bulge(10, 10, 3, 3, 6, 6);
  
  //if( s )
  //  printf("%s\n",s);
  //s = l->getLine(2,NULL);
  
  //if( s ) 
  //  printf("%s\n",s);
  
  //ZZBSizes *bs = new ZZBSizes();
  //bs->setLine(1,15.3, 14.2);
  
  
  //gdk_init(&argc, &argv);
  //gdk_rgb_init();
  
  //#ifndef OPEN_GL
  gtk_init(&argc, &argv);

#ifndef OPEN_GL 
  createWindow();
  w = drawingarea->window;
#endif  

  gdk_rgb_init();
  
  bestvisual = gdk_visual_get_best();
  
  int depth;
  
  gdk_window_get_geometry(w, 0, 0, 0, 0, &depth);
  
  //#endif
  

#ifdef USE_PIXMAP
  pixmap = gdk_pixmap_new(w, IMGX, IMGY, depth);
#endif
  
  r = new ZZBRenderer(IMGX, IMGY, w);
  
  //b = new ZZBBulge(lines,4, 6, 10, 3, 0);
  //if ( b==NULL ) { printf( "no b" ); exit(1); }
  //b->bulge(lines,13);
  //b->bulge(lines,57);
  //lines->setLineSize(3,14);
  //lines->setLineSize(10,10);
  //  ZZBBulge(int small, int trans, int big, int count){ 
  //#ifndef OPEN_GL
  gc = gdk_gc_new(w);
  //#endif
  
  
  for(int l=0; l<IMGX*IMGY; l++) img[l]=0;
  int size = 14;
  /*
    for ( int i = 0; i < 20 ; i++ ){
    r->render(img, i,lines->getLine(i, NULL) , "-*-courier-*-*-*-*-60-*-*-*-*-*-*-*", size, 0, i);
    }
  */
  
  
  //for ( int i = 0; i < 1; i++ ) {
    //for(int l=0; l<IMGX*IMGY; l++) img[l]=0;
  //int *i,*j;
  //b->moveBulge(1,i,j);
  //int y1=0,y2=0;
  
#ifdef OPEN_GL
  r->renderLines(img, lines,  "-*-courier-*-*-*-*-60-*-*-*-*-*-*-*",0,0);  
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  glutInitWindowSize(IMGX, IMGY);
  glutInitWindowPosition(100, 100);
  glutCreateWindow(argv[0]);
  init();
  glutDisplayFunc(display);
  glutReshapeFunc(reshape);
  glutKeyboardFunc(keyboard);
  glutMotionFunc(motion);

  glDisable(GL_DITHER);
  glDisable      ( GL_LIGHTING   ) ;
  glDisable      ( GL_FOG        ) ;
  glDisable      ( GL_TEXTURE_2D ) ;
  glDisable      ( GL_DEPTH_TEST ) ;
  glDisable      ( GL_CULL_FACE  ) ;

  glutMainLoop();


#else
  update_drawing();
  // r->renderLines(img, lines,  "-*-courier-*-*-*-*-60-*-*-*-*-*-*-*", 0,0);
  // gdk_draw_gray_image(pixmap,gc,0,0,IMGX,IMGY, GDK_RGB_DITHER_NONE, img, IMGX);
  // gdk_draw_pixmap(w,gc,pixmap,0,0, 0,0, IMGX,IMGY);
  // gdk_flush();
  //r->flush(img);
  //}
  
  // int renderLines(guchar  *img, ZZBLines *lines, char *font);
  //r->gamtab(img, size);
  /*
    gdk_draw_gray_image(pixmap,gc,0,0,IMGX,IMGY, GDK_RGB_DITHER_NONE, img, IMGX);
    gdk_draw_pixmap(w,gc,pixmap,0,0, 0,0, IMGX, IMGY);
    
    gdk_flush();
  */
  gtk_main();
#endif
  return 0;
}




























See more files for this project here

gzz

An implementation of Ted Nelson's ZZstructure. ZZstructure is a new type of programming platform for structured data.

Project homepage: http://savannah.nongnu.org/projects/gzz
Programming language(s): C++,Java,Python
License: lgpl21

  BillowSizes.h
  Lines.h
  Makefile
  ZZBBulge.cc
  ZZBBulge.h
  ZZBBulge2.h
  ZZBLine.cc
  ZZBLine.h
  ZZBLines.cc
  ZZBLines.h
  ZZBMarker.cc
  ZZBMarker.h
  ZZBRenderer.cc
  ZZBRenderer.h
  ZZBSize.cc
  ZZBSize.h
  ZZBSizes.cc
  ZZBSizes.h
  main.c
  main2.cc
  suckfont.c
  suckfont.h
  test