summaryrefslogtreecommitdiffstats
path: root/widget/nsWidgetInitData.h
blob: 9b91f8dda96d554b559e57411179dbe9485c0d94 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/* -*- Mode: C++; tab-width: 40; 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/. */

#ifndef nsWidgetInitData_h__
#define nsWidgetInitData_h__

/**
 * Window types
 *
 * Don't alter previously encoded enum values - 3rd party apps may look at
 * these.
 */
enum nsWindowType {
  eWindowType_toplevel,           // default top level window
  eWindowType_dialog,             // top level window but usually handled differently
                                  // by the OS
  eWindowType_popup,              // used for combo boxes, etc
  eWindowType_child,              // child windows (contained inside a window on the
                                  // desktop (has no border))
  eWindowType_invisible,          // windows that are invisible or offscreen
  eWindowType_plugin,             // plugin window
  eWindowType_plugin_ipc_chrome,  // chrome side native widget for plugins (e10s)
  eWindowType_plugin_ipc_content, // content side puppet widget for plugins (e10s)
  eWindowType_sheet,              // MacOSX sheet (special dialog class)
};

/**
 * Popup types
 *
 * For eWindowType_popup
 */
enum nsPopupType {
  ePopupTypePanel,
  ePopupTypeMenu,
  ePopupTypeTooltip,
  ePopupTypeAny      = 0xF000 // used only to pass to
                              // nsXULPopupManager::GetTopPopup
};

/**
 * Popup levels specify the window ordering behaviour.
 */
enum nsPopupLevel {
  // the popup appears just above its parent and maintains its position
  // relative to the parent
  ePopupLevelParent,
  // the popup is a floating popup used for tool palettes. A parent window
  // must be specified, but a platform implementation need not use this.
  // On Windows, floating is generally equivalent to parent. On Mac, floating
  // puts the popup at toplevel, but it will hide when the application is deactivated
  ePopupLevelFloating,
  // the popup appears on top of other windows, including those of other applications
  ePopupLevelTop
};

/**
 * Border styles
 */
enum nsBorderStyle {
  eBorderStyle_none     = 0,      // no border, titlebar, etc.. opposite of
                                  // all
  eBorderStyle_all      = 1 << 0, // all window decorations
  eBorderStyle_border   = 1 << 1, // enables the border on the window. these
                                  // are only for decoration and are not
                                  // resize handles
  eBorderStyle_resizeh  = 1 << 2, // enables the resize handles for the
                                  // window. if this is set, border is
                                  // implied to also be set
  eBorderStyle_title    = 1 << 3, // enables the titlebar for the window
  eBorderStyle_menu     = 1 << 4, // enables the window menu button on the
                                  // title bar. this being on should force
                                  // the title bar to display
  eBorderStyle_minimize = 1 << 5, // enables the minimize button so the user
                                  // can minimize the window. turned off for
                                  // tranient windows since they can not be
                                  // minimized separate from their parent
  eBorderStyle_maximize = 1 << 6, // enables the maxmize button so the user
                                  // can maximize the window
  eBorderStyle_close    = 1 << 7, // show the close button
  eBorderStyle_default  = -1      // whatever the OS wants... i.e. don't do
                                  // anything
};

/**
 * Basic struct for widget initialization data.
 * @see Create member function of nsIWidget
 */

struct nsWidgetInitData {
  nsWidgetInitData() :
      mWindowType(eWindowType_child),
      mBorderStyle(eBorderStyle_default),
      mPopupHint(ePopupTypePanel),
      mPopupLevel(ePopupLevelTop),
      mScreenId(0),
      clipChildren(false),
      clipSiblings(false),
      mDropShadow(false),
      mListenForResizes(false),
      mUnicode(true),
      mRTL(false),
      mNoAutoHide(false),
      mIsDragPopup(false),
      mIsAnimationSuppressed(false),
      mSupportTranslucency(false),
      mMouseTransparent(false)
  {
  }

  nsWindowType  mWindowType;
  nsBorderStyle mBorderStyle;
  nsPopupType   mPopupHint;
  nsPopupLevel  mPopupLevel;
  // B2G multi-screen support. Screen ID is for differentiating screens of
  // windows, and due to the hardware limitation, it is platform-specific for
  // now, which align with the value of display type defined in HWC.
  uint32_t      mScreenId;
  // when painting exclude area occupied by child windows and sibling windows
  bool          clipChildren, clipSiblings, mDropShadow;
  bool          mListenForResizes;
  bool          mUnicode;
  bool          mRTL;
  bool          mNoAutoHide; // true for noautohide panels
  bool          mIsDragPopup;  // true for drag feedback panels
  // true if window creation animation is suppressed, e.g. for session restore
  bool          mIsAnimationSuppressed;
  // true if the window should support an alpha channel, if available.
  bool          mSupportTranslucency;
  // true if the window should be transparent to mouse events. Currently this is
  // only valid for eWindowType_popup widgets
  bool          mMouseTransparent;
};

#endif // nsWidgetInitData_h__