diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2013-05-05 09:50:11 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-05-05 09:50:11 -0700 |
commit | 1238fde17c9ef65dad81ccbc1145c41192af8e06 (patch) | |
tree | 96816e06c5075cbc3f7ef9417823873af96c8840 /qt-ui | |
parent | adcae4d913c9e151c17da6b0371b2117c7dabb93 (diff) | |
parent | c72609046adcaff2ca5af475113e583cbb943a04 (diff) | |
download | subsurface-1238fde17c9ef65dad81ccbc1145c41192af8e06.tar.gz |
Merge branch 'PlotsV2' of https://github.com/tcanabrava/subsurface into Qt
Minor conflicts based on my cleanup of Tomaz' earlier commits.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui')
-rw-r--r-- | qt-ui/profilegraphics.cpp | 107 |
1 files changed, 60 insertions, 47 deletions
diff --git a/qt-ui/profilegraphics.cpp b/qt-ui/profilegraphics.cpp index 1f0b8efa5..053e3db0f 100644 --- a/qt-ui/profilegraphics.cpp +++ b/qt-ui/profilegraphics.cpp @@ -42,6 +42,7 @@ typedef enum { CEILING_SHALLOW, CEILING_DEEP, CALC_CEILING_SHALLOW, CALC_CEILING_DEEP } color_indice_t; + #define COLOR(x, y, z) QVector<QColor>() << x << y << z; /* profile_color[color indice] = COLOR(screen color, b/w printer color, color printer}} printer & screen colours could be different */ QMap<color_indice_t, QVector<QColor> > profile_color; @@ -95,6 +96,7 @@ void fill_profile_color() profile_color[CEILING_DEEP] = COLOR(RED1_MED_TRANS, BLACK1_HIGH_TRANS, RED1_MED_TRANS); profile_color[CALC_CEILING_SHALLOW] = COLOR(FUNGREEN1_HIGH_TRANS, BLACK1_HIGH_TRANS, FUNGREEN1_HIGH_TRANS); profile_color[CALC_CEILING_DEEP] = COLOR(APPLE1_HIGH_TRANS, BLACK1_HIGH_TRANS, APPLE1_HIGH_TRANS); + } #undef COLOR @@ -102,7 +104,7 @@ ProfileGraphicsView::ProfileGraphicsView(QWidget* parent) : QGraphicsView(parent { setScene(new QGraphicsScene()); setBackgroundBrush(QColor("#F3F3E6")); - scene()->setSceneRect(0,0,100,100); + scene()->setSceneRect(0,0,1000,1000); fill_profile_color(); } @@ -348,8 +350,10 @@ void ProfileGraphicsView::plot_depth_profile(struct graphics_context *gc, struct entry = pi->entry; - QGraphicsPolygonItem *neatFill = new QGraphicsPolygonItem(); QPolygonF p; + QLinearGradient pat(0.0,0.0,0.0,scene()->height()); + QGraphicsPolygonItem *neatFill = NULL; + for (i = 0; i < pi->nr; i++, entry++) p.append( QPointF( SCALE(gc, entry->sec, entry->depth) )); @@ -364,79 +368,90 @@ void ProfileGraphicsView::plot_depth_profile(struct graphics_context *gc, struct p.append( QPointF( SCALE(gc, entry->sec, entry->depth) )); } } - neatFill->setPolygon(p); - QLinearGradient pat(0.0,0.0,0.0,p.boundingRect().height()); + pat.setColorAt(1, profile_color[DEPTH_BOTTOM].first()); pat.setColorAt(0, profile_color[DEPTH_TOP].first()); + neatFill = new QGraphicsPolygonItem(); + neatFill->setPolygon(p); neatFill->setBrush(QBrush(pat)); + neatFill->setPen(QPen()); scene()->addItem(neatFill); -#if 0 /* if the user wants the deco ceiling more visible, do that here (this * basically draws over the background that we had allowed to shine * through so far) */ - if (prefs.profile_red_ceiling) { - pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, 256.0 * plot_scale); - pattern_add_color_stop_rgba (gc, pat, 0, CEILING_SHALLOW); - pattern_add_color_stop_rgba (gc, pat, 1, CEILING_DEEP); - cairo_set_source(gc->cr, pat); - cairo_pattern_destroy(pat); + // TODO: port the prefs.profile_red_ceiling to QSettings + //if (prefs.profile_red_ceiling) { + p.clear(); + pat.setColorAt(0, profile_color[CEILING_SHALLOW].first()); + pat.setColorAt(1, profile_color[CEILING_DEEP].first()); + entry = pi->entry; - move_to(gc, 0, 0); for (i = 0; i < pi->nr; i++, entry++) { if (entry->ndl == 0 && entry->stopdepth) { if (entry->ndl == 0 && entry->stopdepth < entry->depth) { - line_to(gc, entry->sec, entry->stopdepth); + p.append( QPointF( SCALE(gc, entry->sec, entry->stopdepth) )); } else { - line_to(gc, entry->sec, entry->depth); + p.append( QPointF( SCALE(gc, entry->sec, entry->depth) )); } } else { - line_to(gc, entry->sec, 0); + p.append( QPointF( SCALE(gc, entry->sec, 0) )); } } - cairo_close_path(gc->cr); - cairo_fill(gc->cr); - } + + neatFill = new QGraphicsPolygonItem(); + neatFill->setBrush(QBrush(pat)); + neatFill->setPolygon(p); + neatFill->setPen(QPen()); + scene()->addItem(neatFill); + //} + /* finally, plot the calculated ceiling over all this */ - if (prefs.profile_calc_ceiling) { - pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, 256.0 * plot_scale); - pattern_add_color_stop_rgba (gc, pat, 0, CALC_CEILING_SHALLOW); - pattern_add_color_stop_rgba (gc, pat, 1, CALC_CEILING_DEEP); - cairo_set_source(gc->cr, pat); - cairo_pattern_destroy(pat); + // TODO: Port the profile_calc_ceiling to QSettings + // if (prefs.profile_calc_ceiling) { + pat.setColorAt(0, profile_color[CALC_CEILING_SHALLOW].first()); + pat.setColorAt(1, profile_color[CALC_CEILING_DEEP].first()); + entry = pi->entry; - move_to(gc, 0, 0); + p.clear(); + p.append( QPointF(0,0)); for (i = 0; i < pi->nr; i++, entry++) { if (entry->ceiling) - line_to(gc, entry->sec, entry->ceiling); + p.append( QPointF( SCALE(gc, entry->sec, entry->ceiling) )); else - line_to(gc, entry->sec, 0); + p.append( QPointF( SCALE(gc, entry->sec, 0) )); } - line_to(gc, (entry-1)->sec, 0); /* make sure we end at 0 */ - cairo_close_path(gc->cr); - cairo_fill(gc->cr); - } + p.append( QPointF( SCALE(gc, (entry-1)->sec, 0) )); + neatFill = new QGraphicsPolygonItem(); + neatFill->setPolygon(p); + neatFill->setPen(QPen()); + scene()->addItem(neatFill); + //} + /* next show where we have been bad and crossed the dc's ceiling */ - pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, 256.0 * plot_scale); - pattern_add_color_stop_rgba (gc, pat, 0, CEILING_SHALLOW); - pattern_add_color_stop_rgba (gc, pat, 1, CEILING_DEEP); - cairo_set_source(gc->cr, pat); - cairo_pattern_destroy(pat); + pat.setColorAt(0, profile_color[CEILING_SHALLOW].first()); + pat.setColorAt(1, profile_color[CEILING_DEEP].first()); + entry = pi->entry; - move_to(gc, 0, 0); + p.clear(); + p.append( QPointF(0,0)); for (i = 0; i < pi->nr; i++, entry++) - line_to(gc, entry->sec, entry->depth); + p.append( QPointF( SCALE(gc, entry->sec, entry->depth) )); for (i = pi->nr - 1; i >= 0; i--, entry--) { if (entry->ndl == 0 && entry->stopdepth > entry->depth) { - line_to(gc, entry->sec, entry->stopdepth); + p.append( QPointF( SCALE(gc, entry->sec, entry->stopdepth) )); } else { - line_to(gc, entry->sec, entry->depth); + p.append( QPointF( SCALE(gc, entry->sec, entry->depth) )); } } - cairo_close_path(gc->cr); - cairo_fill(gc->cr); + + neatFill = new QGraphicsPolygonItem(); + neatFill->setPolygon(p); + neatFill->setPen(QPen()); + neatFill->setBrush(QBrush(pat)); + scene()->addItem(neatFill); /* Now do it again for the velocity colors */ entry = pi->entry; @@ -447,12 +462,10 @@ void ProfileGraphicsView::plot_depth_profile(struct graphics_context *gc, struct * representing the vertical velocity, so we need to * chop this into short segments */ depth = entry->depth; - set_source_rgba(gc, VELOCITY_COLORS_START_IDX + entry->velocity); - move_to(gc, entry[-1].sec, entry[-1].depth); - line_to(gc, sec, depth); - cairo_stroke(cr); + QGraphicsLineItem *colorLine = new QGraphicsLineItem( SCALE(gc, entry[-1].sec, entry[-1].depth), SCALE(gc, sec, depth)); + colorLine->setPen(QPen(QBrush(profile_color[ (color_indice_t) (VELOCITY_COLORS_START_IDX + entry->velocity)].first()), 2 )); + scene()->addItem(colorLine); } -#endif } |