gtk DrawingArea развернуть внутрь Исправлено - PullRequest
4 голосов
/ 12 октября 2010

В настоящее время я загружаю виджет DrawingArea внутри фрейма, и он всегда расширяется, чтобы заполнить фрейм. Затем я могу установить событие configure в DrawingArea, чтобы выделить растровое изображение того же размера, что и окно, нарисовать его, а затем нарисовать растровое изображение в DrawingArea (используя draw_drawable).

Однако теперь я хочу наложить невидимые виджеты поверх DrawingArea - чтобы создавать события всплывающей подсказки для отображаемых частей изображения. Поэтому я попытался поместить DrawingArea внутрь Fixed, но теперь он не расширяется, чтобы заполнить окно. Я могу дать DrawingArea явный запрос на размер - однако мне бы очень хотелось, чтобы он расширялся, чтобы заполнить все пространство, выделенное его родительскому окну. Я попытался установить запрос размера -1, но это не помогает.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 14 октября 2010

Звучит так, будто вы перепрыгиваете через много обручей, чтобы избежать реализации собственного виджета. Это может стоить вашего времени, чтобы просто научиться делать это; переопределить размер запроса / выделения для получения нужного размера, переопределить expose_event для рисования изображения и переопределить motion_notify_event или любые другие обработчики событий для обработки положения мыши и щелчков.

1 голос
/ 12 октября 2010

Придумал решение такого рода работ:

  • Создание фиксированного.
  • Создание DrawingArea и добавление его в фиксированное.
  • Подключение к фиксированномуСигнал «size_allocate» и в обработчике сигнала получите фиксированное выделение (ширина и высота), затем получите DrawingArea, чтобы сделать size_request текущего выделения.

Похоже, что я хочуОднако теперь я заметил, что два сигнала «size_allocate» отправляются на фиксированный - один при изменении размера окна, а другой предположительно, когда DrawingArea запрашивает новое распределение размера.Чтобы не делать лишней ненужной работы со вторым сигналом, я просто возвращаюсь, если предыдущая высота / ширина соответствуют новому распределению.Но я бы предпочел покончить со вторым сигналом, если это возможно.

Я пытался заблокировать / разблокировать сигнал size_allocate до / после DrawingArea size_request безрезультатно (возможно, потому что я уже нахожусь в обработчике size_allocation).

Кто-нибудь знает более чистый способ иметь дело сэто?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...