2012-05-07 2 views
2

하드웨어를 시뮬레이션하려고하는데이 하드웨어에는 정적 리본 디스플레이가 있습니다.GTK TextView - 정적 디스플레이 형식 만들기

이렇게하려면 TextView를 사용하고 싶습니다. 내 디스플레이에는 25 개의 열이있는 10 개의 행이 있습니다. 그래서 TextView는 충분히 쉬워야한다고 생각했습니다.

기본적으로 "열 Y에서 시작하여 열 Y에서 시작하는 문자열 S를 삽입/교체"라고 말하고 싶습니다. 나는 단지 특정 행이나 한 행의 단일 열만 업데이트해야 할 수도 있습니다.

나는이 작업을 성공적으로 수행하지 못했습니다. 내가 할 수 있었던 최선은 내가 그것을 만들 때 TextView를 25 줄의 10 줄로 채운 다음 get_iter_at_line_offset을 사용하여 줄의 반복자를 얻은 다음 그 줄로 새 텍스트를 밀어 넣는 것입니다.

하지만 기존 텍스트를 바꾸는 대신 줄에 텍스트를 추가하기 시작합니다.

행 및 열 컨트롤 (즉, 특정 (X, Y) 좌표로 텍스트를 설정할 수 있어야 함)이 필요합니다.

마크를 사용하여 가능하다고 가정합니다.

누구든지 내가 어떻게 할 수 있는지에 대한 간단한 예를 들려 줄 수 있습니까? 불행히도 이런 종류의 문서에는 많은 부분이 없습니다.

+0

정적 리본 디스플레이가 무엇인지는 모르지만 설명에 따르면 Gtk :: DrawingArea 기반 접근 방식은 상대적으로 직관적이며 결과 모양을 제어 할 수 있다고 생각합니다. – ergosys

답변

1

특정 줄의 행 X에서 iter를 가져온 다음 이터레이터의 forward_chars() 메서드를 사용하여 Y 문자 앞으로 이동해야합니다. 바꾸려는 문자 수를 삭제하고 마지막으로 삽입 할 텍스트를 삽입하십시오. 반복기를 사용하여 모든 작업을 수행 할 수 있습니다. 버퍼를 변경하면 반복기가 무효화되지만 텍스트를 삭제하면 반복기 중 하나가 텍스트 유효성을 다시 확인합니다.

+0

단순히 메모리에서 GUI를 유지하고 set_text를 사용하여 기본 버퍼를 지우고 새로 고치면 완전히 바뀌었을까요? 기본적으로 모든 char 조작을 long char 배열 (매 25 번째 인덱스마다 줄 바꿈)에서 수행 한 다음 set_text를 통해 push합니다. – jasonmclose

+0

얼마나 자주 디스플레이를 업데이트해야하는지에 따라 다릅니다. 가장 좋은 방법은 그것을 시도한 다음 나중에 너무 느린 경우 최적화하는 것입니다. 메모리는 문제가되지 않지만 대부분의 컴퓨터는 요즘 250 바이트 이상의 메모리를 가지고 있습니다. – ptomato

+0

은 1 초에 1 번 업데이트됩니다. 나는이 길로 갈 것이라고 생각한다. 나는 푸는 것과 같이 카이로를 사용하는 아이디어를 좋아하지만 베타 테스트를 위해 만날 기한이 있으므로 지금 당장이 방법을 사용하고 나중에 단계 2에 대한 시간을 갖게되면 나중에 최적화 할 것입니다. – jasonmclose

0

GTK + 3.x를 타겟팅하는 경우 실제로 카이로를 사용해야합니다. 실제로 텍스트 버퍼가 필요 없기 때문에 GtkTextView를 사용하는 것은 지나치게 길게 조정 된 것 같습니다.

draw with Cairo in GTK+에 대한 기본적인 소개를보세요. 그런 다음 시작하기에 충분해야하는 text-rendering Cairo APIs을 살펴보십시오.

+0

안녕하세요. 왜 GTK + 3.x일까요? GTK + 2가 아닌가요? 여기 저기에 몇 가지 변경 사항이 있지만 성능 향상이 있습니까? 내 경험으로 볼 때, 카이로는 그런 식으로 무서운 존재입니다. – Ivarpoiss