add an xft menu when --enable-xft is used.
authorDana Jansens <danakj@orodu.net>
Sun, 22 Sep 2002 21:51:40 +0000 (21:51 +0000)
committerDana Jansens <danakj@orodu.net>
Sun, 22 Sep 2002 21:51:40 +0000 (21:51 +0000)
dont let dropshadows exist when AA is off, its horrid.

nls/C/Configmenu.m
src/Configmenu.cc
src/Configmenu.hh
src/Screen.cc

index 3fb5bab404688c003d8be203c7fada442f40f5a7..76dc9f39b74f33dd2704a4f6ccfb51dee76c94bc 100644 (file)
@@ -72,3 +72,9 @@ $ #XineramaMaximizing
 # Window Maximizing
 $ #XineramaSnapping
 # Window Snapping
+$ #XftOptions
+# Xft Font Options
+$ #XftAA
+# Anti-Alias Text
+$ #XftShadow
+# Drop Shadows Under Text
index 54c047edb1cc8ae2e45b743fcd2e73f15ae3264f..fbb2c66a67567bf4fb3a7b711e847dc8eca137aa 100644 (file)
@@ -33,7 +33,7 @@
 #include "Screen.hh"
 
 Configmenu::Configmenu(BScreen *scr) : Basemenu(scr) {
-  setLabel(i18n(ConfigmenuSet, ConfigmenuConfigOptions, "Config options"));
+  setLabel(i18n(ConfigmenuSet, ConfigmenuConfigOptions, "Config Options"));
   setInternalMenu();
 
   focusmenu = new Focusmenu(this);
@@ -43,6 +43,9 @@ Configmenu::Configmenu(BScreen *scr) : Basemenu(scr) {
 #ifdef    XINERAMA
   xineramamenu = new Xineramamenu(this);
 #endif // XINERAMA
+#ifdef    XFT
+  xftmenu = new Xftmenu(this);
+#endif // XFT
 
   insert(i18n(ConfigmenuSet, ConfigmenuFocusModel,
               "Focus Model"), focusmenu);
@@ -55,6 +58,10 @@ Configmenu::Configmenu(BScreen *scr) : Basemenu(scr) {
 #ifdef    XINERAMA
   insert(i18n(ConfigmenuSet, ConfigmenuXineramaSupport,
               "XineramaSupport"), xineramamenu);
+#endif // XINERAMA
+#ifdef    XFT
+  insert(i18n(ConfigmenuSet, ConfigmenuXftOptions,
+              "Xft Font Options"), xftmenu);
 #endif // XINERAMA
   insert(i18n(ConfigmenuSet, ConfigmenuImageDithering,
               "Image Dithering"), 1);
@@ -82,6 +89,9 @@ void Configmenu::setValues(void) {
 #ifdef    XINERAMA
   ++index;
 #endif // XINERAMA
+#ifdef    XFT
+  ++index;
+#endif // XFT
   setItemSelected(index++, getScreen()->doImageDither());
   setItemSelected(index++, getScreen()->doOpaqueMove());
   setItemSelected(index++, getScreen()->doWorkspaceWarping());
@@ -101,6 +111,9 @@ Configmenu::~Configmenu(void) {
 #ifdef    XINERAMA
   delete xineramamenu;
 #endif // XINERAMA
+#ifdef    XFT
+  delete xftmenu;
+#endif // XFT
 }
 
 
@@ -167,6 +180,9 @@ void Configmenu::reconfigure(void) {
 #ifdef    XINERAMA
   xineramamenu->reconfigure();
 #endif // XINERAMA
+#ifdef    XFT
+  xftmenu->reconfigure();
+#endif // XFT
 
   Basemenu::reconfigure();
 }
@@ -546,3 +562,54 @@ void Configmenu::Xineramamenu::itemSelected(int button, unsigned int index) {
   }
 }
 #endif // XINERAMA
+
+#ifdef    XFT
+Configmenu::Xftmenu::Xftmenu(Configmenu *cm):
+  Basemenu(cm->getScreen()) {
+  setLabel(i18n(ConfigmenuSet, ConfigmenuXftOptions, "Xft Font Options"));
+  setInternalMenu();
+
+  insert(i18n(ConfigmenuSet, ConfigmenuXftAA, "Anti-Alias Text"), 1);
+  insert(i18n(ConfigmenuSet, ConfigmenuXftShadow, "Drop Shadows Under Text"),
+         2);
+
+  update();
+  setValues();
+}
+
+
+void Configmenu::Xftmenu::setValues(void) {
+  setItemSelected(0, getScreen()->doAAFonts());
+  setItemEnabled(1, getScreen()->doAAFonts());
+  setItemSelected(1, getScreen()->doShadowFonts());
+}
+
+
+void Configmenu::Xftmenu::reconfigure(void) {
+  setValues();
+  Basemenu::reconfigure();
+}
+
+
+void Configmenu::Xftmenu::itemSelected(int button, unsigned int index) {
+  if (button != 1)
+    return;
+
+  BasemenuItem *item = find(index);
+
+  if (! item->function())
+    return;
+
+  switch (item->function()) {
+  case 1: // anti-alias text
+    getScreen()->saveAAFonts(! getScreen()->doAAFonts());
+    break;
+
+  case 2: // drop shadows
+    getScreen()->saveShadowFonts(! getScreen()->doShadowFonts());
+    break;
+  }
+
+  setValues();
+}
+#endif // XFT
index 6a80ab4e72bac26d91264238df37536fbd68fe11..081e397f2784eb37e028b5d21f087b3d04c9be86 100644 (file)
@@ -105,6 +105,22 @@ private:
   };
 #endif // XINERAMA
 
+#ifdef    XFT
+  class Xftmenu : public Basemenu {
+  private:
+    Xftmenu(const Xftmenu&);
+    Xftmenu& operator=(const Xftmenu&);
+
+  protected:
+    virtual void itemSelected(int button, unsigned int index);
+    virtual void setValues(void);
+
+  public:
+    Xftmenu(Configmenu *cm);
+    virtual void reconfigure(void);
+  };
+#endif // XFT
+
   Focusmenu *focusmenu;
   Placementmenu *placementmenu;
   WindowToWindowSnapmenu *windowsnapmenu;
@@ -112,6 +128,9 @@ private:
 #ifdef    XINERAMA
   Xineramamenu *xineramamenu;
 #endif // XINERAMA
+#ifdef    XFT
+  Xftmenu *xftmenu;
+#endif // XFT
 
 //  friend class Focusmenu;
 //  friend class Placementmenu;
@@ -134,6 +153,9 @@ public:
 #ifdef    XINERAMA
   inline Basemenu *getXineramamenu(void) { return xineramamenu; }
 #endif // XINERAMA
+#ifdef    XFT
+  inline Basemenu *getXftmenu(void) { return xftmenu; }
+#endif // XFT
 
   virtual void reconfigure(void);
 };
index b105b7052dc939517a31647e863cafefdf18d6f4..3ce86ec560cb738a21c529df4b22c7b09413374c 100644 (file)
@@ -402,15 +402,15 @@ void BScreen::saveFocusLast(bool f) {
 
 void BScreen::saveAAFonts(bool f) {
   resource.aa_fonts = f;
-  reconfigure();
   config->setValue(screenstr + "antialiasFonts", resource.aa_fonts);
+  reconfigure();
 }
 
 
 void BScreen::saveShadowFonts(bool f) {
   resource.shadow_fonts = f;
-  reconfigure();
   config->setValue(screenstr + "dropShadowFonts", resource.shadow_fonts);
+  reconfigure();
 }
 
 
@@ -682,12 +682,13 @@ void BScreen::load_rc(void) {
   if (! config->getValue(screenstr + "opaqueMove", resource.opaque_move))
     resource.opaque_move = false;
 
-  if (! config->getValue(screenstr + "dropShadowFonts", resource.shadow_fonts))
-    resource.shadow_fonts = false;
-
   if (! config->getValue(screenstr + "antialiasFonts", resource.aa_fonts))
     resource.aa_fonts = true;
 
+  if (! resource.aa_fonts ||
+      ! config->getValue(screenstr + "dropShadowFonts", resource.shadow_fonts))
+    resource.shadow_fonts = false;
+
   if (! config->getValue(screenstr + "resizeZones", resource.resize_zones) ||
       (resource.resize_zones != 1 && resource.resize_zones != 2 &&
        resource.resize_zones != 4))
@@ -1676,6 +1677,9 @@ void BScreen::raiseWindows(Window *workspace_stack, unsigned int num) {
 #ifdef    XINERAMA
   ++bbwins;
 #endif // XINERAMA
+#ifdef    XFT
+  ++bbwins;
+#endif // XFT
 
   Window *session_stack = new
     Window[(num + workspacesList.size() + rootmenuList.size() +
@@ -1699,6 +1703,9 @@ void BScreen::raiseWindows(Window *workspace_stack, unsigned int num) {
 #ifdef    XINERAMA
   *(session_stack + i++) = configmenu->getXineramamenu()->getWindowID();
 #endif // XINERAMA
+#ifdef    XFT
+  *(session_stack + i++) = configmenu->getXftmenu()->getWindowID();
+#endif // XFT
   *(session_stack + i++) = configmenu->getWindowID();
 
   *(session_stack + i++) = slit->getMenu()->getDirectionmenu()->getWindowID();