← Back to team overview

kicad-developers team mailing list archive

Re: [PATCH] refactor BRIGHT_BOX to common

 

Oops! Yes, thanks.

On Sat, Mar 11, 2017 at 12:35 PM, Chris Pavlina <pavlina.chris@xxxxxxxxx>
wrote:

> I assume you want the header in include/preview_items as well, right?
>
> On Sat, Mar 11, 2017 at 08:54:11AM -0500, Jon Evans wrote:
> > Hi John, you are right!  It was late and I didn't remember about your new
> > directory but it's totally the right place.  Updated patch attached.
> >
> > Thanks,
> > Jon
> >
> > On Sat, Mar 11, 2017 at 7:09 AM, John Beard <john.j.beard@xxxxxxxxx>
> wrote:
> >
> > > Hi Jon,
> > >
> > > This looks like something that could live in common/preview_items,
> > > which is where I put  "transient" EDA_ITEMs (i.e. constructed with
> > > NOT_USED) that are theoretically useful for any GAL canvas. So far,
> > > the ruler overlay, and SELECTION_AREA are living there, but I have a
> > > couple more in the pipeline.
> > >
> > > Not critical, just a thought while the file is being moved anyway.
> > >
> > > Cheers,
> > >
> > > John
> > >
> > > On Sat, Mar 11, 2017 at 1:47 PM, Jon Evans <jon@xxxxxxxxxxxxx> wrote:
> > > > Hi,
> > > >
> > > > Quick refactor to allow use of BRIGHT_BOX from GerbView
> > > >
> > > > Best,
> > > > Jon
> > > >
> > > > _______________________________________________
> > > > Mailing list: https://launchpad.net/~kicad-developers
> > > > Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
> > > > Unsubscribe : https://launchpad.net/~kicad-developers
> > > > More help   : https://help.launchpad.net/ListHelp
> > > >
> > >
>
>
From 01800b7e78bb872629e6cd43ae4366ebe89006df Mon Sep 17 00:00:00 2001
From: Jon Evans <jon@xxxxxxxxxxxxx>
Date: Sat, 11 Mar 2017 00:46:03 -0500
Subject: [PATCH 1/5] Refactor BRIGHT_BOX to common so it can be used by other
 programs

---
 common/CMakeLists.txt               |  1 +
 common/preview_items/bright_box.cpp | 64 ++++++++++++++++++++++++
 include/preview_items/bright_box.h  | 99 +++++++++++++++++++++++++++++++++++++
 pcbnew/CMakeLists.txt               |  2 +-
 pcbnew/tools/bright_box.cpp         | 72 ---------------------------
 pcbnew/tools/bright_box.h           | 87 --------------------------------
 pcbnew/tools/pcb_bright_box.cpp     | 63 +++++++++++++++++++++++
 pcbnew/tools/pcb_bright_box.h       | 48 ++++++++++++++++++
 pcbnew/tools/selection_tool.cpp     |  4 +-
 9 files changed, 278 insertions(+), 162 deletions(-)
 create mode 100644 common/preview_items/bright_box.cpp
 create mode 100644 include/preview_items/bright_box.h
 delete mode 100644 pcbnew/tools/bright_box.cpp
 delete mode 100644 pcbnew/tools/bright_box.h
 create mode 100644 pcbnew/tools/pcb_bright_box.cpp
 create mode 100644 pcbnew/tools/pcb_bright_box.h

diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index ce319cd..373ee33 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -188,6 +188,7 @@ set( COMMON_PREVIEW_ITEMS_SRCS
     preview_items/ruler_item.cpp
     preview_items/simple_overlay_item.cpp
     preview_items/selection_area.cpp
+    preview_items/bright_box.cpp
     )
 
 set( COMMON_SRCS
diff --git a/common/preview_items/bright_box.cpp b/common/preview_items/bright_box.cpp
new file mode 100644
index 0000000..cc55dfa
--- /dev/null
+++ b/common/preview_items/bright_box.cpp
@@ -0,0 +1,64 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@xxxxxxx>
+ *
+ * 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 (at your option) 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#include <preview_items/bright_box.h>
+#include <gal/graphics_abstraction_layer.h>
+#include <class_track.h>
+
+using namespace KIGFX;
+
+const double BRIGHT_BOX::LINE_WIDTH = 10000.0;
+const COLOR4D BRIGHT_BOX::BOX_COLOR = KIGFX::COLOR4D( 0.0, 1.0, 0.0, 1.0 );
+
+BRIGHT_BOX::BRIGHT_BOX() :
+    EDA_ITEM( NOT_USED ),    // this item is never added to a BOARD so it needs no type
+    m_item( nullptr ),
+    m_lineWidth( LINE_WIDTH ),
+    m_color( BOX_COLOR )
+{
+}
+
+
+void BRIGHT_BOX::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
+{
+    if( !m_item )
+        return;
+
+    auto gal = aView->GetGAL();
+
+    gal->SetIsStroke( true );
+    gal->SetIsFill( false );
+    gal->SetLineWidth( m_lineWidth );
+    gal->SetStrokeColor( m_color );
+
+    BOX2I box = m_item->ViewBBox();
+
+    gal->DrawRectangle( box.GetOrigin(), box.GetOrigin() + box.GetSize() );
+}
+
+
+void BRIGHT_BOX::SetItem( EDA_ITEM* aItem )
+{
+    m_item = aItem;
+}
diff --git a/include/preview_items/bright_box.h b/include/preview_items/bright_box.h
new file mode 100644
index 0000000..9e177cf
--- /dev/null
+++ b/include/preview_items/bright_box.h
@@ -0,0 +1,99 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@xxxxxxx>
+ *
+ * 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 (at your option) 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#ifndef __BRIGHT_BOX_H
+#define __BRIGHT_BOX_H
+
+#include <math/box2.h>
+#include <view/view.h>
+#include <base_struct.h>
+#include <layers_id_colors_and_visibility.h>
+#include <gal/color4d.h>
+
+/**
+ * Class BRIGHT_BOX
+ *
+ * Draws a decoration to indicate a brightened item.
+ */
+class BRIGHT_BOX : public EDA_ITEM
+{
+public:
+    BRIGHT_BOX();
+    ~BRIGHT_BOX() {}
+
+    virtual const BOX2I ViewBBox() const override
+    {
+        BOX2I bb; bb.SetMaximum();
+        return bb;
+
+        if( !m_item )
+            return BOX2I();
+
+        return m_item->ViewBBox();
+    }
+
+    void ViewDraw( int aLayer, KIGFX::VIEW* aView ) const override;
+
+    void ViewGetLayers( int aLayers[], int& aCount ) const override
+    {
+        aLayers[0] = ITEM_GAL_LAYER( GP_OVERLAY );
+        aCount = 1;
+    }
+
+#if defined(DEBUG)
+    void Show( int x, std::ostream& st ) const override
+    {
+    }
+#endif
+
+    /** Get class name
+     * @return  string "BRIGHT_BOX"
+     */
+    virtual wxString GetClass() const override
+    {
+        return wxT( "BRIGHT_BOX" );
+    }
+
+    void SetItem( EDA_ITEM* aItem );
+
+    void SetLineWidth( double aWidth )
+    {
+        m_lineWidth = aWidth;
+    }
+
+    void SetColor( KIGFX::COLOR4D aColor )
+    {
+        m_color = aColor;
+    }
+
+protected:
+    static const KIGFX::COLOR4D BOX_COLOR;
+    static const double LINE_WIDTH;
+
+    EDA_ITEM* m_item;
+    double m_lineWidth;
+    KIGFX::COLOR4D m_color;
+};
+
+#endif
diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt
index 53b8bcd..239902a 100644
--- a/pcbnew/CMakeLists.txt
+++ b/pcbnew/CMakeLists.txt
@@ -291,7 +291,7 @@ set( PCBNEW_CLASS_SRCS
 
     tools/selection_tool.cpp
     tools/pcb_selection_conditions.cpp
-    tools/bright_box.cpp
+    tools/pcb_bright_box.cpp
     tools/edit_points.cpp
     tools/edit_constraints.cpp
     tools/point_editor.cpp
diff --git a/pcbnew/tools/bright_box.cpp b/pcbnew/tools/bright_box.cpp
deleted file mode 100644
index 2e52634..0000000
--- a/pcbnew/tools/bright_box.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * This program source code file is part of KiCad, a free EDA CAD application.
- *
- * Copyright (C) 2013 CERN
- * @author Maciej Suminski <maciej.suminski@xxxxxxx>
- *
- * 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 (at your option) 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, you may find one here:
- * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
- * or you may search the http://www.gnu.org website for the version 2 license,
- * or you may write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
- */
-
-#include "bright_box.h"
-#include <gal/graphics_abstraction_layer.h>
-#include <class_track.h>
-
-using namespace KIGFX;
-
-const double BRIGHT_BOX::LINE_WIDTH = 100000.0;
-const COLOR4D BRIGHT_BOX::BOX_COLOR = KIGFX::COLOR4D( 0.0, 1.0, 0.0, 1.0 );
-
-BRIGHT_BOX::BRIGHT_BOX() :
-    EDA_ITEM( NOT_USED ),    // this item is never added to a BOARD so it needs no type
-    m_item( nullptr )
-{
-}
-
-
-void BRIGHT_BOX::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
-{
-    if( !m_item )
-        return;
-
-    auto gal = aView->GetGAL();
-
-    gal->SetIsStroke( true );
-    gal->SetIsFill( false );
-    gal->SetLineWidth( LINE_WIDTH );
-    gal->SetStrokeColor( BOX_COLOR );
-
-
-    if( m_item->Type() == PCB_TRACE_T )
-    {
-        const TRACK* track = static_cast<const TRACK*>( m_item );
-
-        gal->DrawSegment( track->GetStart(), track->GetEnd(), track->GetWidth() );
-    }
-    else
-    {
-        BOX2I box = m_item->ViewBBox();
-
-        gal->DrawRectangle( box.GetOrigin(), box.GetOrigin() + box.GetSize() );
-    }
-}
-
-
-void BRIGHT_BOX::SetItem( BOARD_ITEM* aItem )
-{
-    m_item = aItem;
-}
diff --git a/pcbnew/tools/bright_box.h b/pcbnew/tools/bright_box.h
deleted file mode 100644
index c4e2a19..0000000
--- a/pcbnew/tools/bright_box.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * This program source code file is part of KiCad, a free EDA CAD application.
- *
- * Copyright (C) 2013 CERN
- * @author Maciej Suminski <maciej.suminski@xxxxxxx>
- *
- * 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 (at your option) 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, you may find one here:
- * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
- * or you may search the http://www.gnu.org website for the version 2 license,
- * or you may write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
- */
-
-#ifndef __BRIGHT_BOX_H
-#define __BRIGHT_BOX_H
-
-#include <math/box2.h>
-#include <view/view.h>
-#include <class_board_item.h>
-#include <layers_id_colors_and_visibility.h>
-#include <gal/color4d.h>
-
-/**
- * Class BRIGHT_BOX
- *
- * Draws a decoration to indicate a brightened item.
- */
-class BRIGHT_BOX : public EDA_ITEM
-{
-public:
-    BRIGHT_BOX();
-    ~BRIGHT_BOX() {}
-
-    virtual const BOX2I ViewBBox() const override
-    {
-        BOX2I bb; bb.SetMaximum();
-        return bb;
-
-        if( !m_item )
-            return BOX2I();
-
-        return m_item->ViewBBox();
-    }
-
-    void ViewDraw( int aLayer, KIGFX::VIEW* aView ) const override;
-
-    void ViewGetLayers( int aLayers[], int& aCount ) const override
-    {
-        aLayers[0] = ITEM_GAL_LAYER( GP_OVERLAY );
-        aCount = 1;
-    }
-
-#if defined(DEBUG)
-    void Show( int x, std::ostream& st ) const override
-    {
-    }
-#endif
-
-    /** Get class name
-     * @return  string "BRIGHT_BOX"
-     */
-    virtual wxString GetClass() const override
-    {
-        return wxT( "BRIGHT_BOX" );
-    }
-
-    void SetItem( BOARD_ITEM* aItem );
-
-private:
-    static const KIGFX::COLOR4D BOX_COLOR;
-    static const double LINE_WIDTH;
-
-    BOARD_ITEM* m_item;
-};
-
-#endif
diff --git a/pcbnew/tools/pcb_bright_box.cpp b/pcbnew/tools/pcb_bright_box.cpp
new file mode 100644
index 0000000..08f9402
--- /dev/null
+++ b/pcbnew/tools/pcb_bright_box.cpp
@@ -0,0 +1,63 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@xxxxxxx>
+ *
+ * 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 (at your option) 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#include "pcb_bright_box.h"
+#include <gal/graphics_abstraction_layer.h>
+#include <class_track.h>
+
+using namespace KIGFX;
+
+const double PCB_BRIGHT_BOX::PCB_LINE_WIDTH = 100000.0;
+
+
+PCB_BRIGHT_BOX::PCB_BRIGHT_BOX() :
+    BRIGHT_BOX()
+{
+    SetLineWidth( PCB_LINE_WIDTH );
+}
+
+
+void PCB_BRIGHT_BOX::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
+{
+    if( !m_item )
+        return;
+
+    if( m_item->Type() == PCB_TRACE_T )
+    {
+        const TRACK* track = static_cast<const TRACK*>( m_item );
+
+        auto gal = aView->GetGAL();
+
+        gal->SetIsStroke( true );
+        gal->SetIsFill( false );
+        gal->SetLineWidth( m_lineWidth );
+        gal->SetStrokeColor( m_color );
+
+        gal->DrawSegment( track->GetStart(), track->GetEnd(), track->GetWidth() );
+    }
+    else
+    {
+        BRIGHT_BOX::ViewDraw( aLayer, aView );
+    }
+}
diff --git a/pcbnew/tools/pcb_bright_box.h b/pcbnew/tools/pcb_bright_box.h
new file mode 100644
index 0000000..0ec6d15
--- /dev/null
+++ b/pcbnew/tools/pcb_bright_box.h
@@ -0,0 +1,48 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN
+ * @author Maciej Suminski <maciej.suminski@xxxxxxx>
+ *
+ * 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 (at your option) 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#ifndef __PCB_BRIGHT_BOX_H
+#define __PCB_BRIGHT_BOX_H
+
+#include <preview_items/bright_box.h>
+
+/**
+ * Class PCB_BRIGHT_BOX
+ *
+ * Draws a decoration to indicate a brightened item.
+ */
+class PCB_BRIGHT_BOX : public BRIGHT_BOX
+{
+public:
+    PCB_BRIGHT_BOX();
+    ~PCB_BRIGHT_BOX() {}
+
+    void ViewDraw( int aLayer, KIGFX::VIEW* aView ) const override;
+
+private:
+    static const double PCB_LINE_WIDTH;
+
+};
+
+#endif
diff --git a/pcbnew/tools/selection_tool.cpp b/pcbnew/tools/selection_tool.cpp
index a3e1e41..1ce875b 100644
--- a/pcbnew/tools/selection_tool.cpp
+++ b/pcbnew/tools/selection_tool.cpp
@@ -53,7 +53,7 @@ using namespace std::placeholders;
 #include <ratsnest_data.h>
 
 #include "selection_tool.h"
-#include "bright_box.h"
+#include "pcb_bright_box.h"
 #include "pcb_actions.h"
 
 // Selection tool actions
@@ -1136,7 +1136,7 @@ void SELECTION_TOOL::clearSelection()
 BOARD_ITEM* SELECTION_TOOL::disambiguationMenu( GENERAL_COLLECTOR* aCollector )
 {
     BOARD_ITEM* current = NULL;
-    BRIGHT_BOX brightBox;
+    PCB_BRIGHT_BOX brightBox;
     CONTEXT_MENU menu;
 
     getView()->Add( &brightBox );
-- 
2.7.4


Follow ups

References