How to use widget curent render as drag and drop image - gtk

I have wary annoying problem with dnd dragging image. When I start dragging some widget, it shows some default icon as it moves. I just want that this icon is actually widget looks itself. So it should look just as I move widget by dragging.
Is there easy way to accomplish this?
I started to look around and all I found is to set image using pixbuf
pixbuf = gtk.gdk.pixbuf_new_from_xpm_data(xpm)
myWidget.drag_source_set_icon_pixbuf(pixbuf)
This way it works, but I need to use current looks of widget, because there are themes and overlay of few images.

You can get the Cairo context of the widget, then copy it to a pixbuf:
cr = widget.window.cairo_create()
surface = cr.get_target()
surface.write_to_png('test.png')
pixbuf = gtk.gdk.pixbuf_new_from_file('test.png')
context.set_icon_pixbuf(pixbuf, 0, 0)
Here I'm going through an intermediary file to save and load the image data. There's probably a direct way to do that, but after going through the Cairo documentation and trying out various weird things, I gave up.

Related

Codename One Drag and Drop - Target change background color on Drag Over

I have an Android application with some draggable elements.
There are some some labels that I want do drag over containers. The moment I drag over the container, I want the container background to change its colour.
I am unable to achieve this with DragOverListener from the API.
This is my code:
label.addDragOverListener(l -> {
container.getAllStyles().setBgColor(ColorUtil.YELLOW);
container.getAllStyles().setBgTransparency(255);
});
What happens is that as soon as I start dragging the label, the container changes the colour. But that's not what I want. I want the container to change the colour only when I drag over it.
Is there a way to achieve this?
Many thanks in advance.
The event delivers an X/Y location for the drag which you can use to determine whether to draw the color or not. Generally, this API is designed for refined drawing of this type e.g. drawing a square in the place the dropped component will occupy.

How to insert clickable points in an image in flutter?

I want to do just that on the flutter, can anyone help me?
Clickable Marked points on an Image
Hello, I need to show an image with clickable dots on the screen and trigger an action when the user clicks on these dots. I heard that it is made with SVG, I've searched in several places but I find no solution in the flutter.
I was struggling with a similar situation.
Slah's solution --- put a operational layer on top of the background image --- works if you don't need pinch to zoom the image, but in my case the positioned widgets get invalid when zooming in the image.
My solution is embedding the image into a webview, you may use webview_flutter because it can be easily plugged onto your widget tree, but I think in your case flutter_webview_plugin works too since you just need to listen to some click events. Add hyperlinks to the elements to be clicked, then play with the click event by webviewcontroller(webview_flutter) or onUrlChanged Stream(flutter_webview_plugin).
One benefit you can get immediately is the ability to use .svg without any other packages by Uri.dataFromString('<html><svg>some svg codes</svg></html>', mimeType: 'text/html').toString()
Then you have full control of the appearance(via css) and the behavior(via javascript). e.g.You may define irregular areas to be clickable, and responsive to clicks.

Transparent background affects text mesh in front

I have a plane behind a text mesh 3d that i use to make the text more visible. The plane is supposed to be slitghtly transparent but when i give it a transparent shader it starts acting like the pane is in front of the text when it actually is not. How can i fix this?
Okej i solved it using a canvas, TextMeshPro- text and as background i use a UI Image. That works as i intended.
Had the same problem and found the solution:
Go on the canvas, and increase "Order in layer" until it is fixed (if it doesn't work after like 4 or 5, sry it might be something else ^^')
If it works it simply meant that the UI text was rendered before the transparent material, so you wanna tell the canvas to render itself after the material.

Any way to move widgets beyond container without resizing it?

I am working on a game using GTK3 as a rendering technique (terrible idea, but it's a school project).
My gameobjects are made of Image widgets and are placed in a Fixed container. It's working pretty well, however when i move widgets beoynd right or bottom border, the window automatically grows along with it.
I want the window to stay at the sam size, event if widget leaves its area and becomes invisible. It works when i move widget past the upper or left border.
I tried using gtk_widget_set_vexpand and gtk_widget_set_hexpand. My window is set as not resizable (gtk_window_set_resizable).
Is there any way I can achieve this?
This isn't the right way to use GTK+. GTK+ is intended for laying out widgets in a GUI program.
There are better options for animating 2D elements. One that works with GTK+ natively is the Clutter library. You can also integrate SDL or OpenGL or something like that if you so choose.
That being said, you can also use GtkLayout instead of GtkFixed, or put the GtkFixed in a GtkScrolledWindow and hide the scrollbars and set the scroll policy to prevent scrolling. It's still technically misuse, and in fact GtkFixed (and possibly GtkLayout too but the docs don't say) is really not supposed to be used anymore unless absolutely necessary because it doesn't give you automatic support for tricky UI layout problems, but it doesn't have extra dependencies.

Dragging images from a scrollable region in Raphael?

I'm investigating the feasibility of using Raphael for a user-research project. One of the features allows for users to drag images onto a canvas and we record where they placed it. The pool of images is potentially quite large and we'll have them in a scrollable box in the tool.
I put together a quick wireframe of the issue I'm looking into since it'll probably be clearer than my explanation.
Please see the wireframe:
I'd stick with straight HTML/CSS and use jQueryUI draggables, as you mention in your comment.
You don't appear to need any of the drawing/display features SVG offers, yet if you went that route, you'd have to build your own custom scrolling behavior (instead of setting a CSS overflow-y rule) and picture layout algorithms (again instead of using CSS floats or something).
You can create a scrollable region using Raphael.
Create the viewport with fixed
dimensions (say 800x600)
Draw the images with increasing y value. After few images, the y value will go beyond 600. It will be drawn but will not be visible in the viewport.
Create a scrollbar using raphael rects. Attach drag events to the scrollbar handle rect.
When the handle is moved, translate all the images accordingly.
For e.g. lets assume in step 2, you had drawn all the images and the bottom most point of the end image is having y value 2000. Assuming the scrollbar has length 500, each dx movement of the handle will have to translate 2000/500 = 4dx. You can calculate the handle length similarly using ratios.
Since everything inside a single Raphael paper the dragging of images will work seamlessly. You will have to maintain the positions of each images.
You might find this demo similar
Remember you can always use getBBox when you drop. In this case it's rects but images would be the same..
http://irunmywebsite.com/raphael/additionalhelp.php?q=bearbones