Workaround for zoom levels < 1 in eescxhema, with wxMSW version < 2.9
This commit is contained in:
parent
c38d59a609
commit
58c9647166
|
@ -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 @@
|
||||||
/* 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()
|
||||||
{
|
{
|
||||||
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()
|
||||||
(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;
|
||||||
|
|
Loading…
Reference in New Issue