mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
03394f2857
--HG-- rename : widget/gtk2/Makefile.in => widget/gtk/Makefile.in rename : widget/gtk2/WidgetTraceEvent.cpp => widget/gtk/WidgetTraceEvent.cpp rename : widget/gtk2/compat/gdk/gdkdnd.h => widget/gtk/compat/gdk/gdkdnd.h rename : widget/gtk2/compat/gdk/gdkkeysyms.h => widget/gtk/compat/gdk/gdkkeysyms.h rename : widget/gtk2/compat/gdk/gdkvisual.h => widget/gtk/compat/gdk/gdkvisual.h rename : widget/gtk2/compat/gdk/gdkwindow.h => widget/gtk/compat/gdk/gdkwindow.h rename : widget/gtk2/compat/gdk/gdkx.h => widget/gtk/compat/gdk/gdkx.h rename : widget/gtk2/compat/glib/gmem.h => widget/gtk/compat/glib/gmem.h rename : widget/gtk2/compat/gtk/gtkcolorseldialog.h => widget/gtk/compat/gtk/gtkcolorseldialog.h rename : widget/gtk2/compat/gtk/gtkdialog.h => widget/gtk/compat/gtk/gtkdialog.h rename : widget/gtk2/compat/gtk/gtkplug.h => widget/gtk/compat/gtk/gtkplug.h rename : widget/gtk2/compat/gtk/gtkselection.h => widget/gtk/compat/gtk/gtkselection.h rename : widget/gtk2/compat/gtk/gtkwidget.h => widget/gtk/compat/gtk/gtkwidget.h rename : widget/gtk2/compat/gtk/gtkwindow.h => widget/gtk/compat/gtk/gtkwindow.h rename : widget/gtk2/crashtests/673390-1.html => widget/gtk/crashtests/673390-1.html rename : widget/gtk2/crashtests/crashtests.list => widget/gtk/crashtests/crashtests.list rename : widget/gtk2/gtk2drawing.c => widget/gtk/gtk2drawing.c rename : widget/gtk2/gtk3drawing.c => widget/gtk/gtk3drawing.c rename : widget/gtk2/gtkdrawing.h => widget/gtk/gtkdrawing.h rename : widget/gtk2/maiRedundantObjectFactory.c => widget/gtk/maiRedundantObjectFactory.c rename : widget/gtk2/maiRedundantObjectFactory.h => widget/gtk/maiRedundantObjectFactory.h rename : widget/gtk2/moz.build => widget/gtk/moz.build rename : widget/gtk2/mozcontainer.c => widget/gtk/mozcontainer.c rename : widget/gtk2/mozcontainer.h => widget/gtk/mozcontainer.h rename : widget/gtk2/nsAppShell.cpp => widget/gtk/nsAppShell.cpp rename : widget/gtk2/nsAppShell.h => widget/gtk/nsAppShell.h rename : widget/gtk2/nsBidiKeyboard.cpp => widget/gtk/nsBidiKeyboard.cpp rename : widget/gtk2/nsBidiKeyboard.h => widget/gtk/nsBidiKeyboard.h rename : widget/gtk2/nsCUPSShim.cpp => widget/gtk/nsCUPSShim.cpp rename : widget/gtk2/nsCUPSShim.h => widget/gtk/nsCUPSShim.h rename : widget/gtk2/nsClipboard.cpp => widget/gtk/nsClipboard.cpp rename : widget/gtk2/nsClipboard.h => widget/gtk/nsClipboard.h rename : widget/gtk2/nsColorPicker.cpp => widget/gtk/nsColorPicker.cpp rename : widget/gtk2/nsColorPicker.h => widget/gtk/nsColorPicker.h rename : widget/gtk2/nsDeviceContextSpecG.cpp => widget/gtk/nsDeviceContextSpecG.cpp rename : widget/gtk2/nsDeviceContextSpecG.h => widget/gtk/nsDeviceContextSpecG.h rename : widget/gtk2/nsDragService.cpp => widget/gtk/nsDragService.cpp rename : widget/gtk2/nsDragService.h => widget/gtk/nsDragService.h rename : widget/gtk2/nsFilePicker.cpp => widget/gtk/nsFilePicker.cpp rename : widget/gtk2/nsFilePicker.h => widget/gtk/nsFilePicker.h rename : widget/gtk2/nsGTKToolkit.h => widget/gtk/nsGTKToolkit.h rename : widget/gtk2/nsGtkCursors.h => widget/gtk/nsGtkCursors.h rename : widget/gtk2/nsGtkIMModule.cpp => widget/gtk/nsGtkIMModule.cpp rename : widget/gtk2/nsGtkIMModule.h => widget/gtk/nsGtkIMModule.h rename : widget/gtk2/nsGtkKeyUtils.cpp => widget/gtk/nsGtkKeyUtils.cpp rename : widget/gtk2/nsGtkKeyUtils.h => widget/gtk/nsGtkKeyUtils.h rename : widget/gtk2/nsGtkUtils.h => widget/gtk/nsGtkUtils.h rename : widget/gtk2/nsIImageToPixbuf.h => widget/gtk/nsIImageToPixbuf.h rename : widget/gtk2/nsIdleServiceGTK.cpp => widget/gtk/nsIdleServiceGTK.cpp rename : widget/gtk2/nsIdleServiceGTK.h => widget/gtk/nsIdleServiceGTK.h rename : widget/gtk2/nsImageToPixbuf.cpp => widget/gtk/nsImageToPixbuf.cpp rename : widget/gtk2/nsImageToPixbuf.h => widget/gtk/nsImageToPixbuf.h rename : widget/gtk2/nsLookAndFeel.cpp => widget/gtk/nsLookAndFeel.cpp rename : widget/gtk2/nsLookAndFeel.h => widget/gtk/nsLookAndFeel.h rename : widget/gtk2/nsNativeKeyBindings.cpp => widget/gtk/nsNativeKeyBindings.cpp rename : widget/gtk2/nsNativeKeyBindings.h => widget/gtk/nsNativeKeyBindings.h rename : widget/gtk2/nsNativeThemeGTK.cpp => widget/gtk/nsNativeThemeGTK.cpp rename : widget/gtk2/nsNativeThemeGTK.h => widget/gtk/nsNativeThemeGTK.h rename : widget/gtk2/nsPSPrinters.cpp => widget/gtk/nsPSPrinters.cpp rename : widget/gtk2/nsPSPrinters.h => widget/gtk/nsPSPrinters.h rename : widget/gtk2/nsPaperPS.cpp => widget/gtk/nsPaperPS.cpp rename : widget/gtk2/nsPaperPS.h => widget/gtk/nsPaperPS.h rename : widget/gtk2/nsPrintDialogGTK.cpp => widget/gtk/nsPrintDialogGTK.cpp rename : widget/gtk2/nsPrintDialogGTK.h => widget/gtk/nsPrintDialogGTK.h rename : widget/gtk2/nsPrintOptionsGTK.cpp => widget/gtk/nsPrintOptionsGTK.cpp rename : widget/gtk2/nsPrintOptionsGTK.h => widget/gtk/nsPrintOptionsGTK.h rename : widget/gtk2/nsPrintSettingsGTK.cpp => widget/gtk/nsPrintSettingsGTK.cpp rename : widget/gtk2/nsPrintSettingsGTK.h => widget/gtk/nsPrintSettingsGTK.h rename : widget/gtk2/nsScreenGtk.cpp => widget/gtk/nsScreenGtk.cpp rename : widget/gtk2/nsScreenGtk.h => widget/gtk/nsScreenGtk.h rename : widget/gtk2/nsScreenManagerGtk.cpp => widget/gtk/nsScreenManagerGtk.cpp rename : widget/gtk2/nsScreenManagerGtk.h => widget/gtk/nsScreenManagerGtk.h rename : widget/gtk2/nsSound.cpp => widget/gtk/nsSound.cpp rename : widget/gtk2/nsSound.h => widget/gtk/nsSound.h rename : widget/gtk2/nsToolkit.cpp => widget/gtk/nsToolkit.cpp rename : widget/gtk2/nsWidgetFactory.cpp => widget/gtk/nsWidgetFactory.cpp rename : widget/gtk2/nsWindow.cpp => widget/gtk/nsWindow.cpp rename : widget/gtk2/nsWindow.h => widget/gtk/nsWindow.h
162 lines
4.8 KiB
C++
162 lines
4.8 KiB
C++
/* -*- Mode: C++; tab-width: 2; 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/. */
|
|
|
|
#include <gtk/gtk.h>
|
|
|
|
#include "mozilla/Util.h"
|
|
#include "nsColor.h"
|
|
#include "nsColorPicker.h"
|
|
#include "nsGtkUtils.h"
|
|
#include "nsIWidget.h"
|
|
#include "WidgetUtils.h"
|
|
|
|
NS_IMPL_ISUPPORTS1(nsColorPicker, nsIColorPicker)
|
|
|
|
int nsColorPicker::convertGdkColorComponent(guint16 color_component) {
|
|
// GdkColor value is in range [0..65535]. We need something in range [0..255]
|
|
return (int(color_component)*255 + 127)/65535;
|
|
}
|
|
|
|
guint16 nsColorPicker::convertToGdkColorComponent(int color_component) {
|
|
return color_component*65535/255;
|
|
}
|
|
|
|
GdkColor nsColorPicker::convertToGdkColor(nscolor color) {
|
|
GdkColor result = { 0 /* obsolete, unused 'pixel' value */,
|
|
convertToGdkColorComponent(NS_GET_R(color)),
|
|
convertToGdkColorComponent(NS_GET_G(color)),
|
|
convertToGdkColorComponent(NS_GET_B(color)) };
|
|
|
|
return result;
|
|
}
|
|
|
|
/* void init (in nsIDOMWindow parent, in AString title, in short mode); */
|
|
NS_IMETHODIMP nsColorPicker::Init(nsIDOMWindow *parent,
|
|
const nsAString& title,
|
|
const nsAString& initialColor)
|
|
{
|
|
// Input color string should be 7 length (i.e. a string representing a valid
|
|
// simple color)
|
|
if (initialColor.Length() != 7) {
|
|
return NS_ERROR_INVALID_ARG;
|
|
}
|
|
|
|
const nsAString& withoutHash = StringTail(initialColor, 6);
|
|
nscolor color;
|
|
if (!NS_HexToRGB(withoutHash, &color)) {
|
|
return NS_ERROR_INVALID_ARG;
|
|
}
|
|
|
|
mDefaultColor = convertToGdkColor(color);
|
|
|
|
mParentWidget = mozilla::widget::WidgetUtils::DOMWindowToWidget(parent);
|
|
mTitle.Assign(title);
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
/* void open (in nsIColorPickerShownCallback aColorPickerShownCallback); */
|
|
NS_IMETHODIMP nsColorPicker::Open(nsIColorPickerShownCallback *aColorPickerShownCallback)
|
|
{
|
|
if (mCallback) {
|
|
// It means Open has already been called: this is not allowed
|
|
NS_WARNING("mCallback is already set. Open called twice?");
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
mCallback = aColorPickerShownCallback;
|
|
|
|
nsXPIDLCString title;
|
|
title.Adopt(ToNewUTF8String(mTitle));
|
|
GtkWidget *color_chooser = gtk_color_selection_dialog_new(title);
|
|
|
|
GtkWindow *parent_window = GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET));
|
|
if (parent_window) {
|
|
GtkWindow *window = GTK_WINDOW(color_chooser);
|
|
gtk_window_set_transient_for(window, parent_window);
|
|
gtk_window_set_destroy_with_parent(window, TRUE);
|
|
}
|
|
|
|
gtk_color_selection_set_current_color(
|
|
GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(
|
|
GTK_COLOR_SELECTION_DIALOG(color_chooser))),
|
|
&mDefaultColor);
|
|
|
|
NS_ADDREF_THIS();
|
|
g_signal_connect(color_chooser, "response", G_CALLBACK(OnResponse), this);
|
|
g_signal_connect(color_chooser, "destroy", G_CALLBACK(OnDestroy), this);
|
|
gtk_widget_show(color_chooser);
|
|
|
|
return NS_OK;
|
|
}
|
|
|
|
/* static */ void
|
|
nsColorPicker::OnResponse(GtkWidget* color_chooser, gint response_id,
|
|
gpointer user_data)
|
|
{
|
|
static_cast<nsColorPicker*>(user_data)->
|
|
Done(color_chooser, response_id);
|
|
}
|
|
|
|
/* static */ void
|
|
nsColorPicker::OnDestroy(GtkWidget* color_chooser, gpointer user_data)
|
|
{
|
|
static_cast<nsColorPicker*>(user_data)->
|
|
Done(color_chooser, GTK_RESPONSE_CANCEL);
|
|
}
|
|
|
|
void
|
|
nsColorPicker::Done(GtkWidget* color_chooser, gint response)
|
|
{
|
|
switch (response) {
|
|
case GTK_RESPONSE_OK:
|
|
case GTK_RESPONSE_ACCEPT:
|
|
ReadValueFromColorChooser(color_chooser);
|
|
break;
|
|
case GTK_RESPONSE_CANCEL:
|
|
case GTK_RESPONSE_CLOSE:
|
|
case GTK_RESPONSE_DELETE_EVENT:
|
|
break;
|
|
default:
|
|
NS_WARNING("Unexpected response");
|
|
break;
|
|
}
|
|
|
|
// A "response" signal won't be sent again but "destroy" will be.
|
|
g_signal_handlers_disconnect_by_func(color_chooser,
|
|
FuncToGpointer(OnDestroy), this);
|
|
|
|
gtk_widget_destroy(color_chooser);
|
|
if (mCallback) {
|
|
mCallback->Done(mColor);
|
|
mCallback = nullptr;
|
|
}
|
|
|
|
NS_RELEASE_THIS();
|
|
}
|
|
|
|
nsString nsColorPicker::ToHexString(int n)
|
|
{
|
|
nsString result;
|
|
if (n <= 0x0F) {
|
|
result.Append('0');
|
|
}
|
|
result.AppendInt(n, 16);
|
|
return result;
|
|
}
|
|
|
|
void nsColorPicker::ReadValueFromColorChooser(GtkWidget* color_chooser)
|
|
{
|
|
GdkColor rgba;
|
|
gtk_color_selection_get_current_color(
|
|
GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(
|
|
GTK_COLOR_SELECTION_DIALOG(color_chooser))),
|
|
&rgba);
|
|
|
|
mColor.AssignLiteral("#");
|
|
mColor += ToHexString(convertGdkColorComponent(rgba.red));
|
|
mColor += ToHexString(convertGdkColorComponent(rgba.green));
|
|
mColor += ToHexString(convertGdkColorComponent(rgba.blue));
|
|
}
|