FLTK Настройка ширины области отображения значения ползунка

#c #fltk

#c #fltk

Вопрос:

Мне было интересно, как изменить ширину области, отвечающей за отображение текущего значения Fl_Hor_Value_Slider. Дело в том, что я хочу иметь возможность выбрать год (это 4 цифры), а места сбоку от ползунка недостаточно для правильного отображения номера года.

введите описание изображения здесь

Я просмотрел документы и попробовал следующие функции:

 slider_size()
maximum()
minimum()
range()
 

Но, похоже, они не делают то, что я хочу.
Мне кажется, что я пропустил что-то очевидное.
Есть идеи?

Комментарии:

1. Я вроде как решил проблему XD, я просто уменьшил textsize() и получил нужное число. Однако это не запрошенное решение.

Ответ №1:

Проблема в том, что размер жестко задан до 35 для горизонтального или 25 для вертикального. Вам необходимо изменить файл Fl_Value_Slider.cxx. При обычном рисовании он имеет

 if (horizontal()) {
  bww = 35; sxx  = 35; sww -= 35;
} else {
  syy  = 25; bhh = 25; shh -= 25;
}
 

Это основано на textsize_, равном 10. Если вы измените размер текста, то он должен увеличиваться в зависимости от размера текста. Что-то вроде

 if (horizontal()) {
   int width = textsize() * 3   5;
   bww = width; sxx  = width; sww -= width;
} else {
   int height = textsize() * 2   5;
   syy  = height; bhh = height; shh -= height;
}
 

Затем перестройте библиотеку fltk. Либо сохраните этот патч, либо отправьте его в FLTK и проверяйте всякий раз, когда получаете обновление от FLTK. Для тестирования

   Fl_Hor_Value_Slider* o = new Fl_Hor_Value_Slider(10, 50, 250, 50, "");
  o->tooltip("Value Slider");
  o->selection_color((Fl_Color)1);
  o->textsize(25);
  o->value(2000)
  o->range(2000, 2099);
  o->precision(0);
 

Редактировать

В качестве альтернативы, создайте свой собственный Hor_Value_Slider на основе Fl_Hor_Value_Slider и переопределите метод рисования.

Комментарии:

1. @cup Спасибо за этот хороший ответ. Я создал проблему GitHub для этого вопроса и добавил ваши предложения по коду. Примечание: это не означает, что это будет реализовано в ближайшее время, но это как напоминание.