| Summary: | Cannot turn sub-pixel rendering off | ||
|---|---|---|---|
| Product: | [Unmaintained] kcontrol | Reporter: | Jeremy Stanley <stanmuffin> |
| Component: | kcmfonts | Assignee: | Daniel Molkentin <molkentin> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | ||
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | RedHat Enterprise Linux | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
Jeremy Stanley
2004-05-29 07:57:01 UTC
Okay, I think I've figured out what the problem is. KDE's font configurator comments out the subpixel hinting section from fonts.conf when you uncheck "sub-pixel hinting". However, KDE seems to use RGB by default if nothing is selected. If I explicitly set rgba=none in fonts.conf, then sub-pixel rendering is turned off. To clarify: KDE seems to use RGB by default if nothing is selected AND the display is a digitally-connected LCD. This is still a bug in 3.3.2. Just inserting this XML stanza in ~/.fonts.conf solves the problem for good: <match target="font"> <edit name="rgba" mode="assign"><const>none</const></edit> </match> The bad thing is that there doesn't seem to be a place to put settings that kcontrol won't overwrite on the next apply, so this is rather serious. I confirm this problem on Fedora Core 4 and KDE 3.4.2. Very ugly fonts on my nc6000 laptop. In fact, I never, never, seen a case where sub-pixel hinting gives best results on a LCD screen. Why can't we disable it ? SVN commit 468231 by lunakl:
Remove the (AFAIK) nonsensical greyscale subpixel hinting style
(r355454) and instead always write the changed setting in order
to override the global defaults.
BUG: 82427
M +1 -22 fonts.cpp
M +21 -47 kxftconfig.cpp
M +0 -1 kxftconfig.h
--- trunk/KDE/kdebase/workspace/kcontrol/fonts/fonts.cpp #468230:468231
@@ -50,26 +50,6 @@
#undef Unsorted
#undef None
-static const char *aa_greyscale_xpm[]={
-"12 12 6 1",
-"a c #dcdcdc",
-"b c #c3c3c3",
-"c c #a0a0a0",
-"d c #808080",
-"e c #585858",
-"f c #303030",
-"ffeeddccbbaa",
-"ffeeddccbbaa",
-"ffeeddccbbaa",
-"ffeeddccbbaa",
-"ffeeddccbbaa",
-"ffeeddccbbaa",
-"ffeeddccbbaa",
-"ffeeddccbbaa",
-"ffeeddccbbaa",
-"ffeeddccbbaa",
-"ffeeddccbbaa",
-"ffeeddccbbaa"};
static const char *aa_rgb_xpm[]={
"12 12 3 1",
"a c #0000ff",
@@ -139,8 +119,7 @@
"aaaaaaaaaaaa",
"aaaaaaaaaaaa"};
-static QPixmap aaPixmaps[]={ QPixmap(aa_greyscale_xpm), QPixmap(aa_rgb_xpm),
- QPixmap(aa_bgr_xpm), QPixmap(aa_vrgb_xpm), QPixmap(aa_vbgr_xpm) };
+static QPixmap aaPixmaps[]={ QPixmap(aa_rgb_xpm), QPixmap(aa_bgr_xpm), QPixmap(aa_vrgb_xpm), QPixmap(aa_vbgr_xpm) };
/**** DLL Interface ****/
typedef KGenericFactory<KFonts, QWidget> FontFactory;
--- trunk/KDE/kdebase/workspace/kcontrol/fonts/kxftconfig.cpp #468230:468231
@@ -257,9 +257,7 @@
static KXftConfig::SubPixel::Type strToType(const char *str)
{
- if(0==strcmp(str, "\0"))
- return KXftConfig::SubPixel::Greyscale;
- else if(0==strcmp(str, "rgb"))
+ if(0==strcmp(str, "rgb"))
return KXftConfig::SubPixel::Rgb;
else if(0==strcmp(str, "bgr"))
return KXftConfig::SubPixel::Bgr;
@@ -286,9 +284,7 @@
#else
static bool strToType(const char *str, KXftConfig::SubPixel::Type &type)
{
- if(0==memcmp(str, "\0", 1))
- type=KXftConfig::SubPixel::Greyscale;
- else if(0==memcmp(str, "rgb", 3))
+ if(0==memcmp(str, "rgb", 3))
type=KXftConfig::SubPixel::Rgb;
else if(0==memcmp(str, "bgr", 3))
type=KXftConfig::SubPixel::Bgr;
@@ -777,21 +773,14 @@
bool KXftConfig::getSubPixelType(SubPixel::Type &type)
{
- if(SubPixel::None!=m_subPixel.type && !m_subPixel.toBeRemoved)
- {
- type=m_subPixel.type;
- return true;
- }
- else
- return false;
+ type=m_subPixel.type;
+ return SubPixel::None!=m_subPixel.type;
}
void KXftConfig::setSubPixelType(SubPixel::Type type)
{
- if((SubPixel::None==type && SubPixel::None!=m_subPixel.type && !m_subPixel.toBeRemoved) ||
- (SubPixel::None!=type && (type!=m_subPixel.type || m_subPixel.toBeRemoved)) )
+ if(type!=m_subPixel.type)
{
- m_subPixel.toBeRemoved=(SubPixel::None==type);
m_subPixel.type=type;
m_madeChanges=true;
}
@@ -881,8 +870,6 @@
default:
case SubPixel::None:
return i18n("None");
- case SubPixel::Greyscale:
- return i18n("Grayscale");
case SubPixel::Rgb:
return i18n("RGB");
case SubPixel::Bgr:
@@ -901,8 +888,6 @@
default:
case SubPixel::None:
return "none";
- case SubPixel::Greyscale:
- return "";
case SubPixel::Rgb:
return "rgb";
case SubPixel::Bgr:
@@ -1273,33 +1258,22 @@
void KXftConfig::applySubPixelType()
{
- if(SubPixel::None==m_subPixel.type || m_subPixel.toBeRemoved)
- {
- if(!m_subPixel.node.isNull())
- {
- m_doc.documentElement().removeChild(m_subPixel.node);
- m_subPixel.node.clear();
- }
- }
- else
- {
- QDomElement matchNode = m_doc.createElement("match"),
- typeNode = m_doc.createElement("const"),
- editNode = m_doc.createElement("edit");
- QDomText typeText = m_doc.createTextNode(toStr(m_subPixel.type));
+ QDomElement matchNode = m_doc.createElement("match"),
+ typeNode = m_doc.createElement("const"),
+ editNode = m_doc.createElement("edit");
+ QDomText typeText = m_doc.createTextNode(toStr(m_subPixel.type));
- matchNode.setAttribute("target", "font");
- editNode.setAttribute("mode", "assign");
- editNode.setAttribute("name", "rgba");
- editNode.appendChild(typeNode);
- typeNode.appendChild(typeText);
- matchNode.appendChild(editNode);
- if(m_subPixel.node.isNull())
- m_doc.documentElement().appendChild(matchNode);
- else
- m_doc.documentElement().replaceChild(matchNode, m_subPixel.node);
- m_subPixel.node=matchNode;
- }
+ matchNode.setAttribute("target", "font");
+ editNode.setAttribute("mode", "assign");
+ editNode.setAttribute("name", "rgba");
+ editNode.appendChild(typeNode);
+ typeNode.appendChild(typeText);
+ matchNode.appendChild(editNode);
+ if(m_subPixel.node.isNull())
+ m_doc.documentElement().appendChild(matchNode);
+ else
+ m_doc.documentElement().replaceChild(matchNode, m_subPixel.node);
+ m_subPixel.node=matchNode;
}
void KXftConfig::applyHintStyle()
@@ -1454,7 +1428,7 @@
void KXftConfig::outputSubPixelType(std::ofstream &f, bool ifNew)
{
- if(!m_subPixel.toBeRemoved && ((ifNew && NULL==m_subPixel.end) || (!ifNew && NULL!=m_subPixel.end)) && SubPixel::None!=m_subPixel.type)
+ if((ifNew && NULL==m_subPixel.end) || (!ifNew && NULL!=m_subPixel.end))
f << "match edit rgba = " << toStr(m_subPixel.type) << ';' << endl;
}
--- trunk/KDE/kdebase/workspace/kcontrol/fonts/kxftconfig.h #468230:468231
@@ -89,7 +89,6 @@
enum Type
{
None,
- Greyscale,
Rgb,
Bgr,
Vrgb,
|