Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(427)

Side by Side Diff: ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc

Issue 1429083002: gl_surface_egl: ensure off and on screen surfaces use the same EGLConfig (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h" 5 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
6 6
7 #include <X11/extensions/shape.h> 7 #include <X11/extensions/shape.h>
8 #include <X11/extensions/XInput2.h> 8 #include <X11/extensions/XInput2.h>
9 #include <X11/Xatom.h> 9 #include <X11/Xatom.h>
10 #include <X11/Xregion.h> 10 #include <X11/Xregion.h>
11 #include <X11/Xutil.h> 11 #include <X11/Xutil.h>
12 12
13 #include "base/basictypes.h" 13 #include "base/basictypes.h"
14 #include "base/command_line.h" 14 #include "base/command_line.h"
15 #include "base/strings/stringprintf.h" 15 #include "base/strings/stringprintf.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "base/trace_event/trace_event.h" 17 #include "base/trace_event/trace_event.h"
18 #include "third_party/skia/include/core/SkPath.h" 18 #include "third_party/skia/include/core/SkPath.h"
19 #include "ui/aura/client/cursor_client.h" 19 #include "ui/aura/client/cursor_client.h"
20 #include "ui/aura/client/focus_client.h" 20 #include "ui/aura/client/focus_client.h"
21 #include "ui/aura/window.h" 21 #include "ui/aura/window.h"
22 #include "ui/aura/window_event_dispatcher.h" 22 #include "ui/aura/window_event_dispatcher.h"
23 #include "ui/aura/window_property.h" 23 #include "ui/aura/window_property.h"
24 #include "ui/base/dragdrop/os_exchange_data_provider_aurax11.h" 24 #include "ui/base/dragdrop/os_exchange_data_provider_aurax11.h"
25 #include "ui/base/hit_test.h" 25 #include "ui/base/hit_test.h"
26 #include "ui/base/ime/input_method.h" 26 #include "ui/base/ime/input_method.h"
27 #include "ui/base/x/x11_util.h" 27 #include "ui/base/x/x11_util.h"
28 #include "ui/base/x/x11_util_internal.h"
28 #include "ui/events/devices/x11/device_data_manager_x11.h" 29 #include "ui/events/devices/x11/device_data_manager_x11.h"
29 #include "ui/events/devices/x11/device_list_cache_x11.h" 30 #include "ui/events/devices/x11/device_list_cache_x11.h"
30 #include "ui/events/devices/x11/touch_factory_x11.h" 31 #include "ui/events/devices/x11/touch_factory_x11.h"
31 #include "ui/events/event_utils.h" 32 #include "ui/events/event_utils.h"
32 #include "ui/events/null_event_targeter.h" 33 #include "ui/events/null_event_targeter.h"
33 #include "ui/events/platform/platform_event_source.h" 34 #include "ui/events/platform/platform_event_source.h"
34 #include "ui/events/platform/x11/x11_event_source.h" 35 #include "ui/events/platform/x11/x11_event_source.h"
35 #include "ui/gfx/display.h" 36 #include "ui/gfx/display.h"
36 #include "ui/gfx/geometry/insets.h" 37 #include "ui/gfx/geometry/insets.h"
37 #include "ui/gfx/geometry/size_conversions.h" 38 #include "ui/gfx/geometry/size_conversions.h"
(...skipping 1072 matching lines...) Expand 10 before | Expand all | Expand 10 after
1110 swa.override_redirect = True; 1111 swa.override_redirect = True;
1111 window_type = atom_cache_.GetAtom("_NET_WM_WINDOW_TYPE_DND"); 1112 window_type = atom_cache_.GetAtom("_NET_WM_WINDOW_TYPE_DND");
1112 break; 1113 break;
1113 default: 1114 default:
1114 window_type = atom_cache_.GetAtom("_NET_WM_WINDOW_TYPE_NORMAL"); 1115 window_type = atom_cache_.GetAtom("_NET_WM_WINDOW_TYPE_NORMAL");
1115 break; 1116 break;
1116 } 1117 }
1117 if (swa.override_redirect) 1118 if (swa.override_redirect)
1118 attribute_mask |= CWOverrideRedirect; 1119 attribute_mask |= CWOverrideRedirect;
1119 1120
1120 // Detect whether we're running inside a compositing manager. If so, try to 1121 Visual* visual;
1121 // use the ARGB visual. Otherwise, just use our parent's visual. 1122 int depth;
1122 Visual* visual = CopyFromParent; 1123 ui::ChooseVisualForWindow(&visual, &depth);
1123 int depth = CopyFromParent; 1124 if (depth == 32) {
1124 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 1125 attribute_mask |= CWColormap;
1125 switches::kEnableTransparentVisuals) && 1126 swa.colormap =
1126 XGetSelectionOwner(xdisplay_, atom_cache_.GetAtom("_NET_WM_CM_S0")) != 1127 XCreateColormap(xdisplay_, x_root_window_, visual, AllocNone);
1127 None) {
1128 Visual* rgba_visual = GetARGBVisual();
1129 if (rgba_visual) {
1130 visual = rgba_visual;
1131 depth = 32;
1132 1128
1133 attribute_mask |= CWColormap; 1129 // x.org will BadMatch if we don't set a border when the depth isn't the
1134 swa.colormap = XCreateColormap(xdisplay_, x_root_window_, visual, 1130 // same as the parent depth.
1135 AllocNone); 1131 attribute_mask |= CWBorderPixel;
1132 swa.border_pixel = 0;
1136 1133
1137 // x.org will BadMatch if we don't set a border when the depth isn't the 1134 use_argb_visual_ = true;
1138 // same as the parent depth.
1139 attribute_mask |= CWBorderPixel;
1140 swa.border_pixel = 0;
1141
1142 use_argb_visual_ = true;
1143 }
1144 } 1135 }
1145 1136
1146 bounds_in_pixels_ = ToPixelRect(params.bounds); 1137 bounds_in_pixels_ = ToPixelRect(params.bounds);
1147 bounds_in_pixels_.set_size(AdjustSize(bounds_in_pixels_.size())); 1138 bounds_in_pixels_.set_size(AdjustSize(bounds_in_pixels_.size()));
1148 xwindow_ = XCreateWindow(xdisplay_, x_root_window_, bounds_in_pixels_.x(), 1139 xwindow_ = XCreateWindow(xdisplay_, x_root_window_, bounds_in_pixels_.x(),
1149 bounds_in_pixels_.y(), bounds_in_pixels_.width(), 1140 bounds_in_pixels_.y(), bounds_in_pixels_.width(),
1150 bounds_in_pixels_.height(), 1141 bounds_in_pixels_.height(),
1151 0, // border width 1142 0, // border width
1152 depth, InputOutput, visual, attribute_mask, &swa); 1143 depth, InputOutput, visual, attribute_mask, &swa);
1153 if (ui::PlatformEventSource::GetInstance()) 1144 if (ui::PlatformEventSource::GetInstance())
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
1612 data->push_back(height); 1603 data->push_back(height);
1613 1604
1614 const SkBitmap& bitmap = rep.sk_bitmap(); 1605 const SkBitmap& bitmap = rep.sk_bitmap();
1615 SkAutoLockPixels locker(bitmap); 1606 SkAutoLockPixels locker(bitmap);
1616 1607
1617 for (int y = 0; y < height; ++y) 1608 for (int y = 0; y < height; ++y)
1618 for (int x = 0; x < width; ++x) 1609 for (int x = 0; x < width; ++x)
1619 data->push_back(bitmap.getColor(x, y)); 1610 data->push_back(bitmap.getColor(x, y));
1620 } 1611 }
1621 1612
1622 Visual* DesktopWindowTreeHostX11::GetARGBVisual() {
1623 XVisualInfo visual_template;
1624 visual_template.screen = 0;
1625
1626 int visuals_len;
1627 gfx::XScopedPtr<XVisualInfo[]> visual_list(XGetVisualInfo(
1628 xdisplay_, VisualScreenMask, &visual_template, &visuals_len));
1629 for (int i = 0; i < visuals_len; ++i) {
1630 // Why support only 8888 ARGB? Because it's all that GTK+ supports. In
1631 // gdkvisual-x11.cc, they look for this specific visual and use it for all
1632 // their alpha channel using needs.
1633 //
1634 // TODO(erg): While the following does find a valid visual, some GL drivers
1635 // don't believe that this has an alpha channel. According to marcheu@,
1636 // this should work on open source driver though. (It doesn't work with
1637 // NVidia's binaries currently.) http://crbug.com/369209
1638 const XVisualInfo& info = visual_list[i];
1639 if (info.depth == 32 && info.visual->red_mask == 0xff0000 &&
1640 info.visual->green_mask == 0x00ff00 &&
1641 info.visual->blue_mask == 0x0000ff) {
1642 return info.visual;
1643 }
1644 }
1645
1646 return nullptr;
1647 }
1648
1649 std::list<XID>& DesktopWindowTreeHostX11::open_windows() { 1613 std::list<XID>& DesktopWindowTreeHostX11::open_windows() {
1650 if (!open_windows_) 1614 if (!open_windows_)
1651 open_windows_ = new std::list<XID>(); 1615 open_windows_ = new std::list<XID>();
1652 return *open_windows_; 1616 return *open_windows_;
1653 } 1617 }
1654 1618
1655 void DesktopWindowTreeHostX11::MapWindow(ui::WindowShowState show_state) { 1619 void DesktopWindowTreeHostX11::MapWindow(ui::WindowShowState show_state) {
1656 if (show_state != ui::SHOW_STATE_DEFAULT && 1620 if (show_state != ui::SHOW_STATE_DEFAULT &&
1657 show_state != ui::SHOW_STATE_NORMAL && 1621 show_state != ui::SHOW_STATE_NORMAL &&
1658 show_state != ui::SHOW_STATE_INACTIVE && 1622 show_state != ui::SHOW_STATE_INACTIVE &&
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after
2089 if (linux_ui) { 2053 if (linux_ui) {
2090 ui::NativeTheme* native_theme = linux_ui->GetNativeTheme(window); 2054 ui::NativeTheme* native_theme = linux_ui->GetNativeTheme(window);
2091 if (native_theme) 2055 if (native_theme)
2092 return native_theme; 2056 return native_theme;
2093 } 2057 }
2094 2058
2095 return ui::NativeTheme::instance(); 2059 return ui::NativeTheme::instance();
2096 } 2060 }
2097 2061
2098 } // namespace views 2062 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698