The key is to not draw directly, but to invalidate one or more rectangles
needed to for changing the image from the old to the new one.

I worked on this problem some years ago and I think my solution is very
relevant to your question.

See the gtk3 branch at: https://github.com/dov/dovtk-lasso .

Regards,
Dov

On Mon, Mar 20, 2017 at 9:25 PM, Marcin Kolny <marcin.ko...@gmail.com>
wrote:

> Hi everyone,
> I'd like to write very simple application for drawing lines.
>  1) User press button - app saves x and y coordinates
>  2) User moves the mouse - app dynamically draws potential line on each
> mouse move event
>  3) User releases button - app "saves" the line on the canvas.
>
> I've tried to modify slightly the GTK example drawing application [1].
>  1) On button press event I paint the current state to the "base_surface"
> surface.
>  2) On each mouse move I paint to the "tmp_surface" surface "base_surface"
> and after that the actual line, so I avoid multiple lines on mouse move.
>  3) On mouse release event I paint "tmp_surface" surface to "base_surface".
>
> This works, and full code can be found on my gist [2]. However, I don't
> think it's the right approach, since I have to re-paint a whole image for
> each mouse-move, and latter on, on "draw" event application is doing almost
> the same, so I'm doing the re-paint twice per each mouse move. I'm afraid
> that for huge surfaces it might be very inefficient.
>
> Do you know what would be the right approach to solve this sort of
> problems?
>
> Thank you for help,
> Marcin
>
> [1] https://developer.gnome.org/gtk3/stable/ch01s05.html
> [2] https://gist.github.com/loganek/156b6b9ce2333fd7d389f74c093a92b4
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
>
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to