diff --git a/common/gal/opengl/opengl_gal.cpp b/common/gal/opengl/opengl_gal.cpp index 80d9aeab73..dbaf510b47 100644 --- a/common/gal/opengl/opengl_gal.cpp +++ b/common/gal/opengl/opengl_gal.cpp @@ -1002,18 +1002,16 @@ void OPENGL_GAL::DrawCurve( const VECTOR2D& aStartPoint, const VECTOR2D& aContro void OPENGL_GAL::DrawBitmap( const BITMAP_BASE& aBitmap ) { int ppi = aBitmap.GetPPI(); - double worldIU_per_mm = 1.0 / ( worldUnitLength / 2.54 )/ 1000; - double pix_size_iu = worldIU_per_mm * ( 25.4 / ppi ); - - double w = aBitmap.GetSizePixels().x * pix_size_iu; - double h = aBitmap.GetSizePixels().y * pix_size_iu; + + double w = (double) aBitmap.GetSizePixels().x / (double) ppi / worldUnitLength * 10.0; // no idea where the factor 10 comes from... + double h = (double) aBitmap.GetSizePixels().y / (double) ppi / worldUnitLength * 10.0; auto xform = currentManager->GetTransformation(); glm::vec4 v0 = xform * glm::vec4( -w/2, -h/2, 0.0, 0.0 ); glm::vec4 v1 = xform * glm::vec4( w/2, h/2, 0.0, 0.0 ); glm::vec4 trans = xform[3]; - + auto id = bitmapCache->RequestBitmap( &aBitmap ); auto oldTarget = GetTarget(); diff --git a/eeschema/edit_bitmap.cpp b/eeschema/edit_bitmap.cpp index a422a0417c..822f3feba3 100644 --- a/eeschema/edit_bitmap.cpp +++ b/eeschema/edit_bitmap.cpp @@ -28,11 +28,12 @@ #include #include - +#include #include #include #include +#include static void abortMoveBitmap( EDA_DRAW_PANEL* aPanel, wxDC* aDC ) { @@ -72,29 +73,25 @@ static void abortMoveBitmap( EDA_DRAW_PANEL* aPanel, wxDC* aDC ) static void moveBitmap( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aPosition, bool aErase ) { + auto panel = static_cast ( aPanel ); SCH_SCREEN* screen = (SCH_SCREEN*) aPanel->GetScreen(); SCH_BITMAP* image = (SCH_BITMAP*) screen->GetCurItem(); + auto preview = panel->GetView()->GetPreview(); - if( aErase ) - { - // Erase the current bitmap at its current position. - // Note also items flagged IS_MOVING are not drawn, - // and if image is new, it is not yet il draw list - // so image is erased from screen - EDA_RECT dirty = image->GetBoundingBox(); - dirty.Inflate( 4 ); // Give a margin - aPanel->SetMouseCapture( NULL, NULL ); // Avoid loop in redraw panel - - STATUS_FLAGS flgs = image->GetFlags(); - image->ClearFlags(); - aPanel->RefreshDrawingRect( dirty ); - image->SetFlags( flgs ); - aPanel->SetMouseCapture( moveBitmap, abortMoveBitmap ); - } + if ( ! image ) + return; // Draw the bitmap at it's new position. image->SetPosition( aPanel->GetParent()->GetCrossHairPosition() - image->GetStoredPos() ); - image->Draw( aPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); + + auto view = panel->GetView(); + + view->ClearPreview(); + view->AddToPreview( image, false ); + view->SetVisible( preview, true ); + view->Update( preview ); + + view->MarkTargetDirty( KIGFX::TARGET_NONCACHED ); } @@ -128,8 +125,11 @@ SCH_BITMAP* SCH_EDIT_FRAME::CreateNewImage( wxDC* aDC ) } - image->SetFlags( IS_NEW | IS_MOVED ); - image->Draw( m_canvas, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE ); + auto view = static_cast( m_canvas )->GetView(); + + view->ClearPreview(); + view->AddToPreview( image, false ); + m_canvas->SetMouseCapture( moveBitmap, abortMoveBitmap ); GetScreen()->SetCurItem( image ); diff --git a/eeschema/sch_painter.cpp b/eeschema/sch_painter.cpp index 3a77a510b7..9b0b501914 100644 --- a/eeschema/sch_painter.cpp +++ b/eeschema/sch_painter.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -140,14 +141,14 @@ bool SCH_PAINTER::Draw( const VIEW_ITEM *aItem, int aLayer ) */ switch(item->Type()) { - HANDLE_ITEM(LIB_PART_T, LIB_PART); - HANDLE_ITEM(LIB_RECTANGLE_T, LIB_RECTANGLE); + HANDLE_ITEM(LIB_PART_T, LIB_PART); + HANDLE_ITEM(LIB_RECTANGLE_T, LIB_RECTANGLE); HANDLE_ITEM(LIB_POLYLINE_T, LIB_POLYLINE); HANDLE_ITEM(LIB_CIRCLE_T, LIB_CIRCLE); HANDLE_ITEM(LIB_PIN_T, LIB_PIN); HANDLE_ITEM(LIB_ARC_T, LIB_ARC); HANDLE_ITEM(LIB_FIELD_T, LIB_FIELD); - HANDLE_ITEM(LIB_TEXT_T, LIB_TEXT); + HANDLE_ITEM(LIB_TEXT_T, LIB_TEXT); HANDLE_ITEM(SCH_COMPONENT_T, SCH_COMPONENT); HANDLE_ITEM(SCH_JUNCTION_T, SCH_JUNCTION); HANDLE_ITEM(SCH_LINE_T, SCH_LINE); @@ -160,7 +161,9 @@ bool SCH_PAINTER::Draw( const VIEW_ITEM *aItem, int aLayer ) HANDLE_ITEM(SCH_NO_CONNECT_T, SCH_NO_CONNECT); HANDLE_ITEM(SCH_BUS_WIRE_ENTRY_T, SCH_BUS_ENTRY_BASE); HANDLE_ITEM(SCH_BUS_BUS_ENTRY_T, SCH_BUS_ENTRY_BASE); - + HANDLE_ITEM(SCH_BITMAP_T, SCH_BITMAP); + HANDLE_ITEM(SCH_MARKER_T, SCH_MARKER); + default: return false; } @@ -705,6 +708,9 @@ void SCH_PAINTER::draw ( SCH_TEXT *aText, int aLayer ) case SCH_HIERARCHICAL_LABEL_T: color = m_schSettings.GetLayerColor( LAYER_SHEETLABEL ); break; + case SCH_GLOBAL_LABEL_T: + color = m_schSettings.GetLayerColor( LAYER_GLOBLABEL ); + break; default: color = m_schSettings.GetLayerColor( LAYER_NOTES ); break; @@ -910,9 +916,24 @@ void SCH_PAINTER::draw ( SCH_FIELD *aField, int aLayer ) m_gal->StrokeText( aField->GetFullyQualifiedText(), textpos, orient == TEXT_ANGLE_VERT ? -M_PI/2 : 0 ); } + void SCH_PAINTER::draw ( SCH_GLOBALLABEL *aLabel, int aLayer ) { + std::vector pts; + std::deque pts2; + aLabel->CreateGraphicShape( pts, aLabel->GetTextPos() ); + + for( auto p : pts ) + pts2.push_back( VECTOR2D(p.x, p.y ) ); + + m_gal->SetIsFill( false ); + m_gal->SetIsStroke( true ); + m_gal->SetStrokeColor( m_schSettings.GetLayerColor( LAYER_GLOBLABEL ) ); + m_gal->DrawPolyline( pts2 ); + m_gal->AdvanceDepth(); // fixme + + draw( static_cast( aLabel ), aLayer ); } @@ -1022,5 +1043,18 @@ void SCH_PAINTER::draw ( SCH_BUS_ENTRY_BASE *aEntry, int aLayer ) } +void SCH_PAINTER::draw ( SCH_BITMAP *aBitmap, int aLayer ) +{ + m_gal->Save(); + m_gal->Translate( aBitmap->GetPosition() ); + m_gal->DrawBitmap( *aBitmap->GetImage() ); + m_gal->Restore(); +} + +void SCH_PAINTER::draw ( SCH_MARKER *aMarker, int aLayer ) +{ + +} + }; // namespace KIGFX diff --git a/eeschema/sch_painter.h b/eeschema/sch_painter.h index 3ca11d013f..868caaad2a 100644 --- a/eeschema/sch_painter.h +++ b/eeschema/sch_painter.h @@ -49,6 +49,7 @@ class SCH_MARKER; class SCH_NO_CONNECT; class SCH_LINE; class SCH_BUS_ENTRY_BASE; +class SCH_BITMAP; namespace KIGFX { @@ -134,8 +135,9 @@ private: void draw( SCH_SHEET_PIN *, int ); void draw( SCH_NO_CONNECT *, int ); void draw( SCH_MARKER *, int ); + void draw( SCH_BITMAP *, int ); void draw( SCH_LINE *, int ); - void draw ( SCH_BUS_ENTRY_BASE *aEntry, int aLayer ); + void draw( SCH_BUS_ENTRY_BASE *aEntry, int aLayer ); void defaultColors( const LIB_ITEM *aItem );