home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Enigma Amiga Life 110
/
EnigmaAmiga110CD.iso
/
indispensabili
/
utility
/
apdf
/
xpdf-0.80
/
ltk
/
ltklabel.cc
< prev
next >
Wrap
C/C++ Source or Header
|
1998-11-27
|
3KB
|
110 lines
//========================================================================
//
// LTKLabel.cc
//
// Copyright 1996 Derek B. Noonburg
//
//========================================================================
#ifdef __GNUC__
#pragma implementation
#endif
#include <stdlib.h>
#include <stdarg.h>
#include <stddef.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include "LTKLabel.h"
LTKLabel::LTKLabel(char *name1, int widgetNum1,
LTKLabelSize size1, int maxLength1,
char *fontName1, char *text1):
LTKWidget(name1, widgetNum1) {
size = size1;
if (size == ltkLabelMaxLength)
maxLength = maxLength1;
else
maxLength = -1;
text = text1 ? new GString(text1) : new GString();
length = text->getLength();
if (maxLength >= 0 && length > maxLength)
length = maxLength;
fontName = fontName1;
fontStruct = NULL;
textGC = None;
}
LTKLabel::~LTKLabel() {
delete text;
if (fontName && fontStruct) {
XFreeFont(getDisplay(), fontStruct);
XFreeGC(getDisplay(), textGC);
}
}
void LTKLabel::setText(char *text1) {
if (size == ltkLabelStatic)
return;
delete text;
text = text1 ? new GString(text1) : new GString();
length = text->getLength();
if (maxLength >= 0 && length > maxLength)
length = maxLength;
if (getXWindow() != None) {
clear();
redraw();
}
}
void LTKLabel::layout1() {
XCharStruct extents;
int direction, ascent, descent;
XGCValues gcValues;
int textWidth;
if (textGC == None) {
if (fontName &&
(fontStruct = XLoadQueryFont(getDisplay(), fontName))) {
XGetGCValues(getDisplay(), getFgGC(),
GCForeground | GCBackground | GCGraphicsExposures,
&gcValues);
gcValues.font = fontStruct->fid;
textGC = XCreateGC(getDisplay(), parent->getXWindow(),
GCForeground | GCBackground | GCGraphicsExposures |
GCFont, &gcValues);
} else {
fontName = NULL;
fontStruct = parent->getXFontStruct();
textGC = getFgGC();
}
}
textWidth = 0;
switch (size) {
case ltkLabelStatic:
XTextExtents(fontStruct, text->getCString(), text->getLength(),
&direction, &ascent, &descent, &extents);
textWidth = extents.width;
break;
case ltkLabelFixedWidth:
textWidth = 0;
break;
case ltkLabelMaxLength:
textWidth = maxLength * fontStruct->max_bounds.width;
break;
}
textHeight = fontStruct->ascent + fontStruct->descent;
textBase = fontStruct->ascent;
width = textWidth + 12;
height = textHeight + 4;
}
void LTKLabel::redraw() {
int tx, ty;
tx = 6;
ty = (height - textHeight) / 2 + textBase;
XDrawString(getDisplay(), xwin, textGC, tx, ty,
text->getCString(), length);
}