Commit a1ed97e5 authored by Eli Zaretskii's avatar Eli Zaretskii

Implement HiDPI support for underwave on MS-Windows

* src/w32term.c (x_get_scale_factor): New function.
(w32_draw_underwave): Use it.
* src/xterm.c (x_draw_underwave): Offset the wave starting point
to make it identical with original code.
parent efb508bb
......@@ -32,6 +32,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <fcntl.h> /* for O_RDWR */
#endif
#include <imm.h>
#include <math.h>
#include "coding.h"
#include "frame.h"
......@@ -308,6 +309,20 @@ w32_restore_glyph_string_clip (struct glyph_string *s)
}
}
static void
x_get_scale_factor(struct w32_display_info *dpyinfo, int *scale_x, int *scale_y)
{
const int base_res = 96;
*scale_x = *scale_y = 1;
if (dpyinfo)
{
*scale_x = floor (dpyinfo->resx / base_res);
*scale_y = floor (dpyinfo->resy / base_res);
}
}
/*
Draw a wavy line under S. The wave fills wave_height pixels from y0.
......@@ -322,7 +337,12 @@ w32_restore_glyph_string_clip (struct glyph_string *s)
static void
w32_draw_underwave (struct glyph_string *s, COLORREF color)
{
int wave_height = 3, wave_length = 2;
struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (s->f);
int scale_x, scale_y;
x_get_scale_factor (dpyinfo, &scale_x, &scale_y);
int wave_height = 3 * scale_y, wave_length = 2 * scale_x, thickness = scale_y;
int dx, dy, x0, y0, width, x1, y1, x2, y2, odd, xmax;
XRectangle wave_clip, string_clip, final_clip;
RECT w32_final_clip, w32_string_clip;
......@@ -331,7 +351,7 @@ w32_draw_underwave (struct glyph_string *s, COLORREF color)
dx = wave_length;
dy = wave_height - 1;
x0 = s->x;
y0 = s->ybase - wave_height + 3;
y0 = s->ybase + wave_height / 2 - scale_y;
width = s->width;
xmax = x0 + width;
......@@ -348,7 +368,7 @@ w32_draw_underwave (struct glyph_string *s, COLORREF color)
if (!x_intersect_rectangles (&wave_clip, &string_clip, &final_clip))
return;
hp = CreatePen (PS_SOLID, 0, color);
hp = CreatePen (PS_SOLID, thickness, color);
oldhp = SelectObject (s->hdc, hp);
CONVERT_FROM_XRECT (final_clip, w32_final_clip);
w32_set_clip_rectangle (s->hdc, &w32_final_clip);
......
......@@ -3519,7 +3519,7 @@ x_draw_underwave (struct glyph_string *s)
dx = wave_length;
dy = wave_height - 1;
x0 = s->x;
y0 = s->ybase + wave_height / 2;
y0 = s->ybase + wave_height / 2 - scale_y;
width = s->width;
xmax = x0 + width;
......
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