삽질하는플머

'분류 전체보기'에 해당되는 글 130건

  1. DKW 프로젝트 시작.
  2. 아이폰 거치대?
  3. 리치에디트 배경에 그림 넣어보기 2
  4. 글립 캐시 고민중... 2
  5. LVCL 고쳐쓰기. 1

DKW 프로젝트 시작.

여가생활/Others

자세한 이야기는 여기서 하기로 하고...
http://dev.naver.com/projects/dkw/

KLDP를 눈팅하다가 CKW라는 멋진 커멘드 대체품을 소개받게 되었다.
가렵던 부분이 시원해지는 느낌이 드는 기가막힌 물건. 쓰면 쓸수록 아이디어가 새록새록 나오게 되는 녀석이다.
조금 아쉬운 부분이 있어 고쳐볼까하고 코드를 내려받았는데... VS2005 기반이다. 사 줄 사람도 살 돈도 없네.
물론 익스프레스 버전을 쓰면 되기는 하지만... 깔기 귀찮아서... 눈에 잘 들어오고 공짜인 터보델파이 코드로 변환.

옵션부분은 완전히 새로 만들 것이므로 알맹이만 바꿔두었다.
라이센스는 CKW를 따라 GPL v2 로 하였다.


--------

2010.7.9

며칠동안 커밋을 열심히 했더니... 주간베스트 2위~ 신기해서 스샷을 남겨둔다. 


--------

2017.02.21.

네이버 개발자센터 종료. 깃허브에 이력 옮겨둠. 
위키가 날아가서 의욕상실중...

https://github.com/oranke/dkw


아이폰 거치대?

여가생활/맥과 아이폰
책상에 앉아 아이폰으로 영화볼 때 세워놓기가 거시기해서 내놓은 궁여지책.
지금은 아이패드가 있어서 활용도가 떨어졌지만... 한동안 정말 잘 써먹은 아이템.
휴지통으로 보내기 전에 마지막으로 찰칵. (아이폰으로 사진을 찍느라 m4650이 대신 올라갔다.)

리치에디트 배경에 그림 넣어보기

탐구생활/Others
델마당의 질답란에서 프레야님의 질문을 보고 예전에 북마크한 글이 떠올랐다.
http://www.webdizen.net/blog/2738?category=95
리치에디트 배경에 그림을 넣는 방법이 소개된 곳인데... 역시 델마당의 질답란은 아이디어의 보고이다.

RichEd20.dll 이 로드된 상태에서 해당 컨트롤에 WS_EX_TRANSPARENT 를 설정하면 WM_ERASEBKGND 메시지에서 배경을 처리할 수 있다는 이야기. 시키는대로 테스트 해 봤더니 스크롤바가 생겨나는 시점에서 NC영역이 그려지지 않는 문제가 있다. 배경을 다 그린 뒤 WM_NCPAINT 메시지를 한번 더 때려주면 일단은 해결되지만 맘에 안들어... 

워낙 극성스럽게 NC영역을 그려대는 CoolSB를 쓰면 이 문제가 발생하지 않는다. 깜박임이 없는 배경그리기도 가능. 역시 좋은 물건이다.



TRichEdit 는 TCustomMemo 에서 상속받은 물건이다. 따라서 TEdit, TMemo 를 대체하는 것도 가능하다.
WM_ERASEBKGND에서 전달받은 DC를 인자로 다시 부모윈도에 WM_ERASEBKGND를 던지면 쓸만한 투명에디트도 만들 수 있겠다.

아무튼 CoolSB 는 NC영역을 갖고놀아보려는 사람들에게는 보물같은 자료.


애석하게도... CoolSB_Detours 를 흉내낸 이 어플은 윈도 7에서 제대로 동작하지 않는다. 원본은 잘 돌아가는 걸 보니 아직 눈치채지 못한 다른부분이 있는 듯 한데... 구덩이를 잘못팠나...


-----------

2010.6.25

NC영역을 포함한 윈도의 DC를 얻어낼 때 사용한 GetDCEx 가 윈도 7과 XP가 다르게 동작하는 문제가 있었다. 그냥 GetWindowDC를 사용하도록 수정. 이제 윈도 7에서도 제대로 표시된다.

글립 캐시 고민중...

탐구생활/Uniscribe
폰트별로 글립을 천개씩 캐싱한다고 기준을 정하고 적절한 텍스쳐 크기 및 캐시 갯수를 결정했는데
혹시나 싶어 여기저기 검색하다가 이런 글을 발견했다.
http://www.delphipages.com/forum/showthread.php?t=117319

GetFontUnicodeRanges() API 를 써서 폰트에 설정된 유니코드 글립의 정보를 얻어내는 예제인데
혹시나싶어 돌려보니 헐~~
Webdings 는 탈탈 털어서 480개가 전부. Tunga는 달랑 134개, SimSun-PUA 는 95개밖에 안된다.

좀 더 깔끔한 코드를 만들고 싶은 욕심은 일단 뒤로 미루고, 생각나는 대로 발코딩 해 보았다.
최대 텍스쳐 크기는 1024로 제한. 사실 이런거 고민할 때가 제일 재미있다.

먼저 기준폰트인 Tahoma 8포인트의 경우.



이 폰트에는 가로폭이 넓은 아랍글립이 포함되어있어 높이에 비해 너비가 상당히 넓은 편이다.
512*512 텍스쳐에 828개의 글립을 캐싱. 텍스쳐에서 사용하지 않게되는 낭비공간은 3% 정도로 괜찮은 수준.

굴림 11포인트의 경우.



512*512 텍스쳐에 1024개 글립을 캐싱. 게다가 여백없이 꽉 채우므로 메모리 낭비가 없는 완전소중 아이템.

굴림 72포인트로 크기를 키울 경우는



1024*1024 크기의 텍스쳐 10장에 1000개의 글립을 캐싱한다.
후덜덜 하긴 하지만, 어차피 게임에서 이렇게 큰 폰트를 표시할 일은 거의 없고, 텍스쳐 역시 필요할 때만 생성할 것이므로
메모리 폭주가 일어나지 않도록 최대 텍스쳐 갯수를 3~5개로 제한하는 코드만 추가하면 쓸만할 듯 싶다.

이제 다시 테스트~ 테스트~~


2010.6.8
-----------------
유니스크라이브는 한마디로, 유니코드 문자열을 Run이라는 단위로 쪼개고 각 Run에 해당하는 정보를 제공하는 도우미.
게임에서 이 물건을 써먹기 위해서는 글자가 뿌려지는 폭, 캐럿위치와 화면위치의 변환, 다음 캐럿의 위치와 다음 단어의 위치 얻기, 그리고 워드랩을 위한 단어끊기 정도를 구현하면 될 것이라 생각된다. ScriptCPtoX(), ScriptXtoCP(), SCRIPT_LOGATTR 등을 가지고 일단 구현은 완료. 나머지는 실제 3D 환경에서 에디터를 만들며 생각해보자.

LVCL 고쳐쓰기.

탐구생활/Delphi
일단 홈페이지는 여기. 라이센스는 MPL.
http://bouchez.info/lvcl.html

이름 그대로 가벼운 VCL 이다. 사용법도 아주 간단해서, 작업중인 소스와 함께 두어도 되고 라이브러리 경로 중 "맨 위에" 추가해도 된다.
폼 하나를 컴파일해보면 달랑 45kb로 떨어진다. 라자루스에서 애용하던 KOL의 경우 터보델파이에서 컴포넌트 설치가 되지 않으므로 쉽지 않은 길을 가야 하는 반면, 기존 유니트들의 참조를 바꾸는 방식이므로 터보델파이에서도 무리없이 사용할 수 있다.  

현재 TButton, TCheckBox, TEdit, TLabel, TMemo 다섯가지 컨트롤이 구현되어 있다. 때문에 VCL 중 달랑 폼 하나만 사용하는 나같은 게임 프로그래머에게는 아주 멋진 물건이다.

일단 손에 닿는 몇가지 개선점만 고쳐보았다.

1. 폼을 비롯한 윈도 컨트롤의 크기 조절시 배경 갱신 문제 수정.
2. 윈도 컨트롤 외에는 마우스 이벤트가 발생하지 않는 문제 수정. 덤으로 우측 마우스 메시지도 처리.
3. TScrollBar 컨트롤 추가.
4. ClientWidth / ClientHeight 기능 추가.
5. 프로퍼티 에디터에서 설정한 Visible 속성이 제대로 반영되도록 수정.
6. TEdit / TMemo 에서 한글로 된 ImeName 프로퍼티를 읽을 때 생기는 오류 수정.

이 LVCL을 기반으로 한 간단한 테스트 프로그램을 배포할 예정이다. 때문에 수정한 LVCL의 소스코드를 MPL에 따라 여기에 배포한다.
(원저자에게도 보내야 하는군. 우이씨~ 영어 짧은디~~)




최신버전의 LVCL은 dkw 프로젝트에서 관리한다. 
http://dev.naver.com/projects/dkw/
svn checkout --username anonsvn https://dev.naver.com/svn/dkw/trunk/LIB/LVCL