Commit fbcea5c4 authored by Christoffer Ackelman's avatar Christoffer Ackelman

QT: Simplified font functions

parent d29f44c3
......@@ -71,26 +71,6 @@ typedef struct {
QPixmap pixmap[DRAW_PIXMAP_SIZE];
} draw_sPixmap;
static char font_names[draw_eFont__][DRAW_FONT_SIZE][80]
= { { "-*-Helvetica-Bold-R-Normal--8-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--10-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--12-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--14-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--14-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--18-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--18-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--18-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--24-*-*-*-P-*-ISO8859-1" },
{ "-*-Helvetica-Medium-R-Normal--8-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--10-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--12-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--14-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--14-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--18-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--18-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--18-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--24-*-*-*-P-*-ISO8859-1" } };
static QMouseEvent* last_event;
static QWidget* last_target;
......@@ -125,6 +105,19 @@ static QColor draw_type_to_color(FlowDrawQt* draw_ctx, int painter_type)
}
}
#define FONT_SCALE 0.7
static QFont get_font(int painter_type, double size, const char* fontstr = "Lucida Sans")
{
QFont res(fontstr);
res.setPointSizeF(size);
if (painter_type == flow_eDrawType_TextHelveticaBold
|| painter_type == flow_eDrawType_TextHelveticaEraseBold) {
res.setBold(true);
}
return res;
}
static QPainter* get_painter(
QPaintDevice* window, FlowDrawQt* draw_ctx, int painter_type, int size)
{
......@@ -148,13 +141,8 @@ static QPainter* get_painter(
painter->setBrush(QBrush(draw_type_to_color(draw_ctx, painter_type)));
painter->setPen(QPen(painter->brush(), size + 1));
painter->setBackground(QBrush(draw_ctx->background));
QFont font = QFont("Helvetica");
if (painter_type == flow_eDrawType_TextHelveticaBold
|| painter_type == flow_eDrawType_TextHelveticaEraseBold) {
font.setBold(true);
}
font.setPixelSize(size);
painter->setFont(font);
int sizes[9] = {8, 10, 12, 14, 14, 18, 18, 18, 24};
painter->setFont(get_font(painter_type, sizes[size], "Helvetica"));
return painter;
}
case flow_eDrawType_Green:
......@@ -1196,20 +1184,6 @@ int FlowDrawQt::nav_line_erase(
return line_helper(ctx, flow_eDrawType_LineErase, idx, x1, y1, x2, y2, true);
}
#define FONTSTR "Lucida Sans"
#define FONT_SCALE 0.7
static QFont font(flow_eDrawType painter_type, double size)
{
QFont res(FONTSTR);
res.setPointSizeF(FONT_SCALE * size);
if (painter_type == flow_eDrawType_TextHelveticaBold
|| painter_type == flow_eDrawType_TextHelveticaEraseBold) {
res.setWeight(QFont::Bold);
}
return res;
}
int FlowDrawQt::text_pango_helper(FlowCtx* ctx, int x, int y, char* text,
int len, flow_eDrawType painter_type, int idx, double size, int dimmed,
int erase_rect)
......@@ -1231,7 +1205,7 @@ int FlowDrawQt::text_pango_helper(FlowCtx* ctx, int x, int y, char* text,
str = QString::fromUtf8(text);
}
painter->setFont(font(painter_type, size));
painter->setFont(get_font(painter_type, FONT_SCALE * size));
QRect rect = painter->fontMetrics().boundingRect(str);
int height = rect.height();
......@@ -1311,10 +1285,7 @@ int FlowDrawQt::nav_text_helper(FlowCtx* ctx, flow_eDrawType painter_type,
return 1;
}
int font_idx = get_font_idx(painter_type);
QPainter* painter = get_painter(painter_type, size, true);
painter->setFont(QFont(font_names[font_idx][size]));
// debug_print("drawText %s at (%d, %d)\n", text, x, y);
painter->drawText(x, y, QString::fromLocal8Bit(text, len));
......@@ -1699,7 +1670,7 @@ int FlowDrawQt::get_text_extent_pango(FlowCtx* ctx, const char* text, int len,
str = QString::fromUtf8(text);
}
painter->setFont(font(painter_type, size));
painter->setFont(get_font(painter_type, FONT_SCALE * size));
QRect boundingRect = painter->fontMetrics().boundingRect(str);
......@@ -1813,16 +1784,6 @@ void FlowDrawQt::set_white_background(FlowCtx* ctx)
toplevel->setPalette(pal);
}
int FlowDrawQt::get_font_idx(int painter_type)
{
if (painter_type == flow_eDrawType_TextHelveticaBold
|| painter_type == flow_eDrawType_TextHelveticaEraseBold) {
return draw_eFont_HelveticaBold;
} else {
return draw_eFont_Helvetica;
}
}
int FlowDrawQt::image_get_width(flow_tImImage image)
{
return ((QImage*)image)->width();
......
......@@ -211,8 +211,6 @@ public:
void set_white_background(FlowCtx* ctx);
int get_font_idx(int gc_type);
int image_get_width(flow_tImImage image);
int image_get_height(flow_tImImage image);
void image_scale(float scale, flow_tImImage orig_im, flow_tImImage* im,
......
......@@ -65,82 +65,6 @@
#define DRAW_PRESS_PIX 9
static char font_names[glow_eFont__][glow_eDrawFont__][DRAW_FONT_SIZE][80] = {
{ { "-*-Helvetica-Medium-R-Normal--8-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--10-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--12-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--14-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--14-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--18-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--18-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--18-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Bold-R-Normal--24-*-*-*-P-*-ISO8859-1" },
{ "-*-Helvetica-Medium-R-Normal--8-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--10-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--12-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--14-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--14-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--18-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--18-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--18-*-*-*-P-*-ISO8859-1",
"-*-Helvetica-Medium-R-Normal--24-*-*-*-P-*-ISO8859-1" } },
{ { "-*-times-Medium-R-Normal--8-*-*-*-*-*-ISO8859-1",
"-*-times-Bold-R-Normal--10-*-*-*-*-*-ISO8859-1",
"-*-times-Bold-R-Normal--12-*-*-*-*-*-ISO8859-1",
"-*-times-Bold-R-Normal--14-*-*-*-*-*-ISO8859-1",
"-*-times-Bold-R-Normal--14-*-*-*-*-*-ISO8859-1",
"-*-times-Bold-R-Normal--18-*-*-*-*-*-ISO8859-1",
"-*-times-Bold-R-Normal--18-*-*-*-*-*-ISO8859-1",
"-*-times-Bold-R-Normal--18-*-*-*-*-*-ISO8859-1",
"-*-times-Bold-R-Normal--24-*-*-*-*-*-ISO8859-1" },
{ "-*-times-Medium-R-Normal--8-*-*-*-*-*-ISO8859-1",
"-*-times-Medium-R-Normal--10-*-*-*-*-*-ISO8859-1",
"-*-times-Medium-R-Normal--12-*-*-*-*-*-ISO8859-1",
"-*-times-Medium-R-Normal--14-*-*-*-*-*-ISO8859-1",
"-*-times-Medium-R-Normal--14-*-*-*-*-*-ISO8859-1",
"-*-times-Medium-R-Normal--18-*-*-*-*-*-ISO8859-1",
"-*-times-Medium-R-Normal--18-*-*-*-*-*-ISO8859-1",
"-*-times-Medium-R-Normal--18-*-*-*-*-*-ISO8859-1",
"-*-times-Medium-R-Normal--24-*-*-*-*-*-ISO8859-1" } },
{ { "-*-new century schoolbook-Medium-R-Normal--8-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Bold-R-Normal--10-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Bold-R-Normal--12-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Bold-R-Normal--14-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Bold-R-Normal--14-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Bold-R-Normal--18-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Bold-R-Normal--18-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Bold-R-Normal--18-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Bold-R-Normal--24-*-*-*-*-*-ISO8859-1" },
{ "-*-new century schoolbook-Medium-R-Normal--8-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Medium-R-Normal--10-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Medium-R-Normal--12-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Medium-R-Normal--14-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Medium-R-Normal--14-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Medium-R-Normal--18-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Medium-R-Normal--18-*-*-*-*-*-ISO8859-1",
"-*-new century schoolbook-Medium-R-Normal--18-*-*-*-*-*-ISO8859-1",
"-*-new century "
"schoolbook-Medium-R-Normal--24-*-*-*-*-*-ISO8859-1" } },
{ { "-*-courier-Medium-R-Normal--8-*-*-*-m-*-ISO8859-1",
"-*-courier-Bold-R-Normal--10-*-*-*-m-*-ISO8859-1",
"-*-courier-Bold-R-Normal--12-*-*-*-m-*-ISO8859-1",
"-*-courier-Bold-R-Normal--14-*-*-*-m-*-ISO8859-1",
"-*-courier-Bold-R-Normal--14-*-*-*-m-*-ISO8859-1",
"-*-courier-Bold-R-Normal--18-*-*-*-m-*-ISO8859-1",
"-*-courier-Bold-R-Normal--18-*-*-*-m-*-ISO8859-1",
"-*-courier-Bold-R-Normal--18-*-*-*-m-*-ISO8859-1",
"-*-courier-Bold-R-Normal--24-*-*-*-m-*-ISO8859-1" },
{ "-*-courier-Medium-R-Normal--8-*-*-*-m-*-ISO8859-1",
"-*-courier-Medium-R-Normal--10-*-*-*-m-*-ISO8859-1",
"-*-courier-Medium-R-Normal--12-*-*-*-m-*-ISO8859-1",
"-*-courier-Medium-R-Normal--14-*-*-*-m-*-ISO8859-1",
"-*-courier-Medium-R-Normal--14-*-*-*-m-*-ISO8859-1",
"-*-courier-Medium-R-Normal--18-*-*-*-m-*-ISO8859-1",
"-*-courier-Medium-R-Normal--18-*-*-*-m-*-ISO8859-1",
"-*-courier-Medium-R-Normal--18-*-*-*-m-*-ISO8859-1",
"-*-courier-Medium-R-Normal--24-*-*-*-m-*-ISO8859-1" } }
};
static QMouseEvent* last_event;
static QWidget* last_target;
......@@ -204,6 +128,38 @@ static QColor draw_type_to_color(
}
}
#define FONT_SCALE 0.7
#define FONT_DESCENT 0.22
static QFont get_font(int font_idx, int painter_type, double size)
{
QFont res;
switch (font_idx) {
case glow_eFont_Helvetica:
res = QFont("Helvetica");
break;
case glow_eFont_Times:
res = QFont("Times");
break;
case glow_eFont_NewCenturySchoolbook:
res = QFont("Century Schoolbook L");
break;
case glow_eFont_Courier:
res = QFont("Courier 10 pitch");
break;
default:
res = QFont("Lucida Sans");
break;
}
res.setPointSizeF(FONT_SCALE * size);
if (painter_type == glow_eDrawType_TextHelveticaBold || painter_type == glow_eDrawType_TextHelveticaEraseBold) {
res.setBold(true);
}
return res;
}
static QPainter* get_painter(
QPaintDevice* window, GlowDrawQt* draw_ctx, int painter_type, int size)
{
......@@ -228,13 +184,7 @@ static QPainter* get_painter(
painter->setPen(QPen(painter->brush(), size + 1));
painter->setBackground(QBrush(draw_ctx->background));
if (size > 0) {
QFont font = QFont("Helvetica");
if (painter_type == glow_eDrawType_TextHelveticaBold
|| painter_type == glow_eDrawType_TextHelveticaEraseBold) {
font.setBold(true);
}
font.setPixelSize(size);
painter->setFont(font);
painter->setFont(get_font(glow_eFont_Helvetica, painter_type, size));
}
return painter;
}
......@@ -1325,10 +1275,8 @@ int GlowDrawQt::text(GlowWind* wind, int x, int y, char* text, int len,
set_clip(w, painter);
}
int font_type = get_font_type(painter_type);
if (font_idx != glow_eFont_Helvetica) {
painter->setFont(QFont(font_names[font_idx][font_type][idx]));
painter->setFont(get_font(font_idx, painter_type, idx));
}
if (color != glow_eDrawType_Line) {
......@@ -1336,7 +1284,6 @@ int GlowDrawQt::text(GlowWind* wind, int x, int y, char* text, int len,
painter->setPen(QPen(painter->brush(), size + 1));
}
painter->setFont(QFont(font_names[font_idx][font_type][idx]));
QRect rect
= painter->fontMetrics().boundingRect(QString::fromLocal8Bit(text, len));
painter->drawText(x, y, rect.width(), rect.height(), Qt::TextDontClip,
......@@ -1403,19 +1350,16 @@ int GlowDrawQt::text_erase(GlowWind* wind, int x, int y, char* text, int len,
painter_type = glow_eDrawType_TextHelveticaEraseBold;
}
int font_type = get_font_type(painter_type);
QPainter* painter = get_painter(w->buffer, this, painter_type, idx);
if (font_idx != glow_eFont_Helvetica) {
painter->setFont(QFont(font_names[font_idx][font_type][idx]));
painter->setFont(get_font(font_idx, painter_type, idx));
}
if (w->clip_on) {
set_clip(w, painter);
}
painter->setFont(QFont(font_names[font_idx][font_type][idx]));
QRect rect
= painter->fontMetrics().boundingRect(QString::fromLocal8Bit(text, len));
painter->drawText(x, y, rect.width(), rect.height(), Qt::TextDontClip,
......@@ -1684,10 +1628,9 @@ int GlowDrawQt::get_text_extent(const char* text, int len,
font_idx = glow_eFont_Helvetica;
}
int font_type = get_font_type(painter_type);
QFont font = get_font(font_idx, painter_type, idx);
QFontMetrics fontMetrics
= QFontMetrics(QFont(font_names[font_idx][font_type][idx]));
QFontMetrics fontMetrics = QFontMetrics(font);
QRect rect = fontMetrics.boundingRect(QString::fromLocal8Bit(text, len));
*width = rect.width();
int text_ascent = fontMetrics.ascent();
......@@ -2360,23 +2303,6 @@ QPoint* GlowDrawQt::points_to_qt_points_curve(
return qpoints;
}
int GlowDrawQt::get_font_type(int painter_type)
{
int font_type;
switch (painter_type) {
case glow_eDrawType_TextHelveticaBold:
case glow_eDrawType_TextHelveticaEraseBold:
font_type = glow_eDrawFont_HelveticaBold;
break;
default:
font_type = glow_eDrawFont_Helvetica;
break;
}
return font_type;
}
// Image functions
int GlowDrawQt::image_get_width(glow_tImImage image)
{
......@@ -3127,38 +3053,6 @@ int GlowDrawQt::gradient_fill_polyline(GlowWind* wind, glow_sPointX* points,
return 1;
}
#define FONT_SCALE 0.7
#define FONT_DESCENT 0.22
static QFont font(int font_idx, int font_type, double size)
{
QFont res;
switch (font_idx) {
case glow_eFont_Helvetica:
res = QFont("Helvetica");
break;
case glow_eFont_Times:
res = QFont("DejaVu Serif");
break;
case glow_eFont_NewCenturySchoolbook:
res = QFont("Century Schoolbook L");
break;
case glow_eFont_Courier:
res = QFont("Courier 10 pitch");
break;
default:
res = QFont("Lucida Sans");
break;
}
res.setPointSizeF(FONT_SCALE * size);
if (font_type == glow_eDrawFont_HelveticaBold) {
res.setWeight(QFont::Bold);
}
return res;
}
int GlowDrawQt::text_qt(GlowWind* wind, int x, int y, char* text, int len,
glow_eDrawType painter_type, glow_eDrawType color, int idx, int highlight,
int line, glow_eFont font_idx, double size, int rot)
......@@ -3172,8 +3066,6 @@ int GlowDrawQt::text_qt(GlowWind* wind, int x, int y, char* text, int len,
font_idx = glow_eFont_Helvetica;
}
int font_type = get_font_type(painter_type);
QPainter* painter = get_painter(w->buffer, this, painter_type, idx);
if (w->clip_on) {
......@@ -3197,7 +3089,7 @@ int GlowDrawQt::text_qt(GlowWind* wind, int x, int y, char* text, int len,
painter->rotate(rot);
}
painter->setFont(font(font_idx, font_type, size));
painter->setFont(get_font(font_idx, painter_type, size));
QRect rect = painter->fontMetrics().boundingRect(str);
int width = rect.width();
......@@ -3245,8 +3137,6 @@ int GlowDrawQt::text_erase_qt(GlowWind* wind, int x, int y, char* text, int len,
painter_type = glow_eDrawType_TextHelveticaEraseBold;
}
int font_type = get_font_type(painter_type);
int width, height;
{
......@@ -3259,7 +3149,7 @@ int GlowDrawQt::text_erase_qt(GlowWind* wind, int x, int y, char* text, int len,
str = QString::fromUtf8(text);
}
painter->setFont(font(font_idx, font_type, size));
painter->setFont(get_font(font_idx, painter_type, size));
QRect rect = painter->fontMetrics().boundingRect(str);
width = rect.width();
......@@ -3316,7 +3206,7 @@ int GlowDrawQt::get_text_extent_qt(const char* text, int len,
}
QPainter* painter = get_painter(w->buffer, this, painter_type, 0);
painter->setFont(font(font_idx, get_font_type(painter_type), size));
painter->setFont(get_font(font_idx, painter_type, size));
QString str;
if (((GrowCtx*)ctx)->text_coding != glow_eTextCoding_UTF_8) {
......
......@@ -200,8 +200,6 @@ public:
QPoint* points_to_qt_points(glow_sPointX* points, int point_cnt);
QPoint* points_to_qt_points_curve(
GlowWind* w, glow_sPointX* points, int point_cnt, int* cnt);
int get_font_type(int painter_type);
void load_font(glow_eFont font_idx, int font_type, int idx);
int image_get_width(glow_tImImage image);
int image_get_height(glow_tImImage image);
int image_get_rowstride(glow_tImImage image);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment