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
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_QT_QT_UI_H_
#define UI_QT_QT_UI_H_
#include <memory>
#include "base/component_export.h"
#include "base/memory/weak_ptr.h"
#include "printing/buildflags/buildflags.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/color/color_provider.h"
#include "ui/color/color_provider_key.h"
#include "ui/gfx/font_render_params.h"
#include "ui/linux/linux_ui.h"
#include "ui/qt/qt_interface.h"
#if BUILDFLAG(ENABLE_PRINTING)
#include "printing/printing_context_linux.h" // nogncheck
#endif
namespace qt {
class QtNativeTheme;
// Interface to QT desktop features.
class QtUi : public ui::LinuxUiAndTheme, QtInterface::Delegate {
public:
explicit QtUi(ui::LinuxUi* fallback_linux_ui);
QtUi(const QtUi&) = delete;
QtUi& operator=(const QtUi&) = delete;
~QtUi() override;
// ui::LinuxUi:
bool Initialize() override;
base::TimeDelta GetCursorBlinkInterval() const override;
gfx::Image GetIconForContentType(const std::string& content_type,
int size,
float scale) const override;
base::flat_map<std::string, std::string> GetKeyboardLayoutMap() override;
#if BUILDFLAG(ENABLE_PRINTING)
printing::PrintDialogLinuxInterface* CreatePrintDialog(
printing::PrintingContextLinux* context) override;
gfx::Size GetPdfPaperSize(printing::PrintingContextLinux* context) override;
#endif
ui::SelectFileDialog* CreateSelectFileDialog(
void* listener,
std::unique_ptr<ui::SelectFilePolicy> policy) const override;
std::string GetCursorThemeName() override;
int GetCursorThemeSize() override;
std::unique_ptr<ui::LinuxInputMethodContext> CreateInputMethodContext(
ui::LinuxInputMethodContextDelegate* delegate) const override;
bool GetTextEditCommandsForEvent(
const ui::Event& event,
int text_flags,
std::vector<ui::TextEditCommandAuraLinux>* commands) override;
gfx::FontRenderParams GetDefaultFontRenderParams() const override;
void GetDefaultFontDescription(
std::string* family_out,
int* size_pixels_out,
int* style_out,
int* weight_out,
gfx::FontRenderParams* params_out) const override;
bool AnimationsEnabled() const override;
void AddWindowButtonOrderObserver(
ui::WindowButtonOrderObserver* observer) override;
void RemoveWindowButtonOrderObserver(
ui::WindowButtonOrderObserver* observer) override;
WindowFrameAction GetWindowFrameAction(
WindowFrameActionSource source) override;
// ui::LinuxUiTheme:
ui::NativeTheme* GetNativeTheme() const override;
bool GetColor(int id, SkColor* color, bool use_custom_frame) const override;
bool GetDisplayProperty(int id, int* result) const override;
void GetFocusRingColor(SkColor* color) const override;
void GetActiveSelectionBgColor(SkColor* color) const override;
void GetActiveSelectionFgColor(SkColor* color) const override;
void GetInactiveSelectionBgColor(SkColor* color) const override;
void GetInactiveSelectionFgColor(SkColor* color) const override;
bool PreferDarkTheme() const override;
void SetDarkTheme(bool dark) override;
std::unique_ptr<ui::NavButtonProvider> CreateNavButtonProvider() override;
ui::WindowFrameProvider* GetWindowFrameProvider(bool solid_frame) override;
// QtInterface::Delegate:
void FontChanged() override;
void ThemeChanged() override;
void ScaleFactorMaybeChanged() override;
private:
void AddNativeColorMixer(ui::ColorProvider* provider,
const ui::ColorProviderKey& key);
void ScaleFactorMaybeChangedImpl();
absl::optional<SkColor> GetColor(int id, bool use_custom_frame) const;
// TODO(https://crbug.com/1317782): This is a fallback for any unimplemented
// functionality in the QT backend and should eventually be removed.
ui::LinuxUi* const fallback_linux_ui_;
// QT modifies argc and argv, and they must be kept alive while
// `shim_` is alive.
CmdLineArgs cmd_line_;
int qt_version_ = 0;
// Cached default font settings.
std::string font_family_;
int font_size_pixels_ = 0;
int font_size_points_ = 0;
gfx::Font::FontStyle font_style_ = gfx::Font::NORMAL;
int font_weight_;
gfx::FontRenderParams font_params_;
std::unique_ptr<QtInterface> shim_;
std::unique_ptr<QtNativeTheme> native_theme_;
bool scale_factor_task_active_ = false;
base::WeakPtrFactory<QtUi> weak_factory_{this};
};
// This should be the only symbol exported from this component.
COMPONENT_EXPORT(QT)
std::unique_ptr<ui::LinuxUiAndTheme> CreateQtUi(ui::LinuxUi* fallback_linux_ui);
} // namespace qt
#endif // UI_QT_QT_UI_H_
|