-/* molecule, Copyright (c) 2001-2014 Jamie Zawinski <jwz@jwz.org>
+/* molecule, Copyright (c) 2001-2016 Jamie Zawinski <jwz@jwz.org>
* Draws molecules, based on coordinates from PDB (Protein Data Base) files.
*
* Permission to use, copy, modify, distribute, and sell this software and its
/* Documentation on the PDB file format:
- http://en.wikipedia.org/wiki/Protein_Data_Bank_%28file_format%29
+ https://en.wikipedia.org/wiki/Protein_Data_Bank_%28file_format%29
http://www.wwpdb.org/docs.html
http://www.wwpdb.org/documentation/format32/v3.2.html
http://www.wwpdb.org/documentation/format32/sect9.html
"*titleFont: -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" \
"*noLabelThreshold: 150 \n" \
"*wireframeThreshold: 150 \n" \
+ "*suppressRotationAnimation: True\n" \
# define refresh_molecule 0
# define release_molecule 0
};
-#ifndef USE_IPHONE
+#ifndef HAVE_MOBILE
# define LOAD_FILES
#endif
glColor3f (c2[0], c2[1], c2[2]);
glBegin(GL_LINES);
- if (x1 > 0) x1 = 0; if (x2 < 0) x2 = 0;
- if (y1 > 0) y1 = 0; if (y2 < 0) y2 = 0;
- if (z1 > 0) z1 = 0; if (z2 < 0) z2 = 0;
+ if (x1 > 0) x1 = 0;
+ if (x2 < 0) x2 = 0;
+ if (y1 > 0) y1 = 0;
+ if (y2 < 0) y2 = 0;
+ if (z1 > 0) z1 = 0;
+ if (z2 < 0) z2 = 0;
glVertex3f(x1, 0, 0); glVertex3f(x2, 0, 0);
glVertex3f(0 , y1, 0); glVertex3f(0, y2, 0);
glVertex3f(0, 0, z1); glVertex3f(0, 0, z2);
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
+# ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */
+ {
+ int o = (int) current_device_rotation();
+ if (o != 0 && o != 180 && o != -180)
+ glScalef (1/h, 1/h, 1/h);
+ }
+# endif
+
glClear(GL_COLOR_BUFFER_BIT);
}
molecule_configuration *mc;
int wire;
- if (!mcs) {
- mcs = (molecule_configuration *)
- calloc (MI_NUM_SCREENS(mi), sizeof (molecule_configuration));
- if (!mcs) {
- fprintf(stderr, "%s: out of memory\n", progname);
- exit(1);
- }
- }
+ MI_INIT (mi, mcs, NULL);
mc = &mcs[MI_SCREEN(mi)];
if (!do_labels)
return;
- if (!wire)
- glDisable (GL_LIGHTING); /* don't light fonts */
-
for (i = 0; i < m->natoms; i++)
{
molecule_atom *a = &m->atoms[i];
/* First, we translate the origin to the center of the atom.
- Then we retrieve the prevailing modelview matrix (which
+ Then we retrieve the prevailing modelview matrix, which
includes any rotation, wandering, and user-trackball-rolling
of the scene.
glRotatef (current_device_rotation(), 0, 0, 1); /* right side up */
{
- int h;
- int w = texture_string_width (mc->atom_font, a->label, &h);
- GLfloat s = 1.0 / h; /* Scale to unit */
+ XCharStruct e;
+ int w, h;
+ GLfloat s;
+
+ texture_string_metrics (mc->atom_font, a->label, &e, 0, 0);
+ w = e.width;
+ h = e.ascent + e.descent;
+
+ s = 1.0 / h; /* Scale to unit */
s *= mc->overall_scale; /* Scale to size of atom */
s *= 0.8; /* Shrink a bit */
glScalef (s, s, 1);
- glTranslatef (-w * 0.5, h * 0.3 - h, 0);
+ glTranslatef (-w/2, -h/2, 0);
print_texture_string (mc->atom_font, a->label);
}
glPopMatrix();
}
-
- /* More efficient to always call glEnable() with correct values
- than to call glPushAttrib()/glPopAttrib(), since reading
- attributes from GL does a round-trip and stalls the pipeline.
- */
- if (!wire)
- glEnable (GL_LIGHTING);
}