/* Outline.cpp * * Copyright (C) 2013-2016 Jim Evins * * This file is part of gLabels-qt. * * gLabels-qt 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 3 of the License, or * (at your option) any later version. * * gLabels-qt 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. * * You should have received a copy of the GNU General Public License * along with gLabels-qt. If not, see . */ #include "Outline.h" #include #include "LabelModelObject.h" namespace { const qreal dashSize = 2; const double slopPixels = 2; const double outlineWidthPixels = 1; const QColor outlineColor1( 0, 0, 0 ); const QColor outlineColor2( 255, 255, 255 ); } /// /// Outline Constructor /// Outline::Outline( LabelModelObject* owner ) : mOwner(owner) { mDashes << dashSize << dashSize; mPen1.setColor( outlineColor1 ); mPen1.setWidth( outlineWidthPixels ); mPen1.setCosmetic( true ); mPen1.setCapStyle( Qt::FlatCap ); mPen1.setDashPattern( mDashes ); mPen2.setColor( outlineColor2 ); mPen2.setWidth( outlineWidthPixels ); mPen2.setCosmetic( true ); mPen2.setCapStyle( Qt::FlatCap ); mPen2.setDashPattern( mDashes ); mPen2.setDashOffset( dashSize ); } /// /// Outline Copy constructor /// Outline::Outline( const Outline* outline, LabelModelObject* newOwner ) : mOwner(newOwner) { mDashes = outline->mDashes; mPen1 = outline->mPen1; mPen2 = outline->mPen2; } /// /// Outline Destructor /// Outline::~Outline() { } /// /// Clone Outline /// Outline* Outline::clone( LabelModelObject* newOwner ) const { return new Outline( this, newOwner ); } /// /// Draw Outline /// void Outline::draw( QPainter* painter ) const { painter->save(); painter->setBrush( Qt::NoBrush ); painter->setPen( mPen1 ); painter->drawRect( QRectF( 0, 0, mOwner->w().pt(), mOwner->h().pt() ) ); painter->setPen( mPen2 ); painter->drawRect( QRectF( 0, 0, mOwner->w().pt(), mOwner->h().pt() ) ); painter->restore(); } /// /// Create path for testing for hover condition /// QPainterPath Outline::hoverPath( double scale ) const { double s = 1 / scale; QPainterPath path; path.addRect( -s*slopPixels, -s*slopPixels, mOwner->w().pt()+s*2*slopPixels, mOwner->h().pt()+s*2*slopPixels ); path.closeSubpath(); path.addRect( s*slopPixels, s*slopPixels, mOwner->w().pt()-s*2*slopPixels, mOwner->h().pt()-s*2*slopPixels ); return path; }