2008-03-18 Michael Natterer <mitch@gimp.org>
First draft of the "no image open" window, which is implemented as
a display without image (a view with NULL model). Didn't change
the display's appearance yet so I can first make sure the display
without image works properly in all details before hiding these
details.
* app/core/gimp-gui.[ch]: add "gimp" parameter to display_create()
and allow "image" to be NULL.
* app/core/gimpcontext.c (gimp_context_real_set_display): a
display's image can be NULL now.
* app/display/gimpdisplay.[ch]: add Gimp and GimpDisplayConfig
members. Add Gimp parameter to gimp_display_shell_new(). Changed
gimp_display_reconnect() to gimp_display_set_image() and allow to
set a NULL image.
* app/gui/gui-vtable.c (gui_display_create): if there is a single
display without an image, call gimp_display_set_image() on that
display instead of creating a new one.
* app/display/gimpdisplayshell-close.c: if the last display is
closed, don't close it but make it empty. Factored out that code
to gimp_display_shell_really_close().
* app/display/gimpdisplayshell-dnd.c: when dropping uris on an
empty display, open the first one into that display and the other
ones as layers of the newly opened image. This is consistent with
dropping on an existing image but maybe needs some discussion.
* app/display/gimpdisplayshell-callbacks.c: bail out early in the
tool event callback so tools never have to deal with empty
displays. In expose(), draw the drop zone on the empty display.
* app/display/gimpdisplayshell-title.c: set the empty display's
title to "Gimp - Drop Files".
* app/display/gimpdisplay-foreach.c
* app/display/gimpdisplay-handlers.c
* app/display/gimpdisplayshell-appearance.c
* app/display/gimpdisplayshell-autoscroll.c
* app/display/gimpdisplayshell-callbacks.c
* app/display/gimpdisplayshell-cursor.c
* app/display/gimpdisplayshell-dnd.c
* app/display/gimpdisplayshell-draw.c
* app/display/gimpdisplayshell-filter-dialog.c
* app/display/gimpdisplayshell-handlers.c
* app/display/gimpdisplayshell-layer-select.c
* app/display/gimpdisplayshell-preview.c
* app/display/gimpdisplayshell-render.c
* app/display/gimpdisplayshell-scale.c
* app/display/gimpdisplayshell-scroll.c
* app/display/gimpdisplayshell-selection.c
* app/display/gimpdisplayshell-title.c
* app/display/gimpdisplayshell.c
* app/display/gimpnavigationeditor.c
* app/display/gimpstatusbar.c: use display->gimp and
display->config instead of going via the image. Guard against
empty displays in some few places (most places can't be
called). Where needed, use the canvas' dimensions instead of the
image's dimensions so scroll offsets and scrollbars still have
sane values instead of the last image's ones.
* app/actions/actions.c (action_data_get_gimp)
(action_data_get_context): use display->gimp instead of
display->image->gimp.
* app/actions/edit-commands.c (edit_paste_cmd_callback): redirect
to "paste as new" if there is an empty display.
* app/actions/tools-commands.c (tools_select_cmd_callback): don't
initialize the new tool on an empty display.
* app/actions/view-actions.c (view_actions_update): changed lots
of sensitivity settings to be insensitive when there is no image
(instead of no display).
* app/actions/view-commands.c: use the display's config object
instead of gimp's.
svn path=/trunk/; revision=25113
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-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 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-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-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-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-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-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 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 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
* 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
* 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 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
* 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
* 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
* 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
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
* 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
* 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
* 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
* 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
* 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
* 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-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-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 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-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-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
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.