"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "layer1/FontGLUT.cpp" between
pymol-v1.8.6.0.tar.bz2 and pymol-v2.1.0.tar.bz2

About: PyMOL is a Python-enhanced molecular graphics tool. It excels at 3D visualization of proteins, small molecules, density, surfaces, and trajectories. It also includes molecular editing, ray tracing, and movies. Open Source version.

FontGLUT.cpp  (pymol-v1.8.6.0.tar.bz2):FontGLUT.cpp  (pymol-v2.1.0.tar.bz2)
skipping to change at line 57 skipping to change at line 57
static void FontGLUTRestore(CFontGLUT * I) static void FontGLUTRestore(CFontGLUT * I)
{ {
glPixelStorei(GL_UNPACK_SWAP_BYTES, I->swapbytes); glPixelStorei(GL_UNPACK_SWAP_BYTES, I->swapbytes);
glPixelStorei(GL_UNPACK_LSB_FIRST, I->lsbfirst); glPixelStorei(GL_UNPACK_LSB_FIRST, I->lsbfirst);
glPixelStorei(GL_UNPACK_ROW_LENGTH, I->rowlength); glPixelStorei(GL_UNPACK_ROW_LENGTH, I->rowlength);
glPixelStorei(GL_UNPACK_SKIP_ROWS, I->skiprows); glPixelStorei(GL_UNPACK_SKIP_ROWS, I->skiprows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, I->skippixels); glPixelStorei(GL_UNPACK_SKIP_PIXELS, I->skippixels);
glPixelStorei(GL_UNPACK_ALIGNMENT, I->alignment); glPixelStorei(GL_UNPACK_ALIGNMENT, I->alignment);
} }
/*
* check if masked `c` equals `value`
*/
static inline bool masked_byte_equals(char c, char mask, char value) {
return (c & mask) == value;
}
static inline bool byte_check_10xxxxxx(char c) {
return masked_byte_equals(c,
0xc0 /* mask 0b11000000 */,
0x80 /* value 0b10000000 */);
}
/*
* Read the next unicode point from a UTF-8 string and advance the string
* pointer. If decoding fails, set `error` to true. If `error` is already
* true, don't attempt to decode and return the next byte value as-is.
*
* Keep it simple and assume narrow build (up to 3 bytes).
*/
static unsigned int next_utf8_character(const char * &st, bool &error) {
unsigned int c = st[0];
if (!error) {
// Byte 1:
// 0b0xxxxxxx -> 1 byte
// 0b110xxxxx -> 2 byte
// 0b1110xxxx -> 3 byte (max unicode value 0xFFFF)
// 0b11110xxx -> 4 byte (would need wide build)
if (masked_byte_equals(c, 0xe0 /* 0b11100000 */, 0xc0 /* 0b11000000 */)) {
if (byte_check_10xxxxxx(st[1])) {
c &= 0x1f /* 0b00011111 */;
c = (c << 6) | (st[1] & 0x3f) /* 0b00111111 */;
st += 1;
} else {
error = true;
}
} else if (masked_byte_equals(c, 0xf0 /* 0b11110000 */, 0xe0 /* 0b11100000 *
/)) {
if (byte_check_10xxxxxx(st[1]) && byte_check_10xxxxxx(st[2])) {
c &= 0x0f /* 0b00001111 */;
c = (c << 6) | (st[1] & 0x3f) /* 0b00111111 */;
c = (c << 6) | (st[2] & 0x3f) /* 0b00111111 */;
st += 2;
} else {
error = true;
}
}
}
st += 1;
return c;
}
static const char *FontGLUTRenderOpenGL(RenderInfo * info, CFontGLUT * I, const char *st, float size, static const char *FontGLUTRenderOpenGL(RenderInfo * info, CFontGLUT * I, const char *st, float size,
float *rpos SHADERCGOARG) float *rpos SHADERCGOARG)
{ {
PyMOLGlobals *G = I->Font.G; PyMOLGlobals *G = I->Font.G;
if(G->ValidContext) { if(G->ValidContext) {
int c; int c;
FontGLUTBitmapFontRec *font_info = I->glutFont; FontGLUTBitmapFontRec *font_info = I->glutFont;
int first, last; int first, last;
FontGLUTBitmapCharRec const *ch; FontGLUTBitmapCharRec const *ch;
int textured = true && SHADERCGOARGV; int textured = true && SHADERCGOARGV;
int pushed = OrthoGetPushed(G); int pushed = OrthoGetPushed(G);
int sampling = 1; int sampling = 1;
const float _0 = 0.0F, _1 = 1.0F, _m1 = -1.0F; const float _0 = 0.0F, _1 = 1.0F, _m1 = -1.0F;
float x_indent = 0.0F, y_indent = 0.0F, z_indent = 0.0F; float x_indent = 0.0F, y_indent = 0.0F, z_indent = 0.0F;
if(info) if(info)
sampling = info->sampling; sampling = info->sampling;
sampling = DIP2PIXEL(sampling);
if(st && (*st)) { if(st && (*st)) {
float v_scale = SceneGetScreenVertexScale(G, NULL); float v_scale = SceneGetScreenVertexScale(G, NULL);
first = font_info->first; first = font_info->first;
last = first + font_info->num_chars; last = first + font_info->num_chars;
if(rpos) { if(rpos) {
if(rpos[0] < _1) { /* we need to measure the string width before st arting to draw */ if(rpos[0] < _1) { /* we need to measure the string width before st arting to draw */
float factor = rpos[0] / 2.0F - 0.5F; float factor = rpos[0] / 2.0F - 0.5F;
const char *sst = st; const char *sst = st;
if(factor < _m1) if(factor < _m1)
factor = _m1; factor = _m1;
if(factor > _0) if(factor > _0)
factor = _0; factor = _0;
while((c = *(sst++))) { bool utf8_error = false;
if((c >= first) && (c < last)) { while((c = next_utf8_character(sst, utf8_error))) {
if(c < first || c >= last) {
c = '?';
}
{
ch = font_info->ch[c - first]; ch = font_info->ch[c - first];
if(ch) { if(ch) {
x_indent -= factor * ch->advance; x_indent -= factor * ch->advance;
} }
} }
} }
} }
if(rpos[0] < _m1) { if(rpos[0] < _m1) {
x_indent -= (rpos[0] + _1) / v_scale; x_indent -= (rpos[0] + _1) / v_scale;
} else if(rpos[0] > _1) { } else if(rpos[0] > _1) {
skipping to change at line 190 skipping to change at line 250
if(!textured) { if(!textured) {
glColor3fv(TextGetColor(G)); glColor3fv(TextGetColor(G));
glRasterPos4fv(TextGetPos(G)); glRasterPos4fv(TextGetPos(G));
FontGLUTSave(I); FontGLUTSave(I);
} }
if(textured) if(textured)
CharacterRenderOpenGLPrime(G, info); CharacterRenderOpenGLPrime(G, info);
while((c = *(st++))) {
if((c >= first) && (c < last)) { bool utf8_error = false;
while((c = next_utf8_character(st, utf8_error))) {
if(c < first || c >= last) {
c = '?';
}
{
ch = font_info->ch[c - first]; ch = font_info->ch[c - first];
if(ch) { if(ch) {
if(!textured) { if(!textured) {
#ifndef PURE_OPENGL_ES_2 #ifndef PURE_OPENGL_ES_2
glBitmap(ch->width, ch->height, glBitmap(ch->width, ch->height,
ch->xorig, ch->yorig, ch->advance, 0, ch->bitmap); ch->xorig, ch->yorig, ch->advance, 0, ch->bitmap);
#endif #endif
TextAdvance(G, ch->advance); TextAdvance(G, ch->advance);
} else { } else {
 End of changes. 4 change blocks. 
4 lines changed or deleted 70 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)