Commit 58c96471 authored by jean-pierre charras's avatar jean-pierre charras

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

parent c38d59a6
...@@ -389,7 +389,17 @@ int LIB_EDIT_FRAME::BestZoom() ...@@ -389,7 +389,17 @@ int LIB_EDIT_FRAME::BestZoom()
ii = wxRound( ( (double) dx / (double) size.x ) * (double) GetScreen()->m_ZoomScalar ); ii = wxRound( ( (double) dx / (double) size.x ) * (double) GetScreen()->m_ZoomScalar );
jj = wxRound( ( (double) dy / (double) size.y ) * (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;
} }
......
...@@ -30,10 +30,25 @@ ...@@ -30,10 +30,25 @@
/* Default EESchema zoom values. Limited to 17 values to keep a decent size /* Default EESchema zoom values. Limited to 17 values to keep a decent size
* to menus * 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[] = static int SchematicZoomList[] =
{ {
5, 7, 10, 15, 20, 30, 40, 60, 80, 120, 160, 230, 320, 480, 640, 800, 1280 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 SCHEMATIC_ZOOM_LIST_CNT ( sizeof( SchematicZoomList ) / sizeof( int ) )
#define MM_TO_SCH_UNITS 1000.0 / 25.4 //schematic internal unites are mils #define MM_TO_SCH_UNITS 1000.0 / 25.4 //schematic internal unites are mils
......
...@@ -393,17 +393,28 @@ int SCH_EDIT_FRAME::BestZoom() ...@@ -393,17 +393,28 @@ int SCH_EDIT_FRAME::BestZoom()
{ {
int dx, dy; int dx, dy;
wxSize size; wxSize size;
double zoom;
dx = GetScreen()->m_CurrentSheetDesc->m_Size.x; dx = GetScreen()->m_CurrentSheetDesc->m_Size.x;
dy = GetScreen()->m_CurrentSheetDesc->m_Size.y; dy = GetScreen()->m_CurrentSheetDesc->m_Size.y;
size = DrawPanel->GetClientSize(); 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 ) ); 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;
} }
......
...@@ -358,6 +358,16 @@ int LIB_VIEW_FRAME::BestZoom() ...@@ -358,6 +358,16 @@ int LIB_VIEW_FRAME::BestZoom()
(double) GetScreen()->m_ZoomScalar ); (double) GetScreen()->m_ZoomScalar );
bestzoom = MAX( ii, jj ) + 1; 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() ); GetScreen()->SetScrollCenterPosition( BoundaryBox.Centre() );
return bestzoom; return bestzoom;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment