Make wxRescaleCoord() private functions

They're probably not that useful in application code, which should just
use wxDPIChangedEvent::Scale() instead, so move them to a private
header instead of making them part of the public API.
This commit is contained in:
Vadim Zeitlin
2021-07-13 16:59:20 +01:00
parent 3787f55a6b
commit 7843c99d5b
9 changed files with 67 additions and 53 deletions

View File

@@ -3142,8 +3142,8 @@ public:
// Scale the value by the ratio between new and old DPIs carried by this
// event.
int ScaleX(int x) const { return wxRescaleCoord(x, m_newDPI.x, m_oldDPI.x); }
int ScaleY(int y) const { return wxRescaleCoord(y, m_newDPI.y, m_oldDPI.y); }
int ScaleX(int x) const;
int ScaleY(int y) const;
wxSize Scale(wxSize sz) const { return wxSize(ScaleX(sz.x), ScaleY(sz.y)); }

View File

@@ -1104,23 +1104,5 @@ extern wxRect WXDLLIMPEXP_CORE wxGetClientDisplayRect();
// set global cursor
extern void WXDLLIMPEXP_CORE wxSetCursor(const wxCursor& cursor);
// Scale the given value by the ratio between 2 other values, with rounding.
// Do not scale the value if it's -1, just return it unchanged in this case.
extern int WXDLLIMPEXP_CORE wxRescaleCoord(int n, int newScale, int oldScale);
inline wxPoint
wxRescaleCoord(wxPoint pt, wxSize newScale, wxSize oldScale)
{
return wxPoint(wxRescaleCoord(pt.x, newScale.x, oldScale.x),
wxRescaleCoord(pt.y, newScale.y, oldScale.y));
}
inline wxSize
wxRescaleCoord(wxSize sz, wxSize newScale, wxSize oldScale)
{
return wxSize(wxRescaleCoord(sz.x, newScale.x, oldScale.x),
wxRescaleCoord(sz.y, newScale.y, oldScale.y));
}
#endif
// _WX_GDICMNH__

View File

@@ -0,0 +1,43 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/private/rescale.h
// Purpose: Helpers for rescaling coordinates
// Author: Vadim Zeitlin
// Created: 2021-07-13
// Copyright: (c) 2021 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PRIVATE_RESCALE_H_
#define _WX_PRIVATE_RESCALE_H_
#include "wx/gdicmn.h"
#include "wx/math.h"
#ifdef __WINDOWS__
// Required in order to use wxMulDivInt32().
#include "wx/msw/wrapwin.h"
#endif
// Scale the given value by the ratio between 2 other values, with rounding.
// Do not scale the value if it's -1, just return it unchanged in this case.
inline int wxRescaleCoord(int n, int newScale, int oldScale)
{
return n == -1 ? -1 : wxMulDivInt32(n, newScale, oldScale);
}
inline wxPoint
wxRescaleCoord(wxPoint pt, wxSize newScale, wxSize oldScale)
{
return wxPoint(wxRescaleCoord(pt.x, newScale.x, oldScale.x),
wxRescaleCoord(pt.y, newScale.y, oldScale.y));
}
inline wxSize
wxRescaleCoord(wxSize sz, wxSize newScale, wxSize oldScale)
{
return wxSize(wxRescaleCoord(sz.x, newScale.x, oldScale.x),
wxRescaleCoord(sz.y, newScale.y, oldScale.y));
}
#endif // _WX_PRIVATE_RESCALE_H_

View File

@@ -3450,7 +3450,8 @@ public:
This is a convenience function to use in wxEVT_DPI_CHANGED event
handlers, as they often need to update some sizes to the new DPI.
It simply calls wxRescaleCoord() with GetNewDPI() and GetOldDPI().
It simply calls wxMulDivInt32() with new and old DPI values, but
is more readable and less error-prone.
For example, the returned value will be twice bigger than the original
one when switching from normal (96) DPI to high (2x, 192) DPI.

View File

@@ -1344,21 +1344,3 @@ void wxDisplaySizeMM(int* width, int* height);
*/
wxSize wxGetDisplaySizeMM();
//@}
/**
Scale the given value by the ratio between 2 other values, with rounding.
Do not scale the value if it's -1, just return it unchanged in this case.
This simply calls wxMulDivInt32() with the provided arguments, but provides
a more clear name for this operation.
@since 3.1.6
*/
int wxRescaleCoord(int n, int newScale, int oldScale);
/// @overload
wxPoint wxRescaleCoord(wxPoint pt, wxSize newScale, wxSize oldScale);
/// @overload
wxSize wxRescaleCoord(wxSize sz, wxSize newScale, wxSize oldScale);

View File

@@ -51,6 +51,10 @@
wxDEFINE_SCOPED_PTR(wxEvent, wxEventPtr)
#endif // wxUSE_BASE
#if wxUSE_GUI
#include "wx/private/rescale.h"
#endif
// ----------------------------------------------------------------------------
// wxWin macros
// ----------------------------------------------------------------------------
@@ -933,6 +937,20 @@ wxHelpEvent::Origin wxHelpEvent::GuessOrigin(Origin origin)
return origin;
}
// ----------------------------------------------------------------------------
// wxDPIChangedEvent
// ----------------------------------------------------------------------------
int wxDPIChangedEvent::ScaleX(int x) const
{
return wxRescaleCoord(x, m_newDPI.x, m_oldDPI.x);
}
int wxDPIChangedEvent::ScaleY(int y) const
{
return wxRescaleCoord(y, m_newDPI.y, m_oldDPI.y);
}
#endif // wxUSE_GUI

View File

@@ -16,7 +16,6 @@
#include "wx/display.h"
#include "wx/gdiobj.h"
#include "wx/math.h"
#ifndef WX_PRECOMP
#include "wx/log.h"
@@ -33,10 +32,6 @@
#include "wx/math.h"
#endif
#ifdef __WINDOWS__
// Required in order to use wxMulDivInt32().
#include "wx/msw/wrapwin.h"
#endif
wxIMPLEMENT_ABSTRACT_CLASS(wxGDIObject, wxObject);
@@ -926,8 +921,3 @@ wxResourceCache::~wxResourceCache ()
node = node->GetNext ();
}
}
int wxRescaleCoord(int n, int newScale, int oldScale)
{
return n == -1 ? -1 : wxMulDivInt32(n, newScale, oldScale);
}

View File

@@ -74,12 +74,9 @@
#include "wx/display.h"
#include "wx/platinfo.h"
#include "wx/recguard.h"
#include "wx/private/rescale.h"
#include "wx/private/window.h"
#ifdef __WINDOWS__
#include "wx/msw/wrapwin.h"
#endif
// Windows List
WXDLLIMPEXP_DATA_CORE(wxWindowList) wxTopLevelWindows;

View File

@@ -42,6 +42,7 @@
#include "wx/stockitem.h"
#include "wx/msw/private/button.h"
#include "wx/msw/private/dc.h"
#include "wx/private/rescale.h"
#include "wx/private/window.h"
#if wxUSE_MARKUP