/*
 * RStudioThemes.java
 *
 * Copyright (C) 2009-17 by RStudio, Inc.
 *
 * Unless you have received this program directly from RStudio pursuant
 * to the terms of a commercial license agreement with RStudio, then
 * this program is licensed to you under the terms of version 3 of the
 * GNU Affero General Public License. This program is distributed WITHOUT
 * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
 * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
 *
 */

package org.rstudio.studio.client.application.ui;

import org.rstudio.studio.client.workbench.prefs.model.UIPrefs;

import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;

public class RStudioThemes
{
   public static void initializeThemes(String themeName,
                                       Document document,
                                       Element element)
   {
      document.getBody().removeClassName("rstudio-themes-flat");
      element.removeClassName("rstudio-themes-dark");
      element.removeClassName("rstudio-themes-default");
      element.removeClassName("rstudio-themes-dark-grey");
      element.removeClassName("rstudio-themes-alternate");
      
      if (themeName == "default" ||themeName == "dark-grey" || themeName == "alternate") {         
         document.getBody().addClassName("rstudio-themes-flat");
         if (themeName.contains("dark")) {
            element.addClassName("rstudio-themes-dark");
         }
         element.addClassName("rstudio-themes-" + themeName);
      }
   }

   public static boolean isFlat(UIPrefs prefs) {
      return prefs.getFlatTheme().getValue() != "classic"; 
   }
}

@@ -629,16 +629,58 @@
 on.ui;%0A%0A
+import org.rstudio.core.client.BrowseCap;%0A
 import o
@@ -820,16 +820,210 @@
 Element;
+%0Aimport com.google.gwt.dom.client.Style.Overflow;%0Aimport com.google.gwt.dom.client.Style.Position;%0Aimport com.google.gwt.dom.client.Style.Unit;%0Aimport com.google.gwt.dom.client.Style.Visibility;
 %0A%0Apublic
@@ -1511,24 +1511,84 @@
 lternate%22);%0A
+      element.removeClassName(%22rstudio-themes-scrollbars%22);%0A
       %0A     
@@ -1617,16 +1617,17 @@
 ault%22 %7C%7C
+ 
 themeNam
@@ -1744,24 +1744,34 @@
 mes-flat%22);%0A
+         %0A
          if 
@@ -1854,24 +1854,164 @@
 mes-dark%22);%0A
+            %0A            if (usesScrollbars()) %7B%0A               document.getBody().addClassName(%22rstudio-themes-scrollbars%22);%0A            %7D%0A
          %7D%0A 
@@ -2199,10 +2199,792 @@
 ; %0A   %7D%0A
+   %0A   private static boolean usesScrollbars() %7B%0A      if (!BrowseCap.isMacintosh()) return true;%0A      %0A      Element parent = Document.get().createElement(%22div%22);%0A      parent.getStyle().setWidth(100, Unit.PX);%0A      parent.getStyle().setHeight(100, Unit.PX);%0A      parent.getStyle().setOverflow(Overflow.AUTO);%0A      parent.getStyle().setVisibility(Visibility.HIDDEN);%0A%0A      Element content = Document.get().createElement(%22div%22);%0A      content.getStyle().setWidth(100, Unit.PX);%0A      content.getStyle().setHeight(200, Unit.PX);%0A%0A      parent.appendChild(content);%0A      Document.get().getBody().appendChild(parent);%0A%0A      boolean hasScrollbars = parent.getOffsetWidth() - parent.getClientWidth() %3E 0;%0A      //parent.removeFromParent();%0A      %0A      return hasScrollbars;%0A   %7D%0A
 %7D%0A

add support for mac hidden scrollbars mode