Port the whole dpi check from mozilla
This commit is contained in:
parent
7cf6fd2640
commit
d47d882bce
@ -19,19 +19,71 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <gdk/gdkx.h>
|
#include <gdk/gdkx.h>
|
||||||
|
#include <gdk/gdkscreen.h>
|
||||||
|
#include <gtk/gtksettings.h>
|
||||||
|
|
||||||
#include "sugar-utils.h"
|
#include "sugar-utils.h"
|
||||||
|
|
||||||
|
/* Ported from mozilla nsDeviceContextGTK.cpp */
|
||||||
|
|
||||||
|
static gint
|
||||||
|
get_gtk_settings_dpi(void)
|
||||||
|
{
|
||||||
|
GtkSettings *settings = gtk_settings_get_default();
|
||||||
|
GParamSpec *spec;
|
||||||
|
gint dpi = 0;
|
||||||
|
|
||||||
|
spec = g_object_class_find_property(
|
||||||
|
G_OBJECT_GET_CLASS(G_OBJECT(settings)), "gtk-xft-dpi");
|
||||||
|
|
||||||
|
if (spec) {
|
||||||
|
g_object_get(G_OBJECT(settings),
|
||||||
|
"gtk-xft-dpi", &dpi,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (int)(dpi / 1024.0 + 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gint
|
||||||
|
get_xft_dpi(void)
|
||||||
|
{
|
||||||
|
char *val = XGetDefault(GDK_DISPLAY(), "Xft", "dpi");
|
||||||
|
if (val) {
|
||||||
|
char *e;
|
||||||
|
double d = strtod(val, &e);
|
||||||
|
|
||||||
|
if (e != val)
|
||||||
|
return (int)(d + 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
get_dpi_from_physical_resolution(void)
|
||||||
|
{
|
||||||
|
float screen_width_in;
|
||||||
|
|
||||||
|
screen_width_in = (float)(gdk_screen_width_mm()) / 25.4f;
|
||||||
|
|
||||||
|
return (int)((float)(gdk_screen_width()) / screen_width_in + 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
sugar_get_screen_dpi(void)
|
sugar_get_screen_dpi(void)
|
||||||
{
|
{
|
||||||
char *val = XGetDefault (GDK_DISPLAY(), "Xft", "dpi");
|
int dpi;
|
||||||
if (val) {
|
|
||||||
char *e;
|
dpi = get_gtk_settings_dpi();
|
||||||
double d = strtod(val, &e);
|
|
||||||
if (d > 0.0)
|
if (dpi == 0) {
|
||||||
return (int)(d+0.5);
|
dpi = get_xft_dpi();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 96;
|
if (dpi == 0) {
|
||||||
|
dpi = get_dpi_from_physical_resolution();
|
||||||
|
}
|
||||||
|
|
||||||
|
return dpi;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
VERSION=0.63
|
VERSION=0.63
|
||||||
DATE=`date +%Y%m%d`
|
DATE=`date +%Y%m%d`
|
||||||
RELEASE=2.23
|
RELEASE=2.25
|
||||||
TARBALL=sugar-$VERSION-$RELEASE.${DATE}git.tar.bz2
|
TARBALL=sugar-$VERSION-$RELEASE.${DATE}git.tar.bz2
|
||||||
|
|
||||||
rm sugar-$VERSION.tar.bz2
|
rm sugar-$VERSION.tar.bz2
|
||||||
|
Loading…
Reference in New Issue
Block a user