Как предотвратить трату места GtkAspectFrame?

<interface>
 <object class='GtkWindow' id='window'>
  <child>
   <object class='GtkBox' id='box'>
    <property name='orientation'>horizontal</property>
    <child>
     <object class='GtkAspectFrame' id='aspect_frame'>
      <property name='xalign'>0.0</property>
      <property name='yalign'>0.0</property>
      <child>
       <object class='GtkDrawingArea' id='drawing_area_A'>
        <property name='expand'>TRUE</property>
       </object>
      </child>
     </object>
    </child>
    <child>
     <!-- widget B goes here -->
    </child>
   </object>
  </child>
 </object>
</interface>

Приведенное выше определение пользовательского интерфейса GtkBuilder создает квадратную область рисования A. Я хочу, чтобы он был как можно больше в своем окне, поэтому я установил для свойства expand элемента A значение TRUE. Однако, когда само окно имеет большую ширину, чем высота, я хочу, чтобы виджет B заполнил оставшуюся ширину, не используемую областью рисования. В принципе, я хочу этого:

+--------------------+
|+-----------++-----+|
||           ||     ||
||     A     ||  B  ||
||           ||     ||
||           ||     ||
|+-----------++-----+|
+--------------------+

Но вместо этого я получаю это (если для B expand установлено значение FALSE):

+--------------------+
|+-----------+    +-+|
||           |    | ||
||     A     |    |B||
||           |    | ||
||           |    | ||
|+-----------+    +-+|
+--------------------+

Или это (если для B expand установлено значение TRUE):

+--------------------+
|+-------++---------+|
||       ||         ||
||   A   ||    B    ||
||       ||         ||
|+-------+|         ||
|         +---------+|
+--------------------+

Как заставить GTK сотрудничать?


person Will    schedule 23.03.2012    source источник
comment
Я не знаю GTK+ 3 или GtkBuilder, но вам, вероятно, следует копать в направлении gtk_widget_get_preferred_width_for_height(). Не знаю, выполнимо ли это из XML или есть более простой способ.   -  person doublep    schedule 10.06.2012


Ответы (1)


Я считаю, что A должно быть расширено = true, fill = true, а B должно быть расширено = false и fill = true.

person robru    schedule 27.06.2012