widget/windows/nsWidgetFactory.cpp
author Lee Salzman <lsalzman@mozilla.com>
Mon, 05 Dec 2022 04:40:45 +0000
changeset 644658 89666af4ddbca2c4e708ff80a6b869d420d45846
parent 505803 1f438b01c7801e7d750c4297330669621d3b7a4f
permissions -rw-r--r--
Bug 1801307 - Remember last interval to speed up insertion search. r=jrmuizel This modifies AddInterval in wpf-gpu-raster to try to remember the last interval it searched for so that it doesn't have to search the entire interval list for every interval added. This should take us down from O(n^2) to closer to O(n) for this phase of rasterization. Differential Revision: https://phabricator.services.mozilla.com/D163795

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsWidgetFactory.h"

#include "mozilla/Components.h"
#include "nsISupports.h"
#include "nsdefs.h"
#include "nsWidgetsCID.h"
#include "nsAppShell.h"
#include "nsAppShellSingleton.h"
#include "mozilla/WidgetUtils.h"
#include "mozilla/widget/ScreenManager.h"
#include "nsLookAndFeel.h"
#include "WinMouseScrollHandler.h"
#include "KeyboardLayout.h"
#include "nsToolkit.h"

// Modules that switch out based on the environment
#include "nsXULAppAPI.h"
// Desktop
#include "nsFilePicker.h"  // needs to be included before other shobjidl.h includes
#include "nsColorPicker.h"
// Content processes
#include "nsFilePickerProxy.h"

// Clipboard
#include "nsClipboardHelper.h"
#include "nsClipboard.h"
#include "HeadlessClipboard.h"

#include "WindowsUIUtils.h"

using namespace mozilla;
using namespace mozilla::widget;

NS_IMPL_COMPONENT_FACTORY(nsIClipboard) {
  nsCOMPtr<nsIClipboard> inst;
  if (gfxPlatform::IsHeadless()) {
    inst = new HeadlessClipboard();
  } else {
    inst = new nsClipboard();
  }
  return inst.forget().downcast<nsISupports>();
}

nsresult nsWidgetWindowsModuleCtor() { return nsAppShellInit(); }

void nsWidgetWindowsModuleDtor() {
  // Shutdown all XP level widget classes.
  WidgetUtils::Shutdown();

  KeyboardLayout::Shutdown();
  MouseScrollHandler::Shutdown();
  nsLookAndFeel::Shutdown();
  nsToolkit::Shutdown();
  nsAppShellShutdown();
}