more repaint hacking
This commit is contained in:
parent
a8ffcdaaf4
commit
49d7f542cc
@ -127,6 +127,7 @@ typedef struct im__buffer_t {
|
|||||||
void im_buffer_done( im_buffer_t *buffer );
|
void im_buffer_done( im_buffer_t *buffer );
|
||||||
void im_buffer_undone( im_buffer_t *buffer );
|
void im_buffer_undone( im_buffer_t *buffer );
|
||||||
void im_buffer_unref( im_buffer_t *buffer );
|
void im_buffer_unref( im_buffer_t *buffer );
|
||||||
|
im_buffer_t *im_buffer_new( struct _VipsImage *im, Rect *area );
|
||||||
im_buffer_t *im_buffer_ref( struct _VipsImage *im, Rect *area );
|
im_buffer_t *im_buffer_ref( struct _VipsImage *im, Rect *area );
|
||||||
im_buffer_t *im_buffer_unref_ref( im_buffer_t *buffer,
|
im_buffer_t *im_buffer_unref_ref( im_buffer_t *buffer,
|
||||||
struct _VipsImage *im, Rect *area );
|
struct _VipsImage *im, Rect *area );
|
||||||
|
@ -292,8 +292,8 @@ im_buffer_unref( im_buffer_t *buffer )
|
|||||||
|
|
||||||
/* Make a new buffer.
|
/* Make a new buffer.
|
||||||
*/
|
*/
|
||||||
static im_buffer_t *
|
im_buffer_t *
|
||||||
buffer_new( IMAGE *im, Rect *area )
|
im_buffer_new( IMAGE *im, Rect *area )
|
||||||
{
|
{
|
||||||
im_buffer_t *buffer;
|
im_buffer_t *buffer;
|
||||||
|
|
||||||
@ -313,7 +313,7 @@ buffer_new( IMAGE *im, Rect *area )
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf( "** buffer_new: left = %d, top = %d, "
|
printf( "** im_buffer_new: left = %d, top = %d, "
|
||||||
"width = %d, height = %d (%p)\n",
|
"width = %d, height = %d (%p)\n",
|
||||||
buffer->area.left, buffer->area.top,
|
buffer->area.left, buffer->area.top,
|
||||||
buffer->area.width, buffer->area.height,
|
buffer->area.width, buffer->area.height,
|
||||||
@ -413,7 +413,7 @@ im_buffer_ref( IMAGE *im, Rect *area )
|
|||||||
if( !(buffer = buffer_find( im, area )) )
|
if( !(buffer = buffer_find( im, area )) )
|
||||||
/* No existing buffer ... make a new one.
|
/* No existing buffer ... make a new one.
|
||||||
*/
|
*/
|
||||||
if( !(buffer = buffer_new( im, area )) )
|
if( !(buffer = im_buffer_new( im, area )) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
|
|
||||||
return( buffer );
|
return( buffer );
|
||||||
@ -456,7 +456,7 @@ im_buffer_unref_ref( im_buffer_t *old_buffer, IMAGE *im, Rect *area )
|
|||||||
/* Fallback ... unref the old one, make a new one.
|
/* Fallback ... unref the old one, make a new one.
|
||||||
*/
|
*/
|
||||||
IM_FREEF( im_buffer_unref, old_buffer );
|
IM_FREEF( im_buffer_unref, old_buffer );
|
||||||
if( !(buffer = buffer_new( im, area )) )
|
if( !(buffer = im_buffer_new( im, area )) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
|
|
||||||
return( buffer );
|
return( buffer );
|
||||||
|
@ -452,18 +452,27 @@ im_region_buffer( REGION *reg, Rect *r )
|
|||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't call im_region_reset() ... we combine buffer unref and new
|
|
||||||
* buffer ref in one call to reduce malloc/free cycling.
|
|
||||||
*/
|
|
||||||
IM_FREEF( im_window_unref, reg->window );
|
|
||||||
if( !(reg->buffer = im_buffer_unref_ref( reg->buffer, im, &clipped )) )
|
|
||||||
return( -1 );
|
|
||||||
|
|
||||||
/* If we've been asked to drop caches, flag this as undone.
|
/* Have we been asked to drop caches? We want to throw everything
|
||||||
|
* away.
|
||||||
|
*
|
||||||
|
* If not, try to reuse the current buffer.
|
||||||
*/
|
*/
|
||||||
if( reg->invalid ) {
|
if( reg->invalid ) {
|
||||||
|
im_region_reset( reg );
|
||||||
|
if( !(reg->buffer = im_buffer_ref( im, &clipped )) )
|
||||||
|
return( -1 );
|
||||||
im_buffer_undone( reg->buffer );
|
im_buffer_undone( reg->buffer );
|
||||||
reg->invalid = FALSE;
|
}
|
||||||
|
else {
|
||||||
|
/* Don't call im_region_reset() ... we combine buffer unref
|
||||||
|
* and new buffer ref in one call to reduce malloc/free
|
||||||
|
* cycling.
|
||||||
|
*/
|
||||||
|
IM_FREEF( im_window_unref, reg->window );
|
||||||
|
if( !(reg->buffer =
|
||||||
|
im_buffer_unref_ref( reg->buffer, im, &clipped )) )
|
||||||
|
return( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Init new stuff.
|
/* Init new stuff.
|
||||||
|
Loading…
Reference in New Issue
Block a user