From: Matt A. <ar...@rp...> - 2010-02-16 18:58:57
|
I'm trying to use transparency, but there seem to be some missing functions. In particular, Graphics.UI.Gtk.Gdk.Screen.screenGetRGBAColormap is used in demo/cairo/Clock.hs, which doesn't work: Clock.hs:296:20: Not in scope: `screenGetRGBAColormap' The gtk2hs documentation however does have this function listed, but it doesn't work and I can't find it in the source. Additionally the documentation for the Colormap type seems to also be missing. Is this actually missing or am I just crazy? - Matt Arsenault |
From: Felipe L. <fel...@gm...> - 2010-02-16 19:06:46
|
On Tue, Feb 16, 2010 at 01:58:54PM -0500, Matt Arsenault wrote: > I'm trying to use transparency, but there seem to be some missing > functions. In particular, > Graphics.UI.Gtk.Gdk.Screen.screenGetRGBAColormap is used in > demo/cairo/Clock.hs, which doesn't work: > Clock.hs:296:20: Not in scope: `screenGetRGBAColormap' > > The gtk2hs documentation however does have this function listed, but it > doesn't work and I can't find it in the source. Additionally the > documentation for the Colormap type seems to also be missing. With Gtk+ 2.18.6 and Gtk2Hs 0.10.1: Prelude> :m Graphics.UI.Gtk.Gdk.Screen Prelude Graphics.UI.Gtk.Gdk.Screen> :t screenGetRGBAColormap screenGetRGBAColormap :: Screen -> IO (Maybe Graphics.UI.Gtk.Types.Colormap) Documentation says it wasn't available before Gdk 2.8, perhaps you have an old version? $ pkg-config --modversion gdk-2.0 2.18.6 $ ghc-pkg latest gtk gtk-0.10.1 Just guessing, hope that helps :) -- Felipe. |
From: Matt A. <ar...@rp...> - 2010-02-16 19:09:16
|
> With Gtk+ 2.18.6 and Gtk2Hs 0.10.1: > > Prelude> :m Graphics.UI.Gtk.Gdk.Screen > Prelude Graphics.UI.Gtk.Gdk.Screen> :t screenGetRGBAColormap > screenGetRGBAColormap > :: Screen -> IO (Maybe Graphics.UI.Gtk.Types.Colormap) > > Documentation says it wasn't available before Gdk 2.8, perhaps > you have an old version? > > $ pkg-config --modversion gdk-2.0 > 2.18.6 > $ ghc-pkg latest gtk > gtk-0.10.1 > I have the same versions for both. I've also repeated the problem on a different machine using gtk2hs from darcs. |
From: Matt A. <ar...@rp...> - 2010-02-16 20:06:20
|
On Tue, 2010-02-16 at 17:39 -0200, Felipe Lessa wrote: > On Tue, Feb 16, 2010 at 02:09:13PM -0500, Matt Arsenault wrote: > > I have the same versions for both. I've also repeated the problem on a > > different machine using gtk2hs from darcs. > > That's strange. File gtk/Graphics/UI/Gtk/Gdk/Screen.chs.pp on > the source says > > #if GTK_CHECK_VERSION(2,8,0) > -- | Gets a colormap to use for creating windows or pixmaps with an alpha > -- channel. The windowing system on which Gtk+ is running may not support this > -- capability, in which case @Nothing@ will be returned. Even if a > -- non-@Nothing@ value is returned, its possible that the window's alpha > -- channel won't be honored when displaying the window on the screen: in > -- particular, for X an appropriate windowing manager and compositing manager > -- must be running to provide appropriate display. > -- > -- * Available since Gdk version 2.8 > -- > screenGetRGBAColormap :: Screen > -> IO (Maybe Colormap) -- ^ returns a colormap to use for windows with an > -- alpha channel or @Nothing@ if the capability is not > -- available. > screenGetRGBAColormap self = > maybeNull (makeNewGObject mkColormap) $ > {# call gdk_screen_get_rgba_colormap #} > self > I looked again, and that isn't in the darcs source that I've been looking at. I apparently wasn't using the 0.10 release. I looked in the 0.10 tarball, and that is there and is now working. However, it's still missing in darcs. Was it actually removed, and why, or is it just me? - Matt Arsenault |
From: Felipe L. <fel...@gm...> - 2010-02-16 19:39:22
|
On Tue, Feb 16, 2010 at 02:09:13PM -0500, Matt Arsenault wrote: > I have the same versions for both. I've also repeated the problem on a > different machine using gtk2hs from darcs. That's strange. File gtk/Graphics/UI/Gtk/Gdk/Screen.chs.pp on the source says #if GTK_CHECK_VERSION(2,8,0) -- | Gets a colormap to use for creating windows or pixmaps with an alpha -- channel. The windowing system on which Gtk+ is running may not support this -- capability, in which case @Nothing@ will be returned. Even if a -- non-@Nothing@ value is returned, its possible that the window's alpha -- channel won't be honored when displaying the window on the screen: in -- particular, for X an appropriate windowing manager and compositing manager -- must be running to provide appropriate display. -- -- * Available since Gdk version 2.8 -- screenGetRGBAColormap :: Screen -> IO (Maybe Colormap) -- ^ returns a colormap to use for windows with an -- alpha channel or @Nothing@ if the capability is not -- available. screenGetRGBAColormap self = maybeNull (makeNewGObject mkColormap) $ {# call gdk_screen_get_rgba_colormap #} self Perhaps that GTK_CHECK_VERSION macro is not working on your system, I'd say. After the configure step, what does this give you? $ grep '#.*_GTK_.*_VERSION' gtk2hs-config.h #define _GTK_MAJOR_VERSION (2) #define _GTK_MICRO_VERSION (6) #define _GTK_MINOR_VERSION (18) HTH, -- Felipe. |
From: Axel S. <Axe...@in...> - 2010-02-17 07:36:43
|
Hi Matt and al, On 16.02.2010, at 21:06, Matt Arsenault wrote: > On Tue, 2010-02-16 at 17:39 -0200, Felipe Lessa wrote: >> On Tue, Feb 16, 2010 at 02:09:13PM -0500, Matt Arsenault wrote: >>> I have the same versions for both. I've also repeated the problem >>> on a >>> different machine using gtk2hs from darcs. >> >> That's strange. File gtk/Graphics/UI/Gtk/Gdk/Screen.chs.pp on >> the source says >> >> #if GTK_CHECK_VERSION(2,8,0) >> -- | Gets a colormap to use for creating windows or pixmaps with >> an alpha >> -- channel. The windowing system on which Gtk+ is running may not >> support this >> -- capability, in which case @Nothing@ will be returned. Even if a >> -- non-@Nothing@ value is returned, its possible that the >> window's alpha >> -- channel won't be honored when displaying the window on the >> screen: in >> -- particular, for X an appropriate windowing manager and >> compositing manager >> -- must be running to provide appropriate display. >> -- >> -- * Available since Gdk version 2.8 >> -- >> screenGetRGBAColormap :: Screen >> -> IO (Maybe Colormap) -- ^ returns a colormap to use for >> windows with an >> -- alpha channel or @Nothing@ if the >> capability is not >> -- available. >> screenGetRGBAColormap self = >> maybeNull (makeNewGObject mkColormap) $ >> {# call gdk_screen_get_rgba_colormap #} >> self >> > > I looked again, and that isn't in the darcs source that I've been > looking at. I apparently wasn't using the 0.10 release. I looked in > the > 0.10 tarball, and that is there and is now working. > > However, it's still missing in darcs. Was it actually removed, and > why, > or is it just me? I don't see it either. I might have removed it, possibly by accident. Originally I didn't want to bind anything regarding to Colormaps since it seems that they are not really required on displays with 24 color depth. The only time that people ask about functions regarding colormaps, it's usually because they need to pass them into some other function that expects a Colormap. In case my judgement was wrong because either we have embedded systems with less than 16.7M colors or because we need to distinguish between RGB and RGBA and that this really requires Colormap, then we/I need to add all those functions. In what context do you need this function? Cheers, Axel. |
From: Matt A. <ar...@rp...> - 2010-02-17 14:34:10
|
On Wed, 2010-02-17 at 08:36 +0100, Axel Simon wrote: > > In what context do you need this function? > > Cheers, > Axel. > To get a transparent window background or transparent widgets, you need to set an RGBA colormap on them. Then you can use cairo to draw a transparent background, and create shaped windows and such. There are seem to be other ways to do it, but they are more work and rather hacky. http://www.cimitan.com/blog/2007/12/12/gtk-rgba-transparent-widgets-with-the-murrine-engine/ I'm currently using it with this function (which is in the Cairo clock demo, to get a circular clock window) which sets an RGBA colormap if supported, and otherwise does nothing. setAlpha widget = do screen <- widgetGetScreen widget colormap <- screenGetRGBAColormap screen maybe (return ()) (widgetSetColormap widget) colormap |