[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[mgp-users-jp 00558] Re: difference in `again, mark, image' between 1.04 and 1.05
- To: mgp-users-jp@mew.org
- Subject: [mgp-users-jp 00558] Re: difference in `again, mark, image' between 1.04 and 1.05
- From: Yoshifumi Nishida <nishida@sfc.wide.ad.jp>
- Date: Thu, 1 Jul 1999 03:24:28 +0900
- In-reply-to: Your message of "Mon, 21 Jun 1999 23:12:52 +0900" <>
- Posted: Thu, 01 Jul 1999 03:24:26 +0900
- References: <>
- Reply-to: mgp-users-jp@mew.org
いろいろバックログが溜ってしまってますけど、とりあえずできそうなものから。。
>>>>> On Mon, 21 Jun 1999 23:12:52 +0900, JINMEI Tatuya / 神明達哉 <jinmei@isl.rdc.toshiba.co.jp> said:
>> キャッシュ機能とか安定性などの面で、全般に1.05aの方が使いやすいのです
>> が、この点だけは1.04aの方がよかったと感じます。この辺りは何らかの仕様
>> 変更に基づいているのでしょうか。
こんな感じのパッチを当ててみてもらえますか?
これで問題がなければ、今週のsnapにのせてしまおうと思っています。
--
西田佳史 nishida@wide.ad.jp
*** draw.c.orig Thu Jul 1 00:13:21 1999
--- draw.c Thu Jul 1 02:01:44 1999
***************
*** 1719,1724 ****
--- 1719,1741 ----
u_int code;
char *registry;
XChar2b kch[2];
+ #define MAXDRAWAREA 1024
+ struct {
+ int x, y, width, height;
+ } drawarea[MAXDRAWAREA];
+ int areaindex = 0;
+ #define addarea(X) \
+ {\
+ if (areaindex == MAXDRAWAREA){\
+ fprintf(stderr, "too many drawarea (increase MAXDRAWAREA)\n");\
+ exit(1);\
+ }\
+ drawarea[areaindex].x = x;\
+ drawarea[areaindex].y = y - obj->data.X->ascent;\
+ drawarea[areaindex].width = obj->data.X->width+1;\
+ drawarea[areaindex].height = obj->data.X->height+1;\
+ areaindex ++;\
+ }
#if 0
char ch[2];
#endif
***************
*** 1851,1868 ****
--- 1868,1896 ----
if (obj->type == O_VFONT) {
(void)vfc_image(obj->data.vfc,
obj->fore, bcolor, xim, x, y);
+ addarea(vfc);
}
#endif /* VFLIB */
#ifdef FREETYPE
if (obj->type == O_TFONT) {
(void)tfc_image(obj->data.tfc,
obj->fore, bcolor, xim, x, y);
+ addarea(tfc);
}
#endif /* FREETYPE */
}
+ #if 0
XPutImage(display, target, gcfore, xim, 0, 0,
xpos, ypos, width, height);
+ #else
+ for (i = 0; i < areaindex; i ++)
+ XPutImage(display, target, gcfore, xim,
+ drawarea[i].x, drawarea[i].y,
+ drawarea[i].x + xpos, ypos + drawarea[i].y,
+ drawarea[i].width, drawarea[i].height);
+ #endif
XDestroyImage(xim);
+
if (mgp_flag & FL_GLYPHEDGE) {
XDrawLine(display, target, gcfore, 0, ypos,
state->width - 1, ypos);