diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-12 20:38:01 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-12 20:38:01 +0000 |
commit | 3cd198a2911ac90e70e50b4c5e34ee3982ea9769 (patch) | |
tree | 5aeb1cfb14fd64d76320425c3a076fc07c0c427d | |
parent | 349f10bc01e0062c55d60a861972bac252cfb7ce (diff) | |
download | chromium_src-3cd198a2911ac90e70e50b4c5e34ee3982ea9769.zip chromium_src-3cd198a2911ac90e70e50b4c5e34ee3982ea9769.tar.gz chromium_src-3cd198a2911ac90e70e50b4c5e34ee3982ea9769.tar.bz2 |
Basic skeleton of a window/layer/view inspector.
Ctrl+Shift+F1 brings it up.
http://crbug.com/97266
TEST=none
Review URL: https://chromiumcodereview.appspot.com/9662022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@126207 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | ash/accelerators/accelerator_controller.cc | 7 | ||||
-rw-r--r-- | ash/accelerators/accelerator_table.cc | 1 | ||||
-rw-r--r-- | ash/accelerators/accelerator_table.h | 1 | ||||
-rw-r--r-- | ash/ash.gyp | 1 | ||||
-rw-r--r-- | ash/ash_switches.cc | 3 | ||||
-rw-r--r-- | ash/ash_switches.h | 1 | ||||
-rw-r--r-- | build/all.gyp | 1 | ||||
-rw-r--r-- | chrome/app/generated_resources.grd | 6 | ||||
-rw-r--r-- | chrome/browser/about_flags.cc | 7 | ||||
-rw-r--r-- | ui/oak/oak.gyp | 40 | ||||
-rw-r--r-- | ui/oak/oak.h | 18 | ||||
-rw-r--r-- | ui/oak/oak_aura_window_display.cc | 0 | ||||
-rw-r--r-- | ui/oak/oak_aura_window_display.h | 0 | ||||
-rw-r--r-- | ui/oak/oak_export.h | 29 | ||||
-rw-r--r-- | ui/oak/oak_layer_display.cc | 0 | ||||
-rw-r--r-- | ui/oak/oak_layer_display.h | 0 | ||||
-rw-r--r-- | ui/oak/oak_tree_model.cc | 39 | ||||
-rw-r--r-- | ui/oak/oak_tree_model.h | 28 | ||||
-rw-r--r-- | ui/oak/oak_views_view_display.cc | 0 | ||||
-rw-r--r-- | ui/oak/oak_views_view_display.h | 0 | ||||
-rw-r--r-- | ui/oak/oak_views_widget_display.cc | 0 | ||||
-rw-r--r-- | ui/oak/oak_views_widget_display.h | 0 | ||||
-rw-r--r-- | ui/oak/oak_window.cc | 156 | ||||
-rw-r--r-- | ui/oak/oak_window.h | 62 | ||||
-rw-r--r-- | ui/resources/ui_resources.grd | 2 |
25 files changed, 402 insertions, 0 deletions
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc index f05d25b..0eb7ce8 100644 --- a/ash/accelerators/accelerator_controller.cc +++ b/ash/accelerators/accelerator_controller.cc @@ -5,6 +5,7 @@ #include "ash/accelerators/accelerator_controller.h" #include "ash/accelerators/accelerator_table.h" +#include "ash/ash_switches.h" #include "ash/caps_lock_delegate.h" #include "ash/ime_control_delegate.h" #include "ash/launcher/launcher.h" @@ -17,6 +18,7 @@ #include "ash/volume_control_delegate.h" #include "ash/wm/window_cycle_controller.h" #include "ash/wm/window_util.h" +#include "base/command_line.h" #include "ui/aura/event.h" #include "ui/aura/root_window.h" #include "ui/base/accelerators/accelerator.h" @@ -25,6 +27,7 @@ #include "ui/gfx/compositor/layer_animation_sequence.h" #include "ui/gfx/compositor/layer_animator.h" #include "ui/gfx/compositor/screen_rotation.h" +#include "ui/oak/oak.h" namespace { @@ -260,6 +263,10 @@ bool AcceleratorController::AcceleratorPressed( if (volume_control_delegate_.get()) return volume_control_delegate_->HandleVolumeUp(accelerator); break; + case SHOW_OAK: + if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshEnableOak)) + oak::ShowOakWindow(); + break; case NEXT_IME: if (ime_control_delegate_.get()) return ime_control_delegate_->HandleNextIme(); diff --git a/ash/accelerators/accelerator_table.cc b/ash/accelerators/accelerator_table.cc index e6efc5c..ba9ed05 100644 --- a/ash/accelerators/accelerator_table.cc +++ b/ash/accelerators/accelerator_table.cc @@ -67,6 +67,7 @@ const AcceleratorData kAcceleratorData[] = { { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F10, false, false, false, VOLUME_UP }, { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_VOLUME_UP, false, false, false, VOLUME_UP }, + { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F1, true, true, false, SHOW_OAK }, #if !defined(NDEBUG) { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_HOME, false, true, false, ROTATE_SCREEN }, diff --git a/ash/accelerators/accelerator_table.h b/ash/accelerators/accelerator_table.h index 97f7a53..31f5a70 100644 --- a/ash/accelerators/accelerator_table.h +++ b/ash/accelerators/accelerator_table.h @@ -26,6 +26,7 @@ enum AcceleratorAction { VOLUME_DOWN, VOLUME_MUTE, VOLUME_UP, + SHOW_OAK, #if defined(OS_CHROMEOS) LOCK_SCREEN, #endif diff --git a/ash/ash.gyp b/ash/ash.gyp index bb0a1c1..e9fdd49 100644 --- a/ash/ash.gyp +++ b/ash/ash.gyp @@ -25,6 +25,7 @@ '../ui/aura/aura.gyp:aura', '../ui/base/strings/ui_strings.gyp:ui_strings', '../ui/gfx/compositor/compositor.gyp:compositor', + '../ui/oak/oak.gyp:oak', '../ui/ui.gyp:ui', '../ui/ui.gyp:ui_resources', '../ui/ui.gyp:ui_resources_standard', diff --git a/ash/ash_switches.cc b/ash/ash_switches.cc index 88f3a3a..42feeb0 100644 --- a/ash/ash_switches.cc +++ b/ash/ash_switches.cc @@ -10,6 +10,9 @@ namespace switches { // Use the in-progress uber system tray. const char kAshUberTray[] = "ash-uber-tray"; +// Enables the Oak tree viewer. +const char kAshEnableOak[] = "ash-enable-oak"; + // Use Google-style dialog box frames. const char kAuraGoogleDialogFrames[] = "aura-google-dialog-frames"; diff --git a/ash/ash_switches.h b/ash/ash_switches.h index 7f85ef9..755f8db 100644 --- a/ash/ash_switches.h +++ b/ash/ash_switches.h @@ -17,6 +17,7 @@ namespace switches { // Please keep alphabetized. ASH_EXPORT extern const char kAshUberTray[]; +ASH_EXPORT extern const char kAshEnableOak[]; ASH_EXPORT extern const char kAuraGoogleDialogFrames[]; ASH_EXPORT extern const char kAuraLegacyPowerButton[]; ASH_EXPORT extern const char kAuraNoShadows[]; diff --git a/build/all.gyp b/build/all.gyp index 24c8e1f..737f048 100644 --- a/build/all.gyp +++ b/build/all.gyp @@ -133,6 +133,7 @@ ['use_aura==1', { 'dependencies': [ '../ui/aura/aura.gyp:*', + '../ui/oak/oak.gyp:*', '../ash/ash.gyp:*', ], }], diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 425faef..07a1232 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -5227,6 +5227,12 @@ Keep your key file in a safe place. You will need it to create new versions of y <message name="IDS_FLAGS_ENABLE_ASH_UBER_TRAY_DESCRIPTION" desc="Description of the flag to enable the uber tray in ash."> Enables the in-progress uber tray for ash. Replaces the existing status view. </message> + <message name="IDS_FLAGS_ENABLE_ASH_OAK_NAME" desc="Name of the flag to enable the oak tree viewer in ash."> + Enable Oak. + </message> + <message name="IDS_FLAGS_ENABLE_ASH_OAK_DESCRIPTION" desc="Description of the flag to enable the oak tree viewer in ash."> + Enables the Oak tree viewer in ash. Allows inspection of window, layer and view hierarchies and their properties. Press Ctrl+Shift+F1 to access. + </message> <message name="IDS_FLAGS_ENABLE_DEVTOOLS_EXPERIMENTS_NAME" desc="Name for the flag to enable experiments in Developer Tools"> Enable Developer Tools experiments. </message> diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 5913857..dc0b46f 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc @@ -582,6 +582,13 @@ const Experiment kExperiments[] = { kOsAll, SINGLE_VALUE_TYPE(ash::switches::kAshUberTray), }, + { + "enable-ash-oak", + IDS_FLAGS_ENABLE_ASH_OAK_NAME, + IDS_FLAGS_ENABLE_ASH_OAK_DESCRIPTION, + kOsAll, + SINGLE_VALUE_TYPE(ash::switches::kAshEnableOak), + }, #endif { "enable-devtools-experiments", diff --git a/ui/oak/oak.gyp b/ui/oak/oak.gyp new file mode 100644 index 0000000..2051845 --- /dev/null +++ b/ui/oak/oak.gyp @@ -0,0 +1,40 @@ +# Copyright (c) 2012 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'variables': { + 'chromium_code': 1, + }, + + 'targets': [ + { + 'target_name': 'oak', + 'type': 'static_library', + 'dependencies': [ + '../../base/base.gyp:base', + '../../base/base.gyp:base_i18n', + '../../build/temp_gyp/googleurl.gyp:googleurl', + '../../skia/skia.gyp:skia', + '../aura/aura.gyp:aura', + '../gfx/compositor/compositor.gyp:compositor', + '../ui.gyp:ui', + '../ui.gyp:ui_resources', + '../ui.gyp:ui_resources_standard', + '../views/views.gyp:views', + ], + 'defines': [ + 'OAK_IMPLEMENTATION', + ], + 'sources': [ + # All .cc, .h under oak, except unittests + 'oak.h', + 'oak_export.h', + 'oak_tree_model.cc', + 'oak_tree_model.h', + 'oak_window.cc', + 'oak_window.h', + ], + }, + ], +} diff --git a/ui/oak/oak.h b/ui/oak/oak.h new file mode 100644 index 0000000..47af72e --- /dev/null +++ b/ui/oak/oak.h @@ -0,0 +1,18 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_OAK_OAK_WINDOW_H_ +#define ASH_OAK_OAK_WINDOW_H_ +#pragma once + +#include "ui/oak/oak_export.h" + +namespace oak { + +// Shows the Oak window. Refocuses an existing one. +void ShowOakWindow(); + +} // namespace oak + +#endif // ASH_OAK_OAK_WINDOW_H_ diff --git a/ui/oak/oak_aura_window_display.cc b/ui/oak/oak_aura_window_display.cc new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ui/oak/oak_aura_window_display.cc diff --git a/ui/oak/oak_aura_window_display.h b/ui/oak/oak_aura_window_display.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ui/oak/oak_aura_window_display.h diff --git a/ui/oak/oak_export.h b/ui/oak/oak_export.h new file mode 100644 index 0000000..c769ed1 --- /dev/null +++ b/ui/oak/oak_export.h @@ -0,0 +1,29 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_OAK_OAK_EXPORT_H_ +#define UI_OAK_OAK_EXPORT_H_ +#pragma once + +// Defines AURA_EXPORT so that functionality implemented by the aura module +// can be exported to consumers. + +#if defined(COMPONENT_BUILD) +#if defined(WIN32) + +#if defined(OAK_IMPLEMENTATION) +#define OAK_EXPORT __declspec(dllexport) +#else +#define OAK_EXPORT __declspec(dllimport) +#endif // defined(OAK_IMPLEMENTATION) + +#else // defined(WIN32) +#define OAK_EXPORT __attribute__((visibility("default"))) +#endif + +#else // defined(COMPONENT_BUILD) +#define OAK_EXPORT +#endif + +#endif // UI_OAK_OAK_EXPORT_H_ diff --git a/ui/oak/oak_layer_display.cc b/ui/oak/oak_layer_display.cc new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ui/oak/oak_layer_display.cc diff --git a/ui/oak/oak_layer_display.h b/ui/oak/oak_layer_display.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ui/oak/oak_layer_display.h diff --git a/ui/oak/oak_tree_model.cc b/ui/oak/oak_tree_model.cc new file mode 100644 index 0000000..ff67ee5 --- /dev/null +++ b/ui/oak/oak_tree_model.cc @@ -0,0 +1,39 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/oak/oak_tree_model.h" + +#include "base/utf_string_conversions.h" +#include "ui/aura/root_window.h" +#include "ui/aura/window.h" +#include "ui/base/models/tree_node_model.h" + +namespace oak { +namespace internal { + +string16 GetNodeTitleForWindow(aura::Window* window) { + std::string window_name = window->name(); + if (window_name.empty()) + window_name.append("Unnamed window"); + return ASCIIToUTF16(window_name); +} + +void AddChildWindows(aura::Window* parent_window, WindowNode* parent_node) { + aura::Window::Windows::const_iterator it = parent_window->children().begin(); + for (; it != parent_window->children().end(); ++it) { + WindowNode* child_node = new WindowNode(GetNodeTitleForWindow(*it), *it); + parent_node->Add(child_node, parent_node->child_count()); + AddChildWindows(*it, child_node); + } +} + +TreeOfWindows* GenerateModel(aura::Window* root) { + WindowNode* root_node = new WindowNode(GetNodeTitleForWindow(root), root); + TreeOfWindows* tree = new TreeOfWindows(root_node); + AddChildWindows(root, root_node); + return tree; +} + +} // namespace internal +} // namespace oak diff --git a/ui/oak/oak_tree_model.h b/ui/oak/oak_tree_model.h new file mode 100644 index 0000000..ee62b85 --- /dev/null +++ b/ui/oak/oak_tree_model.h @@ -0,0 +1,28 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_OAK_OAK_TREE_MODEL_H_ +#define UI_OAK_OAK_TREE_MODEL_H_ +#pragma once + +#include "base/compiler_specific.h" +#include "base/memory/scoped_ptr.h" +#include "ui/base/models/tree_node_model.h" + +namespace aura { +class Window; +} + +namespace oak { +namespace internal { + +typedef ui::TreeNodeWithValue<aura::Window*> WindowNode; +typedef ui::TreeNodeModel<WindowNode> TreeOfWindows; + +TreeOfWindows* GenerateModel(aura::Window* root); + +} // namespace internal +} // namespace oak + +#endif // UI_OAK_OAK_TREE_MODEL_H_ diff --git a/ui/oak/oak_views_view_display.cc b/ui/oak/oak_views_view_display.cc new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ui/oak/oak_views_view_display.cc diff --git a/ui/oak/oak_views_view_display.h b/ui/oak/oak_views_view_display.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ui/oak/oak_views_view_display.h diff --git a/ui/oak/oak_views_widget_display.cc b/ui/oak/oak_views_widget_display.cc new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ui/oak/oak_views_widget_display.cc diff --git a/ui/oak/oak_views_widget_display.h b/ui/oak/oak_views_widget_display.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ui/oak/oak_views_widget_display.h diff --git a/ui/oak/oak_window.cc b/ui/oak/oak_window.cc new file mode 100644 index 0000000..af4736d --- /dev/null +++ b/ui/oak/oak_window.cc @@ -0,0 +1,156 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/oak/oak_window.h" + +#include "base/utf_string_conversions.h" +#include "grit/ui_resources.h" +#include "ui/aura/root_window.h" +#include "ui/base/resource/resource_bundle.h" +#include "ui/gfx/canvas.h" +#include "ui/gfx/image/image.h" +#include "ui/views/controls/tree/tree_view.h" +#include "ui/views/layout/layout_constants.h" +#include "ui/views/widget/widget.h" + +namespace oak { +namespace internal { +namespace { + +const SkColor kBorderColor = SkColorSetRGB(0xCC, 0xCC, 0xCC); + +class DetailsView : public views::View { + public: + DetailsView() {} + virtual ~DetailsView() {} + + // Overridden from views::View: + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { + canvas->sk_canvas()->drawColor(SK_ColorYELLOW); + } + + private: + DISALLOW_COPY_AND_ASSIGN(DetailsView); +}; + +} // namespace + +// static +views::Widget* OakWindow::instance = NULL; + +//////////////////////////////////////////////////////////////////////////////// +// OakWindow, public: + +OakWindow::OakWindow() : tree_(NULL), tree_container_(NULL), details_(NULL) { +} + +OakWindow::~OakWindow() { + // The tree needs to be destroyed before the model. + tree_.reset(); +} + +//////////////////////////////////////////////////////////////////////////////// +// OakWindow, views::WidgetDelegateView implementation: + +bool OakWindow::CanResize() const { + return true; +} + +bool OakWindow::CanMaximize() const { + return true; +} + +string16 OakWindow::GetWindowTitle() const { + return ASCIIToUTF16("Oak"); +} + +views::View* OakWindow::GetContentsView() { + return this; +} + +SkBitmap OakWindow::GetWindowIcon() { + ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); + return *rb.GetImageNamed(IDR_OAK).ToSkBitmap(); +} + +bool OakWindow::ShouldShowWindowIcon() const { + return true; +} + +void OakWindow::DeleteDelegate() { + instance = NULL; +} + +//////////////////////////////////////////////////////////////////////////////// +// OakWindow, views::View overrides: + +void OakWindow::OnPaint(gfx::Canvas* canvas) { + canvas->sk_canvas()->drawColor(SK_ColorWHITE); + canvas->FillRect(separator_rect_, kBorderColor); +} + +void OakWindow::ViewHierarchyChanged(bool is_add, + views::View* parent, + views::View* child) { + if (is_add && child == this) + Init(); +} + +void OakWindow::Layout() { + gfx::Rect content_bounds = GetLocalBounds(); + content_bounds.Inset(views::kPanelHorizMargin, views::kPanelVertMargin); + + int tree_height = + (content_bounds.height() / 2) - views::kUnrelatedControlVerticalSpacing; + gfx::Rect tree_bounds = content_bounds; + tree_bounds.set_height(tree_height); + tree_container_->SetBoundsRect(tree_bounds); + + separator_rect_ = content_bounds; + separator_rect_.set_y( + tree_bounds.bottom() + views::kRelatedControlVerticalSpacing); + separator_rect_.set_height(1); + + gfx::Rect details_bounds = content_bounds; + details_bounds.set_y( + separator_rect_.bottom() + views::kRelatedControlVerticalSpacing); + details_bounds.set_height(content_bounds.bottom() - details_bounds.y()); + details_->SetBoundsRect(details_bounds); +} + +//////////////////////////////////////////////////////////////////////////////// +// OakWindow, views::TreeViewController implementation: + +void OakWindow::OnTreeViewSelectionChanged(views::TreeView* tree) { + NOTIMPLEMENTED(); +} + +//////////////////////////////////////////////////////////////////////////////// +// OakWindow, private: + +void OakWindow::Init() { + tree_model_.reset( + GenerateModel(GetWidget()->GetNativeView()->GetRootWindow())); + tree_.reset(new views::TreeView); + tree_->set_parent_owned(false); + tree_->SetController(this); + tree_->SetModel(tree_model_.get()); + tree_container_ = tree_->CreateParentIfNecessary(); + AddChildView(tree_container_); + details_ = new DetailsView; + AddChildView(details_); +} + +} // namespace internal + +void ShowOakWindow() { + if (!internal::OakWindow::instance) { + internal::OakWindow::instance = + views::Widget::CreateWindowWithBounds(new internal::OakWindow, + gfx::Rect(10, 10, 500, 500)); + } + internal::OakWindow::instance->Show(); +} + +} // namespace oak diff --git a/ui/oak/oak_window.h b/ui/oak/oak_window.h new file mode 100644 index 0000000..2406a66 --- /dev/null +++ b/ui/oak/oak_window.h @@ -0,0 +1,62 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_OAK_OAK_WINDOW_H_ +#define UI_OAK_OAK_WINDOW_H_ +#pragma once + +#include "ui/oak/oak_tree_model.h" +#include "ui/views/controls/tree/tree_view_controller.h" +#include "ui/views/widget/widget_delegate.h" + +namespace oak { +namespace internal { + +class OakTreeModel; + +class OakWindow : public views::WidgetDelegateView, + public views::TreeViewController { + public: + OakWindow(); + virtual ~OakWindow(); + + static views::Widget* instance; + + // Overridden from views::WidgetDelegateView: + virtual bool CanResize() const OVERRIDE; + virtual bool CanMaximize() const OVERRIDE; + virtual string16 GetWindowTitle() const OVERRIDE; + virtual views::View* GetContentsView() OVERRIDE; + virtual SkBitmap GetWindowIcon() OVERRIDE; + virtual bool ShouldShowWindowIcon() const OVERRIDE; + virtual void DeleteDelegate() OVERRIDE; + + private: + // Overridden from views::View: + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; + virtual void ViewHierarchyChanged(bool is_add, + views::View* parent, + views::View* child) OVERRIDE; + virtual void Layout() OVERRIDE; + + // Overridden from views::TreeViewController: + virtual void OnTreeViewSelectionChanged(views::TreeView* tree) OVERRIDE; + + void Init(); + + scoped_ptr<views::TreeView> tree_; + scoped_ptr<TreeOfWindows> tree_model_; + views::View* tree_container_; + + gfx::Rect separator_rect_; + + views::View* details_; + + DISALLOW_COPY_AND_ASSIGN(OakWindow); +}; + +} // namespace internal +} // namespace oak + +#endif // UI_OAK_OAK_WINDOW_H_ diff --git a/ui/resources/ui_resources.grd b/ui/resources/ui_resources.grd index 39a69dd..c7e9572 100644 --- a/ui/resources/ui_resources.grd +++ b/ui/resources/ui_resources.grd @@ -228,6 +228,8 @@ <include name="IDR_AURA_UBER_TRAY_BRIGHTNESS" file="aura/status_brightness.png" type="BINDATA" /> <include name="IDR_AURA_UBER_TRAY_SETTINGS" file="aura/status_settings.png" type="BINDATA" /> <include name="IDR_AURA_UBER_TRAY_POWER_SMALL" file="aura/status_power_small_all.png" type="BINDATA" /> + + <include name="IDR_OAK" file="oak.png" type="BINDATA"/> </if> </includes> </release> |