Fixed a bug in FlattenLayers.

Fixed a bug when paste outside the sprite.
Fixed a bug in color-bar when drop colors in nowhere.
Fixed some compilation errors in MSVC.
This commit is contained in:
David Capello 2008-09-29 23:58:07 +00:00
parent 4026754881
commit bcc221ab59
23 changed files with 171 additions and 173 deletions

View File

@ -1,3 +1,19 @@
2008-09-29 David A. Capello <davidcapello@gmail.com>
* src/script/functions.c (FlattenLayers): Fixed a bug calling
'layer_configure_as_background' without 'undo_move_layer' before.
* src/util/clipbrd.c (paste_from_clipboard): Fixed a bug when
paste the clipboard outside the sprite.
* src/modules/tools.c (M_PI): Defined for MSVC8.
* src/widgets/colbut.c (colorbutton_draw): Fixed compilation error
in MSVC8.
* src/widgets/colbar.c (colorbar_msg_proc): Fixed a bug little bug
when drop color in nowhere.
2008-09-28 David A. Capello <davidcapello@gmail.com>
* src/modules/tools.c: Added new Curve tool.

View File

@ -1,4 +1,4 @@
# Copyright (C) 2001-2005, 2007 by David A. Capello -*-Makefile-*-
# Copyright (C) 2001-2008 by David A. Capello -*-Makefile-*-
ifndef CONFIGURED
include makefile.cfg

View File

@ -1,4 +1,4 @@
# Copyright (C) 2001-2005, 2007, 2008 by David A. Capello -*-Makefile-*-
# Copyright (C) 2001-2008 by David A. Capello -*-Makefile-*-
.PHONY = _default
_default: default
@ -21,8 +21,8 @@ ifdef PROFILE
LFLAGS += -pg
else
ifdef DEBUGMODE
CFLAGS += -g3 -O3 -DDEBUGMODE
LFLAGS += -g3 -O3
CFLAGS += -g3 -DDEBUGMODE
LFLAGS += -g3
else
CFLAGS += -s -O3 -DNDEBUG
LFLAGS += -s -O3 -DNDEBUG

View File

@ -1,4 +1,4 @@
# Copyright (C) 2001-2005, 2007 by David A. Capello -*-Makefile-*-
# Copyright (C) 2001-2008 by David A. Capello -*-Makefile-*-
ifndef CONFIGURED
include makefile.cfg

View File

@ -1,4 +1,4 @@
# Copyright (C) 2001-2005, 2007, 2008 by David A. Capello -*-Makefile-*-
# Copyright (C) 2001-2008 by David A. Capello -*-Makefile-*-
######################################################################
# ASE
@ -235,7 +235,7 @@ ASE_OBJS = $(addprefix $(OBJ_DIR)/, \
######################################################################
# Libart
LIBART_LIB = $(OBJ_DIR)/libart$(LIB)
LIBART_LIB = $(OBJ_DIR)/libart$(LIB_EXT)
LIBART_DIR = third_party/libart_lgpl
LIBART_SOURCES = \
$(LIBART_DIR)/art_affine.c \
@ -283,7 +283,7 @@ LIBART_OBJS = $(addprefix $(OBJ_DIR)/art., \
######################################################################
# Freetype
LIBFREETYPE_LIB = $(OBJ_DIR)/libfreetype$(LIB)
LIBFREETYPE_LIB = $(OBJ_DIR)/libfreetype$(LIB_EXT)
LIBFREETYPE_DIR = third_party/freetype
LIBFREETYPE_SOURCES = \
$(LIBFREETYPE_DIR)/src/base/ftsystem.c \
@ -315,7 +315,7 @@ LIBFREETYPE_OBJS = $(addprefix $(OBJ_DIR)/freetype., \
######################################################################
# GD Library
LIBGD_LIB = $(OBJ_DIR)/libgd$(LIB)
LIBGD_LIB = $(OBJ_DIR)/libgd$(LIB_EXT)
LIBGD_DIR = third_party/gd
LIBGD_SOURCES = \
$(LIBGD_DIR)/gd \
@ -354,7 +354,7 @@ LIBGD_OBJS = $(addprefix $(OBJ_DIR)/gd., \
######################################################################
# JPEG
LIBJPEG_LIB = $(OBJ_DIR)/libjpeg$(LIB)
LIBJPEG_LIB = $(OBJ_DIR)/libjpeg$(LIB_EXT)
LIBJPEG_DIR = third_party/jpeg
LIBJPEG_SOURCES = \
$(LIBJPEG_DIR)/jcapimin.c \
@ -411,7 +411,7 @@ LIBJPEG_OBJS = $(addprefix $(OBJ_DIR)/jpeg., \
######################################################################
# LibPNG
LIBPNG_LIB = $(OBJ_DIR)/libpng$(LIB)
LIBPNG_LIB = $(OBJ_DIR)/libpng$(LIB_EXT)
LIBPNG_DIR = third_party/libpng
LIBPNG_SOURCES = \
$(LIBPNG_DIR)/png.c \
@ -437,7 +437,7 @@ LIBPNG_OBJS = $(addprefix $(OBJ_DIR)/png., \
######################################################################
# ZLib
ZLIB_LIB = $(OBJ_DIR)/libzlib$(LIB)
ZLIB_LIB = $(OBJ_DIR)/libzlib$(LIB_EXT)
ZLIB_DIR = third_party/zlib
ZLIB_SOURCES = \
$(ZLIB_DIR)/adler32.c \

View File

@ -1,4 +1,4 @@
# Copyright (C) 2001-2005, 2007, 2008 by David A. Capello -*-Makefile-*-
# Copyright (C) 2001-2008 by David A. Capello -*-Makefile-*-
ifndef CONFIGURED
include makefile.cfg

View File

@ -136,6 +136,7 @@ static void anieditor_draw_header_part(JWidget widget, JRect clip, int x1, int y
const char *line2, int align2);
static void anieditor_draw_separator(JWidget widget, JRect clip);
static void anieditor_draw_layer(JWidget widget, JRect clip, int layer_index);
static void anieditor_draw_layer_padding(JWidget widget);
static void anieditor_draw_cel(JWidget widget, JRect clip, int layer_index, int frame);
static bool anieditor_draw_part(JWidget widget, int part, int layer, int frame);
static void anieditor_regenerate_layers(JWidget widget);
@ -283,6 +284,8 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
anieditor_draw_cel(widget, clip, layer, frame);
}
anieditor_draw_layer_padding(widget);
return TRUE;
}
@ -1083,16 +1086,26 @@ static void anieditor_draw_layer(JWidget widget, JRect clip, int layer_index)
}
set_clip_rect(ji_screen, cx1, cy1, cx2, cy2);
}
static void anieditor_draw_layer_padding(JWidget widget)
{
AniEditor *anieditor = anieditor_data(widget);
int layer_index = anieditor->nlayers-1;
int x1, y1, x2, y2;
x1 = widget->rc->x1;
y1 = widget->rc->y1 + HDRSIZE + LAYSIZE*layer_index - anieditor->scroll_y;
x2 = x1 + anieditor->separator_x - 1;
y2 = y1 + LAYSIZE - 1;
/* padding in the bottom side */
if (layer_index == anieditor->nlayers-1) {
if (y2+1 <= widget->rc->y2-1) {
rectfill(ji_screen, x1, y2+1, x2, widget->rc->y2-1, ji_color_disabled());
rectfill(ji_screen,
x2+1+anieditor->separator_w, y2+1,
widget->rc->x2-1, widget->rc->y2-1,
ji_color_disabled());
}
if (y2+1 <= widget->rc->y2-1) {
rectfill(ji_screen, x1, y2+1, x2, widget->rc->y2-1, ji_color_disabled());
rectfill(ji_screen,
x2+1+anieditor->separator_w, y2+1,
widget->rc->x2-1, widget->rc->y2-1,
ji_color_disabled());
}
}

View File

@ -299,7 +299,7 @@ static bool save_PNG(FileOp *fop)
png_infop info_ptr;
png_colorp palette = NULL;
png_bytep row_pointer;
int color_type;
int color_type = 0;
int pass, number_passes;
FILE *fp;

View File

@ -47,6 +47,7 @@
# define HAVE_DRIVES
#endif
#undef FA_ALL
#define FA_TO_SHOW FA_RDONLY | FA_DIREC | FA_ARCH | FA_SYSTEM
#define FA_ALL FA_RDONLY | FA_DIREC | FA_ARCH | FA_HIDDEN | FA_SYSTEM

View File

@ -360,17 +360,18 @@ bool jmanager_generate_messages(JWidget manager)
/* mouse movement */
if (mousemove) {
JWidget dst;
/* reset double click status */
double_click_level = DOUBLE_CLICK_NONE;
JWidget destination;
if (capture_widget && capture_widget->flags & JI_HARDCAPTURE)
destination = capture_widget;
dst = capture_widget;
else
destination = mouse_widget;
dst = mouse_widget;
/* send the mouse movement message */
msg = new_mouse_msg(JM_MOTION, destination);
msg = new_mouse_msg(JM_MOTION, dst);
jmanager_enqueue_message(msg);
generate_setcursor_message();
@ -1356,17 +1357,17 @@ static void manager_redraw_region(JWidget widget, JRegion region)
static void generate_setcursor_message(void)
{
JWidget destination;
JWidget dst;
JMessage msg;
if (capture_widget &&
capture_widget->flags & JI_HARDCAPTURE)
destination = capture_widget;
dst = capture_widget;
else
destination = mouse_widget;
dst = mouse_widget;
if (destination) {
msg = new_mouse_msg(JM_SETCURSOR, destination);
if (dst) {
msg = new_mouse_msg(JM_SETCURSOR, dst);
jmanager_enqueue_message(msg);
}
else

View File

@ -47,7 +47,7 @@ void jmutex_free(JMutex mutex)
assert(system_driver != NULL);
assert(system_driver->destroy_mutex != NULL);
return system_driver->destroy_mutex(mutex);
system_driver->destroy_mutex(mutex);
}
void jmutex_lock(JMutex mutex)

View File

@ -51,6 +51,10 @@
#include "widgets/statebar.h"
#include "widgets/toolbar.h"
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
/* tool flags */
#define TOOL_COPY_SRC2DST 0x00000001
#define TOOL_COPY_DST2SRC 0x00000002
@ -97,32 +101,32 @@ enum {
MAX_INKS
};
static void ink_hline4_opaque(int x1, int y, int x2, ToolData *data);
static void ink_hline2_opaque(int x1, int y, int x2, ToolData *data);
static void ink_hline1_opaque(int x1, int y, int x2, ToolData *data);
static void ink_hline32_opaque(int x1, int y, int x2, ToolData *data);
static void ink_hline16_opaque(int x1, int y, int x2, ToolData *data);
static void ink_hline8_opaque(int x1, int y, int x2, ToolData *data);
static void ink_hline4_glass(int x1, int y, int x2, ToolData *data);
static void ink_hline2_glass(int x1, int y, int x2, ToolData *data);
static void ink_hline1_glass(int x1, int y, int x2, ToolData *data);
static void ink_hline32_glass(int x1, int y, int x2, ToolData *data);
static void ink_hline16_glass(int x1, int y, int x2, ToolData *data);
static void ink_hline8_glass(int x1, int y, int x2, ToolData *data);
static void ink_hline4_soften(int x1, int y, int x2, ToolData *data);
static void ink_hline2_soften(int x1, int y, int x2, ToolData *data);
static void ink_hline1_soften(int x1, int y, int x2, ToolData *data);
static void ink_hline32_soften(int x1, int y, int x2, ToolData *data);
static void ink_hline16_soften(int x1, int y, int x2, ToolData *data);
static void ink_hline8_soften(int x1, int y, int x2, ToolData *data);
static void ink_hline4_replace(int x1, int y, int x2, ToolData *data);
static void ink_hline2_replace(int x1, int y, int x2, ToolData *data);
static void ink_hline1_replace(int x1, int y, int x2, ToolData *data);
static void ink_hline32_replace(int x1, int y, int x2, ToolData *data);
static void ink_hline16_replace(int x1, int y, int x2, ToolData *data);
static void ink_hline8_replace(int x1, int y, int x2, ToolData *data);
static void ink_hline4_jumble(int x1, int y, int x2, ToolData *data);
static void ink_hline2_jumble(int x1, int y, int x2, ToolData *data);
static void ink_hline1_jumble(int x1, int y, int x2, ToolData *data);
static void ink_hline32_jumble(int x1, int y, int x2, ToolData *data);
static void ink_hline16_jumble(int x1, int y, int x2, ToolData *data);
static void ink_hline8_jumble(int x1, int y, int x2, ToolData *data);
static AlgoHLine inks_hline[][3] =
{
#define DEF_INK(name) \
{ (AlgoHLine)ink_hline4_##name, \
(AlgoHLine)ink_hline2_##name, \
(AlgoHLine)ink_hline1_##name }
{ (AlgoHLine)ink_hline32_##name, \
(AlgoHLine)ink_hline16_##name, \
(AlgoHLine)ink_hline8_##name }
DEF_INK(opaque),
DEF_INK(glass),
@ -600,7 +604,8 @@ static void tool_spray_draw_trace(int x1, int y1, int x2, int y2, ToolData *data
{
int c, x, y, times = (spray_width*spray_width/4) * air_speed / 100;
#ifdef __MINGW32__ /* MinGW32 has a RAND_MAX too small */
/* in Windows, rand() has a RAND_MAX too small */
#if RAND_MAX <= 0xffff
fixed angle, radius;
for (c=0; c<times; c++) {
@ -889,6 +894,8 @@ void control_tool(JWidget widget, Tool *tool,
int curve_pts = 0; /* to iterate points in the 'curve' tool */
ToolData tool_data;
assert(sprite->layer);
/* First of all we have to dispatch the enqueue messages. Why is it
needed? To dispatch the JM_CLOSE and redrawing messages if a
color-selector was shown to the user before to click. This is
@ -1699,7 +1706,7 @@ static void line_for_spline(int x1, int y1, int x2, int y2, ToolData *data)
addresses_initialize, \
addresses_increment, \
processing) \
addresses_define; \
addresses_define \
register int x; \
\
/* with mask */ \
@ -1755,7 +1762,7 @@ static void line_for_spline(int x1, int y1, int x2, int y2, ToolData *data)
/* Opaque Ink */
/**********************************************************************/
static void ink_hline4_opaque(int x1, int y, int x2, ToolData *data)
static void ink_hline32_opaque(int x1, int y, int x2, ToolData *data)
{
int c = data->color;
@ -1764,7 +1771,7 @@ static void ink_hline4_opaque(int x1, int y, int x2, ToolData *data)
*dst_address = c );
}
static void ink_hline2_opaque(int x1, int y, int x2, ToolData *data)
static void ink_hline16_opaque(int x1, int y, int x2, ToolData *data)
{
int c = data->color;
@ -1773,7 +1780,7 @@ static void ink_hline2_opaque(int x1, int y, int x2, ToolData *data)
*dst_address = c );
}
static void ink_hline1_opaque(int x1, int y, int x2, ToolData *data)
static void ink_hline8_opaque(int x1, int y, int x2, ToolData *data)
{
int c = data->color;
@ -1788,7 +1795,7 @@ static void ink_hline1_opaque(int x1, int y, int x2, ToolData *data)
/* Glass Ink */
/**********************************************************************/
static void ink_hline4_glass(int x1, int y, int x2, ToolData *data)
static void ink_hline32_glass(int x1, int y, int x2, ToolData *data)
{
int color = data->color;
int opacity = data->opacity;
@ -1798,7 +1805,7 @@ static void ink_hline4_glass(int x1, int y, int x2, ToolData *data)
*dst_address = _rgba_blend_normal(*src_address, color, opacity));
}
static void ink_hline2_glass(int x1, int y, int x2, ToolData *data)
static void ink_hline16_glass(int x1, int y, int x2, ToolData *data)
{
int color = data->color;
int opacity = data->opacity;
@ -1808,7 +1815,7 @@ static void ink_hline2_glass(int x1, int y, int x2, ToolData *data)
*dst_address = _graya_blend_normal(*src_address, color, opacity));
}
static void ink_hline1_glass(int x1, int y, int x2, ToolData *data)
static void ink_hline8_glass(int x1, int y, int x2, ToolData *data)
{
Palette *pal = get_current_palette();
ase_uint32 c;
@ -1830,7 +1837,7 @@ static void ink_hline1_glass(int x1, int y, int x2, ToolData *data)
/* Soften Ink */
/**********************************************************************/
static void ink_hline4_soften(int x1, int y, int x2, ToolData *data)
static void ink_hline32_soften(int x1, int y, int x2, ToolData *data)
{
int c, r, g, b, a;
int opacity = data->opacity;
@ -1880,7 +1887,7 @@ static void ink_hline4_soften(int x1, int y, int x2, ToolData *data)
});
}
static void ink_hline2_soften(int x1, int y, int x2, ToolData *data)
static void ink_hline16_soften(int x1, int y, int x2, ToolData *data)
{
int c, v, a;
int opacity = data->opacity;
@ -1924,7 +1931,7 @@ static void ink_hline2_soften(int x1, int y, int x2, ToolData *data)
});
}
static void ink_hline1_soften(int x1, int y, int x2, ToolData *data)
static void ink_hline8_soften(int x1, int y, int x2, ToolData *data)
{
Palette *pal = get_current_palette();
int c, r, g, b, a;
@ -1978,7 +1985,7 @@ static void ink_hline1_soften(int x1, int y, int x2, ToolData *data)
/* Replace Ink */
/**********************************************************************/
static void ink_hline4_replace(int x1, int y, int x2, ToolData *data)
static void ink_hline32_replace(int x1, int y, int x2, ToolData *data)
{
int color = data->color;
int other_color = data->other_color;
@ -1991,7 +1998,7 @@ static void ink_hline4_replace(int x1, int y, int x2, ToolData *data)
});
}
static void ink_hline2_replace(int x1, int y, int x2, ToolData *data)
static void ink_hline16_replace(int x1, int y, int x2, ToolData *data)
{
int color = data->color;
int other_color = data->other_color;
@ -2004,7 +2011,7 @@ static void ink_hline2_replace(int x1, int y, int x2, ToolData *data)
});
}
static void ink_hline1_replace(int x1, int y, int x2, ToolData *data)
static void ink_hline8_replace(int x1, int y, int x2, ToolData *data)
{
int other_color = data->other_color;
Palette *pal = get_current_palette();
@ -2048,7 +2055,7 @@ static void ink_hline1_replace(int x1, int y, int x2, ToolData *data)
} \
color = image_getpixel(data->src_image, u, v);
static void ink_hline4_jumble(int x1, int y, int x2, ToolData *data)
static void ink_hline32_jumble(int x1, int y, int x2, ToolData *data)
{
int opacity = data->opacity;
int speed_x = data->vector.x/4;
@ -2065,7 +2072,7 @@ static void ink_hline4_jumble(int x1, int y, int x2, ToolData *data)
);
}
static void ink_hline2_jumble(int x1, int y, int x2, ToolData *data)
static void ink_hline16_jumble(int x1, int y, int x2, ToolData *data)
{
int opacity = data->opacity;
int speed_x = data->vector.x/4;
@ -2082,7 +2089,7 @@ static void ink_hline2_jumble(int x1, int y, int x2, ToolData *data)
);
}
static void ink_hline1_jumble(int x1, int y, int x2, ToolData *data)
static void ink_hline8_jumble(int x1, int y, int x2, ToolData *data)
{
Palette *pal = get_current_palette();
ase_uint32 c, tc;

View File

@ -50,6 +50,7 @@ enum {
BLEND_MODE_COLOR,
BLEND_MODE_LUMINOSITY,
BLEND_MODE_COPY,
BLEND_MODE_MAX,
};
typedef int (*BLEND_COLOR) (int back, int front, int opacity);

View File

@ -54,7 +54,7 @@
}
#define IMAGE_ADDRESS(image,x,y) \
((void *)(image)->line[(y)] + IMAGE_LINE_SIZE((image), (x))) \
((void *)((image)->line[(y)] + IMAGE_LINE_SIZE((image), (x)))) \
#define IMAGE_SHIFT(d) \
(((d)->imgtype == IMAGE_RGB)? 2: \

View File

@ -226,54 +226,21 @@ static int get_max_layer_num(Layer *layer);
Layer *NewLayer(Sprite *sprite)
{
Layer *layer;
#if 0
Image *image;
Cel *cel;
int index;
#endif
if (sprite == NULL) {
console_printf("NewLayer: No current sprite\n");
return NULL;
}
/* new image */
#if 0
image = image_new(sprite->imgtype, sprite->w, sprite->h);
if (!image) {
console_printf("NewLayer: Not enough memory\n");
return NULL;
}
#endif
/* new layer */
layer = layer_new(sprite);
if (!layer) {
#if 0
image_free(image);
#endif
console_printf("NewLayer: Not enough memory\n");
return NULL;
}
#if 0
/* clear with mask color */
image_clear(image, 0);
#endif
/* configure layer name and blend mode */
layer_set_blend_mode(layer, BLEND_MODE_NORMAL);
#if 0
/* add image in the layer stock */
index = stock_add_image(sprite->stock, image);
/* create a new cel in the current frame */
cel = cel_new(sprite->frame, index);
/* add cel */
layer_add_cel(layer, cel);
#endif
/* undo stuff */
if (undo_is_enabled(sprite->undo)) {
@ -386,7 +353,6 @@ char *GetUniqueLayerName(Sprite *sprite)
Layer *FlattenLayers(Sprite *sprite)
{
bool is_new_background = FALSE;
JLink link, next;
Layer *background;
Image *image;
@ -406,6 +372,10 @@ Layer *FlattenLayers(Sprite *sprite)
return NULL;
}
/* open undo */
if (undo_is_enabled(sprite->undo))
undo_open(sprite->undo);
/* get the background layer from the sprite */
background = sprite_get_background_layer(sprite);
if (!background) {
@ -417,9 +387,15 @@ Layer *FlattenLayers(Sprite *sprite)
return NULL;
}
layer_configure_as_background(background);
if (undo_is_enabled(sprite->undo))
undo_add_layer(sprite->undo, sprite->set, background);
is_new_background = TRUE;
layer_add_layer(sprite->set, background);
if (undo_is_enabled(sprite->undo))
undo_move_layer(sprite->undo, background);
layer_configure_as_background(background);
/* get the color to clean the temporary image in each frame */
bgcolor = get_color_for_image(sprite->imgtype,
@ -428,18 +404,6 @@ Layer *FlattenLayers(Sprite *sprite)
else
bgcolor = 0;
/* open undo */
if (undo_is_enabled(sprite->undo))
undo_open(sprite->undo);
/* add the new layer */
if (is_new_background) {
if (undo_is_enabled(sprite->undo))
undo_add_layer(sprite->undo, sprite->set, background);
layer_add_layer(sprite->set, background);
}
/* copy all frames to the background */
for (frame=0; frame<sprite->frames; frame++) {
/* clear the image and render this frame */
@ -462,8 +426,7 @@ Layer *FlattenLayers(Sprite *sprite)
}
else {
/* if there aren't a cel in this frame in the background, we
have to create a copy of the image for the new cel which will
be created */
have to create a copy of the image for the new cel */
cel_image = image_new_copy(image);
/* TODO error handling: if (!cel_image) { ... } */

View File

@ -44,8 +44,6 @@ static Layer *dst_layer = NULL;
static int src_frame = 0;
static int dst_frame = 0;
static bool frame_is_empty(Sprite *sprite, Layer *layer, int frame);
void set_frame_to_handle(Layer *_src_layer, int _src_frame,
Layer *_dst_layer, int _dst_frame)
{
@ -230,27 +228,3 @@ void copy_cel(void)
set_frame_to_handle(NULL, 0, NULL, 0);
}
static bool frame_is_empty(Sprite *sprite, Layer *layer, int frame)
{
switch (layer->gfxobj.type) {
case GFXOBJ_LAYER_IMAGE: {
Cel *cel = layer_get_cel(layer, frame);
if (cel != NULL)
return FALSE;
break;
}
case GFXOBJ_LAYER_SET: {
JLink link;
JI_LIST_FOR_EACH(layer->layers, link)
if (!frame_is_empty(sprite, link->data, frame))
return FALSE;
break;
}
}
return TRUE;
}

View File

@ -212,7 +212,7 @@ void paste_from_clipboard(void)
}
if (paste) {
int c, u1, v1, u2, v2;
int c, w, h, u1, v1, u2, v2;
/* align to the destination cel-position */
for (c=0; c<4; ++c) {
@ -226,14 +226,19 @@ void paste_from_clipboard(void)
u2 = MIN(dest_image->w-1, MAX(xout[0], MAX(xout[1], MAX(xout[2], xout[3]))));
v2 = MIN(dest_image->h-1, MAX(yout[0], MAX(yout[1], MAX(yout[2], yout[3]))));
/* undo region */
if (undo_is_enabled(current_sprite->undo))
undo_image(current_sprite->undo, dest_image, u1, v1, u2-u1+1, v2-v1+1);
w = u2-u1+1;
h = v2-v1+1;
/* draw the transformed image */
image_parallelogram(dest_image, image,
xout[0], yout[0], xout[1], yout[1],
xout[2], yout[2], xout[3], yout[3]);
if (w >= 1 && h >= 1) {
/* undo region */
if (undo_is_enabled(current_sprite->undo))
undo_image(current_sprite->undo, dest_image, u1, v1, w, h);
/* draw the transformed image */
image_parallelogram(dest_image, image,
xout[0], yout[0], xout[1], yout[1],
xout[2], yout[2], xout[3], yout[3]);
}
}
update_screen_for_sprite(current_sprite);

View File

@ -21,6 +21,8 @@
#include "config.h"
#include <assert.h>
#include "jinete/jlist.h"
#include "modules/palettes.h"
@ -42,9 +44,9 @@ static void render_layer(Sprite *sprite, Layer *layer, Image *image,
bool render_background,
bool render_transparent);
static void merge_zoomed_image1(Image *dst, Image *src, int x, int y, int opacity, int blend_mode, int zoom);
static void merge_zoomed_image2(Image *dst, Image *src, int x, int y, int opacity, int blend_mode, int zoom);
static void merge_zoomed_image4(Image *dst, Image *src, int x, int y, int opacity, int blend_mode, int zoom);
static void merge_zoomed_image8(Image *dst, Image *src, int x, int y, int opacity, int blend_mode, int zoom);
static void merge_zoomed_image16(Image *dst, Image *src, int x, int y, int opacity, int blend_mode, int zoom);
static void merge_zoomed_image32(Image *dst, Image *src, int x, int y, int opacity, int blend_mode, int zoom);
void set_preview_image(Layer *layer, Image *image)
{
@ -74,17 +76,17 @@ Image *render_sprite(Sprite *sprite,
case IMAGE_RGB:
depth = 32;
zoomed_func = merge_zoomed_image4;
zoomed_func = merge_zoomed_image32;
break;
case IMAGE_GRAYSCALE:
depth = 8;
zoomed_func = merge_zoomed_image2;
zoomed_func = merge_zoomed_image16;
break;
case IMAGE_INDEXED:
depth = 8;
zoomed_func = merge_zoomed_image1;
zoomed_func = merge_zoomed_image8;
break;
default:
@ -258,7 +260,7 @@ static void render_layer(Sprite *sprite, Layer *layer, Image *image,
}
}
static void merge_zoomed_image1(Image *dst, Image *src,
static void merge_zoomed_image8(Image *dst, Image *src,
int x, int y, int opacity,
int blend_mode, int zoom)
{
@ -408,11 +410,11 @@ done_with_blit:;
jfree(scanline);
}
static void merge_zoomed_image2(Image *dst, Image *src,
int x, int y, int opacity,
int blend_mode, int zoom)
static void merge_zoomed_image16(Image *dst, Image *src,
int x, int y, int opacity,
int blend_mode, int zoom)
{
BLEND_COLOR blender = _graya_blenders[blend_mode];
BLEND_COLOR blender;
ase_uint16 *src_address;
ase_uint16 *dst_address;
ase_uint16 *scanline, *scanline_address;
@ -422,6 +424,10 @@ static void merge_zoomed_image2(Image *dst, Image *src,
int sizeof_box, offsetx, offsety;
int line_x, line_h, right, bottom;
assert(blend_mode >= 0 && blend_mode < BLEND_MODE_MAX);
blender = _graya_blenders[blend_mode];
box_w = 1<<zoom;
box_h = 1<<zoom;
@ -549,11 +555,11 @@ done_with_blit:;
jfree(scanline);
}
static void merge_zoomed_image4(Image *dst, Image *src,
int x, int y, int opacity,
int blend_mode, int zoom)
static void merge_zoomed_image32(Image *dst, Image *src,
int x, int y, int opacity,
int blend_mode, int zoom)
{
BLEND_COLOR blender = _rgba_blenders[blend_mode];
BLEND_COLOR blender;
ase_uint32 *src_address;
ase_uint32 *dst_address;
ase_uint32 *scanline, *scanline_address;
@ -563,6 +569,10 @@ static void merge_zoomed_image4(Image *dst, Image *src,
int sizeof_box, offsetx, offsety;
int line_x, line_h, right, bottom;
assert(blend_mode >= 0 && blend_mode < BLEND_MODE_MAX);
blender = _rgba_blenders[blend_mode];
box_w = 1<<zoom;
box_h = 1<<zoom;

View File

@ -435,8 +435,10 @@ static bool colorbar_msg_proc(JWidget widget, JMessage msg)
if (jwidget_has_capture(widget)) {
/* drag and drop a color */
if (colorbar->hot_drag != colorbar->hot_drop) {
color_t color = colorbar_get_hotcolor(widget, colorbar->hot_drag);
colorbar_set_hotcolor(widget, colorbar->hot_drop, color);
if (colorbar->hot_drop != HOTCOLOR_NONE) {
color_t color = colorbar_get_hotcolor(widget, colorbar->hot_drag);
colorbar_set_hotcolor(widget, colorbar->hot_drop, color);
}
jwidget_dirty(widget);
}
/* pick the color */

View File

@ -216,9 +216,10 @@ static void colorbutton_draw(JWidget widget)
{
ColorButton *colorbutton = colorbutton_data(widget);
struct jrect box, text, icon;
jwidget_get_texticon_info(widget, &box, &text, &icon, 0, 0, 0);
char buf[256];
jwidget_get_texticon_info(widget, &box, &text, &icon, 0, 0, 0);
draw_color_button
(ji_screen,
widget->rc->x1, widget->rc->y1,

View File

@ -1071,7 +1071,7 @@ static bool editor_msg_proc(JWidget widget, JMessage msg)
return TRUE;
}
/* draw */
else if (current_tool) {
else if (current_tool && editor->sprite->layer) {
editor->state = EDIT_DRAWING;
}

View File

@ -144,7 +144,7 @@ void statusbar_set_text(JWidget widget, int msecs, const char *format, ...)
if (widget->text)
jfree(widget->text);
widget->text = buf ? jstrdup(buf) : NULL;
widget->text = jstrdup(buf);
statusbar->timeout = ji_clock + msecs;
jwidget_dirty(widget);
}

View File

@ -20,7 +20,11 @@
#ifdef JPEG_INTERNALS
#undef RIGHT_SHIFT_IS_UNSIGNED
#define INLINE __inline__
#ifdef __GNUC__
#define INLINE __inline__
#else
#define INLINE
#endif
/* These are for configuring the JPEG memory manager. */
#undef DEFAULT_MAX_MEM
#undef NO_MKTEMP