일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- C++ gui 라이브러리
- C++ gui
- Docker
- 알고리즘
- JUCE라이브러리
- go
- 코딩
- C++ library
- 리듬게임
- 운영체제
- a tour of go
- JUCE
- OS
- 백준
- JUCE 튜토리얼
- go channel
- C++
- 연결리스트
- vim-go
- BOJ
- gui
- LOB
- JUCE library
- c++ heap
- C언어
- tour of go
- 프로그래밍
- Nebula
- 자료구조
- 공룡책
- Today
- Total
CafeM0ca
[JUCE]튜토리얼8 Slider values 본문
//발번역 https://juce.com/doc/tutorial_slider_values
데모 프로젝트 빌드과정에서 아래와 같이 라이브러리 빌드 에러 발생시 Projucer실행하여 프로젝트를 열고 모듈->global path를 해제해주면된다.
데모 프로젝트
데모 프로젝트는 두개의 슬라이더 수직선을 보여준다. 하나는 레이블이 Frequency고 다른 하나는 레이블이 Duration이다.
이 개념은 주파수(f)가 지속 시간의 역수(d)이기 때문에 기본적으로 두 슬라이더 모두 동일한 기본 값을 표시한다.
f = 1/4
둘 중 하나의 슬라이더가 움직이면 또 다른 슬라이더가 변경사항을 반영하여 갱신된다.
JUCE Slider 클래스
이 튜토리얼은 슬라이더를 만드는 방법이랑 범위 설정, 값 변경, 슬라이더 값 프로그래밍 방식으로 업데이트 하는법을 보여준다. 데모 앱에서 주의해야할점은 실행될때 두 슬라이더가 텍스트 박스를 include 해야하고 이 텍스트 박스는 또한 frequency(헤르쯔,Hz)와 duration(s,초)를 include 해야한다.
슬라이더 추가하기
MainContentComponent.h에 MainContentComponent 클래스에 슬라이더들이 private 멤버로 있다.
주의 할 점은 Label 객체도 각각에 슬라이더에 추가된다는 점이다. 이것들은 Frequency와 Duration을 슬라이더 왼편에 화면에 띄워준다.
슬라이더 컨트롤의 바로 왼쪽 박스는 현제 슬라이더의 값을 보여주고 Slider 객체의 일부분이다.
Slider::Listener 클래스를 기본 클래스로 추가하여 슬라이더가 바뀐것을 받기위한 클래스를 등록할 수 있다.
MainContentComponent 생성자에서 슬라이더를 자식 컴포넌트로 추가하고 표시되도록 서렂ㅇ하고 슬라이더에서 표시할 수 있는 값의 범위를 구성한다.
첫번째로 frequencySlider 멤버 구성을 보자.
대응하는 레이블은 아래와 같다.
[4]의 Lable::attachToComponent() 함수는 정말 유용하다 레이블을 인접한 다른 컴포넌트에 위치하는데. 두번째 인자 true는 레이블을 다른 컴포넌트 왼쪽에 위치시킨다. 곧 보게 될 것처럼, 이것은 MainContentComponent::resized() 함수에서 레이블을 수동으로 위치시키지 않아도된다.
durationSlider와 durationLabel 멤버는 비슷하게 설정하지만 슬라이더의 범위는 frequencySlider의 역수 범위로 설정된다.
슬라이더 위치
슬라이더들은 MainContentComponent::resized() 함수를 통해 위치된다. Lable::attachToComponent() 함수를 레이블을 슬라이더에 첨부하기 위해 사용하는 이후 이것들은 자동적으로 슬라이더의 왼쪽에 위치된다.
슬라이더 변경에 응답
다음 코드는 슬라이더의 리스너가 슬라이더의 값 변경에 반응하도록한다.
Slider::Listener::sliderValueChanged() 함수는 Slider::Listener를 기본으로 한 클레스를 추가한경우 반드시 오버라이딩해야한다.
여기에서는 Slider::setValue() 함수를 호출하여 슬라이더의 역수를 다른 슬라이더로 전달한다. 또한 슬라이더에 변경 사항을 브로드케스트 하지 않도록 지시한다.
이유는 두 개의 슬라이더가 서로 의존하는 경우에 무한 피드백 루프가 발생할 가능성이 있다.(A와 B가 있다고 가정하자. A의 값을 변경하면 B의 값이 역수로 변경되고 B의 값이 변경되면 A의 값도 역수로 변경된다. 이 경우 어느 한쪽을 변경할경우 다른 한쪽의 값도 역수로 변경되고 역수로 변경된 다른 한쪽에 의해 처음 변경한 값도 다시 바뀐다.) dontSendNotification 값은 이 무한 루프 가능성을 깨트린다.
기본값 설정
frequencySlider 슬라이더는 값이 500으로 생성자에서 설정된다. 이번에는 dontSendNotification 값을 생략하기 때문에 durationSlider 슬라이더가 업데이트된다.
몇가지 커스텀하기
인터페이스를 효과적으로 커스텀해보자.
텍스트박스 길게 만들기
durationSlider 슬라이더의 텍스트 상자는 값을 만족스럽게 표시하기 위해 많은 자릿수가 필요하다. 이를 위해 Slider::setTextBoxStyle() 함수를 사용할 수 있다. 다음 두 줄의 코드를 MainContentComponent 생성자에 추가하자.
이 설정은 각각의 텍스트 박스를 160픽셀로 적용한다.
슬라이더 값 기울이기
기본적으로 슬라이더 트랙은 슬라이더 트랙을 따라 슬러이더 위치에 비례하여 슬라이더의 값이 선형이라는 점에서 선형이다. 인터페이스가 올바르게 작동하지다는 점은 분명하다. 슬라이더의 기울기를 조정하여 슬라이더가 로그를 추적하도록 할 수 있다. 이를 위해 Slider::setSkewFactorFromMidPoint() 함수를 사용할 수 있다. 슬라이더를 구성한 후 MainContentComponent 생성자에 다음 두 줄의 코드를 추가하여 이 작업을 시도해보십시오.(by 구글번역기)
그러면 frequencySlider 슬라이더의 슬라이더 트랙 중간에 500,durationSlider 슬라이더에 0.002가 입력된다. 효과적으로 슬라이더는 이제 동등하지만 반대 방향으로 움직이는 것처럼 보인다. 이와 같은 비선형 슬라이더 트랙은 시간과 주파수와 같은 매개 변수에서 잘 작동하지만 작은 값보다 정밀한 제어가 필요하지만 큰 값보다 미세한 제어가 필요하지는 않다.
Note: 위의 커스텀한거는 MainComponent_02.h에 있다.
연습하기: Slider::setSkewFactorFromMidPoint() 함수에 대한 호출에 대해 다른 값을 시험해보고 다른 텍스트 상자 크기를 시험해보십시오. Slider 클래스 API 참조.
'Programming > JUCE' 카테고리의 다른 글
[JUCE]키 관련 함수 (0) | 2018.02.25 |
---|---|
[JUCE]튜토리얼9 The Lable class (0) | 2018.02.19 |
[JUCE]튜토리얼7 Listeners and broadcasters (0) | 2018.02.17 |
[JUCE]튜토리얼6 Advanced GUI layout techniques (0) | 2018.02.17 |
[JUCE]튜토리얼5 Customise the look and feel of your app (1) | 2018.02.15 |