mirror of
https://github.com/schrodinger/pymol-open-source.git
synced 2026-06-04 20:04:21 +08:00
137 lines
5.4 KiB
C
137 lines
5.4 KiB
C
|
|
/*
|
|
A* -------------------------------------------------------------------
|
|
B* This file contains source code for the PyMOL computer program
|
|
C* copyright 1998-2003 by Warren Lyford Delano of DeLano Scientific.
|
|
D* -------------------------------------------------------------------
|
|
E* It is unlawful to modify or remove this copyright notice.
|
|
F* -------------------------------------------------------------------
|
|
G* Please see the accompanying LICENSE file for further information.
|
|
H* --------------------------------------------------\-----------------
|
|
I* Additional authors of this source file include:
|
|
-*
|
|
-*
|
|
-*
|
|
Z* -------------------------------------------------------------------
|
|
*/
|
|
#ifndef _H_Text
|
|
#define _H_Text
|
|
|
|
#include"PyMOLGlobals.h"
|
|
#include"Base.h"
|
|
|
|
|
|
/* Here are the issues:
|
|
|
|
- Many different types of fonts:
|
|
bitmap (glut)
|
|
stroke vector
|
|
3D-vector (extrusion)
|
|
pixmap (raster)
|
|
texture
|
|
|
|
- Availability:
|
|
* we don't want to load fonts which consume resources before they're needed.
|
|
* we don't want to slow down PyMOL launching any more than it already has been
|
|
|
|
- Performance:
|
|
* really, only vector and texture fonts deliver the performance we seek
|
|
* want zero overhead when using a pre-loaded font (no Python locks allowed)
|
|
|
|
- Raytracing:
|
|
* glut font cannot be raytraced,
|
|
* pixmap and texture mapped fonts need resolution resolution >= PNG file
|
|
* need a geometric stand-in for the font for rendering (filled rect + alpha okay)
|
|
|
|
- Quality:
|
|
* vector font looks klunky
|
|
* antialiasing essential if labels are to work with PyMOL imagery
|
|
|
|
- Flexibility: want to be able to color fonts on the fly, but also support multi-color fonts
|
|
|
|
- Threading:
|
|
* font loading will require the Python interpreter lock, since some fonts are defined
|
|
* fonts are global PyMOL data
|
|
|
|
- Geometric:
|
|
* are fonts rendered in screen space, model space, or both?
|
|
* when we specify size, do we mean screen pixels or model distances?
|
|
* do we support kerning? what other metrics are critical?
|
|
|
|
- Portability:
|
|
* can we support fonts without C++? FreeType2 is ANSI C...
|
|
|
|
*/
|
|
|
|
|
|
/* font_sources */
|
|
|
|
#define cTextSrcGeneral 0
|
|
#define cTextSrcGLUT 1
|
|
#define cTextSrcFreeType 2
|
|
|
|
int TextInit(PyMOLGlobals * G);
|
|
void TextFree(PyMOLGlobals * G);
|
|
|
|
void TextSetColorFromUColor(PyMOLGlobals * G);
|
|
|
|
void TextSetWorldPos(PyMOLGlobals * G, const float *pos);
|
|
float *TextGetWorldPos(PyMOLGlobals * G);
|
|
void TextSetLabelPushPos(PyMOLGlobals * G, const float *pos);
|
|
float *TextGetLabelPushPos(PyMOLGlobals * G);
|
|
void TextSetLabelPos(PyMOLGlobals * G, const float *pos);
|
|
float *TextGetLabelPos(PyMOLGlobals * G);
|
|
void TextSetLabelPosIsSet(PyMOLGlobals * G, unsigned char isSet);
|
|
unsigned char TextGetLabelPosIsSet(PyMOLGlobals * G);
|
|
void TextSetScreenWorldOffset(PyMOLGlobals * G, const float *pos);
|
|
float *TextGetScreenWorldOffset(PyMOLGlobals * G);
|
|
void TextSetTargetPos(PyMOLGlobals * G, const float *pos);
|
|
float *TextGetTargetPos(PyMOLGlobals * G);
|
|
float TextGetWidth(PyMOLGlobals * G);
|
|
float TextGetHeight(PyMOLGlobals * G);
|
|
void TextSetWidth(PyMOLGlobals * G, float text_width);
|
|
void TextSetHeight(PyMOLGlobals * G, float text_height);
|
|
void TextSetIndentFactorX(PyMOLGlobals * G, float factor);
|
|
void TextSetIndentFactorY(PyMOLGlobals * G, float factor);
|
|
float *TextGetIndentFactor(PyMOLGlobals * G);
|
|
void TextSetPos(PyMOLGlobals * G, const float *pos);
|
|
void TextSetColor(PyMOLGlobals * G, const float *color);
|
|
void TextSetColor3f(PyMOLGlobals * G, float red, float green, float blue);
|
|
void TextGetOutlineColor(PyMOLGlobals * G,
|
|
unsigned char *red,
|
|
unsigned char *green, unsigned char *blue, unsigned char *alpha);
|
|
void TextSetOutlineColor(PyMOLGlobals * G, int color);
|
|
void TextSetPosNColor(PyMOLGlobals * G, const float *pos, const float *color);
|
|
float *TextGetColor(PyMOLGlobals * G);
|
|
float *TextGetPos(PyMOLGlobals * G);
|
|
void TextGetColorUChar(PyMOLGlobals * G, unsigned char *red,
|
|
unsigned char *green, unsigned char *blue, unsigned char *alpha);
|
|
unsigned char *TextGetColorUChar4uv(PyMOLGlobals * G);
|
|
const char *TextRenderOpenGL(PyMOLGlobals * G, const RenderInfo * info, int text_id, const char *st,
|
|
float size, const float *rpos, short needSize, short relativeMode, short shouldRender, CGO *shaderCGO);
|
|
const char *TextRenderRay(PyMOLGlobals * G, CRay * ray, int text_id, const char *st, float size,
|
|
const float *rpos, short needSize, short relativeMode);
|
|
|
|
void TextDrawStrAt(PyMOLGlobals * G, const char *st, int x, int y , CGO *orthoCGO);
|
|
void TextDrawStr(PyMOLGlobals * G, const char *st , CGO *orthoCGO);
|
|
void TextIndent(PyMOLGlobals * G, float x, float y);
|
|
void TextAdvance(PyMOLGlobals * G, float advance);
|
|
void TextSetPos2i(PyMOLGlobals * G, int x, int y);
|
|
void TextDrawChar(PyMOLGlobals * G, char ch , CGO *orthoCGO);
|
|
void TextDrawSubStrFast(PyMOLGlobals * G, const char *c, int x, int y, int start, int n , CGO *orthoCGO);
|
|
void TextDrawCharRepeat(PyMOLGlobals * G, char c, int x, int y, int start, int n , CGO *orthoCGO);
|
|
|
|
void TextSetLabelBkgrdInfo(PyMOLGlobals * G, float label_spacing, float label_just, const float *buff);
|
|
|
|
float TextGetSpacing(PyMOLGlobals * G);
|
|
float TextGetJustification(PyMOLGlobals * G);
|
|
float *TextGetLabelBuffer(PyMOLGlobals * G);
|
|
|
|
void TextSetIsPicking(PyMOLGlobals * G, bool IsPicking);
|
|
bool TextGetIsPicking(PyMOLGlobals * G);
|
|
|
|
bool TextStartsWithColorCode(const char *);
|
|
bool TextSetColorFromCode(PyMOLGlobals *, const char *, const float *);
|
|
|
|
#endif
|