Added support for tiled-mode in X or Y axis only.

This commit is contained in:
David Capello 2009-03-09 00:05:37 +00:00
parent 73d1920e78
commit 8d5f265103
14 changed files with 198 additions and 82 deletions

View File

@ -1,3 +1,13 @@
2009-03-08 David A. Capello <davidcapello@gmail.com>
* src/modules/tools.cpp: Now tiled mode can be specified by X
and/or Y axis (Scott Wilson idea, feature #2636076).
2009-03-07 David A. Capello <davidcapello@gmail.com>
* src/util/clipboard_win32.h: Added support to copy & paste
to/from the Windows Clipboard (feature #2577954).
2009-03-02 David A. Capello <davidcapello@gmail.com>
* src/dialogs/filesel.cpp (ase_file_selector): Fixed a bug

View File

@ -7,7 +7,11 @@
<box vertical>
<separator text="General:" horizontal left />
<check text="Filled" name="filled" />
<check text="Tiled" name="tiled" />
<box horizontal childspacing="0">
<check text="Tiled" name="tiled" />
<check text="x" name="tiled_x" />
<check text="y" name="tiled_y" />
</box>
<check text="Onionskin" name="onionskin" />
<separator text="Grid:" horizontal left />
<check text="Snap to Grid" name="use_grid" />

View File

@ -52,6 +52,7 @@ static bool spray_width_slider_change_hook(JWidget widget, void *data);
static bool air_speed_slider_change_hook(JWidget widget, void *data);
static bool filled_check_change_hook(JWidget widget, void *data);
static bool tiled_check_change_hook(JWidget widget, void *data);
static bool tiled_xy_check_change_hook(JWidget widget, void *data);
static bool use_grid_check_change_hook(JWidget widget, void *data);
static bool view_grid_check_change_hook(JWidget widget, void *data);
static bool set_grid_button_select_hook(JWidget widget, void *data);
@ -60,7 +61,7 @@ static bool onionskin_check_change_hook(JWidget widget, void *data);
static void cmd_configure_tools_execute(const char *argument)
{
JWidget filled, tiled, use_grid, view_grid, set_grid;
JWidget filled, tiled, tiled_x, tiled_y, use_grid, view_grid, set_grid;
JWidget brush_size, brush_angle, glass_dirty;
JWidget spray_width, air_speed;
JWidget cursor_color, cursor_color_box;
@ -86,6 +87,8 @@ static void cmd_configure_tools_execute(const char *argument)
if (!get_widgets(window,
"filled", &filled,
"tiled", &tiled,
"tiled_x", &tiled_x,
"tiled_y", &tiled_y,
"use_grid", &use_grid,
"view_grid", &view_grid,
"set_grid", &set_grid,
@ -140,7 +143,11 @@ static void cmd_configure_tools_execute(const char *argument)
}
if (get_filled_mode()) jwidget_select(filled);
if (get_tiled_mode()) jwidget_select(tiled);
if (get_tiled_mode() != TILED_NONE) {
jwidget_select(tiled);
if (get_tiled_mode() & TILED_X_AXIS) jwidget_select(tiled_x);
if (get_tiled_mode() & TILED_Y_AXIS) jwidget_select(tiled_y);
}
if (get_use_grid()) jwidget_select(use_grid);
if (get_view_grid()) jwidget_select(view_grid);
jslider_set_value(brush_size, get_brush_size());
@ -160,6 +167,8 @@ static void cmd_configure_tools_execute(const char *argument)
HOOK(window, JI_SIGNAL_WINDOW_CLOSE, window_close_hook, 0);
HOOK(filled, JI_SIGNAL_CHECK_CHANGE, filled_check_change_hook, 0);
HOOK(tiled, JI_SIGNAL_CHECK_CHANGE, tiled_check_change_hook, 0);
HOOK(tiled_x, JI_SIGNAL_CHECK_CHANGE, tiled_xy_check_change_hook, (void*)TILED_X_AXIS);
HOOK(tiled_y, JI_SIGNAL_CHECK_CHANGE, tiled_xy_check_change_hook, (void*)TILED_Y_AXIS);
HOOK(use_grid, JI_SIGNAL_CHECK_CHANGE, use_grid_check_change_hook, 0);
HOOK(view_grid, JI_SIGNAL_CHECK_CHANGE, view_grid_check_change_hook, 0);
HOOK(set_grid, JI_SIGNAL_BUTTON_SELECT, set_grid_button_select_hook, 0);
@ -277,7 +286,27 @@ static bool filled_check_change_hook(JWidget widget, void *data)
static bool tiled_check_change_hook(JWidget widget, void *data)
{
set_tiled_mode(jwidget_is_selected(widget));
bool flag = jwidget_is_selected(widget);
set_tiled_mode(flag ? TILED_BOTH: TILED_NONE);
jwidget_set_selected(jwidget_find_name(jwidget_get_window(widget), "tiled_x"), flag);
jwidget_set_selected(jwidget_find_name(jwidget_get_window(widget), "tiled_y"), flag);
return FALSE;
}
static bool tiled_xy_check_change_hook(JWidget widget, void *data)
{
int tiled_axis = (int)((size_t)data);
int tiled_mode = get_tiled_mode();
if (jwidget_is_selected(widget))
tiled_mode |= tiled_axis;
else
tiled_mode &= ~tiled_axis;
jwidget_set_selected(jwidget_find_name(jwidget_get_window(widget), "tiled"),
(tiled_mode != TILED_NONE));
set_tiled_mode((tiled_t)tiled_mode);
return FALSE;
}

View File

@ -29,6 +29,7 @@
#include "modules/editors.h"
#include "modules/gfx.h"
#include "modules/gui.h"
#include "modules/tools.h"
#include "raster/image.h"
#include "raster/sprite.h"
#include "util/render.h"
@ -92,6 +93,15 @@ static void preview_sprite(int flags)
int redraw;
JRect vp;
int bg_color, index_bg_color = -1;
tiled_t tiled;
if (flags & PREVIEW_TILED) {
tiled = get_tiled_mode();
if (tiled == TILED_NONE)
tiled = TILED_BOTH;
}
else
tiled = TILED_NONE;
jmanager_free_mouse();
@ -162,16 +172,17 @@ static void preview_sprite(int flags)
}
/* draw in normal size */
else {
if (!(flags & PREVIEW_TILED)) {
x = shiftx;
y = shifty;
}
else {
if (tiled & TILED_X_AXIS)
x = SGN(shiftx) * (ABS(shiftx)%w);
y = SGN(shifty) * (ABS(shifty)%h);
}
else
x = shiftx;
if (!(flags & PREVIEW_TILED)) {
if (tiled & TILED_Y_AXIS)
y = SGN(shifty) * (ABS(shifty)%h);
else
y = shifty;
if (tiled != TILED_BOTH) {
/* rectfill_exclude(ji_screen, 0, 0, JI_SCREEN_W-1, JI_SCREEN_H-1, */
/* x, y, x+w-1, y+h-1, bg_color); */
clear_to_color(ji_screen, bg_color);
@ -182,20 +193,46 @@ static void preview_sprite(int flags)
if (!(flags & PREVIEW_TILED))
draw_sprite(ji_screen, bmp, x, y);
/* tiled */
else
for (v=y-h; v<JI_SCREEN_H+h; v+=h)
for (u=x-w; u<JI_SCREEN_W+w; u+=w)
blit(bmp, ji_screen, 0, 0, u, v, w, h);
else {
switch (tiled) {
case TILED_X_AXIS:
for (u=x-w; u<JI_SCREEN_W+w; u+=w)
blit(bmp, ji_screen, 0, 0, u, y, w, h);
break;
case TILED_Y_AXIS:
for (v=y-h; v<JI_SCREEN_H+h; v+=h)
blit(bmp, ji_screen, 0, 0, x, v, w, h);
break;
case TILED_BOTH:
for (v=y-h; v<JI_SCREEN_H+h; v+=h)
for (u=x-w; u<JI_SCREEN_W+w; u+=w)
blit(bmp, ji_screen, 0, 0, u, v, w, h);
break;
}
}
}
else {
/* in the center */
if (!(flags & PREVIEW_TILED))
masked_stretch_blit(bmp, ji_screen, 0, 0, bmp->w, bmp->h, x, y, w, h);
/* tiled */
else
for (v=y-h; v<JI_SCREEN_H+h; v+=h)
for (u=x-w; u<JI_SCREEN_W+w; u+=w)
stretch_blit(bmp, ji_screen, 0, 0, bmp->w, bmp->h, u, v, w, h);
else {
switch (tiled) {
case TILED_X_AXIS:
for (u=x-w; u<JI_SCREEN_W+w; u+=w)
stretch_blit(bmp, ji_screen, 0, 0, bmp->w, bmp->h, u, y, w, h);
break;
case TILED_Y_AXIS:
for (v=y-h; v<JI_SCREEN_H+h; v+=h)
stretch_blit(bmp, ji_screen, 0, 0, bmp->w, bmp->h, x, v, w, h);
break;
case TILED_BOTH:
for (v=y-h; v<JI_SCREEN_H+h; v+=h)
for (u=x-w; u<JI_SCREEN_W+w; u+=w)
stretch_blit(bmp, ji_screen, 0, 0, bmp->w, bmp->h, u, v, w, h);
break;
}
}
}
}
}

View File

@ -121,7 +121,7 @@ static void cmd_convolution_matrix_execute(const char *argument)
if (get_config_bool("ConvolutionMatrix", "Preview", TRUE))
jwidget_select(check_preview);
if (get_tiled_mode())
if (get_tiled_mode() != TILED_NONE)
jwidget_select(check_tiled);
jview_attach(view_convmatr, list_convmatr);
@ -333,7 +333,7 @@ static bool preview_change_hook(JWidget widget, void *data)
static bool tiled_change_hook(JWidget widget, void *data)
{
set_tiled_mode(jwidget_is_selected(widget));
set_tiled_mode(jwidget_is_selected(widget) ? TILED_BOTH: TILED_NONE);
make_preview();
return FALSE;
}

View File

@ -109,7 +109,7 @@ static void cmd_despeckle_execute(const char *argument)
if (get_config_bool("Median", "Preview", TRUE))
jwidget_select(check_preview);
if (get_tiled_mode())
if (get_tiled_mode() != TILED_NONE)
jwidget_select(check_tiled);
jwidget_add_child(box_target, target_button);
@ -182,7 +182,7 @@ static bool preview_change_hook(JWidget widget, void *data)
static bool tiled_change_hook(JWidget widget, void *data)
{
set_tiled_mode(jwidget_is_selected(widget));
set_tiled_mode(jwidget_is_selected(widget) ? TILED_BOTH: TILED_NONE);
make_preview();
return FALSE;
}

View File

@ -40,7 +40,7 @@
static struct { /* TODO warning: not thread safe */
JList matrices;
ConvMatr *convmatr;
bool tiled;
tiled_t tiled;
unsigned char **lines;
} data;
@ -48,7 +48,7 @@ void init_convolution_matrix()
{
data.matrices = jlist_new();
data.convmatr = NULL;
data.tiled = FALSE;
data.tiled = TILED_NONE;
data.lines = NULL;
reload_matrices_stock();

View File

@ -98,7 +98,7 @@ void effect_apply_to_target(Effect* effect);
gety = y-(cy); \
addy = 0; \
if (gety < 0) { \
if (tiled) \
if (tiled & TILED_Y_AXIS) \
gety = src->h - (-(gety+1) % src->h) - 1; \
else { \
addy = -gety; \
@ -106,7 +106,7 @@ void effect_apply_to_target(Effect* effect);
} \
} \
else if (gety >= src->h) { \
if (tiled) \
if (tiled & TILED_Y_AXIS) \
gety = gety % src->h; \
else \
gety = src->h-1; \
@ -117,7 +117,7 @@ void effect_apply_to_target(Effect* effect);
getx = x-(cx); \
addx = 0; \
if (getx < 0) { \
if (tiled) \
if (tiled & TILED_X_AXIS) \
getx = src->w - (-(getx+1) % src->w) - 1; \
else { \
addx = -getx; \
@ -125,7 +125,7 @@ void effect_apply_to_target(Effect* effect);
} \
} \
else if (getx >= src->w) { \
if (tiled) \
if (tiled & TILED_X_AXIS) \
getx = getx % src->w; \
else \
getx = src->w-1; \
@ -144,7 +144,7 @@ void effect_apply_to_target(Effect* effect);
else \
addx--; \
} \
else if (tiled) { \
else if (tiled & TILED_X_AXIS) { \
getx = 0; \
src_address = ((ptr_type **)src->line)[gety]+getx; \
} \
@ -157,7 +157,7 @@ void effect_apply_to_target(Effect* effect);
else \
addy--; \
} \
else if (tiled) \
else if (tiled & TILED_Y_AXIS) \
gety = 0; \
}

View File

@ -312,6 +312,7 @@ static JWidget convert_tag_to_widget(JXmlElem elem)
const char *minheight = jxmlelem_get_attr(elem, "minheight");
const char *maxwidth = jxmlelem_get_attr(elem, "maxwidth");
const char *maxheight = jxmlelem_get_attr(elem, "maxheight");
const char *childspacing = jxmlelem_get_attr(elem, "childspacing");
JLink link;
if (name != NULL)
@ -329,6 +330,9 @@ static JWidget convert_tag_to_widget(JXmlElem elem)
if (noborders)
jwidget_noborders(widget);
if (childspacing)
widget->child_spacing = ustrtol(childspacing, NULL, 10);
if (width || minwidth || maxwidth ||
height || minheight || maxheight) {
int w = (width || minwidth) ? ustrtol(width ? width: minwidth, NULL, 10): 0;

View File

@ -522,6 +522,14 @@ void jwidget_deselect(JWidget widget)
}
}
void jwidget_set_selected(JWidget widget, bool state)
{
if (state)
jwidget_select(widget);
else
jwidget_deselect(widget);
}
bool jwidget_is_visible(JWidget widget)
{
assert_valid_widget(widget);

View File

@ -146,6 +146,7 @@ void jwidget_enable(JWidget widget);
void jwidget_disable(JWidget widget);
void jwidget_select(JWidget widget);
void jwidget_deselect(JWidget widget);
void jwidget_set_selected(JWidget widget, bool state);
bool jwidget_is_visible(JWidget widget);
bool jwidget_is_hidden(JWidget widget);

View File

@ -78,7 +78,7 @@ static int glass_dirty;
static int spray_width;
static int air_speed;
static bool filled_mode;
static bool tiled_mode;
static tiled_t tiled_mode;
static bool use_grid;
static bool view_grid;
static JRect grid;
@ -176,14 +176,14 @@ int init_module_tools()
set_cursor_color(get_config_color("Tools", "CursorColor", color_mask()));
/* tools configuration */
glass_dirty = get_config_int("Tools", "GlassDirty", 255);
spray_width = get_config_int("Tools", "SprayWidth", 16);
air_speed = get_config_int("Tools", "AirSpeed", 75);
filled_mode = get_config_bool("Tools", "Filled", FALSE);
tiled_mode = get_config_bool("Tools", "Tiled", FALSE);
use_grid = get_config_bool("Tools", "UseGrid", FALSE);
view_grid = get_config_bool("Tools", "ViewGrid", FALSE);
onionskin = get_config_bool("Tools", "Onionskin", FALSE);
glass_dirty = get_config_int("Tools", "GlassDirty", 255);
spray_width = get_config_int("Tools", "SprayWidth", 16);
air_speed = get_config_int("Tools", "AirSpeed", 75);
filled_mode = get_config_bool("Tools", "Filled", FALSE);
tiled_mode = (tiled_t)get_config_int("Tools", "Tiled", (int)TILED_NONE);
use_grid = get_config_bool("Tools", "UseGrid", FALSE);
view_grid = get_config_bool("Tools", "ViewGrid", FALSE);
onionskin = get_config_bool("Tools", "Onionskin", FALSE);
grid = jrect_new(0, 0, 16, 16);
get_config_rect("Tools", "GridRect", grid);
@ -192,6 +192,7 @@ int init_module_tools()
glass_dirty = MID(0, glass_dirty, 255);
spray_width = MID(1, spray_width, 320);
air_speed = MID(1, air_speed, 100);
tiled_mode = (tiled_t)MID(0, (int)tiled_mode, TILED_BOTH);
app_add_hook(APP_PALETTE_CHANGE, update_cursor_color, NULL);
@ -207,7 +208,7 @@ void exit_module_tools()
set_config_int("Tools", "SprayWidth", spray_width);
set_config_int("Tools", "AirSpeed", air_speed);
set_config_bool("Tools", "Filled", filled_mode);
set_config_bool("Tools", "Tiled", tiled_mode);
set_config_int("Tools", "Tiled", tiled_mode);
set_config_bool("Tools", "UseGrid", use_grid);
set_config_bool("Tools", "ViewGrid", view_grid);
set_config_rect("Tools", "GridRect", grid);
@ -307,7 +308,7 @@ int get_glass_dirty() { return glass_dirty; }
int get_spray_width() { return spray_width; }
int get_air_speed() { return air_speed; }
bool get_filled_mode() { return filled_mode; }
bool get_tiled_mode() { return tiled_mode; }
tiled_t get_tiled_mode() { return tiled_mode; }
bool get_use_grid() { return use_grid; }
bool get_view_grid() { return view_grid; }
@ -328,7 +329,7 @@ void set_glass_dirty(int new_glass_dirty) { glass_dirty = new_glass_dirty; }
void set_spray_width(int new_spray_width) { spray_width = new_spray_width; }
void set_air_speed(int new_air_speed) { air_speed = new_air_speed; }
void set_filled_mode(bool status) { filled_mode = status; }
void set_tiled_mode(bool status) { tiled_mode = status; }
void set_tiled_mode(tiled_t mode) { tiled_mode = mode; }
void set_use_grid(bool status) { use_grid = status; }
void set_view_grid(bool status) { view_grid = status; }
@ -386,49 +387,55 @@ int get_thickness_for_cursor()
static void do_ink_pixel(int x, int y, ToolData *data)
{
/* tiled mode */
if (data->tiled) {
register int size;
register int size;
// tiled in X axis
if (data->tiled & TILED_X_AXIS) {
size = data->dst_image->w;
if (x < 0)
x = size - (-(x+1) % size) - 1;
else
x = x % size;
}
else if (x < 0 || x >= data->dst_image->w)
return;
// tiled in Y axis
if (data->tiled & TILED_Y_AXIS) {
size = data->dst_image->h;
if (y < 0)
y = size - (-(y+1) % size) - 1;
else
y = y % size;
}
/* clipped */
else {
if (y < 0 || y >= data->dst_image->h ||
x < 0 || x >= data->dst_image->w)
return;
}
else if (y < 0 || y >= data->dst_image->h)
return;
data->ink_hline_proc(x, y, x, data);
}
static void do_ink_hline(int x1, int y, int x2, ToolData *data)
{
/* tiled mode */
if (data->tiled) {
register int w, size; /* width or height */
register int x;
register int w, size; // width or height
register int x;
if (x1 > x2)
return;
size = data->dst_image->h; /* size = image height */
// tiled in Y axis
if (data->tiled & TILED_Y_AXIS) {
size = data->dst_image->h; // size = image height
if (y < 0)
y = size - (-(y+1) % size) - 1;
else
y = y % size;
}
else if (y < 0 || y >= data->dst_image->h)
return;
size = data->dst_image->w; /* size = image width */
// tiled in X axis
if (data->tiled & TILED_X_AXIS) {
if (x1 > x2)
return;
size = data->dst_image->w; // size = image width
w = x2-x1+1;
if (w >= size)
data->ink_hline_proc(0, y, size-1, data);
@ -447,11 +454,8 @@ static void do_ink_hline(int x1, int y, int x2, ToolData *data)
}
}
}
/* clipped */
// clipped in X axis
else {
if (y < 0 || y >= data->dst_image->h)
return;
if (x1 < 0)
x1 = 0;
@ -955,13 +959,13 @@ void control_tool(JWidget widget, Tool *tool,
tool_data.layer = sprite->layer;
tool_data.tiled = tiled_mode;
if (!tool_data.tiled) { /* not tiled mode */
if (tool_data.tiled == TILED_NONE) { // not tiled mode
x1 = MIN(cel->x, 0);
y1 = MIN(cel->y, 0);
x2 = MAX(cel->x+cel_image->w, sprite->w);
y2 = MAX(cel->y+cel_image->h, sprite->h);
}
else { /* tiled mode */
else { // tiled mode
x1 = 0;
y1 = 0;
x2 = sprite->w;
@ -1361,8 +1365,8 @@ next_pts:;
}
}
/* for non-tiled mode */
if (!tool_data.tiled) {
// for non-tiled mode
if (tool_data.tiled == TILED_NONE) {
outx1 = MAX(outx1-brush->size/2-offset_x, 0);
outy1 = MAX(outy1-brush->size/2-offset_y, 0);
outx2 = MIN(outx2+brush->size/2-offset_x, sprite->w-1);
@ -1370,7 +1374,7 @@ next_pts:;
editors_draw_sprite(sprite, outx1, outy1, outx2, outy2);
}
/* for tiled mode */
// for tiled mode
else {
outx1 = outx1-brush->size/2-offset_x;
outy1 = outy1-brush->size/2-offset_y;
@ -1808,7 +1812,7 @@ static void ink_hline32_soften(int x1, int y, int x2, ToolData *data)
{
int c, r, g, b, a;
int opacity = data->opacity;
bool tiled = data->tiled;
tiled_t tiled = data->tiled;
Image *src = data->src_image;
int getx, gety;
int addx, addy;
@ -1858,7 +1862,7 @@ static void ink_hline16_soften(int x1, int y, int x2, ToolData *data)
{
int c, v, a;
int opacity = data->opacity;
bool tiled = data->tiled;
tiled_t tiled = data->tiled;
Image *src = data->src_image;
int getx, gety;
int addx, addy;
@ -1903,7 +1907,7 @@ static void ink_hline8_soften(int x1, int y, int x2, ToolData *data)
Palette *pal = get_current_palette();
int c, r, g, b, a;
int opacity = data->opacity;
bool tiled = data->tiled;
tiled_t tiled = data->tiled;
Image *src = data->src_image;
int getx, gety;
int addx, addy;
@ -2005,19 +2009,23 @@ static void ink_hline8_replace(int x1, int y, int x2, ToolData *data)
u = x + (rand() % 3)-1 - speed_x; \
v = y + (rand() % 3)-1 - speed_y; \
\
if (tiled) { \
if (tiled & TILED_X_AXIS) { \
if (u < 0) \
u = data->src_image->w - (-(u+1) % data->src_image->w) - 1; \
else if (u >= data->src_image->w) \
u %= data->src_image->w; \
} \
else { \
u = MID(0, u, data->src_image->w-1); \
} \
\
if (tiled & TILED_Y_AXIS) { \
if (v < 0) \
v = data->src_image->h - (-(v+1) % data->src_image->h) - 1; \
else if (v >= data->src_image->h) \
v %= data->src_image->h; \
} \
else { \
u = MID(0, u, data->src_image->w-1); \
v = MID(0, v, data->src_image->h-1); \
} \
color = image_getpixel(data->src_image, u, v);
@ -2027,7 +2035,7 @@ static void ink_hline32_jumble(int x1, int y, int x2, ToolData *data)
int opacity = data->opacity;
int speed_x = data->vector.x/4;
int speed_y = data->vector.y/4;
bool tiled = data->tiled;
tiled_t tiled = data->tiled;
int u, v, color;
DEFINE_INK_PROCESSING_SRCDST
@ -2044,7 +2052,7 @@ static void ink_hline16_jumble(int x1, int y, int x2, ToolData *data)
int opacity = data->opacity;
int speed_x = data->vector.x/4;
int speed_y = data->vector.y/4;
bool tiled = data->tiled;
tiled_t tiled = data->tiled;
int u, v, color;
DEFINE_INK_PROCESSING_SRCDST
@ -2063,7 +2071,7 @@ static void ink_hline8_jumble(int x1, int y, int x2, ToolData *data)
int opacity = data->opacity;
int speed_x = data->vector.x/4;
int speed_y = data->vector.y/4;
bool tiled = data->tiled;
tiled_t tiled = data->tiled;
int u, v, color;
DEFINE_INK_PROCESSING_SRCDST

View File

@ -32,6 +32,13 @@ class Sprite;
struct Brush;
enum tiled_t {
TILED_NONE = 0,
TILED_X_AXIS = 1,
TILED_Y_AXIS = 2,
TILED_BOTH = 3,
};
enum {
TOOL_MARKER,
TOOL_PENCIL,
@ -75,7 +82,7 @@ struct ToolData
bool left_button; /* did the user start the trace with the left mouse button? */
AlgoHLine ink_hline_proc;
int opacity;
bool tiled;
tiled_t tiled;
struct {
int x;
int y;
@ -105,7 +112,7 @@ int get_glass_dirty();
int get_spray_width();
int get_air_speed();
bool get_filled_mode();
bool get_tiled_mode();
tiled_t get_tiled_mode();
bool get_use_grid();
bool get_view_grid();
JRect get_grid();
@ -119,7 +126,7 @@ void set_glass_dirty(int glass_dirty);
void set_spray_width(int spray_width);
void set_air_speed(int air_speed);
void set_filled_mode(bool status);
void set_tiled_mode(bool status);
void set_tiled_mode(tiled_t mode);
void set_use_grid(bool status);
void set_view_grid(bool status);
void set_grid(JRect rect);

View File

@ -18,6 +18,14 @@
// included by clipboard.cpp
#ifndef LCS_WINDOWS_COLOR_SPACE
#define LCS_WINDOWS_COLOR_SPACE 'Win '
#endif
#ifndef CF_DIBV5
#define CF_DIBV5 17
#endif
/**
* Returns true if the Windows clipboard contains a bitmap (CF_DIB
* format).