Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
- StdCtrls, gtkglext, gdkglext, gl, gtk2, glib2, gdk2, glu, GLext;
- type
- TArray = array of Gfloat;
- type
- { TForm1 }
- TForm1 = class(TForm)
- Button1: TButton;
- Button2: TButton;
- Button3: TButton;
- Panel1: TPanel;
- Timer1: TTimer;
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure FormResize(Sender: TObject);
- procedure Timer1Timer(Sender: TObject);
- private
- { private declarations }
- public
- { public declarations }
- end;
- var
- Form1: TForm1;
- glconfig:PGdkGLConfig;
- window,vbox,drawing_area,button:PGtkWidget;
- TextureID:array[0..1] of GLuint;
- TextureData:pByte;
- vang: GLfloat= 0.0;
- ang: GLfloat= 0.0;
- vx: GLfloat= 0.0;
- vy: GLfloat= 0.0;
- vz: GLfloat= 0.0;
- lookx,looky,lookz:gfloat;
- blend,xdir,ydir,zdir:Boolean;
- ar:Tarray;
- LightAmbient: array [0..3] of GLfloat = ( 0.6, 0.3, 0, 1);
- LightDiffuse: array [0..3] of GLfloat = ( 0.4,0.4,0.4,1 );
- LightPosition: array [0..3] of GLfloat = ( 10.0, 10.0, 0.0, 1.0 );
- LightSpec: array [0..3] of GLfloat = (1.0,1.0,1.0,1.0 );
- vbuf: array of GLubyte;
- nurbs:^GLUnurbsObj;
- nurp:array [0..3,0..3,0..2] of GLfloat = (
- ((-3,-3,0),
- (-3,-1,0),
- (-3,1,0),
- (-3,3,0)),
- ((-1,-3,0),
- (-1,1,4),
- (-1,1,4),
- (-1,3,0)),
- ((1,-3,0),
- (1,-1,4),
- (1,1,4),
- (1,3,0)),
- ((3,-3,0),
- (3,-1,0),
- (3,1,0),
- (3,3,0))
- );
- knots: array[0..7] of GLfloat = (0,0,0,0,1,1,1,1);
- trm:array[0..4,0..1] of GLfloat = ((0,0),(1,0),(1,1),(0,1),(0,0));
- trm2:array[0..3,0..1] of GLfloat = ((0.25,0.25),(0.5,0.5),(0.75,0.25),(0.25,0.25));
- samples:Integer;
- function GArray(const Values: array of gfloat): TArray;
- implementation
- {$R *.lfm}
- { TForm1 }
- function GArray(const Values: array of gfloat): TArray;
- begin
- SetLength(Result, Length(Values));
- move(values[0], result[0], Length(Values) * SizeOf(Values[0]));
- end;
- procedure TForm1.Timer1Timer(Sender: TObject);
- begin
- ang:=ang-1.5;
- if ang<0 then
- begin
- ang:=358.5;
- if xdir then xdir:=false
- else xdir:=true;
- end;
- if xdir then
- begin
- vx:=abs(arctan(ang));
- vy:=abs(arctan(ang)/2);
- vz:=abs(arctan(ang)/3);
- end
- else
- begin
- vx:=abs(arctan(ang));
- vy:=-abs(arctan(ang)/2);
- vz:=-abs(arctan(ang)/3);
- end;
- gdk_window_invalidate_rect(drawing_area^.window, @drawing_area^.allocation, FALSE);
- end;
- function lglGetPixelFormat(const APixelFormat: TPixelFormat): Integer;
- begin
- case APixelFormat of
- pf24bit: begin
- Result := GL_BGR;
- end;
- pf32bit: begin
- Result := GL_BGRA;
- end;
- end;
- end;
- procedure realize(widget:PGtkWidget; data:gpointer);
- const
- s=4;
- var
- glcontext: PGdkGLContext;
- gldrawable: PGdkGLDrawable;
- config : PGdkGLConfig;
- i,x,y:Integer;
- h: GLfloat;
- bmp:TPicture;
- new:Pointer;
- begin
- glcontext := gtk_widget_get_gl_context (widget);
- gldrawable := gtk_widget_get_gl_drawable (widget);
- if gdk_gl_drawable_gl_begin (gldrawable, glcontext)=gFALSE then exit;
- glClearColor(0.2,0.2,0.2,1);
- glClearDepth(1.0); // Depth Buffer Setup
- glEnable(GL_DEPTH_TEST); // Enables Depth Testing
- glDepthFunc(GL_LEQUAL); // The Type Of Depth Test To Do
- glDepthMask(GL_TRUE);
- glEnable(GL_CULL_FACE); // Enable Hidden Surface Removal
- glCullFace(GL_BACK); // Set to Back
- glShadeModel(GL_SMOOTH); // Set shading model
- {// fog
- glEnable(GL_FOG);
- glFogi(GL_FOG_MODE,GL_LINEAR);
- glFogf(GL_FOG_START,0.0);
- glFogf(GL_FOG_END,10.0);
- glFogfv(GL_FOG_COLOR,FogColor);
- }
- //glShadeModel(GL_FLAT);
- glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
- glHint(GL_TEXTURE_COMPRESSION_HINT ,GL_NICEST);
- glHint(GL_POINT_SMOOTH_HINT ,GL_NICEST);
- glHint(GL_LINE_SMOOTH_HINT ,GL_NICEST);
- glHint(GL_POLYGON_SMOOTH_HINT ,GL_NICEST);
- glHint(GL_FOG_HINT ,GL_NICEST);
- // lightning
- glLightfv(GL_LIGHT0, GL_AMBIENT, @LightAmbient);
- glLightfv(GL_LIGHT0, GL_DIFFUSE, @LightDiffuse);
- glLightfv(GL_LIGHT0, GL_POSITION,@LightPosition);
- glLightfv(GL_LIGHT0, GL_SPECULAR,@LightSpec);
- //
- glLightfv(GL_LIGHT1, GL_AMBIENT, pointer(GArray([0.4,0.4,0.4,1])));
- glLightfv(GL_LIGHT1, GL_DIFFUSE, @LightDiffuse);
- glLightfv(GL_LIGHT1, GL_POSITION,@LightPosition);
- //glLightfv(GL_LIGHT1, GL_SPECULAR,@LightSpec);
- glDisable(GL_LIGHT1);
- glDisable(GL_LIGHTING);
- //glEnable(GL_LIGHTING);
- //glBlendFunc(GL_SRC_ALPHA,GL_ONE);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_LINE_SMOOTH);
- glEnable(GL_POLYGON_SMOOTH);
- glEnable(GL_POINT_SMOOTH);
- glEnable(GL_MULTISAMPLE);
- glEnable(GL_SAMPLE_ALPHA_TO_ONE);
- glPolygonMode(GL_POINT,GL_FILL);
- //glEnable(GL_BLEND);
- nurbs:=gluNewNurbsRenderer();
- gluNurbsProperty(nurbs,GLU_SAMPLING_TOLERANCE,100);
- //gluNurbsProperty(nurbs,GLU_SAMPLING,100);
- gluNurbsProperty(nurbs,GLU_DISPLAY_MODE,GLU_FILL);
- //gluNurbsProperty(nurbs,GLU_DISPLAY_MODE,GLU_OUTLINE_POLYGON);
- if Load_GL_ARB_multisample then
- begin
- glEnable(GL_MULTISAMPLE_ARB);
- glEnable(GL_MULTISAMPLE);
- glHint(GL_MULTISAMPLE_FILTER_HINT_NV, GL_NICEST);
- config:=gtk_widget_get_gl_config(widget);
- glGetIntegerv(GL_SAMPLES_ARB, @samples);
- glGetIntegerv(GL_SAMPLES, @samples);
- glGetIntegerv(GL_SAMPLE_BUFFERS, @samples);
- end;
- gdk_gl_drawable_gl_end (gldrawable);
- end;
- function thereshape(widget:pGtkWidget; event:PGdkEventConfigure; data:gpointer):gboolean;
- var
- glcontext: PGdkGLContext;
- gldrawable: PGdkGLDrawable;
- i,x,y:integer;
- viewport: PGLint;
- begin
- SetLength(vbuf,drawing_area^.allocation.width*drawing_area^.allocation.height*4);
- glcontext := gtk_widget_get_gl_context (widget);
- gldrawable := gtk_widget_get_gl_drawable (widget);
- if gdk_gl_drawable_gl_begin (gldrawable, glcontext)=gFALSE then
- begin
- result:=gFALSE;
- exit;
- end;
- glViewport(0, 0, widget^.allocation.width, widget^.allocation.height);
- gdk_gl_drawable_gl_end (gldrawable);
- result:=gTRUE;
- end;
- function thedraw(widget:PGtkWidget; event:PGdkEventExpose; data:gpointer):gboolean;
- type
- TVertex2f = record
- X, Y: Single;
- end;
- var
- glcontext:PGdkGLContext;
- gldrawable:PGdkGLDrawable;
- i,x,y,z:GLfloat;
- pf:array[0..1] of GLfloat;
- pic:array [0..63] of GLubyte = (
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff,
- $ff,$ff,$ff,$ff);
- pt:Array[0..3, 0..2] Of TGLfloat =(
- (-1,0,0),
- (-1,1,0),
- (1,-1,0),
- (1,0,0)
- );
- grid:Array[0..2, 0..2, 0..2] Of TGLfloat =
- (
- ((-2,0,2),
- (-2,2,2),
- (2,0,2)),
- ((-2,0,0),
- (2,4,0),
- (2,0,0)),
- ((-2,0,-2),
- (-2,2,-2),
- (2,0,-2))
- );
- p1,p2,p3,p4,p5:TVertex2f;
- disk,sphere,cyl:PgluQuadric;
- a,b:Integer;
- PM:GLint;
- begin
- glcontext := gtk_widget_get_gl_context (widget);
- gldrawable := gtk_widget_get_gl_drawable (widget);
- if gdk_gl_drawable_gl_begin (gldrawable, glcontext)=gFALSE then
- begin
- result:=gFALSE;
- exit;
- end;
- glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
- glMatrixMode (GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(45, widget^.allocation.width/widget^.allocation.height, 0.01,100.0);
- glTranslatef(0,0,-vang);
- if(looky>pi/2) then looky:= pi/2;
- if(looky<-pi/2) then looky:=-pi/2;
- x:=cos(lookx);
- y:=sin(looky);
- z:=sin(lookx);
- gluLookAt(x,y,z,0,0,0,0,1,0);
- glMatrixMode(GL_MODELVIEW);
- glDisable(GL_CULL_FACE);
- glColor3f(1,1,0);
- glLineWidth (1.5);
- glPointSize(1.5);
- glLoadIdentity();
- //sphere:=gluNewQuadric();
- //gluSphere(sphere,0.2,20,26);
- //glEnable(GL_BLEND);
- { glEnable(GL_FOG);
- glFogi(GL_FOG_MODE,GL_EXP2);
- glFogfv(GL_FOG_COLOR,pointer(GArray([0.9,0.9,0.9,1])));
- glFogf(GL_FOG_DENSITY,0.35);
- }
- //glEnable(GL_POLYGON_OFFSET_LINE);
- //glDisable(GL_CULL_FACE);
- //glEnable(GL_NORMALIZE);
- glEnable(GL_COLOR_MATERIAL);
- //glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
- //glMateriali(GL_FRONT,GL_SHININESS,128);
- //glMaterialfv (GL_FRONT,GL_AMBIENT,pointer(Garray([0.6,0.6,0.9,1])));
- //glMaterialfv (GL_FRONT,GL_DIFFUSE,pointer(Garray([0.6,0.6,0.9,1])));
- //glMaterialfv (GL_FRONT,GL_SPECULAR,pointer(Garray([0.1,0.1,0.1,1])));
- //glMaterialfv (GL_FRONT,GL_SHININESS,pointer(Garray([0.1,0.1,0,1,1])));
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glDisable(GL_LIGHT1);
- glTranslatef(0,-5.5,0);
- glPushMatrix();
- //glRotatef(90,0,1,0);
- ar:=GArray([0,0,0,
- 1,0,0,
- 1,1,0,
- 1,1.5,0,
- 1.5,1,0,
- 1.5,1.5,0
- ]);
- glRotatef(90,1,0,0);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3,GL_FLOAT,0,Pointer(ar));
- //glDisable(GL_CULL_FACE);
- glDrawArrays(GL_TRIANGLE_STRIP,0,6);
- //glEnable(GL_CULL_FACE);
- glDisableClientState(GL_VERTEX_ARRAY);
- glPopMatrix();
- glLoadIdentity();
- glPushMatrix();
- glRotatef(ang,1,0,0);
- glTranslatef(0,2,0);
- glPushMatrix();
- glRotatef(ang,0.5,0,0);
- disk:=gluNewQuadric();
- if glIsEnabled(GL_CULL_FACE)=1 then
- begin
- glEnable(GL_CULL_FACE);
- gluDisk(disk,0.1,0.5,20,26);
- glDisable(GL_CULL_FACE);
- end
- else
- begin
- glEnable(GL_CULL_FACE);
- gluDisk(disk,0.1,0.5,20,26);
- glRotatef(180,1,0,0);
- gluDisk(disk,0.1,0.5,20,26);
- glDisable(GL_CULL_FACE);
- end;
- glPopMatrix();
- glPopMatrix();
- glLoadIdentity();
- glPushMatrix();
- glTranslatef(3,0,0);
- glRotatef(ang,0,1,0);
- sphere:=gluNewQuadric();
- gluSphere(sphere,0.5,21,26);
- glPopMatrix();
- //
- glPushMatrix();
- //glRotatef(90,0,1,1);
- glRotatef(-ang,1,0,0);
- glTranslatef(0,4,0);
- cyl:=gluNewQuadric();
- gluCylinder(cyl,0.5,0.0,1,13,26);
- glPushMatrix();
- gluCylinder(cyl,0,0.5,0,13,26);
- glPopMatrix();
- glPopMatrix();
- if Load_GL_MESA_window_pos then
- begin
- //glWindowPos2iARB(4,4);
- //glReadBuffer(GL_FRONT);
- x:=drawing_area^.allocation.width;
- y:=drawing_area^.allocation.height;
- //
- //glPixelTransferf(GL_RED_SCALE,1);
- //glPixelTransferf(GL_GREEN_SCALE,1);
- //glPixelTransferf(GL_BLUE_SCALE,1);
- //glPixelZoom(0.2,0.2);
- //glReadBuffer(GL_BACK);
- //glDrawPixels(256,256,GL_RGBA,GL_UNSIGNED_BYTE,pointer(vbuf));
- //glRasterPos2d(4,4);
- //glPixelZoom(10,10);
- //glDrawPixels(8,8,GL_RED,GL_UNSIGNED_BYTE,@pic);
- //glDrawBuffer(GL_BACK);
- //glRasterPos2i(1,1);
- glWindowPos2iMESA(10,10);
- //glBitmap(8,8,0,0,0,0,pic);
- end;
- glPushMatrix();
- glTranslatef(4,0,0);
- glRotatef(90,0,1,0);
- glMap1f(GL_MAP1_VERTEX_3,0,100,3,4,@pt);
- glEnable(GL_MAP1_VERTEX_3);
- glMapGrid1d(100,0,100);
- glEvalMesh1(GL_LINE,0,100);
- glDisable(GL_MAP1_VERTEX_3);
- glPointSize(5);
- glBegin(GL_POINTS);
- for a:=0 to 3 do
- glVertex2fv(@pt[a]);
- glend();
- glPopMatrix();
- glPushMatrix();
- //glDisable(GL_COLOR_MATERIAL);
- glDisable(GL_LIGHT0);
- glEnable(GL_LIGHT1);
- //glLightfv(GL_LIGHT0, GL_AMBIENT, pointer(GArray([0.3,0.3,0.3,1])));
- //glColorMaterial(GL_FRONT_AND_BACK,256);
- //glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
- //glMateriali(GL_FRONT,GL_SHININESS,128);
- //glMaterialfv (GL_FRONT,GL_AMBIENT,pointer(Garray([1,1,1,1])));
- //glMaterialfv (GL_FRONT,GL_DIFFUSE,pointer(Garray([1,1,1,1])));
- //glMaterialfv (GL_FRONT,GL_SPECULAR,pointer(Garray([0.1,0.1,0.1,1])));
- //glMaterialfv (GL_FRONT,GL_SHININESS,pointer(Garray([0.1,0.1,0,1,1])));
- glTranslatef(0,-0.5,0);
- //glRotatef(90,0,1,0);
- glMap2f(GL_MAP2_VERTEX_3,0,10,3,3,0,10,9,3,@grid);
- glEnable(GL_MAP2_VERTEX_3);
- glMapGrid2f(10,0,10,10,0,10);
- //glEvalMesh2(GL_LINE,0,10,0,10);
- glColor3f(1,1,1);
- glEvalMesh2(GL_FILL,0,10,0,10);
- glEnable(GL_AUTO_NORMAL);
- glDisable(GL_MAP2_VERTEX_3);
- glDisable(GL_LIGHTING);
- glColor3f(1,1,0);
- glPointSize(5);
- glBegin(GL_POINTS);
- for a:=0 to 2 do
- for b:=0 to 2 do
- glVertex3fv(@grid[a][b]);
- glend();
- glEnable(GL_LIGHTING);
- glPopMatrix();
- glPushMatrix();
- glRotatef(180,0,1,1);
- glTranslatef(5,1,0);
- glDisable(GL_LIGHT1);
- glEnable(GL_LIGHT0);
- gluBeginSurface(nurbs);
- //glEnable(GL_AUTO_NORMAL);
- gluNurbsSurface(nurbs,8,knots,8,knots,4*3,3,@nurp,4,4,GL_MAP2_VERTEX_3);
- gluBeginTrim(nurbs);
- gluPwlCurve(nurbs,5,@trm,2,GLU_MAP1_TRIM_2);
- gluEndTrim(nurbs);
- gluBeginTrim(nurbs);
- gluPwlCurve(nurbs,4,@trm2,2,GLU_MAP1_TRIM_2);
- gluEndTrim(nurbs);
- gluEndSurface(nurbs);
- glPopMatrix();
- glDisable(GL_LIGHTING);
- if gdk_gl_drawable_is_double_buffered(gldrawable)=gTRUE then
- gdk_gl_drawable_swap_buffers(gldrawable)
- else glFlush();
- gdk_gl_drawable_gl_end (gldrawable);
- result:=gTRUE;
- end;
- function thekey (
- widget: PGtkWidget;
- event: PGdkEventKey;
- data: gpointer): gboolean; cdecl;
- begin
- case event^.keyval of
- GDK_KEY_Up : begin blend:=true;end;
- GDK_KEY_Down : begin blend:=false;end;
- GDK_KEY_Left : begin
- ang:=ang-1.5;
- if ang<0 then
- begin
- ang:=358.5;
- if xdir then xdir:=false
- else xdir:=true;
- end;
- if xdir then
- begin
- vx:=abs(arctan(ang));
- vy:=abs(arctan(ang)/2);
- vz:=abs(arctan(ang)/3);
- end
- else
- begin
- vx:=abs(arctan(ang));
- vy:=-abs(arctan(ang)/2);
- vz:=-abs(arctan(ang)/3);
- end;
- end;
- GDK_KEY_Right : begin
- ang:=ang+1.5;
- if ang>360 then
- begin
- ang:=1.5;
- if xdir then xdir:=false
- else xdir:=true;
- end;
- if xdir then
- begin
- vx:=abs(arctan(ang));
- vy:=abs(arctan(ang)/2);
- vz:=abs(arctan(ang)/3);
- end
- else
- begin
- vx:=abs(arctan(ang));
- vy:=-abs(arctan(ang)/2);
- vz:=-abs(arctan(ang)/3);
- end;
- end;
- GDK_KEY_a:begin lookx+=pi/50; if lookx>2*pi then lookx-=2*pi; end;
- GDK_KEY_d:begin lookx-=pi/50; if lookx<-2*pi then lookx+=2*pi; end;
- GDK_KEY_w:begin looky+=pi/50; if looky>2*pi then looky-=2*pi; end;
- GDK_KEY_s:begin looky-=pi/50; if looky<-2*pi then looky+=2*pi; end;
- GDK_KEY_1 : glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
- GDK_KEY_2 : glPolygonMode(GL_FRONT_AND_BACK,GL_POINT);
- GDK_KEY_3 : glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
- GDK_KEY_Page_Up : glEnable(GL_BLEND);
- GDK_KEY_Page_Down : glDisable(GL_BLEND);
- GDK_KEY_Escape : gtk_main_quit ();
- else Exit(false);
- end;
- gdk_window_invalidate_rect(drawing_area^.window, @drawing_area^.allocation, FALSE);
- Result := gtrue;
- end;
- function mousescroll(widget: PGtkWidget;event: PGdkEventScroll): gboolean; cdecl;
- begin
- if event^.direction = GDK_SCROLL_UP then
- if vang<30 then vang+=0.5
- else vang:=30;
- if event^.direction = GDK_SCROLL_DOWN then
- if vang>0.5 then vang-=0.5
- else vang:=0.5;
- gdk_window_invalidate_rect(drawing_area^.window, @drawing_area^.allocation, FALSE);
- Result := gtrue;
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- var
- major,minor:gint;
- bl:gboolean;
- gl:gulong;
- list:PGList;
- begin
- lookx:=0;looky:=0;lookz:=0;
- gtk_init(@argc, @argv);
- gtk_gl_init(@argc, @argv);
- gdk_gl_query_version(major,minor);
- glconfig := gdk_gl_config_new_by_mode(GDK_GL_MODE_RGBA or GDK_GL_MODE_DOUBLE or GDK_GL_MODE_DEPTH
- or GDK_GL_MODE_MULTISAMPLE or 2 shl 24); // or
- // get parent GTK widget
- window := PGtkWidget(Panel1.Handle);
- list:=gtk_container_get_children(GTK_CONTAINER(window));
- window:=list^.data;
- gtk_container_set_reallocate_redraws (GTK_CONTAINER (window), gTRUE);
- gl:=g_signal_connect (G_OBJECT (window), 'delete_event', G_CALLBACK (@gtk_main_quit), NULL);
- //gtk_container_set_border_width (GTK_CONTAINER(window), 10);
- gtk_widget_show (window);
- vbox := gtk_vbox_new (gFALSE, 0);
- gtk_container_add (GTK_CONTAINER (window), vbox);
- gtk_widget_show (vbox);
- drawing_area := gtk_drawing_area_new();
- gtk_widget_set_size_request(drawing_area, panel1.Width, panel1.Height);
- bl:=gtk_widget_set_gl_capability ( drawing_area,
- glconfig,
- NULL,
- gTRUE,
- GDK_GL_RGBA_TYPE);
- gtk_widget_add_events (drawing_area, GDK_VISIBILITY_NOTIFY_MASK);
- gl:=g_signal_connect_after (G_OBJECT (drawing_area), 'realize', G_CALLBACK (@realize), NULL);
- gl:=g_signal_connect(G_OBJECT (drawing_area), 'configure_event', G_CALLBACK (@thereshape), NULL);
- gl:=g_signal_connect(G_OBJECT (drawing_area), 'expose_event', G_CALLBACK (@thedraw), NULL);
- gl:=g_signal_connect_swapped(G_OBJECT(PGtkWidget(Form1.Handle)), 'key_press_event',G_CALLBACK (@thekey), drawing_area);
- //gl:=g_signal_connect(G_OBJECT(drawing_area), 'motion_notify_event',G_CALLBACK(@mouse), NULL);
- gl:=g_signal_connect(G_OBJECT(PGtkWidget(Panel1.Handle)), 'scroll_event',G_CALLBACK(@mousescroll), NULL);
- gtk_box_pack_start (GTK_BOX(vbox), drawing_area, gTRUE, gTRUE, 0);
- gtk_widget_show (drawing_area);
- vang:=10.0;
- end;
- procedure TForm1.Button3Click(Sender: TObject);
- begin
- If Timer1.Enabled then timer1.Enabled:=false
- else timer1.Enabled:=true;
- end;
- procedure TForm1.FormResize(Sender: TObject);
- var
- x,y:Integer;
- begin
- x:=Form1.Width;
- y:=Form1.Height;
- Button1.Left:=x-90;
- Button2.Left:=x-90;
- Button3.Left:=x-90;
- Panel1.Height:=y-40;
- Panel1.Width:=x-120;
- if drawing_area<>nil then
- begin
- gtk_widget_set_size_request(vbox, panel1.Width, panel1.Height);
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement