UI: fix incorrect scaling of manipulator widgets with DPI.
U.ui_scale is the setting from the user preferences and should never be used for drawing. UI_DPI_FAC is the final scale after DPI from the operating system is taken into account.
This commit is contained in:
@@ -57,6 +57,7 @@
|
||||
#include "ED_view3d.h"
|
||||
#include "ED_manipulator_library.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
#include "UI_interface_icons.h"
|
||||
#include "UI_resources.h"
|
||||
|
||||
@@ -152,8 +153,8 @@ static void button2d_draw_intern(
|
||||
button2d_geom_draw_backdrop(mpr, color, select);
|
||||
gpuPopMatrix();
|
||||
UI_icon_draw(
|
||||
mpr->matrix_basis[3][0] - (ICON_DEFAULT_WIDTH / 2.0) * U.ui_scale,
|
||||
mpr->matrix_basis[3][1] - (ICON_DEFAULT_HEIGHT / 2.0) * U.ui_scale,
|
||||
mpr->matrix_basis[3][0] - (ICON_DEFAULT_WIDTH / 2.0) * UI_DPI_FAC,
|
||||
mpr->matrix_basis[3][1] - (ICON_DEFAULT_HEIGHT / 2.0) * UI_DPI_FAC,
|
||||
button->icon);
|
||||
}
|
||||
else {
|
||||
@@ -194,7 +195,7 @@ static int manipulator_button2d_test_select(
|
||||
else {
|
||||
copy_v2_v2(point_local, (float [2]){UNPACK2(event->mval)});
|
||||
sub_v2_v2(point_local, mpr->matrix_basis[3]);
|
||||
mul_v2_fl(point_local, 1.0f / (mpr->scale_basis * U.ui_scale));
|
||||
mul_v2_fl(point_local, 1.0f / (mpr->scale_basis * UI_DPI_FAC));
|
||||
}
|
||||
/* The 'mpr->scale_final' is already applied when projecting. */
|
||||
if (len_squared_v2(point_local) < 1.0f) {
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#include "ED_screen.h"
|
||||
#include "ED_manipulator_library.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
#include "UI_resources.h"
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
@@ -291,8 +292,8 @@ static void WIDGETGROUP_navigate_draw_prepare(const bContext *C, wmManipulatorGr
|
||||
|
||||
|
||||
const float icon_size = MANIPULATOR_SIZE;
|
||||
const float icon_offset = (icon_size / 2.0) * MANIPULATOR_OFFSET_FAC * U.ui_scale;
|
||||
const float icon_offset_mini = icon_size * MANIPULATOR_MINI_OFFSET_FAC * U.ui_scale;
|
||||
const float icon_offset = (icon_size / 2.0) * MANIPULATOR_OFFSET_FAC * UI_DPI_FAC;
|
||||
const float icon_offset_mini = icon_size * MANIPULATOR_MINI_OFFSET_FAC * UI_DPI_FAC;
|
||||
const float co[2] = {ar->winx - icon_offset, ar->winy - icon_offset};
|
||||
|
||||
wmManipulator *mpr;
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
#include "RNA_access.h"
|
||||
#include "RNA_define.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
#include "UI_resources.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
@@ -238,7 +239,7 @@ static int manipulator_axis_test_select(
|
||||
{
|
||||
float point_local[2] = {UNPACK2(event->mval)};
|
||||
sub_v2_v2(point_local, mpr->matrix_basis[3]);
|
||||
mul_v2_fl(point_local, 1.0f / (mpr->scale_basis * U.ui_scale));
|
||||
mul_v2_fl(point_local, 1.0f / (mpr->scale_basis * UI_DPI_FAC));
|
||||
|
||||
const float len_sq = len_squared_v2(point_local);
|
||||
if (len_sq > 1.0) {
|
||||
|
||||
@@ -53,6 +53,8 @@
|
||||
#include "ED_screen.h"
|
||||
#include "ED_view3d.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
|
||||
#ifdef WITH_PYTHON
|
||||
#include "BPY_extern.h"
|
||||
#endif
|
||||
@@ -470,7 +472,7 @@ bool wm_manipulator_select_and_highlight(bContext *C, wmManipulatorMap *mmap, wm
|
||||
void wm_manipulator_calculate_scale(wmManipulator *mpr, const bContext *C)
|
||||
{
|
||||
const RegionView3D *rv3d = CTX_wm_region_view3d(C);
|
||||
float scale = U.ui_scale;
|
||||
float scale = UI_DPI_FAC;
|
||||
|
||||
if ((mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_SCALE) == 0) {
|
||||
scale *= U.manipulator_size;
|
||||
|
||||
Reference in New Issue
Block a user