Adding a new CommonResources class that provides access to commonly used styles in GWT. For now, the only style defined is a cross browser implementation of inline block, but we can expand to include more common styles later.
Review at http://gwt-code-reviews.appspot.com/1106801
Review by: sbrubaker@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9228 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/resources/client/CommonResources.java b/user/src/com/google/gwt/resources/client/CommonResources.java
new file mode 100644
index 0000000..6987bea
--- /dev/null
+++ b/user/src/com/google/gwt/resources/client/CommonResources.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.resources.client;
+
+import com.google.gwt.core.client.GWT;
+
+/**
+ * Generally useful styles and resources used throughout GWT widgets and cells.
+ */
+public class CommonResources {
+
+ /**
+ * The {@link ClientBundle} of resources.
+ */
+ static interface Bundle extends ClientBundle {
+
+ @Source("inline-block.css")
+ InlineBlockStyle inlineBlockStyle();
+ }
+
+ /**
+ * Cross-browser implementation of the "display: inline-block" CSS property.
+ */
+ static interface InlineBlockStyle extends CssResource {
+
+ /**
+ * The inline block style.
+ */
+ String inlineBlock();
+ }
+
+ /**
+ * Lazily loaded singleton.
+ */
+ private static Bundle instance;
+
+ /**
+ * Ensure that the shared {@link Bundle} is created and return it.
+ *
+ * @return the {@link Bundle} of resources
+ */
+ private static Bundle ensureResources() {
+ if (instance == null) {
+ instance = GWT.create(Bundle.class);
+ }
+ return instance;
+ }
+
+ /**
+ * Get the style class name that simulates a "display: inline-block" effect
+ * across browsers.
+ */
+ public static String getInlineBlockStyle() {
+ InlineBlockStyle style = ensureResources().inlineBlockStyle();
+ style.ensureInjected();
+ return style.inlineBlock();
+ }
+}
diff --git a/user/src/com/google/gwt/resources/client/inline-block.css b/user/src/com/google/gwt/resources/client/inline-block.css
new file mode 100644
index 0000000..2aa4767
--- /dev/null
+++ b/user/src/com/google/gwt/resources/client/inline-block.css
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+/*
+ * Cross-browser implementation of the "display: inline-block" CSS property.
+ * See http://www.w3.org/TR/CSS21/visuren.html#propdef-display for details.
+ * Tested on IE 6 & 7, FF 2.0 & 3.0, Safari 2 & 3, Webkit, Chrome and Opera 9.
+ *
+ * Original author: attila@google.com (Attila Bodis)
+ */
+
+/*
+ * Firefox hack is needed for versions < FF3. But since the user.agent property
+ * does not allow us to specify directly for (versions < FF3), we will need to
+ * use the following two rules to workaround.
+ */
+/* Firefox versions >= FF 1.5 */
+@if user.agent gecko1_8 {
+ .inlineBlock {
+ /*
+ * Note on funny syntax: what we really need is this: "display: -moz-inline-box;"
+ * but "\\" is needed to make GWT's CssResource escape the "-" character properly.
+ */
+ display: \\-moz-inline-box; /* This is ignored by FF3 and later*/
+ }
+}
+
+/* Default rule; only Safari, Webkit, Opera, FF3 handle it without hacks. */
+.inlineBlock {
+ position: relative;
+ display: inline-block;
+}
+
+/*
+ * IE specific rules (for IE version IE6/7)
+ * On IE, "display: inline-block" only gives the element layout, but doesn't
+ * give it inline behavior. Subsequently setting display to inline does the
+ * trick.
+ */
+@if user.agent ie6 {
+ .inlineBlock {
+ /* workaround to make IE "hasLayout" */
+ zoom: 1;
+ display: inline;
+ }
+}