X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fglx%2Fmolecule.c;h=b3998f2d8d285e909142b4dbd9f396ad5c5c3410;hp=58be5ceb90b1ea4cb0adc0eaa31a9b25093b4361;hb=f8cf5ac7b2f53510f80a0eaf286a25298be17bfe;hpb=ec8d2b32b63649e6d32bdfb306eda062769af823 diff --git a/hacks/glx/molecule.c b/hacks/glx/molecule.c index 58be5ceb..b3998f2d 100644 --- a/hacks/glx/molecule.c +++ b/hacks/glx/molecule.c @@ -1,4 +1,4 @@ -/* molecule, Copyright (c) 2001-2006 Jamie Zawinski +/* molecule, Copyright (c) 2001-2012 Jamie Zawinski * Draws molecules, based on coordinates from PDB (Protein Data Base) files. * * Permission to use, copy, modify, distribute, and sell this software and its @@ -24,10 +24,16 @@ http://www.wwpdb.org/docs.html */ +#ifdef HAVE_GLBITMAP +# define ATOM_FONT "-*-helvetica-medium-r-normal-*-180-*" +#else +# define ATOM_FONT "-*-helvetica-medium-r-normal-*-240-*" +#endif + #define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ - "*atomFont: -*-helvetica-medium-r-normal-*-180-*\n" \ + "*atomFont: " ATOM_FONT "\n" \ "*atomFont2: -*-helvetica-bold-r-normal-*-80-*\n" \ "*titleFont: -*-helvetica-medium-r-normal-*-180-*\n" \ "*noLabelThreshold: 30 \n" \ @@ -160,8 +166,14 @@ typedef struct { GLuint molecule_dlist; GLuint shell_dlist; +# ifdef HAVE_GLBITMAP XFontStruct *xfont1, *xfont2, *xfont3; GLuint font1_dlist, font2_dlist, font3_dlist; +# else + texture_font_data *font1_data, *font2_data, *font3_data; +# endif + + int polygon_count; time_t draw_time; @@ -258,9 +270,15 @@ static void load_fonts (ModeInfo *mi) { molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; +# ifdef HAVE_GLBITMAP load_font (mi->dpy, "atomFont", &mc->xfont1, &mc->font1_dlist); load_font (mi->dpy, "atomFont2", &mc->xfont2, &mc->font2_dlist); load_font (mi->dpy, "titleFont", &mc->xfont3, &mc->font3_dlist); +# else + mc->font1_data = load_texture_font (mi->dpy, "atomFont"); + mc->font2_data = load_texture_font (mi->dpy, "atomFont2"); + mc->font3_data = load_texture_font (mi->dpy, "titleFont"); +# endif } @@ -470,7 +488,6 @@ draw_bounding_box (ModeInfo *mi) glVertex3f(x2, y2, z2); glVertex3f(x2, y2, z1); glEnd(); - glPushAttrib (GL_LIGHTING); glDisable (GL_LIGHTING); glColor3f (c2[0], c2[1], c2[2]); @@ -483,7 +500,8 @@ draw_bounding_box (ModeInfo *mi) glVertex3f(0, 0, z1); glVertex3f(0, 0, z2); glEnd(); - glPopAttrib(); + if (!wire) + glEnable (GL_LIGHTING); } @@ -1207,7 +1225,12 @@ startup_blurb (ModeInfo *mi) { molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; const char *s = "Constructing molecules..."; - print_gl_string (mi->dpy, mc->xfont3, mc->font3_dlist, + print_gl_string (mi->dpy, +# ifdef HAVE_GLBITMAP + mc->xfont3, mc->font3_dlist, +# else + mc->font3_data, +# endif mi->xgwa.width, mi->xgwa.height, 10, mi->xgwa.height - 10, s, False); @@ -1365,9 +1388,13 @@ draw_labels (ModeInfo *mi) molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); molecule *m = &mc->molecules[mc->which]; +# ifdef HAVE_GLBITMAP XFontStruct *xfont = (mc->scale_down ? mc->xfont2 : mc->xfont1); GLuint font_dlist = (mc->scale_down ? mc->font2_dlist : mc->font1_dlist); - int i, j; +# else + texture_font_data *font_data = mc->font1_data; /* don't scale down */ +# endif + int i; if (!do_labels) return; @@ -1421,6 +1448,7 @@ draw_labels (ModeInfo *mi) glTranslatef (0, 0, (size * 1.1)); /* move toward camera */ +# ifdef HAVE_GLBITMAP glRasterPos3f (0, 0, 0); /* draw text here */ /* Before drawing the string, shift the origin to center @@ -1429,10 +1457,30 @@ draw_labels (ModeInfo *mi) -string_width (xfont, a->label, 0) / 2, -xfont->descent, NULL); - - for (j = 0; j < strlen(a->label); j++) - - glCallList (font_dlist + (int)(a->label[j])); + { + int j; + for (j = 0; j < strlen(a->label); j++) + glCallList (font_dlist + (int)(a->label[j])); + } +# else + { + int h; + int w = texture_string_width (font_data, a->label, &h); + GLfloat s = 1.0 / h; + GLfloat max = 18; /* max point size to avoid pixellated text */ + if (h > max) s *= max/h; + glScalef (s, s, 1); + glTranslatef (-w/2, h*2/3, 0); + print_gl_string (mi->dpy, +# ifdef HAVE_GLBITMAP + xfont, font_dlist, +# else + font_data, +# endif + 0, 0, 0, 0, + a->label, False); + } +# endif glPopMatrix(); } @@ -1627,7 +1675,12 @@ draw_molecule (ModeInfo *mi) if (do_titles && m->label && *m->label) { set_atom_color (mi, 0, True, 1); - print_gl_string (mi->dpy, mc->xfont3, mc->font3_dlist, + print_gl_string (mi->dpy, +# ifdef HAVE_GLBITMAP + mc->xfont3, mc->font3_dlist, +# else + mc->font3_data, +# endif mi->xgwa.width, mi->xgwa.height, 10, mi->xgwa.height - 10, m->label, False);