diff dwtx/draw2d/ButtonBorder.d @ 102:0de61c6f08ca

Reduce static ctors
author Frank Benoit <benoit@tionex.de>
date Sun, 03 Aug 2008 03:07:30 +0200
parents 95307ad235d9
children 2d6540440fe6
line wrap: on
line diff
--- a/dwtx/draw2d/ButtonBorder.d	Sun Aug 03 02:17:46 2008 +0200
+++ b/dwtx/draw2d/ButtonBorder.d	Sun Aug 03 03:07:30 2008 +0200
@@ -44,28 +44,61 @@
  * Default button border.
  * @see SCHEMES#BUTTON
  */
-public static const Border BUTTON;
+private static const Border BUTTON_;
+public static ButtonScheme BUTTON(){
+    if( BUTTON_ is null ){
+        synchronized( ButtonScheme.classinfo ){
+            if( BUTTON_ is null ){
+                BUTTON_ = new ButtonBorder(SCHEMES.BUTTON);
+            }
+        }
+    }
+    return BUTTON_;
+}
 /**
  * Inverted hightlight colors from BUTTON.
  * @see SCHEMES#BUTTON_CONTRAST
  */
-public static const Border BUTTON_CONTRAST;
+private static const Border BUTTON_CONTRAST_;
+public static ButtonScheme BUTTON_CONTRAST(){
+    if( BUTTON_CONTRAST_ is null ){
+        synchronized( ButtonScheme.classinfo ){
+            if( BUTTON_CONTRAST_ is null ){
+                BUTTON_CONTRAST_ = new ButtonBorder(SCHEMES.BUTTON_CONTRAST);
+            }
+        }
+    }
+    return BUTTON_CONTRAST_;
+}
 /**
  * Used for scrollbar buttons.
  * @see SCHEMES#BUTTON_SCROLLBAR
  */
-public static const Border BUTTON_SCROLLBAR;
+private static const Border BUTTON_SCROLLBAR_;
+public static ButtonScheme BUTTON_SCROLLBAR(){
+    if( BUTTON_SCROLLBAR_ is null ){
+        synchronized( ButtonScheme.classinfo ){
+            if( BUTTON_SCROLLBAR_ is null ){
+                BUTTON_SCROLLBAR_ =  new ButtonBorder(SCHEMES.BUTTON_SCROLLBAR);
+            }
+        }
+    }
+    return BUTTON_SCROLLBAR_;
+}
 /**
  * Used for toolbar buttons.
  * @see SCHEMES#TOOLBAR
  */
-public static const Border TOOLBAR;
-
-static this(){
-    BUTTON = new ButtonBorder(SCHEMES.BUTTON);
-    BUTTON_CONTRAST = new ButtonBorder(SCHEMES.BUTTON_CONTRAST);
-    BUTTON_SCROLLBAR = new ButtonBorder(SCHEMES.BUTTON_SCROLLBAR);
-    TOOLBAR = new ButtonBorder(SCHEMES.TOOLBAR);
+private static const Border TOOLBAR_;
+public static ButtonScheme TOOLBAR(){
+    if( TOOLBAR_ is null ){
+        synchronized( ButtonScheme.classinfo ){
+            if( TOOLBAR_ is null ){
+                TOOLBAR_ = new ButtonBorder(SCHEMES.TOOLBAR);
+            }
+        }
+    }
+    return TOOLBAR_;
 }
 
 /**
@@ -193,39 +226,73 @@
     /**
      * Contrast button scheme
      */
-    static const ButtonScheme BUTTON_CONTRAST;
+    private static const ButtonScheme BUTTON_CONTRAST_;
+    static ButtonScheme BUTTON_CONTRAST(){
+        if( BUTTON_CONTRAST_ is null ){
+            synchronized( ButtonScheme.classinfo ){
+                if( BUTTON_CONTRAST_ is null ){
+                    BUTTON_CONTRAST_ = new ButtonScheme(
+                        [ColorConstants.button, ColorConstants.buttonLightest],
+                        DARKEST_DARKER
+                    );
+                }
+            }
+        }
+        return BUTTON_CONTRAST_;
+    }
     /**
      * Regular button scheme
      */
-    static const ButtonScheme BUTTON;
+    private static const ButtonScheme BUTTON_;
+    static ButtonScheme BUTTON(){
+        if( BUTTON_ is null ){
+            synchronized( ButtonScheme.classinfo ){
+                if( BUTTON_ is null ){
+                    BUTTON_ = new ButtonScheme(
+                        [ColorConstants.buttonLightest],
+                        DARKEST_DARKER
+                    );
+                }
+            }
+        }
+        return BUTTON_;
+    }
     /**
      * Toolbar button scheme
      */
-    static const ButtonScheme TOOLBAR;
+    private static const ButtonScheme TOOLBAR_;
+    static ButtonScheme TOOLBAR(){
+        if( TOOLBAR_ is null ){
+            synchronized( ButtonScheme.classinfo ){
+                if( TOOLBAR_ is null ){
+                    TOOLBAR_ = new ButtonScheme(
+                        [ColorConstants.buttonLightest],
+                        [ColorConstants.buttonDarker]
+                    );
+                }
+            }
+        }
+        return TOOLBAR_;
+    }
     /**
      * Scrollbar button scheme
      */
-    static const ButtonScheme BUTTON_SCROLLBAR;
-static this(){
-    BUTTON_CONTRAST = new ButtonScheme(
-        [ColorConstants.button, ColorConstants.buttonLightest],
-        DARKEST_DARKER
-    );
-    BUTTON = new ButtonScheme(
-        [ColorConstants.buttonLightest],
-        DARKEST_DARKER
-    );
-    TOOLBAR = new ButtonScheme(
-        [ColorConstants.buttonLightest],
-        [ColorConstants.buttonDarker]
-    );
-    BUTTON_SCROLLBAR = new ButtonScheme(
-        [ColorConstants.button, ColorConstants.buttonLightest],
-        DARKEST_DARKER,
-        [ColorConstants.buttonDarker],
-        [ColorConstants.buttonDarker]
-    );
-}
+    private static const ButtonScheme BUTTON_SCROLLBAR_;
+    static ButtonScheme BUTTON_SCROLLBAR(){
+        if( BUTTON_SCROLLBAR_ is null ){
+            synchronized( ButtonScheme.classinfo ){
+                if( BUTTON_SCROLLBAR_ is null ){
+                    BUTTON_SCROLLBAR_ = new ButtonScheme(
+                        [ColorConstants.button, ColorConstants.buttonLightest],
+                        DARKEST_DARKER,
+                        [ColorConstants.buttonDarker],
+                        [ColorConstants.buttonDarker]
+                    );
+                }
+            }
+        }
+        return BUTTON_SCROLLBAR_;
+    }
 }
 
 /**