blob: 5f5abeeb78372785d57315056fa61fc65a3848a9 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/linux/fallback_linux_ui.h"
#include "base/time/time.h"
#include "ui/base/ime/linux/linux_input_method_context.h"
#include "ui/events/keycodes/dom/dom_keyboard_layout_map.h"
#include "ui/gfx/color_palette.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/image/image.h"
#include "ui/gfx/platform_font.h"
#include "ui/linux/nav_button_provider.h"
#include "ui/native_theme/native_theme.h"
#include "ui/shell_dialogs/select_file_policy.h"
#include "ui/views/controls/textfield/textfield.h"
namespace ui {
FallbackLinuxUi::FallbackLinuxUi() {
gfx::FontRenderParamsQuery query;
query.pixel_size = gfx::PlatformFont::kDefaultBaseFontSize;
query.style = gfx::Font::NORMAL;
query.weight = gfx::Font::Weight::NORMAL;
query.device_scale_factor = GetDeviceScaleFactor();
default_font_render_params_ =
gfx::GetFontRenderParams(query, &default_font_family_);
}
FallbackLinuxUi::~FallbackLinuxUi() = default;
std::unique_ptr<ui::LinuxInputMethodContext>
FallbackLinuxUi::CreateInputMethodContext(
ui::LinuxInputMethodContextDelegate* delegate) const {
// Fallback to FakeInputMethodContext.
return nullptr;
}
gfx::FontRenderParams FallbackLinuxUi::GetDefaultFontRenderParams() const {
return default_font_render_params_;
}
void FallbackLinuxUi::GetDefaultFontDescription(
std::string* family_out,
int* size_pixels_out,
int* style_out,
int* weight_out,
gfx::FontRenderParams* params_out) const {
*family_out = default_font_family_;
*size_pixels_out = gfx::PlatformFont::kDefaultBaseFontSize;
*style_out = gfx::Font::NORMAL;
*weight_out = static_cast<int>(gfx::Font::Weight::NORMAL);
*params_out = GetDefaultFontRenderParams();
}
ui::SelectFileDialog* FallbackLinuxUi::CreateSelectFileDialog(
void* listener,
std::unique_ptr<ui::SelectFilePolicy> policy) const {
// The toolkit select file dialog is a last choice used only when
// the freedesktop portal interface isn't available and the desktop
// isn't KDE. If neither condition is met, a dialog won't be created.
NOTIMPLEMENTED();
return nullptr;
}
bool FallbackLinuxUi::Initialize() {
return true;
}
bool FallbackLinuxUi::GetColor(int id,
SkColor* color,
bool use_custom_frame) const {
return false;
}
bool FallbackLinuxUi::GetDisplayProperty(int id, int* result) const {
return false;
}
void FallbackLinuxUi::GetFocusRingColor(SkColor* color) const {}
void FallbackLinuxUi::GetActiveSelectionBgColor(SkColor* color) const {}
void FallbackLinuxUi::GetActiveSelectionFgColor(SkColor* color) const {}
void FallbackLinuxUi::GetInactiveSelectionBgColor(SkColor* color) const {}
void FallbackLinuxUi::GetInactiveSelectionFgColor(SkColor* color) const {}
base::TimeDelta FallbackLinuxUi::GetCursorBlinkInterval() const {
return views::Textfield::GetCaretBlinkInterval();
}
gfx::Image FallbackLinuxUi::GetIconForContentType(
const std::string& content_type,
int size,
float scale) const {
// Fallback to using generic icons.
return gfx::Image();
}
LinuxUi::WindowFrameAction FallbackLinuxUi::GetWindowFrameAction(
WindowFrameActionSource source) {
switch (source) {
case WindowFrameActionSource::kDoubleClick:
return WindowFrameAction::kToggleMaximize;
case WindowFrameActionSource::kMiddleClick:
return WindowFrameAction::kNone;
case WindowFrameActionSource::kRightClick:
return WindowFrameAction::kMenu;
}
}
float FallbackLinuxUi::GetDeviceScaleFactor() const {
return 1.0f;
}
bool FallbackLinuxUi::PreferDarkTheme() const {
return false;
}
bool FallbackLinuxUi::AnimationsEnabled() const {
return true;
}
void FallbackLinuxUi::AddWindowButtonOrderObserver(
ui::WindowButtonOrderObserver* observer) {}
void FallbackLinuxUi::RemoveWindowButtonOrderObserver(
ui::WindowButtonOrderObserver* observer) {}
std::unique_ptr<ui::NavButtonProvider>
FallbackLinuxUi::CreateNavButtonProvider() {
return nullptr;
}
ui::WindowFrameProvider* FallbackLinuxUi::GetWindowFrameProvider(
bool solid_frame) {
return nullptr;
}
base::flat_map<std::string, std::string>
FallbackLinuxUi::GetKeyboardLayoutMap() {
return ui::GenerateDomKeyboardLayoutMap();
}
std::string FallbackLinuxUi::GetCursorThemeName() {
// This is only used on X11 where QT obtains the cursor theme from XSettings.
// However, ui/base/x/x11_cursor_loader.cc already handles this.
return std::string();
}
int FallbackLinuxUi::GetCursorThemeSize() {
// This is only used on X11 where QT obtains the cursor size from XSettings.
// However, ui/base/x/x11_cursor_loader.cc already handles this.
return 0;
}
ui::NativeTheme* FallbackLinuxUi::GetNativeTheme() const {
return ui::NativeTheme::GetInstanceForNativeUi();
}
bool FallbackLinuxUi::GetTextEditCommandsForEvent(
const ui::Event& event,
std::vector<ui::TextEditCommandAuraLinux>* commands) {
return false;
}
#if BUILDFLAG(ENABLE_PRINTING)
printing::PrintDialogLinuxInterface* FallbackLinuxUi::CreatePrintDialog(
printing::PrintingContextLinux* context) {
// A print dialog won't be created. Chrome's print dialog (Ctrl-P)
// should be used instead of the system (Ctrl-Shift-P) dialog.
NOTIMPLEMENTED();
return nullptr;
}
gfx::Size FallbackLinuxUi::GetPdfPaperSize(
printing::PrintingContextLinux* context) {
return gfx::Size();
}
#endif
} // namespace ui