plugins/crazychat/cc_output.c

Fri, 23 Dec 2005 19:26:04 +0000

author
Sadrul Habib Chowdhury <sadrul@pidgin.im>
date
Fri, 23 Dec 2005 19:26:04 +0000
changeset 12645
a907ba243930
parent 11272
45e5b72fee60
permissions
-rw-r--r--

[gaim-migrate @ 14983]
SF Patch #1314512 from Sadrul (who has a patch for everything)

"This patch introduces a flag for protocol plugins that
support offline messages (like Y!M and ICQ). This was
encouraged by the following conversation:

<sadrul> should offline buddies be listed/enabled in
the send-to menu?

<rekkanoryo> i would think only for protocols that
support offline messaging, if it's indicated that the
buddy is offline

-- <snip> --

<Bleeter> sadrul: personally, I'd like to see a
'supports offline' flag of some description

<Bleeter> one could then redirect (via plugins) through
email or alternative methods

<Bleeter> just a thought

<Paco-Paco> yeah, that sounds like a reasonble thing to have

This patch uses this flag to disable the buddies in the
send-to menu who are offline and the protocol doesn't
support offline messages."

I made this make the label insensitive instead of the whole menuitem. This
should address SimGuy's concerns about inconsistency (i.e. you could create a
conversation with someone via the buddy list that you couldn't create via the
Send To menu). I also hacked up some voodoo to show the label as sensitive when
moused-over, as that looks better (given the label-insensitive thing is itself a
hack). I think this works quite well.

BUG NOTE:
This makes more obvious an existing bug. The Send To menu isn't updated when
buddies sign on or off or change status (at least under some circumstances).
We need to fix that anyway, so I'm not going to let it hold up this commit.
Switching tabs will clear it up. I'm thinking we just might want to build the
contents of that menu when it is selected. That would save us a mess of
inefficient signal callbacks that update the Send To menus in open windows all
the time.

AIM NOTE:
This assumes that AIM can't offline message. That's not strictly true. You can
message invisible users on AIM. However, by design, we can't tell when a user
is invisible without resorting to dirty hackery. In practice, this isn't a
problem, as you can still select the AIM user from the menu. And really, how
often will you be choosing the Invisible contact, rather than the user going
Invisible in the middle of a conversation or IMing you while they're Invisible?

JABBER NOTE:
This assumes that Jabber can always offline message. This isn't strictly true.
Sadrul said:

I have updated Jabber according to this link which seems to
talk about how to determine the existence offline-message
support in a server:
http://www.jabber.org/jeps/jep-0013.html#discover

However, jabber.org doesn't seem to send the required
info. So I am not sure about it.

He later said:

I talked to Nathan and he said offline message support is
mostly assumed for most jabber servers. GTalk doesn't yet
support it, but they are working on it. So I have made
jabber to always return TRUE.

If there is truly no way to detect offline messaging capability, then this is
an acceptable solution. We could special case Google Talk because of its
popularity, and remove that later. It's probably not worth it though.

MSN NOTE:
This assumes that MSN can never offline message. That's effectively true, but
to be technically correct, MSN can offline message if there's already a
switchboard conversation open with a user. We could write an offline_message
function in the MSN prpl to detect that, but it'd be of limited usefulness,
especially given that under most circumstances (where this might matter), the
switchboard connection will be closed almost immediately.


CVS NOTE:
I'm writing to share a tragic little story.

I have a PC that I use for Gaim development. One day, I was writing a commit
message on it, when all of a suddent it went berserk. The screen started
flashing, and the whole commit message just disappeared. All of it. And it was
a good commit message! I had to cram and rewrite it really quickly. Needless to
say, my rushed commit message wasn't nearly as good, and I blame the PC for that.

Seriously, though, what kind of version control system loses your commit
message on a broken connection to the server? Stupid!

committer: Richard Laager <rlaager@pidgin.im>

11218
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
1 #include <assert.h>
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
2 #include <string.h>
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
3 #include <stdlib.h>
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
4 #include <GL/gl.h>
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
5 #include <GL/glu.h>
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
6 #include <math.h>
11272
45e5b72fee60 [gaim-migrate @ 13455]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents: 11218
diff changeset
7 /*#include "util.h"*/
11218
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
8 #include "cc_interface.h"
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
9 #include "crazychat.h"
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
10 #include <stdio.h>
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
11
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
12 #include "cc_gtk_gl.h"
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
13
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
14 #include "face.h"
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
15 #include "glm.h"
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
16
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
17
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
18 #define TAN_30 0.577
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
19 #define ROOT_3 1.73
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
20 //this will be the width of all heads
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
21 #define HEAD_WIDTH 2.5
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
22 #define HEAD_HEIGHT 2.5 //same for now, this will actually vary from head
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
23 #define PERSONS_HEAD 1
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
24 #define MOVEMENT .33
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
25
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
26 GLfloat ambient[] = {1.0, 1.0, 1.0, 1.0};
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
27 GLfloat diffuse[] = {.7, .7, .7, 1};
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
28 GLfloat specular[] = {1, 1, 1, 1};
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
29 GLfloat lightpos[] = {0.0, 0.0, 20, 1};
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
30 GLfloat specref[] = {1.0, 1, 1, 1,};
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
31
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
32 GLfloat xrot, yrot, zrot;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
33 GLfloat x, y, z, mouth_open;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
34 GLint left_eye_frame, right_eye_frame; //between 0 - 8
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
35 GLint mouth_type;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
36 GLint mouth_frame;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
37 DIRECTION dir;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
38 BOOL left_open, right_open;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
39 GLfloat window_aspect;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
40
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
41 FACE remote_shark_face, remote_dog_face, local_shark_face, local_dog_face;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
42 int count = 0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
43 int curr_materials[DOG_SHARK_CHANGE]; //these are the materials from output_instance
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
44 OUTPUT_MODE curr_mode;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
45 KIND which_face;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
46
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
47 static void destroy_cb(GtkWidget *widget, struct output_instance *data);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
48
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
49 void Interpolate(struct output_instance* instance){
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
50 GLfloat rangeX, rangeY, minZ, adj, angle, temp;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
51 count++;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
52 /* yrot=90;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
53 zrot=0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
54 z=5;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
55 x=0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
56 y=0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
57 left_open = right_open = TRUE;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
58 mouth_open = (float)(count%10)/10;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
59 dir = CONST;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
60 curr_mode = NORMAL;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
61 return;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
62 */
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
63
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
64 //find z plane from percentage of face
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
65 if(instance->features->head_size==0){
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
66 z = 5;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
67 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
68
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
69 temp = (GLfloat)instance->features->head_size/40.0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
70 //printf("head size %d\n", instance->features->head_size);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
71
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
72 minZ = ROOT_3;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
73 z = ROOT_3*(PERSONS_HEAD/temp);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
74 if(z < minZ)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
75 z = minZ;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
76
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
77 //these calculations are based on a 90 degree viewing angle
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
78 rangeX = z*(TAN_30)*2;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
79 rangeY = window_aspect*rangeX;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
80 temp = (GLfloat)instance->features->x;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
81 if(temp>50) { //then its on the left
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
82 temp = (temp - 50.0)/50.0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
83 x = 0 - temp*rangeX/1.0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
84 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
85 else {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
86 temp = (50.0-temp)/50.0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
87 x = 0 + temp*rangeX/1.0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
88 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
89
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
90 temp = (GLfloat)instance->features->y;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
91
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
92 if(temp>50){
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
93 temp = (temp-50.0)/50.0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
94 y = 0 - temp*rangeY/1.0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
95 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
96 else {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
97 temp = (50.0-temp)/50.0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
98 y = 0 + temp*rangeY/1.0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
99 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
100
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
101 temp = (GLfloat)instance->features->head_y_rot;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
102 yrot = temp - 50;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
103 temp = (GLfloat)instance->features->head_z_rot;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
104 zrot = temp-50;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
105
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
106 if(y-instance->past_y < -MOVEMENT)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
107 dir = DOWN;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
108 else if(y-instance->past_y > MOVEMENT)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
109 dir = UP;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
110 else
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
111 dir = CONST;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
112 instance->past_y=y;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
113
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
114 mouth_open = (float)instance->features->mouth_open/105;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
115 count++;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
116 //mouth_open = (count%10)/(10);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
117
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
118 if(instance->features->left_eye_open==0){
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
119 left_open = FALSE;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
120 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
121 else{
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
122 left_open = TRUE;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
123 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
124
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
125 if(instance->features->right_eye_open==0)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
126 right_open = FALSE;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
127 else
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
128 right_open = TRUE;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
129 //right_open =1 - (count%5)/4;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
130
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
131 //set the materials
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
132 curr_materials[APPENDAGE]=instance->features->appendage_color;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
133 curr_materials[HEAD]=instance->features->head_color;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
134 curr_materials[LIDS]=instance->features->lid_color;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
135 curr_materials[LEFT_IRIS]=instance->features->left_iris_color;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
136 curr_materials[RIGHT_IRIS]=instance->features->right_iris_color;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
137 // we don't get an x rotation
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
138 xrot = 0;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
139 curr_mode=instance->features->mode;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
140 if(instance->features->kind==0)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
141 which_face=DOG;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
142 else
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
143 which_face=SHARK;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
144
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
145 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
146
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
147
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
148
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
149 gboolean configure(GtkWidget *widget,
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
150 GdkEventConfigure *event, void *data)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
151 {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
152 GdkGLContext *glcontext = gtk_widget_get_gl_context(widget);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
153 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
154
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
155 GLfloat w = widget->allocation.width;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
156 GLfloat h = widget->allocation.height;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
157 GLfloat aspect;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
158
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
159 Debug("configuring\n");
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
160
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
161
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
162 /*** OpenGL BEGIN ***/
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
163 if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
164 return FALSE;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
165
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
166 glEnable(GL_DEPTH_TEST);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
167 glViewport(0, 0, w, h);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
168 glMatrixMode(GL_PROJECTION);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
169 glLoadIdentity();
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
170
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
171 if (w > h) {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
172 window_aspect = w / h;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
173 } else {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
174 window_aspect = h / w;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
175 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
176
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
177 //glOrtho(-10, 10, -10,10, 0.0001, 1000);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
178 gluPerspective(90.0, window_aspect, 0.0001, 1000.0);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
179
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
180 glMatrixMode(GL_MODELVIEW);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
181 glLoadIdentity();
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
182
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
183 gdk_gl_drawable_gl_end(gldrawable);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
184 /*** OpenGL END ***/
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
185
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
186 return TRUE;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
187 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
188
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
189 gboolean draw(GtkWidget *widget, GdkEventExpose *event,
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
190 void *data)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
191 {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
192 struct output_instance *instance = (struct output_instance*)data;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
193 if(!data) {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
194 fprintf(stderr,"null\n");
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
195 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
196 assert(instance);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
197 Interpolate(instance);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
198
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
199 GdkGLContext *glcontext = gtk_widget_get_gl_context (widget);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
200 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
201
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
202 //return TRUE;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
203
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
204 assert(gtk_widget_is_gl_capable(widget));
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
205
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
206 if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
207 fprintf(stderr, "We're fucked this time.\n");
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
208 return FALSE;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
209 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
210
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
211
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
212 glClearColor(1.0, 1.0, 1.0, 0.0);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
213 //glDisable(GL_CULL_FACE);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
214
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
215 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
216 glColor3f(1.0, 1.0, 1.0);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
217 glMatrixMode(GL_MODELVIEW);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
218 glLoadIdentity();
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
219
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
220 glTranslatef(x, y, -z);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
221 if(instance->my_output==LOCAL){
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
222 if(which_face==DOG){
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
223 change_materials(local_dog_face, curr_materials, DOG_SHARK_CHANGE);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
224 draw_face(local_dog_face, zrot, yrot, left_open, right_open, mouth_open, dir, curr_mode);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
225 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
226 else {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
227 change_materials(local_shark_face, curr_materials, DOG_SHARK_CHANGE);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
228 draw_face(local_shark_face, zrot, yrot, left_open, right_open, mouth_open, dir, curr_mode);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
229 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
230 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
231 else{
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
232 if(which_face==DOG){
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
233 change_materials(remote_dog_face, curr_materials, DOG_SHARK_CHANGE);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
234 draw_face(remote_dog_face, zrot, yrot, left_open, right_open, mouth_open, dir, curr_mode);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
235 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
236 else{
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
237 change_materials(remote_shark_face, curr_materials, DOG_SHARK_CHANGE);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
238 draw_face(remote_shark_face, zrot, yrot, left_open, right_open, mouth_open, dir, curr_mode);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
239 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
240 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
241 if (gdk_gl_drawable_is_double_buffered (gldrawable))
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
242 gdk_gl_drawable_swap_buffers (gldrawable);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
243 else
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
244 glFlush ();
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
245 return TRUE;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
246 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
247
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
248 void init (GtkWidget *widget, void *data)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
249 {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
250 setupDrawlists(REMOTE);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
251 setupLighting(widget);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
252 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
253
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
254
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
255 void setupDrawlists(OUTPUT output)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
256 {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
257 if(output==REMOTE){
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
258 remote_shark_face = init_face(SHARK);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
259 remote_dog_face = init_face(DOG);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
260 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
261 if(output==LOCAL){
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
262 local_shark_face = init_face(SHARK);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
263 local_dog_face = init_face(DOG);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
264 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
265 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
266
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
267
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
268 void setupLighting(GtkWidget *widget)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
269 {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
270
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
271 GLfloat w = widget->allocation.width;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
272 GLfloat h = widget->allocation.height;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
273 glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
274 glEnable(GL_DEPTH_TEST);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
275 glEnable(GL_LIGHTING);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
276 //glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
277 glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
278 glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
279 glLightfv(GL_LIGHT0, GL_POSITION, lightpos);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
280 glEnable(GL_LIGHT0);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
281 //glEnable(GL_COLOR_MATERIAL);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
282 //glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
283 glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
284 glMateriali(GL_FRONT, GL_SHININESS, 128);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
285
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
286 //glEnable(GL_CULL_FACE);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
287
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
288 glClear(GL_COLOR_BUFFER_BIT);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
289 glMatrixMode(GL_PROJECTION);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
290 glLoadIdentity();
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
291 //glOrtho(-2, 2, -2, 2, 0.0001, 1000);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
292
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
293 if (w > h) {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
294 window_aspect = w / h;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
295 } else {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
296 window_aspect = h / w;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
297 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
298
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
299 gluPerspective(90.0, window_aspect, 0.0001, 1000.0);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
300 //glFrustum(-100.0, 100.0, -100.0, 100.0, 0, 10);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
301 glMatrixMode(GL_MODELVIEW);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
302 //gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
303 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
304
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
305 struct output_instance *init_output(struct cc_features *features,
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
306 struct cc_session *session)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
307 {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
308 struct draw_info *info;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
309 struct output_instance *instance;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
310 struct window_box ret;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
311
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
312 instance = (struct output_instance*)malloc(sizeof(*instance));
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
313 assert(instance);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
314 memset(instance, 0, sizeof(*instance));
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
315 instance->features = features;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
316 instance->session = session;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
317
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
318 info = (struct draw_info*)malloc(sizeof(*info));
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
319 memset(info, 0, sizeof(*info));
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
320 info->timeout = TRUE;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
321 info->delay_ms = 40;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
322 info->data = instance;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
323
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
324
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
325 cc_new_gl_window(init, configure, draw, info, &ret);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
326 g_signal_connect(GTK_OBJECT(ret.window), "destroy",
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
327 G_CALLBACK(destroy_cb), instance);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
328 gtk_window_set_default_size(ret.window,640,480);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
329 if (session) {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
330 gtk_window_set_title(ret.window, session->name);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
331 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
332 gtk_widget_show(ret.window);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
333 instance->widget = ret.window;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
334 instance->box = ret.vbox;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
335 return instance;
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
336 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
337
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
338 static void destroy_cb(GtkWidget *widget, struct output_instance *data)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
339 {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
340 Debug("Closing output window\n");
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
341 if (data->session) {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
342 cc_remove_session(data->session->cc, data->session);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
343 close(data->session->tcp_sock);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
344 close(data->session->udp_sock);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
345 Filter_Destroy(data->session->filter);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
346 destroy_output(data->session->output);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
347 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
348 }
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
349
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
350 void destroy_output(struct output_instance *instance)
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
351 {
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
352 free(instance);
886e6862af56 [gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff changeset
353 }

mercurial