Workaround for zoom levels < 1 in eescxhema, with wxMSW version < 2.9

This commit is contained in:
jean-pierre charras 2011-03-30 21:20:23 +02:00
parent c38d59a609
commit 58c9647166
4 changed files with 50 additions and 4 deletions

View File

@ -389,7 +389,17 @@ int LIB_EDIT_FRAME::BestZoom()
ii = wxRound( ( (double) dx / (double) size.x ) * (double) GetScreen()->m_ZoomScalar );
jj = wxRound( ( (double) dy / (double) size.y ) * (double) GetScreen()->m_ZoomScalar );
return MAX( ii + 1, jj + 1 );
int bestzoom = MAX( ii + 1, jj + 1 );
#if defined( __WINDOWS__ ) && !wxCHECK_VERSION(2, 9, 1)
/* This is a workaround: wxWidgets (wxMSW) before version 2.9 seems have
* problems with scale values < 1
* corresponding to values < GetScreen()->m_ZoomScalar
* So we keep bestzoom >= GetScreen()->m_ZoomScalar
*/
if( bestzoom < GetScreen()->m_ZoomScalar )
bestzoom = GetScreen()->m_ZoomScalar;
#endif
return bestzoom;
}

View File

@ -30,10 +30,25 @@
/* Default EESchema zoom values. Limited to 17 values to keep a decent size
* to menus
*/
#if defined( __WINDOWS__ ) && !wxCHECK_VERSION(2, 9, 1)
/* Please, note: wxWidgets (wxMSW) before version 2.9 seems have
* problems with scale values < 1
* because scale value is SchematicZoomList[x] / 10
* ( in fact is SchematicZoomList[x] / m_ZoomScalar )
* do not use values smaller than 10 without testing them under wxWidgets versions < 2.9
* value like 0.5 seems work
*/
static int SchematicZoomList[] =
{
5, 10, 15, 20, 30, 40, 60, 80, 120, 160, 230, 320, 480, 640, 800, 1280
};
#else
static int SchematicZoomList[] =
{
5, 7, 10, 15, 20, 30, 40, 60, 80, 120, 160, 230, 320, 480, 640, 800, 1280
};
#endif
#define SCHEMATIC_ZOOM_LIST_CNT ( sizeof( SchematicZoomList ) / sizeof( int ) )
#define MM_TO_SCH_UNITS 1000.0 / 25.4 //schematic internal unites are mils

View File

@ -393,17 +393,28 @@ int SCH_EDIT_FRAME::BestZoom()
{
int dx, dy;
wxSize size;
double zoom;
dx = GetScreen()->m_CurrentSheetDesc->m_Size.x;
dy = GetScreen()->m_CurrentSheetDesc->m_Size.y;
size = DrawPanel->GetClientSize();
zoom = MAX( (double) dx / (double) size.x, (double) dy / (double) size.y );
int ii = wxRound( (double) dx / size.x * (double) GetScreen()->m_ZoomScalar );
int jj = wxRound( (double) dx / size.x * (double) GetScreen()->m_ZoomScalar );
int bestzoom = MAX( ii, jj );
GetScreen()->SetScrollCenterPosition( wxPoint( dx / 2, dy / 2 ) );
return wxRound( zoom * (double) GetScreen()->m_ZoomScalar );
#if defined( __WINDOWS__ ) && !wxCHECK_VERSION(2, 9, 1)
/* This is a workaround: wxWidgets (wxMSW) before version 2.9 seems have
* problems with scale values < 1
* corresponding to values < GetScreen()->m_ZoomScalar
* So we keep bestzoom >= GetScreen()->m_ZoomScalar
*/
if( bestzoom < GetScreen()->m_ZoomScalar )
bestzoom = GetScreen()->m_ZoomScalar;
#endif
return bestzoom;
}

View File

@ -358,6 +358,16 @@ int LIB_VIEW_FRAME::BestZoom()
(double) GetScreen()->m_ZoomScalar );
bestzoom = MAX( ii, jj ) + 1;
#if defined( __WINDOWS__ ) && !wxCHECK_VERSION(2, 9, 1)
/* This is a workaround: wxWidgets (wxMSW) before version 2.9 seems have
* problems with scale values < 1
* corresponding to values < GetScreen()->m_ZoomScalar
* So we keep bestzoom >= GetScreen()->m_ZoomScalar
*/
if( bestzoom < GetScreen()->m_ZoomScalar )
bestzoom = GetScreen()->m_ZoomScalar;
#endif
GetScreen()->SetScrollCenterPosition( BoundaryBox.Centre() );
return bestzoom;