]> git.decadent.org.uk Git - videolink.git/blobdiff - style_sheets.cpp
Rewrote navigation code generator to support menus spread across multiple domains.
[videolink.git] / style_sheets.cpp
index 576780055d514d5b2575c607329107628fa50c93..1f66810771976c7d89beae43017bfae0247c8831 100644 (file)
@@ -1,13 +1,18 @@
-// Copyright 2005 Ben Hutchings <ben@decadentplace.org.uk>.
+// Copyright 2005 Ben Hutchings <ben@decadent.org.uk>.
 // See the file "COPYING" for licence details.
 
 #include "style_sheets.hpp"
 
 #include <nsContentCID.h>
-#include <nsICSSLoader.h>
-#include <nsICSSStyleSheet.h>
-#include <nsIPresShell.h>
-#include <nsIServiceManagerUtils.h>
+#if MOZ_VERSION_MAJOR > 1 || (MOZ_VERSION_MAJOR == 1 && MOZ_VERSION_MINOR >= 8)
+#   include <nsIStyleSheetService.h>
+#   include <nsServiceManagerUtils.h>
+#else
+#   include <nsICSSLoader.h>
+#   include <nsICSSStyleSheet.h>
+#   include <nsIPresShell.h>
+#   include <nsIServiceManagerUtils.h>
+#endif
 #include <nsIURI.h>
 #include <nsNetUtil.h>
 
 
 using xpcom_support::check;
 
-// Load a CSS from an (absolute) URI.
-// TODO: Support loading from an absolute, or better, relative filename.
-already_AddRefed<nsIStyleSheet> load_css(const char * uri)
+#if MOZ_VERSION_MAJOR > 1 || (MOZ_VERSION_MAJOR == 1 && MOZ_VERSION_MINOR >= 8)
+
+// We just have to load and register a style-sheet as a user
+// style-sheet.  There is no need to do anything for each page.
+
+agent_style_sheet_holder init_agent_style_sheet(const char * uri)
+{
+    nsCOMPtr<nsIURI> style_sheet_uri;
+    check(NS_NewURI(getter_AddRefs(style_sheet_uri), nsCString(uri)));
+
+    nsCOMPtr<nsIStyleSheetService> style_sheet_service;
+    static const nsCID style_sheet_service_cid = {
+       // NS_STYLESHEETSERVICE_CID copied from
+       // layout/base/nsStyleSheetService.cpp
+       0xfcca6f83, 0x9f7d, 0x44e4,
+       {0xa7, 0x4b, 0xb5, 0x94, 0x33, 0xe6, 0xc8, 0xc3}
+    };
+    check(CallGetService<nsIStyleSheetService>(
+             style_sheet_service_cid, getter_AddRefs(style_sheet_service)));
+    check(style_sheet_service->LoadAndRegisterSheet(
+             style_sheet_uri, nsIStyleSheetService::USER_SHEET));
+
+    return agent_style_sheet_holder();
+}
+
+#else // Mozilla version < 1.8
+
+already_AddRefed<nsIStyleSheet> init_agent_style_sheet(const char * uri)
 {
     nsCOMPtr<nsICSSLoader> css_loader;
     static const nsCID css_loader_cid = NS_CSS_LOADER_CID;
@@ -34,7 +64,8 @@ already_AddRefed<nsIStyleSheet> load_css(const char * uri)
 
 // Apply a style-sheet to a given presentation shell as the top-priority
 // agent style-sheet and disable the preferences-derived style rules.
-void apply_style_sheet(nsIStyleSheet * style_sheet, nsIPresShell * pres_shell)
+void apply_agent_style_sheet(nsIStyleSheet * style_sheet,
+                            nsIPresShell * pres_shell)
 {
     nsCOMArray<nsIStyleSheet> style_sheets;
     check(pres_shell->GetAgentStyleSheets(style_sheets));
@@ -48,3 +79,4 @@ void apply_style_sheet(nsIStyleSheet * style_sheet, nsIPresShell * pres_shell)
     check(pres_shell->FlushPendingNotifications(true));
 }
 
+#endif // Mozilla version >=/< 1.8