On Thu, Oct 4, 2012 at 1:46 AM, Steffen Gutmann <muib...@yahoo.com> wrote: > Hi Tristan! > >> I suggest you start by filing an enhancement bug against GtkImage for this. > > Yes, I can do that. Just to make sure, I file a new bug for component gtk, > severity set to enhancement, and put somethign like "Size request of > GtkImage" into the title. Is this correct?
Right, the bug might have to do more with cropping/scaling support in GtkImage, rather than it's size request. > >> If you have a patch to propose, here would be a good place to discuss >> the proposed new apis. > > I might also be able to work on this and provide a patch. Before starting on > this, how about the following changes: > > Regarding size request: > > We add a new property of type boolean to GtkImage. If it is set (default), > the size request for GtkImage will be the size of the underlying image (or > the pixel-size), i.e. the exact same behaviour as it is now. If it is set to > FALSE then the minimum size will be (1, 1) and an application can use > "width-request" and "height-request" for making the widget size larger. I am > not sure what a good name for this new property would be, but maybe you have > a suggestion?. Something like "min-size-is-image-size" would probably make > the property self-explanatory but is obviously too long compared to other > existing property names. Maybe "full-image" or "image-size-request"? > > Regading placement: > > In GTK2, GtkImage cropped the image such that only the center is shown, i.e. > it took off an equal amount of image content on the left and right, and top > and bottom. It probably just sets the right clipping mask when drawing the > image for achieving this. We could simply use the same policy, or we modify > the usage of GtkWidget's "halign" and "valign" properties. Currently the > docs reads: > > "halign" GtkAlign : Read / Write While it's true that the align properties make no sense when the widget's natural size is equal to, or exceeds the widget's allocation; I'm not exactly sure it's a good idea to use the GtkWidget's halign/valign properties directly (i.e. it's like hidden candy, people wont see it evidently in the docs/headers for GtkImage and so will probably not discover it). However I do like the idea of GtkAlign properties for that, where FILL would mean scale and CENTER/START/END have the obvious clipping behaviors. It would have to deal well with situations where the user asked the image to scale (FILL) horizontally but to clip vertically ;-) Also, it should have reasonable behaviors defined for the various configurations of a GtkImage (i.e, how does GtkIconSize fit into this ? does it make sense to allow the image to try loading the given icon at different sizes to satisfy the allocation ? naturally the natural size of the image would have to still be determined by the user specified icon size, in the case that GtkImage be allocated extra space, should a larger icon size be tried ? and should the image be upscaled as a fallback or in situations where the source is a GdkPixbuf ?) If you're serious about working on this, I would open an enhancement bug and put your ideas there. You'll be sure to receive more feedback if you do provide a patch with some test cases showing how it works. Cheers, -Tristan > > How to distribute horizontal space if widget gets extra space, see GtkAlign > > enum GtkAlign > typedef enum { GTK_ALIGN_FILL, GTK_ALIGN_START, GTK_ALIGN_END, > GTK_ALIGN_CENTER > } GtkAlign; > > Controls how a widget deals with extra space in a single (x or y) > dimension. > > Alignment only matters if the widget receives a "too large" allocation, > for example if you packed the widget with the "expand" flag inside a GtkBox, > then the widget might get extra space. If > you have for example a 16x16 icon inside a 32x32 space, the icon > could be scaled and stretched, it could be centered, or it could be > positioned to one side of the space. > > Note that in horizontal context GTK_ALIGN_START and GTK_ALIGN_END are > interpreted relative to text direction. > GTK_ALIGN_FILL stretch to fill all space if possible, center if no meaningful > way to stretch > GTK_ALIGN_START snap to left or top side, leaving space on right or bottom > GTK_ALIGN_END snap to right or bottom side, leaving space on left or top > GTK_ALIGN_CENTER center natural width of widget inside the allocation > > My suggestion is to make halign and valign also deal with the case where the > content of the widget is larger than the allocated space. The modified docs > would then read: > > "halign" GtkAlign : Read / Write > > How to distribute horizontal space, see GtkAlign > > enum GtkAlign > typedef enum { GTK_ALIGN_FILL, GTK_ALIGN_START, GTK_ALIGN_END, > GTK_ALIGN_CENTER > } GtkAlign; > > Controls how a widget deals with space in a single (x or y) > dimension. > > Alignment only matters if the widget receives a "too large" or "too small" > allocation, > for example if you packed the widget with the "expand" flag inside a GtkBox, > then the widget might get extra space. If > you have for example a 16x16 icon inside a 32x32 space, the icon > could be scaled and stretched, it could be centered, or it could be > positioned to one side of the space. Likewise, if you have a 100x100 image > inside a 20x20 space > then the image could be scaled down, only the center part of the image be > shown, or it could > be cropped to the top left or bottom right part. > > > Note that in horizontal context GTK_ALIGN_START and GTK_ALIGN_END are > interpreted relative to text direction. > GTK_ALIGN_FILL stretch or shrink to fill all space if possible, or center if > no meaningful way to scale > GTK_ALIGN_START snap to left or top side, leaving space or cropping widget > content on right or bottom > GTK_ALIGN_END snap to right or bottom side, leaving space or cropping widget > content on left or top > GTK_ALIGN_CENTER center widget inside the allocation > > Steffen > _______________________________________________ gtk-devel-list mailing list gtk-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-devel-list