Помогите правильно посчитать

вставляю видео, чтобы было понятно с чем работаю. https://www.youtube.com/watch?v=33F9m1IhZP0&feature=youtu.be

есть такой код.

        if ( btn_m ) {
                int x = evm->x;
                int y = evm->y;

                l->pos_x -= x - px + l->size_width;
                px = x;
                l->pos_y = y - py - l->size_height;
                py = y;


                gtk_widget_queue_draw ( l->drawing );
        }

evm->x и evm->y это текущие координаты мыши. px и py это старые координаты мыши. size_width и size_height это размер квадрата. В этом место pos_x всегда вычитается и является всегда границей, откуда будет начинаться рисоваться все квадраты. проблема в том, что это всегда уменьшается и граница увеличивается. и потом он начинает рисовать квадраты уже с позиции -35000. как сделать так, чтобы была бесконечность и граница всегда была не меньше размера -size_width?

p.s. я не знаю в какую область это написать. поэтому математика.


Ответы (1 шт):

Автор решения: xverizex

решил в общем задачу.

        if ( btn_m ) {
                int x = evm->x;
                int y = evm->y;

                if ( l->pos_x > 0 ) {
                        l->pos_x -= x - px + l->size_width;
                } else {
                        if ( l->pos_x < -l->size_width ) l->pos_x += l->size_width;
                        else l->pos_x -= x - px;
                }
                px = x;
                if ( l->pos_y > 0 ) {
                        l->pos_y -= y - py + l->size_height;
                } else {
                        if ( l->pos_y < -l->size_height ) l->pos_y += l->size_height;
                        else l->pos_y -= y - py;
                }
                py = y;


                gtk_widget_queue_draw ( l->drawing );
        }

→ Ссылка