Create shape mask for GTK Window? - gtk

I am interested if anyone has any experience with the following function of the gtk.Window/gtk.Widget
shape_combine_mask(shape_mask, offset_x, offset_y)
I want to make the window round rather than rectangular. How do I get a shape_mask? It says that it has to be a bitmap. Should I use gtk.Pixbuf to get bitmap from an image? Or should I use cairo to get a shape with cairo_region_create_from_surface and then use another function that accepts the gtk.Region as a first argument?
It would be pretty rad if someone could post an example for this, C/C++ or preferably Python.
I use GTK version 2
Thank you in advance!

The answer to my question was provided by comment to the question and was implemented the same year in Python 2, using PyGTK and Cairo.
If anyone is interested on how to do this, you can see the working example here: https://github.com/stamat/droplets/blob/16b11c4ff96cf0b8e4fcdd85ee1cdc1fa8fb74e6/droplets/droplet.py#L127
Happy window shaping! 🪟🧩✨

Related

No support for custom shapped windows in gtk3?

I want to use a custom shaped window using gtk3. I found gtk_widget_shape_combine_mask_() in gtk2. The closest thing I can find in gtk3 is gdk_window_shape_combine_region_(), which only allows for rectangular shaped regions. Why was the support dropped? Or was it changed and implemented in a different way?
What do you mean with "why was the support dropped?".
gtk_widget_shape_combine_mask() only supports rectangular shapes, too. That's what a GdkBitmap is: An image with a bit depth of 1. This means that a pixel is either included or not.
This is basically the same as a cairo_region_t. The difference is only in how the data is stored: Instead of a bitmap, cairo_region_t uses a list of rectangles to describe the same result.
"Or was it changed and implemented in a different way?"
Yes and you already found the replacement yourself.

Is it possible to print out the state space using SPIN?

I would like SPIN to print out the computed state space, so that I can make its visualization and then manually explore it. Is that possible?
I have already checked such flags as -DCHECK and -DVERBOSE, but I guess, that those are not what I am looking for...
No, currently there is no graphical output of the searched state space in spin. It is possible to plot the program graph using graphviz dot, as described here.

Selecting a ROI manually in Matlab

I'm trying to select a user-defined area and fill with 1s, preferably with mouse input. Any suggestion how? Thanks.
The command
roipoly
does exactly what you're looking for.
You'll need the Image Processing Toolbox to use roipoly as Georg suggested.
If you don't have that, you could try creating a rubber band box using
rbbox
There's a good example in the help. You might need to fiddle with units depending on how you're displaying your data. Remember to click and hold, drag and release..
h=impoly;
This code helps you to select a closed polygon of the image.

How to Creat MATLAB GUI for this code?

Hi everyone I wrote this code using MatLab and I need to design a GUI as the following
Draw Button: to draw the path.
Scan Button: If I want to take an image using "Image Acquisition"
Static Text : to show the angels,number of objects and the centers (Individual)
Axes : To show the image after the processing
And is there any reference I should read to help me??
The Code:
im1=imread('C:\Users\Shadow Of Dark\Desktop\sample','jpeg');
im1=rgb2gray(im1);
level=graythresh(im1)
bwfram3=im2bw(im1,level);
bw2=bwareaopen(bwfram3,20);
se=strel('disk',10);
bw2=imclose(bw2,se);
bw2=imcomplement(bw2);
[labeled,numObjects] = bwlabel(bw2,4);
imshow(labeled);
numObjects
info=regionprops(labeled,'all');
centers=cat(2,info.Centroid)
hold on;
angles=zeros(1,numObjects);
j=0;
for i=1:2:2*numObjects-2
l = line([centers(i) centers(i+2)],[centers(i+1) centers(i+3)]);
set(l,'linewidth',3,'color','r');
angles(1,i-j)= atan((centers(i+1) - centers(i+3))/(centers(i) - centers(i+2)))*180/pi;
j=j+1;
end
angles
Firstly, draw in a paper (or Enterprise Architect, ...) what you want and where in the layout. Afterwards, think of the sequence diagram of your process and write it in a paper. Later, divide your code into some functions, related to the steps you have described. Then, create a GUI with the GUI Editor in MATLAB and add a graphical element to your layout. Finally, link each function you have described to your graphical element (read the official help to do it).
(Alternatively, you can do it quicker mixing all these steps, but it is not an appropriate way of doing it).
I find this list to be quite usefull for getting started:
http://www.mathworks.com/matlabcentral/fileexchange/24861-41-complete-gui-examples
You may also want to look at the examples that are already included in matlab.
Go to Start > Matlab > GUIDE

How to print figure to clipboard by PRINT function with the quality identical to 'Edit-->Copy Figure' option?

Is there any way to print the figure to the clipboard so that the quality is identical to what the Edit-->Copy Figure option provides?
I used to save the figure to powerpoint file by using saveppt.m obtained from Matlab Central. It worked well until yesterday. I noticed that the stored image quality was somehow degraded. I tried to re-generate some ppt slides with exactly the same script and the same source data, but the new slides are simply of worse quality.
I investigated into this problem a little bit and discovered that when the figure is copied to clipboard by running print -dmeta, the image in the clipboard is already degraded, while if I use the Edit-->Copy Figure option in the figure window, I get the image as clear as the original image in the figure window.
Following is an example for your reference. I copied the image from a figure to the clipboard by two different methods, and paste it to Microsoft Paint program, and cut a piece of it to show below:
The image using print -dmeta:
The image using Edit-->Copy Figure:
If you compare the Xtick label '50', you may see that the image from Edit-->Copy Figure is smoother.
At the beginning I thought it was a problem of the resolution, but setting -rN to change the resolution does not seem to resolve my problem, at least not for N<=300.
Thank you for your help.
The short answer... Use the same function invoked in the callback for that menu item:
editmenufcn(gcf,'EditCopyFigure');
The longer answer... How exactly did I find this? You can look at my previous answer to a related question about reproducing what is done by a File menu option. The concept is the same, just for a different figure menu. For example, this will find the callback you want for the currently active figure window:
>> hCopyFigure = findall(gcf,'Label','Copy &Figure'); %# Handle for the "Copy
%# Figure" menu item
>> get(hCopyFigure,'Callback') %# Callback invoked when that item is selected
ans =
editmenufcn(gcbf,'EditCopyFigure')
The function EDITMENUFCN is another one of those sparsely documented functions, but looking through the code (by typing edit editmenufcn.m) shows that it either invokes Java (if you're on a Mac) or the undocumented function UIMENUFCN.
I think I found the answer myself. Using print -dmeta -painters to specify the renderer resolves my problem.
In File-->Preference-->Figure Copy Template-->Copy Option I noticed there are 3 options:
Metafile
Preserve information
Bitmap
I found that if I select 1, the Edit-->Copy Figure outputs the same image as print -dmeta. So I kind of confirmed the information I need is in the Preserve information option. A quick google search led me to the discussion about the potential difference of the applied renderer, and eventually I confirmed that using painters will print the image to the clipboard in the way I wanted.
The image in the question seems to be generated by the renderer zbuffer and painters, respectively. I still don't know why the default renderer of paint -dmeta changes, though.