| 
							- /*
 -  * Patchbay Canvas engine using QGraphicsView/Scene
 -  * Copyright (C) 2010-2012 Filipe Coelho <falktx@falktx.com>
 -  *
 -  * This program is free software; you can redistribute it and/or modify
 -  * it under the terms of the GNU General Public License as published by
 -  * the Free Software Foundation; either version 2 of the License, or
 -  * any later version.
 -  *
 -  * This program is distributed in the hope that it will be useful,
 -  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 -  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 -  * GNU General Public License for more details.
 -  *
 -  * For a full copy of the GNU General Public License see the COPYING file
 -  */
 - 
 - #include "canvasbezierline.h"
 - 
 - #include <QtGui/QPainter>
 - 
 - #include "canvasport.h"
 - #include "canvasportglow.h"
 - 
 - START_NAMESPACE_PATCHCANVAS
 - 
 - CanvasBezierLine::CanvasBezierLine(CanvasPort* item1_, CanvasPort* item2_, QGraphicsItem* parent) :
 -     QGraphicsPathItem(parent, canvas.scene)
 - {
 -     item1 = item1_;
 -     item2 = item2_;
 - 
 -     m_locked = false;
 -     m_lineSelected = false;
 - 
 -     setBrush(QColor(0,0,0,0));
 -     setGraphicsEffect(0);
 -     updateLinePos();
 - }
 - 
 - CanvasBezierLine::~CanvasBezierLine()
 - {
 -     setGraphicsEffect(0);
 - }
 - 
 - void CanvasBezierLine::deleteFromScene()
 - {
 -     canvas.scene->removeItem(this);
 -     delete this;
 - }
 - 
 - bool CanvasBezierLine::isLocked() const
 - {
 -     return m_locked;
 - }
 - 
 - void CanvasBezierLine::setLocked(bool yesno)
 - {
 -     m_locked = yesno;
 - }
 - 
 - bool CanvasBezierLine::isLineSelected() const
 - {
 -     return m_lineSelected;
 - }
 - 
 - void CanvasBezierLine::setLineSelected(bool yesno)
 - {
 -     if (m_locked)
 -         return;
 - 
 -     if (options.eyecandy == EYECANDY_FULL)
 -     {
 -         if (yesno)
 -             setGraphicsEffect(new CanvasPortGlow(item1->getPortType(), toGraphicsObject()));
 -         else
 -             setGraphicsEffect(0);
 -     }
 - 
 -     m_lineSelected = yesno;
 -     updateLineGradient();
 - }
 - 
 - void CanvasBezierLine::updateLinePos()
 - {
 -     if (item1->getPortMode() == PORT_MODE_OUTPUT)
 -     {
 -         int item1_x = item1->scenePos().x() + item1->getPortWidth()+12;
 -         int item1_y = item1->scenePos().y() + 7.5;
 - 
 -         int item2_x = item2->scenePos().x();
 -         int item2_y = item2->scenePos().y()+7.5;
 - 
 -         int item1_mid_x = abs(item1_x-item2_x)/2;
 -         int item1_new_x = item1_x+item1_mid_x;
 - 
 -         int item2_mid_x = abs(item1_x-item2_x)/2;
 -         int item2_new_x = item2_x-item2_mid_x;
 - 
 -         QPainterPath path(QPointF(item1_x, item1_y));
 -         path.cubicTo(item1_new_x, item1_y, item2_new_x, item2_y, item2_x, item2_y);
 -         setPath(path);
 - 
 -         m_lineSelected = false;
 -         updateLineGradient();
 -     }
 - }
 - 
 - int CanvasBezierLine::type() const
 - {
 -     return CanvasBezierLineType;
 - }
 - 
 - void CanvasBezierLine::updateLineGradient()
 - {
 -     short pos1, pos2;
 -     int pos_top = boundingRect().top();
 -     int pos_bot = boundingRect().bottom();
 - 
 -     if (item2->scenePos().y() >= item1->scenePos().y())
 -     {
 -         pos1 = 0;
 -         pos2 = 1;
 -     }
 -     else
 -     {
 -         pos1 = 1;
 -         pos2 = 0;
 -     }
 - 
 -     PortType port_type1 = item1->getPortType();
 -     PortType port_type2 = item2->getPortType();
 -     QLinearGradient port_gradient(0, pos_top, 0, pos_bot);
 - 
 -     if (port_type1 == PORT_TYPE_AUDIO_JACK)
 -         port_gradient.setColorAt(pos1, m_lineSelected ? canvas.theme->line_audio_jack_sel : canvas.theme->line_audio_jack);
 -     else if (port_type1 == PORT_TYPE_MIDI_JACK)
 -         port_gradient.setColorAt(pos1, m_lineSelected ? canvas.theme->line_midi_jack_sel : canvas.theme->line_midi_jack);
 -     else if (port_type1 == PORT_TYPE_MIDI_A2J)
 -         port_gradient.setColorAt(pos1, m_lineSelected ? canvas.theme->line_midi_a2j_sel : canvas.theme->line_midi_a2j);
 -     else if (port_type1 == PORT_TYPE_MIDI_ALSA)
 -         port_gradient.setColorAt(pos1, m_lineSelected ? canvas.theme->line_midi_alsa_sel : canvas.theme->line_midi_alsa);
 - 
 -     if (port_type2 == PORT_TYPE_AUDIO_JACK)
 -         port_gradient.setColorAt(pos2, m_lineSelected ? canvas.theme->line_audio_jack_sel : canvas.theme->line_audio_jack);
 -     else if (port_type2 == PORT_TYPE_MIDI_JACK)
 -         port_gradient.setColorAt(pos2, m_lineSelected ? canvas.theme->line_midi_jack_sel : canvas.theme->line_midi_jack);
 -     else if (port_type2 == PORT_TYPE_MIDI_A2J)
 -         port_gradient.setColorAt(pos2, m_lineSelected ? canvas.theme->line_midi_a2j_sel : canvas.theme->line_midi_a2j);
 -     else if (port_type2 == PORT_TYPE_MIDI_ALSA)
 -         port_gradient.setColorAt(pos2, m_lineSelected ? canvas.theme->line_midi_alsa_sel : canvas.theme->line_midi_alsa);
 - 
 -     setPen(QPen(port_gradient, 2));
 - }
 - 
 - void CanvasBezierLine::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
 - {
 -     painter->setRenderHint(QPainter::Antialiasing, bool(options.antialiasing));
 -     QGraphicsPathItem::paint(painter, option, widget);
 - }
 - 
 - END_NAMESPACE_PATCHCANVAS
 
 
  |