160 lines
4.6 KiB
C
160 lines
4.6 KiB
C
/*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2009 Blender Foundation.
|
|
* All rights reserved.
|
|
*/
|
|
|
|
/** \file
|
|
* \ingroup edinterface
|
|
*/
|
|
|
|
#include "DNA_space_types.h"
|
|
#include "DNA_screen_types.h"
|
|
|
|
#include "BLI_blenlib.h"
|
|
|
|
#include "BKE_context.h"
|
|
#include "BKE_screen.h"
|
|
|
|
#include "UI_interface.h"
|
|
|
|
#include "WM_api.h"
|
|
#include "WM_types.h"
|
|
|
|
#include "interface_intern.h"
|
|
|
|
#include "interface_eyedropper_intern.h" /* own include */
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/* Keymap
|
|
*/
|
|
/** \name Modal Keymap
|
|
* \{ */
|
|
|
|
|
|
wmKeyMap *eyedropper_modal_keymap(wmKeyConfig *keyconf)
|
|
{
|
|
static const EnumPropertyItem modal_items[] = {
|
|
{EYE_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
|
|
{EYE_MODAL_SAMPLE_CONFIRM, "SAMPLE_CONFIRM", 0, "Confirm Sampling", ""},
|
|
{EYE_MODAL_SAMPLE_BEGIN, "SAMPLE_BEGIN", 0, "Start Sampling", ""},
|
|
{EYE_MODAL_SAMPLE_RESET, "SAMPLE_RESET", 0, "Reset Sampling", ""},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "Eyedropper Modal Map");
|
|
|
|
/* this function is called for each spacetype, only needs to add map once */
|
|
if (keymap && keymap->modal_items) {
|
|
return NULL;
|
|
}
|
|
|
|
keymap = WM_modalkeymap_add(keyconf, "Eyedropper Modal Map", modal_items);
|
|
|
|
/* assign to operators */
|
|
WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_colorramp");
|
|
WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_color");
|
|
WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_id");
|
|
WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_depth");
|
|
WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_driver");
|
|
|
|
return keymap;
|
|
}
|
|
|
|
wmKeyMap *eyedropper_colorband_modal_keymap(wmKeyConfig *keyconf)
|
|
{
|
|
static const EnumPropertyItem modal_items_point[] = {
|
|
{EYE_MODAL_POINT_CANCEL, "CANCEL", 0, "Cancel", ""},
|
|
{EYE_MODAL_POINT_SAMPLE, "SAMPLE_SAMPLE", 0, "Sample a point", ""},
|
|
{EYE_MODAL_POINT_CONFIRM, "SAMPLE_CONFIRM", 0, "Confirm Sampling", ""},
|
|
{EYE_MODAL_POINT_RESET, "SAMPLE_RESET", 0, "Reset Sampling", ""},
|
|
{0, NULL, 0, NULL, NULL},
|
|
};
|
|
|
|
wmKeyMap *keymap = WM_modalkeymap_get(keyconf, "Eyedropper ColorRamp PointSampling Map");
|
|
if (keymap && keymap->modal_items) {
|
|
return keymap;
|
|
}
|
|
|
|
keymap = WM_modalkeymap_add(keyconf, "Eyedropper ColorRamp PointSampling Map", modal_items_point);
|
|
|
|
/* assign to operators */
|
|
WM_modalkeymap_assign(keymap, "UI_OT_eyedropper_colorramp_point");
|
|
|
|
return keymap;
|
|
}
|
|
|
|
/** \} */
|
|
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/* Utility Functions
|
|
*/
|
|
/** \name Generic Shared Functions
|
|
* \{ */
|
|
|
|
void eyedropper_draw_cursor_text(const struct bContext *C, const ARegion *ar, const char *name)
|
|
{
|
|
const uiFontStyle *fstyle = UI_FSTYLE_WIDGET;
|
|
wmWindow *win = CTX_wm_window(C);
|
|
int x = win->eventstate->x;
|
|
int y = win->eventstate->y;
|
|
const float col_fg[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
|
const float col_bg[4] = {0.0f, 0.0f, 0.0f, 0.2f};
|
|
|
|
|
|
if ((name[0] == '\0') ||
|
|
(BLI_rcti_isect_pt(&ar->winrct, x, y) == false))
|
|
{
|
|
return;
|
|
}
|
|
|
|
x = x - ar->winrct.xmin;
|
|
y = y - ar->winrct.ymin;
|
|
|
|
y += U.widget_unit;
|
|
|
|
UI_fontstyle_draw_simple_backdrop(fstyle, x, y, name, col_fg, col_bg);
|
|
}
|
|
|
|
|
|
/**
|
|
* Utility to retrieve a button representing a RNA property that is currently under the cursor.
|
|
*
|
|
* This is to be used by any eyedroppers which fetch properties (e.g. UI_OT_eyedropper_driver).
|
|
* Especially during modal operations (e.g. as with the eyedroppers), context cannot be relied
|
|
* upon to provide this information, as it is not updated until the operator finishes.
|
|
*
|
|
* \return A button under the mouse which relates to some RNA Property, or NULL
|
|
*/
|
|
uiBut *eyedropper_get_property_button_under_mouse(bContext *C, const wmEvent *event)
|
|
{
|
|
bScreen *screen = CTX_wm_screen(C);
|
|
ScrArea *sa = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, event->x, event->y);
|
|
ARegion *ar = BKE_area_find_region_xy(sa, RGN_TYPE_ANY, event->x, event->y);
|
|
|
|
uiBut *but = ui_but_find_mouse_over(ar, event);
|
|
|
|
if (ELEM(NULL, but, but->rnapoin.data, but->rnaprop)) {
|
|
return NULL;
|
|
}
|
|
else {
|
|
return but;
|
|
}
|
|
}
|
|
|
|
/** \} */
|