Commit Graph

179 Commits

Author SHA1 Message Date
25aec86548 don't use ceil, use SCALEX. Round hopefully more properly.
2007-12-29  Simon Budig  <simon@gimp.org>

        * app/display/gimpdisplayshell.c: don't use ceil, use SCALEX.
	* app/display/gimpdisplayshell-transform.c: Round hopefully more
	properly.

	This probably exchanges one set of artefacts for another one...

	* app/display/gimpdisplayshell-render.c: minor fixes.
	* app/display/gimpdisplayshell-selection.c: whitespace fix


svn path=/trunk/; revision=24457
2007-12-28 23:13:46 +00:00
53f3123847 added code for 1 and 3 bytes per pixel. Fixes bug #504115.
2007-12-18  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplayshell-render.c
	(render_image_tile_fault_nearest): added code for 1 and 3 bytes
	per pixel. Fixes bug #504115.


svn path=/trunk/; revision=24387
2007-12-18 08:46:40 +00:00
1b4f87189d app/base/tile-pyramid.c (tile_pyramid_write_quarter) corrected formula
2007-12-13  Sven Neumann  <sven@gimp.org>

	* app/base/tile-pyramid.c (tile_pyramid_write_quarter)
	* app/display/gimpdisplayshell-render.c
	(render_image_tile_fault_nearest): corrected formula used for
	pre-multiplying the alpha value.


svn path=/trunk/; revision=24353
2007-12-13 19:00:00 +00:00
aaa16d3b87 Speed up our display rendering code paths by keeping data with
2007-12-13  Sven Neumann  <sven@gimp.org>

	Speed up our display rendering code paths by keeping data with
	pre-multiplied alpha where possible. The projection tile-manager
	at 100 % zoom is not affected. So we can still always get the
	non-pre-multiplied pixel data.

	* app/core/gimpprojection.[ch]: removed
	gimp_projection_get_opacity(), the projection is always opaque.

	* app/base/tile-pyramid.[ch]: use pre-multiplied alpha for the
	upper levels of the pyramid. This speeds up validation of the
	upper levels significantly.

	* app/base/temp-buf.[ch]: added temp_buf_demultiply().

	* app/core/gimpimage-preview.c: demultiply the preview temp-buf
	obtained from the projection's tile tyramid.

	* app/display/gimpdisplayshell-draw.c
	* app/display/gimpdisplayshell-render.c: added code to deal with
	pre-multiplied data. In fact all data returned by
	render_image_tile_fault() is now pre-multiplied so that
	render_image_rgb_a() and render_image_gray_a() don't need to use
	the large lookup tables from gimprender.[ch] any longer.

svn path=/trunk/; revision=24352
2007-12-13 17:27:07 +00:00
c1ec276567 shift only by 4 bits instead of 8. Should still keep us from overflowing
2007-10-30  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplayshell-render.c (box_filter): shift only
	by 4 bits instead of 8. Should still keep us from overflowing 32
	bit integers but reduces the rounding error and seems to really
	fix bug #491503.


svn path=/trunk/; revision=23996
2007-10-30 22:03:32 +00:00
c6e030dca2 reduce rounding errors. Fixed bug #491503.
2007-10-30  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplayshell-render.c (box_filter): reduce
	rounding errors. Fixed bug #491503.

	* app/base/tile-pyramid.c (tile_pyramid_write_quarter): reduce
	rounding errors.


svn path=/trunk/; revision=23986
2007-10-30 08:39:51 +00:00
4ba204a2a8 tiny cosmetic cleanups.
2007-10-19  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplayshell-render.c: tiny cosmetic cleanups.


svn path=/trunk/; revision=23886
2007-10-19 07:03:33 +00:00
4bfde23c61 fixed calculation of the alpha value.
2007-10-18  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplayshell-render.c (box_filter): fixed
	calculation of the alpha value.


svn path=/trunk/; revision=23864
2007-10-18 08:07:26 +00:00
9f2174fcdf sprinkled some const qualifiers.
2007-10-17  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplayshell-render.c (box_filter): sprinkled
	some const qualifiers.


svn path=/trunk/; revision=23862
2007-10-17 19:25:01 +00:00
38f72c00ac removed level from GimpDisplayShell struct.
2007-10-08  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplayshell.[ch]: removed level from
	GimpDisplayShell struct.

	* app/display/gimpdisplayshell-render.c: fixed rendering of the 
mask.
	Closes bug #448417 again.


svn path=/trunk/; revision=23767
2007-10-08 19:53:43 +00:00
95c6df090f app/config/gimpdisplayconfig.[ch] app/config/gimprc-blurbs.h
2007-10-08  Sven Neumann  <sven@gimp.org>

	* app/config/gimpdisplayconfig.[ch]
	* app/config/gimprc-blurbs.h
	* app/display/display-enums.[ch]
	* app/display/gimpdisplayshell-handlers.c
	* app/display/gimpdisplayshell-render.c: allow to configure the
	display zoom quality.

	* app/display/gimpdisplayshell-transform.c: formatting. 

svn path=/trunk/; revision=23760
2007-10-08 13:30:49 +00:00
682695a80d app/display/gimpdisplayshell.[ch] 64bittified the code so that the new
2007-09-30  Simon Budig  <simon@gimp.org>

	* app/display/gimpdisplayshell.[ch]
	* app/display/gimpdisplayshell-render.c: 64bittified the code so
	  that the new renderer also works for big images. Slightly
	  reorganized.

	* app/display/gimpdisplayshell-transform.c: Another go at
	  bug #474509. This even might be fixed now...


svn path=/trunk/; revision=23698
2007-09-30 17:24:47 +00:00
2f4e32a7d5 fix the numerical overflow for the new box-filtering stuff.
2007-09-26  Simon Budig  <simon@gimp.org>

	* app/display/gimpdisplayshell-render.c: fix the numerical overflow
	for the new box-filtering stuff.

	Fixes bug #479807.


svn path=/trunk/; revision=23659
2007-09-26 14:49:21 +00:00
816889b544 removed const qualifiers to fix compilation on Solaris 8 (bug #479817).
2007-09-24  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplayshell-render.c: removed const qualifiers
	to fix compilation on Solaris 8 (bug #479817).

svn path=/trunk/; revision=23642
2007-09-24 15:43:01 +00:00
a26c1d7df9 oops - managed to miss the mask rendering.
2007-09-23  Simon Budig  <simon@gimp.org>

	* app/display/gimpdisplayshell-render.c: oops - managed to miss the
	mask rendering.


svn path=/trunk/; revision=23619
2007-09-23 00:57:15 +00:00
7d0a4ce1ec use Bresenham stepping for the y-direction as well.
2007-09-23  Simon Budig  <simon@gimp.org>

	* app/display/gimpdisplayshell-render.c: use Bresenham stepping
	for the y-direction as well.

	Fixes bug #474509.

	Retired old and unused functions.


svn path=/trunk/; revision=23618
2007-09-23 00:36:17 +00:00
40f66e9c13 implement bresenham-like stepping for interpolating the view in
2007-09-23  Simon Budig  <simon@gimp.org>

	* app/display/gimpdisplayshell-render.c: implement
	bresenham-like stepping for interpolating the view in
	x-direction. Since I now know how it is supposed to work
	the y direction will follow shortly.

	Adresses bug #474509.


svn path=/trunk/; revision=23617
2007-09-22 22:28:51 +00:00
98222b0359 avoid rendering issues by adding xdelta/2 to xstart.
2007-09-17  Simon Budig  <simon@gimp.org>

	* app/display/gimpdisplayshell-render.c: avoid rendering
	issues by adding xdelta/2 to xstart.

	Probably fixes bug #474509.


svn path=/trunk/; revision=23569
2007-09-16 23:38:37 +00:00
ff80ac1701 formatting.
2007-09-14  Sven Neumann  <sven@gimp.org>

	* app/base/tile-pyramid.c: formatting.

	* app/display/gimpdisplayshell-render.c: removed unused include.

svn path=/trunk/; revision=23545
2007-09-14 13:44:32 +00:00
eb8924c0cb clone the middle row/column when walking off the source drawable during
* app/display/gimpdisplayshell-render.c: (render_image_tile_fault),
(render_image_tile_fault_one_row): clone the middle row/column when
walking off the source drawable during downscaling. Probably fixes bug
#469567.

svn path=/trunk/; revision=23521
2007-09-12 20:26:58 +00:00
1954ee81fe use the offsets module TILE_WIDTH and TILE_HEIGHT instead of doing the
2007-09-12  Sven Neumann  <sven@gimp.org>

	* app/base/tile.c (tile_data_pointer): use the offsets module
	TILE_WIDTH and TILE_HEIGHT instead of doing the module operation
	in each and every caller.

	* app/base/boundary.c
	* app/base/pixel-region.c
	* app/base/tile-manager.c
	* app/core/gimpchannel.c
	* app/core/gimpdrawable-blend.c
	* app/core/gimpdrawable.c
	* app/core/gimpimage-contiguous-region.c
	* app/core/gimplayer.c
	* app/display/gimpdisplayshell-render.c
	* app/paint-funcs/paint-funcs.c
	* app/paint/gimppaintcore.c
	* app/tools/gimpiscissorstool.c: changed accordingly.


svn path=/trunk/; revision=23515
2007-09-12 18:29:11 +00:00
4ec78466fd formatting.
2007-09-11  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplayshell-render.c: formatting.

svn path=/trunk/; revision=23502
2007-09-11 14:45:06 +00:00
aec18403a9 use nearest neighbour resampling when rendering for a 1byte per pixel
* app/display/gimpdisplayshell-render.c: (render_image_tile_fault):
use nearest neighbour resampling when rendering for a 1byte per pixel
drawable (ony happens when interacting with the SIOX tool, and then
the buffer is a indexed; not a greyscale buffer), fixes bug #472027.

svn path=/trunk/; revision=23424
2007-08-31 10:04:37 +00:00
b520112784 do not use anti-aliasing when the zoom is exactly 200%. Fixes bug #472150.
2007-08-31  Raphael Quinet  <raphael@gimp.org>

	* app/display/gimpdisplayshell-render.c (render_image_tile_fault):
	do not use anti-aliasing when the zoom is exactly 200%.  Fixes bug
	#472150.  Also miscellaneous cosmetic changes.

svn path=/trunk/; revision=23423
2007-08-31 09:36:16 +00:00
8f8c98d1cc s/compute_sample/box_filter/.
* app/display/gimpdisplayshell-render.c: s/compute_sample/box_filter/.

svn path=/trunk/; revision=23365
2007-08-24 16:13:27 +00:00
8f5819a5f6 swapped center and middle terms around (now center means horizontal
* app/display/gimpdisplayshell-render.c: swapped center and middle
terms around (now center means horizontal (betwen left and right )and
middle means vertical (between top and bottom)).

svn path=/trunk/; revision=23363
2007-08-24 16:00:48 +00:00
a3a6253291 removed a temporary variable, simplified logic slightly.
* app/display/gimpdisplayshell-render.c: (compute_sample): removed
a temporary variable, simplified logic slightly.
(render_image_tile_fault, render_image_tile_fault_one_row): moved
sum computation out of loop.

svn path=/trunk/; revision=23362
2007-08-24 15:58:49 +00:00
d51e3c42f7 Replaced signed integres with unsigned ones for weights etc to gain some
* app/display/gimpdisplayshell-render.c: Replaced signed integres with
unsigned ones for weights etc to gain some additional bits of
precision. Enabled anti-aliasing for zoomlevels between 100% and 200%
to improve the smoothness of the display at the levels where the size
differences between pixels yields the most distracting artifacts.

svn path=/trunk/; revision=23361
2007-08-24 15:39:23 +00:00
42433749d6 Reshuffled shifting code in fixed point code of display to improve
quality.
* app/display/gimpdisplayshell-render.c:
(compute_sample): reshuffle a bit of the fixed point induced
shifting to allow higher precision.
(render_image_tile_fault): remove need to disable box-filter
for some non square zoom ratios that was needed before
compute_sample cleanup.
, (render_image_tile_fault_one_row): fetch source sample #1
from the correct tile.

svn path=/trunk/; revision=23360
2007-08-24 14:33:44 +00:00
306e21b354 fixed a division by zero issue.
* app/display/gimpdisplayshell-render.c: (compute_sample)
fixed a division by zero issue.

svn path=/trunk/; revision=23357
2007-08-24 02:34:06 +00:00
94f2404a43 added a static global variable with configuration. (compute_sample): moved
* app/display/gimpdisplayshell-render.c: added a static global
variable with configuration.
(compute_sample): moved common computation of alpha*weight factors 
for channel out of loop.

svn path=/trunk/; revision=23355
2007-08-23 20:12:49 +00:00
408f51ca59 refactored to use arrays of tiles/source pixels instead of individual
* app/display/gimpdisplayshell-render.c: (compute_sample),
(render_image_tile_fault), (render_image_tile_fault_one_row):
refactored to use arrays of tiles/source pixels instead of individual
variables, also modified the order of the 0..8 numbers to sorted
in increasing row-major order.

svn path=/trunk/; revision=23354
2007-08-23 13:37:13 +00:00
6a0935d235 refactored to use arrays of tiles/source pixels instead of individual
* app/display/gimpdisplayshell-render.c: (compute_sample),
(render_image_tile_fault), (render_image_tile_fault_one_row):
refactored to use arrays of tiles/source pixels instead of individual
variables, also modified the order of the 0..8 numbers to sorted
in increasing row-major order.

svn path=/trunk/; revision=23353
2007-08-23 13:25:30 +00:00
17ac225558 modified some constants and shifts to avoid checkerboard artifacts
svn path=/trunk/; revision=23350
2007-08-22 15:25:16 +00:00
91c63e4956 replaced bilinear interpolation from next larger pyramid level with a
* app/display/gimpdisplayshell-render.c: replaced bilinear
interpolation from next larger pyramid level with a boxfilter
of the next larger pyramid level.
This is probably the last update to the quality of the display
in GIMP 2.4.

svn path=/trunk/; revision=23349
2007-08-22 14:31:22 +00:00
cfd90e3851 added a bilinear filtering like weighting of neighbourhood pixels for
* app/display/gimpdisplayshell-render.c: added a bilinear filtering
like weighting of neighbourhood pixels for approximating the
downsampling from the next larger level in the projection mipmap.
Also some general code cleanup.

svn path=/trunk/; revision=23278
2007-08-15 21:29:43 +00:00
38dacc4571 Fixed regression at zoom levels > 100%, and moved some floating point code
* app/display/gimpdisplayshell-render.c: Fixed regression at zoom
levels > 100%, and moved some floating point code out of the worker
function.

svn path=/trunk/; revision=23251
2007-08-14 15:17:30 +00:00
2b11d50cfb replaced a computed lookup table acceleration with fixed point logic.
* app/display/gimpdisplayshell-render.c: replaced a computed lookup
table acceleration with fixed point logic.

svn path=/trunk/; revision=23249
2007-08-14 13:52:42 +00:00
0c64210b15 app/display/gimpdisplay.c formatting.
2007-08-13  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplay.c
	* app/display/gimpdisplay-render.c: formatting.


svn path=/trunk/; revision=23241
2007-08-13 19:36:18 +00:00
17f91f0491 Refactored the two helper functions render_image_init_info(_full)? and
2007-06-21  Martin Nordholts  <martinn@svn.gnome.org>

	* app/display/gimpdisplayshell-render.c (gimp_display_shell_render):
	Refactored the two helper functions render_image_init_info(_full)?
	and always use the shell base scale for the shell->mask. Fixes
	bug #448417.

svn path=/trunk/; revision=22822
2007-06-21 20:27:19 +00:00
a4079a37db minor API cleanup. Use horizontal and vertical scale to determine the
2007-06-06  Sven Neumann  <sven@gimp.org>

	* app/core/gimpprojection.[ch]: minor API cleanup. Use 
horizontal
	and vertical scale to determine the pyramid level to use.

	* app/display/gimpdisplayshell-draw.c
	* app/display/gimpdisplayshell-render.c: follow the API change.


svn path=/trunk/; revision=22730
2007-06-06 21:40:31 +00:00
7917611e53 Implemented an image pyramid for the GimpProjection. An image pyramid
2007-06-06  Martin Nordholts  <martinn@svn.gnome.org>

	Implemented an image pyramid for the GimpProjection. An image pyramid
	caches a projection at several sizes, causing the rendering code not to
	have to swap in all tiles of a (potentially) large image; it can use
	small versions of the projection if the user is zoomed out.

	The image pyramid also imroves visual quality, especially at zoom levels
	where there is a pyramid level that matches perfectly (i.e. at e.g. 50%,
	25%, and 12.5% zoom). A step on the right track for bug #76096.

	* app/core/gimpprojection.[ch]: Adjusted to make use of an image
	pyramid. GimpProjection now keeps an array of TileManager:s, one per
	pyramid level. Renamed _alloc_tiles to _alloc_levels.

	* app/display/gimpdisplayshell-draw.c: (gimp_display_shell_draw_area):
	Use the right GimpProjection level when drawing

	* app/display/gimpdisplayshell-render.c: (render_image_init_info_full):
	Setup RenderInfo with level in mind

	* app/base/tile-manager.[ch]: Extended API a bit, nothing complicated.

	* app/base/tile-manager-private.h (struct _TileManager): Keep a pointer
	to the level below for use in an image pyramid.


svn path=/trunk/; revision=22727
2007-06-06 13:45:44 +00:00
2e551e08fd sprinkled some const qualifiers and removed obscure shift code in favor of
2007-03-14  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplayshell-render.c: sprinkled some const
	qualifiers and removed obscure shift code in favor of letting the
	compiler do this optimization.


svn path=/trunk/; revision=22121
2007-03-14 14:37:04 +00:00
b95ead41e3 renamed newly added members to scale_x and scale_y and removed the
2007-03-14  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplayshell.[ch]: renamed newly added members
	to scale_x and scale_y and removed the SCALEFACTOR macros.

	* app/display/gimpdisplayshell-handlers.c
	* app/display/gimpdisplayshell-render.c
	* app/display/gimpdisplayshell-scale.c
	* app/display/gimpdisplayshell-transform.c
	* app/display/gimpnavigationeditor.c
	* app/tools/gimpforegroundselecttool.c
	* app/tools/gimprectangletool.c: changed accordingly.


svn path=/trunk/; revision=22120
2007-03-14 10:26:19 +00:00
83d3a750d4 include "libgimpmath/gimpmathtypes.h" instead of "libgimpmath/gimpmath.h".
2007-03-09  Michael Natterer  <mitch@gimp.org>

	* app/core/core-types.h: include "libgimpmath/gimpmathtypes.h"
	instead of "libgimpmath/gimpmath.h".

	* app/core/gimpbrush.h
	* app/paint/gimppaintcore.h
	* app/paint/gimpperspectiveclone.h
	* app/text/gimptext.h
	* app/tools/gimptransformtool.h: include gimpvector.h and
	gimpmatrix.h explicitely where they are needed in public structs.

	* app/*/*.c
	* tools/pdbgen/pdb/paths.pdb: include "libgimpmath/gimpmath.h"
	where needed.

	* app/pdb/paths_cmds.c: regenerated.


svn path=/trunk/; revision=22084
2007-03-09 13:00:01 +00:00
41237259c9 In all files, changed the standard copyright notice to say "GIMP - The GNU
2006-12-09  Sven Neumann  <sven@gimp.org>

        * In all files, changed the standard copyright notice to say
        "GIMP - The GNU Image Manipulation Program".
2006-12-09 21:33:38 +00:00
049872b361 app/*.[ch] converted tabs to spaces.
2006-04-12  Sven Neumann  <sven@gimp.org>

	* app/*.[ch]
	* app/*/*.[ch]: converted tabs to spaces.
2006-04-12 12:49:29 +00:00
cef9db57fe renamed gimp_drawable_data() to gimp_drawable_get_tiles().
2006-04-07  Sven Neumann  <sven@gimp.org>

	* app/core/gimpdrawable.[ch]: renamed gimp_drawable_data() to
	gimp_drawable_get_tiles().

	[lots of files]: changed accordingly.
2006-04-07 09:21:18 +00:00
5439aa4995 did a global gdisp -> display substitution.
2006-03-28  Sven Neumann  <sven@gimp.org>

	* app/*: did a global gdisp -> display substitution.
2006-03-28 17:55:52 +00:00
905fdfcbed did a global gimage -> image substitution.
2006-03-28  Sven Neumann  <sven@gimp.org>

	* app/*: did a global gimage -> image substitution.
2006-03-28 17:08:36 +00:00