mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Port the plot text method to Qt, also test it by actually plotting something
The plot_text function from the cairo-methods are now ported on the qt version. this patch moves around some code since quite defines are already used and I didn't want to reinvent the whell. Original code used varargs, but I prefered to change it , so now it receives just a reference to a QString object and the string must be constructed before sending, using the .arg methods. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
b3fce3497c
commit
1b392b35bc
5 changed files with 57 additions and 76 deletions
|
@ -90,22 +90,6 @@ typedef gint (*sort_func_t)(GtkTreeModel *model,
|
||||||
GtkTreeIter *b,
|
GtkTreeIter *b,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
#define ALIGN_LEFT 1
|
|
||||||
#define ALIGN_RIGHT 2
|
|
||||||
#define INVISIBLE 4
|
|
||||||
#define UNSORTABLE 8
|
|
||||||
#define EDITABLE 16
|
|
||||||
|
|
||||||
#ifndef TEXT_SCALE
|
|
||||||
#define TEXT_SCALE 1.0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define DEPTH_TEXT_SIZE (10 * TEXT_SCALE)
|
|
||||||
#define PRESSURE_TEXT_SIZE (10 * TEXT_SCALE)
|
|
||||||
#define DC_TEXT_SIZE (10.5 * TEXT_SCALE)
|
|
||||||
#define PP_TEXT_SIZE (11 * TEXT_SCALE)
|
|
||||||
#define TEMP_TEXT_SIZE (12 * TEXT_SCALE)
|
|
||||||
|
|
||||||
extern GtkTreeViewColumn *tree_view_column(GtkWidget *tree_view, int index, const char *title,
|
extern GtkTreeViewColumn *tree_view_column(GtkWidget *tree_view, int index, const char *title,
|
||||||
data_func_t data_func, unsigned int flags);
|
data_func_t data_func, unsigned int flags);
|
||||||
extern GtkTreeViewColumn *tree_view_column_add_pixbuf(GtkWidget *tree_view, data_func_t data_func, GtkTreeViewColumn *col);
|
extern GtkTreeViewColumn *tree_view_column_add_pixbuf(GtkWidget *tree_view, data_func_t data_func, GtkTreeViewColumn *col);
|
||||||
|
|
51
profile.c
51
profile.c
|
@ -157,57 +157,6 @@ int get_maxdepth(struct plot_info *pi)
|
||||||
return md;
|
return md;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
typedef struct {
|
|
||||||
double size;
|
|
||||||
color_indice_t color;
|
|
||||||
double hpos, vpos;
|
|
||||||
} text_render_options_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define RIGHT (-1.0)
|
|
||||||
#define CENTER (-0.5)
|
|
||||||
#define LEFT (0.0)
|
|
||||||
|
|
||||||
#define TOP (1)
|
|
||||||
#define MIDDLE (0)
|
|
||||||
#define BOTTOM (-1)
|
|
||||||
|
|
||||||
#if USE_GTK_UI
|
|
||||||
static void plot_text(struct graphics_context *gc, const text_render_options_t *tro,
|
|
||||||
double x, double y, const char *fmt, ...)
|
|
||||||
{
|
|
||||||
cairo_t *cr = gc->cr;
|
|
||||||
cairo_font_extents_t fe;
|
|
||||||
cairo_text_extents_t extents;
|
|
||||||
double dx, dy;
|
|
||||||
char buffer[256];
|
|
||||||
va_list args;
|
|
||||||
|
|
||||||
va_start(args, fmt);
|
|
||||||
vsnprintf(buffer, sizeof(buffer), fmt, args);
|
|
||||||
va_end(args);
|
|
||||||
|
|
||||||
cairo_set_font_size(cr, tro->size * plot_scale);
|
|
||||||
cairo_font_extents(cr, &fe);
|
|
||||||
cairo_text_extents(cr, buffer, &extents);
|
|
||||||
dx = tro->hpos * (extents.width + extents.x_bearing);
|
|
||||||
dy = tro->vpos * (extents.height + fe.descent);
|
|
||||||
move_to(gc, x, y);
|
|
||||||
cairo_rel_move_to(cr, dx, dy);
|
|
||||||
|
|
||||||
cairo_text_path(cr, buffer);
|
|
||||||
set_source_rgba(gc, TEXT_BACKGROUND);
|
|
||||||
cairo_stroke(cr);
|
|
||||||
|
|
||||||
move_to(gc, x, y);
|
|
||||||
cairo_rel_move_to(cr, dx, dy);
|
|
||||||
|
|
||||||
set_source_rgba(gc, tro->color);
|
|
||||||
cairo_show_text(cr, buffer);
|
|
||||||
}
|
|
||||||
#endif /* USE_GTK_UI */
|
|
||||||
|
|
||||||
/* collect all event names and whether we display them */
|
/* collect all event names and whether we display them */
|
||||||
struct ev_select {
|
struct ev_select {
|
||||||
char *ev_name;
|
char *ev_name;
|
||||||
|
|
24
profile.h
24
profile.h
|
@ -54,6 +54,30 @@ int get_maxtime(struct plot_info *pi);
|
||||||
* partial pressure graphs */
|
* partial pressure graphs */
|
||||||
int get_maxdepth(struct plot_info *pi);
|
int get_maxdepth(struct plot_info *pi);
|
||||||
|
|
||||||
|
#define ALIGN_LEFT 1
|
||||||
|
#define ALIGN_RIGHT 2
|
||||||
|
#define INVISIBLE 4
|
||||||
|
#define UNSORTABLE 8
|
||||||
|
#define EDITABLE 16
|
||||||
|
|
||||||
|
#ifndef TEXT_SCALE
|
||||||
|
#define TEXT_SCALE 1.0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DEPTH_TEXT_SIZE (10 * TEXT_SCALE)
|
||||||
|
#define PRESSURE_TEXT_SIZE (10 * TEXT_SCALE)
|
||||||
|
#define DC_TEXT_SIZE (10.5 * TEXT_SCALE)
|
||||||
|
#define PP_TEXT_SIZE (11 * TEXT_SCALE)
|
||||||
|
#define TEMP_TEXT_SIZE (12 * TEXT_SCALE)
|
||||||
|
|
||||||
|
#define RIGHT (-1.0)
|
||||||
|
#define CENTER (-0.5)
|
||||||
|
#define LEFT (0.0)
|
||||||
|
|
||||||
|
#define TOP (1)
|
||||||
|
#define MIDDLE (0)
|
||||||
|
#define BOTTOM (-1)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -100,6 +100,12 @@ void fill_profile_color()
|
||||||
}
|
}
|
||||||
#undef COLOR
|
#undef COLOR
|
||||||
|
|
||||||
|
struct text_render_options{
|
||||||
|
double size;
|
||||||
|
color_indice_t color;
|
||||||
|
double hpos, vpos;
|
||||||
|
};
|
||||||
|
|
||||||
ProfileGraphicsView::ProfileGraphicsView(QWidget* parent) : QGraphicsView(parent)
|
ProfileGraphicsView::ProfileGraphicsView(QWidget* parent) : QGraphicsView(parent)
|
||||||
{
|
{
|
||||||
setScene(new QGraphicsScene());
|
setScene(new QGraphicsScene());
|
||||||
|
@ -293,19 +299,17 @@ void ProfileGraphicsView::plot_depth_profile(struct graphics_context *gc, struct
|
||||||
scene()->addItem(line);
|
scene()->addItem(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* now the text on the time markers */
|
/* now the text on the time markers */
|
||||||
text_render_options_t tro = {DEPTH_TEXT_SIZE, TIME_TEXT, CENTER, TOP};
|
struct text_render_options tro = {DEPTH_TEXT_SIZE, TIME_TEXT, CENTER, TOP};
|
||||||
if (maxtime < 600) {
|
if (maxtime < 600) {
|
||||||
/* Be a bit more verbose with shorter dives */
|
/* Be a bit more verbose with shorter dives */
|
||||||
for (i = incr; i < maxtime; i += incr)
|
for (i = incr; i < maxtime; i += incr)
|
||||||
plot_text(gc, &tro, i, 1, "%02d:%02d", i/60, i%60);
|
plot_text(gc, &tro, i, 1, QString("%1:%2").arg(i/60).arg(i%60));
|
||||||
} else {
|
} else {
|
||||||
/* Only render the time on every second marker for normal dives */
|
/* Only render the time on every second marker for normal dives */
|
||||||
for (i = incr; i < maxtime; i += 2 * incr)
|
for (i = incr; i < maxtime; i += 2 * incr)
|
||||||
plot_text(gc, &tro, i, 1, "%d", i/60);
|
plot_text(gc, &tro, i, 1, QString::number(i/60));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Depth markers: every 30 ft or 10 m*/
|
/* Depth markers: every 30 ft or 10 m*/
|
||||||
gc->leftx = 0; gc->rightx = 1.0;
|
gc->leftx = 0; gc->rightx = 1.0;
|
||||||
|
@ -418,9 +422,6 @@ void ProfileGraphicsView::plot_depth_profile(struct graphics_context *gc, struct
|
||||||
// TODO: Port the profile_calc_ceiling to QSettings
|
// TODO: Port the profile_calc_ceiling to QSettings
|
||||||
// if (prefs.profile_calc_ceiling) {
|
// if (prefs.profile_calc_ceiling) {
|
||||||
|
|
||||||
qDebug() << "CALC_CEILING_SHALLOW" << profile_color[CALC_CEILING_SHALLOW].first();
|
|
||||||
qDebug() << "CALC_CEILING_DEEP" << profile_color[CALC_CEILING_DEEP].first();
|
|
||||||
|
|
||||||
pat.setColorAt(0, profile_color[CALC_CEILING_SHALLOW].first());
|
pat.setColorAt(0, profile_color[CALC_CEILING_SHALLOW].first());
|
||||||
pat.setColorAt(1, profile_color[CALC_CEILING_DEEP].first());
|
pat.setColorAt(1, profile_color[CALC_CEILING_DEEP].first());
|
||||||
|
|
||||||
|
@ -479,6 +480,23 @@ void ProfileGraphicsView::plot_depth_profile(struct graphics_context *gc, struct
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProfileGraphicsView::plot_text(struct graphics_context *gc, text_render_options_t *tro, double x, double y, const QString& text)
|
||||||
|
{
|
||||||
|
QFontMetrics fm(font());
|
||||||
|
|
||||||
|
double dx = tro->hpos * (fm.width(text));
|
||||||
|
double dy = tro->vpos * (fm.height());
|
||||||
|
|
||||||
|
QGraphicsSimpleTextItem *item = new QGraphicsSimpleTextItem(text);
|
||||||
|
QPointF point( SCALE(gc, x, y) ); // This is neded because of the SCALE macro.
|
||||||
|
|
||||||
|
item->setPos(point.x() + dx, point.y() +dy );
|
||||||
|
item->setBrush( QBrush(profile_color[tro->color].first()));
|
||||||
|
item->setPen( QPen(profile_color[BACKGROUND].first()));
|
||||||
|
scene()->addItem(item);
|
||||||
|
qDebug() << item->pos();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ProfileGraphicsView::resizeEvent(QResizeEvent *event)
|
void ProfileGraphicsView::resizeEvent(QResizeEvent *event)
|
||||||
{
|
{
|
||||||
|
@ -486,5 +504,5 @@ void ProfileGraphicsView::resizeEvent(QResizeEvent *event)
|
||||||
// I can pass some parameters to this -
|
// I can pass some parameters to this -
|
||||||
// like Qt::IgnoreAspectRatio or Qt::KeepAspectRatio
|
// like Qt::IgnoreAspectRatio or Qt::KeepAspectRatio
|
||||||
QRectF r = scene()->sceneRect();
|
QRectF r = scene()->sceneRect();
|
||||||
fitInView ( r.x() - 2, r.y() -2, r.width() + 4, r.height() + 4); // do a little bit of spacing;
|
fitInView ( r.x() - 50, r.y() -50, r.width() + 100, r.height() + 100); // do a little bit of spacing;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,11 @@
|
||||||
|
|
||||||
#include <QGraphicsView>
|
#include <QGraphicsView>
|
||||||
|
|
||||||
|
struct text_render_options;
|
||||||
|
struct graphics_context;
|
||||||
|
struct plot_info;
|
||||||
|
typedef struct text_render_options text_render_options_t;
|
||||||
|
|
||||||
class ProfileGraphicsView : public QGraphicsView {
|
class ProfileGraphicsView : public QGraphicsView {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
@ -14,6 +19,7 @@ protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void plot_depth_profile(struct graphics_context *gc, struct plot_info *pi);
|
void plot_depth_profile(struct graphics_context *gc, struct plot_info *pi);
|
||||||
|
void plot_text(struct graphics_context *gc, text_render_options_t *tro, double x, double y, const QString &text);
|
||||||
|
|
||||||
QPen defaultPen;
|
QPen defaultPen;
|
||||||
QBrush defaultBrush;
|
QBrush defaultBrush;
|
||||||
|
|
Loading…
Add table
Reference in a new issue