プログラマも3人目の登場です。この人のプログラムは、前回までに紹介した2人よりも単純で 素直だと最初は思っていました。「上手ではないが、とんでもない書き方はしてないよ。連中の中 では一番まともなのでは。」とか最初は評価していました。しかし、開発が進むに連れて、先輩の 「模範プログラム」に影響されてか、はたまた指導によってかは知るよしもありませんが、しだい に変な書き方になってきたのです。本当に怖いですね。
Xウィンドウを使ったソフトウェアでは、会話的操作が多いため、ウィンドウ上にボタンなどを きれいに配置し、マウスだけで複雑な操作ができるようにします。今回のプログラムは、そういう 部分のウィンドの初期化です。(リスト13−1)
リスト13−1 オリジナルプログラム |
1 Frame rgb_info_frame; 2 Panel rgb_info_panel1, 3 rgb_info_panel2; 4 Panel_item rgb_info_disp1, 5 rgb_info_disp2, 6 rgb_info_disp3, 7 rgb_info_disp4, 8 rgb_info_plane, 9 rgb_info_num, 10 image_set, 11 rgb_info_quit_button; 12 13 Canvas rgb_info_canvas; 14 Xv_Window rgb_info_xwin; 15 Scrollbar rgb_info_scroll; 16 Font rgb_info_font; 17 GC rgb_info_gc; 18 Server_image rgb_info_image; 19 PULONG rgb_info_color; 20 UWORD info_no; 21 UWORD info_uni_color; 22 UWORD info_color_num; 23 UWORD info_plane_flag[4]; 24 int info_canvas_w; 25 int info_canvas_h; 26 UWORD info_plane; 27 int info_color_image; 28 int info_image; 29 PLINE_DATA info_pline; 30 31 UBYTE color_pattern[8*16]; 32 static short info_pattern[] = { 33 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 34 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 35 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 36 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 37 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 38 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 39 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 40 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 41 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 42 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 43 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 44 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 45 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 46 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 47 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 48 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 49 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 50 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 51 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 52 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 53 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 54 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 55 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 56 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 57 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 58 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 59 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 60 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 61 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 62 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 63 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 64 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 65 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 66 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 67 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 68 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 69 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 70 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 71 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 72 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 73 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 74 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 75 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 76 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 77 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 78 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 79 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 80 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 81 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 82 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 83 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 84 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 85 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 86 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 87 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 88 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 89 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 90 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 91 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 92 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 93 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 94 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 95 0xFFFF,0xFFFF,0xFFFF,0xFFFF, 96 0xFFFF,0xFFFF,0xFFFF,0xFFFF 97 }; 98 99 /************************************************************************ 100 * 色情報表示の初期化 * 101 ************************************************************************/ 102 void rgb_info_init( ) 103 { 104 Display *dpy; 105 int x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,y; 106 int len,choice; 107 int width,height; 108 int panel_l; 109 110 x1 = SYS_PANEL_POS_X; 111 y = SYS_PANEL_POS_Y; 112 x2 = x1 + IMAGE_WIDTH + SYS_PANEL_GAP_X * 2; 113 len = strlen( SYS_TEXT_RGB_INFO ); 114 if ( len < strlen ( SYS_TEXT_DISPPLANE )) 115 len = strlen ( SYS_TEXT_DISPPLANE ); 116 x3 = x2 + sys_panel_messagebold_w( len ) + SYS_PANEL_GAP_X; 117 len = strlen( SYS_TEXT_PLANE0 ); 118 if ( len < strlen ( SYS_TEXT_BORDER )) 119 len = strlen ( SYS_TEXT_BORDER ); 120 if ( len < strlen ( SYS_TEXT_BLACK )) 121 len = strlen ( SYS_TEXT_BLACK ); 122 choice = sys_panel_choice_w(len) + SYS_PANEL_GAP_X; 123 width = x1 + x3 + choice * 4; 124 height = y * 3 + SYS_PANEL_GAP_Y * 3; 125 len = strlen ( SYS_TEXT_SPECIAL ); 126 if ( len < strlen ( SYS_TEXT_IMAGE )) 127 len = strlen ( SYS_TEXT_IMAGE ); 128 if ( len < strlen ( SYS_TEXT_COLOR )) 129 len = strlen ( SYS_TEXT_COLOR ); 130 len = len + (strlen ( SYS_TEXT_COLOR_Y )) * 4 131 + (strlen ( SYS_TEXT_PERCENT )) * 4 + 16 + 4*4 ; 132 info_canvas_w = sys_panel_list_w( len ) + 36 + SYS_PANEL_GAP_X * 3; 133 info_canvas_h = SYS_PANEL_LIST_H3 * 4 + 3; 134 panel_l = ( width - info_canvas_w ) / 2; 135 x4 = panel_l + SYS_PANEL_POS_X; 136 len = strlen ( SYS_TEXT_PLANE0 ); 137 x5 = sys_panel_message_w( len ) + SYS_PANEL_GAP_X; 138 len = strlen( SYS_TEXT_EXIT ); 139 x6 = width - ( SYS_PANEL_POS_X + sys_panel_button_w(len)); 140 len = strlen( SYS_TEXT_NEXT ); 141 x7 = x6 - ( SYS_PANEL_GAP_X + sys_panel_button_w(len)); 142 len = strlen( SYS_TEXT_BEFORE ); 143 x8 = x7 - ( SYS_PANEL_GAP_X + sys_panel_button_w(len)); 144 len = strlen( SYS_TEXT_NEXT_PLANE ); 145 x9 = x8 - ( SYS_PANEL_GAP_X + sys_panel_button_w(len)); 146 len = strlen( SYS_TEXT_BEFORE_PLANE ); 147 x10 = x9 - ( SYS_PANEL_GAP_X + sys_panel_button_w(len)); 148 len = strlen ( SYS_TEXT_PLANE0 ); 149 x11 = panel_l + sys_panel_messagebold_w( len ) + SYS_PANEL_GAP_X; 150 len = strlen( SYS_TEXT_INFO_NUM ); 151 x12 = x11+sys_panel_messagebold_w( len ); 152 153 rgb_info_frame = (Frame)xv_create(base_frame,FRAME, 154 FRAME_LABEL,SYS_CAP_RGB_INFO, 155 XV_X,100, 156 XV_Y,100, 157 FRAME_SHOW_RESIZE_CORNER,FALSE, 158 XV_SHOW,FALSE, 159 NULL); 160 rgb_info_panel1 = (Panel)xv_create(rgb_info_frame,PANEL, 161 XV_X,0, 162 XV_Y,0, 163 XV_WIDTH,width, 164 XV_HEIGHT,height, 165 WIN_CMS,sys_cms, 166 NULL); 167 168 rgb_info_image = (Server_image)xv_create(NULL,SERVER_IMAGE, 169 XV_WIDTH,IMAGE_WIDTH, 170 XV_HEIGHT,IMAGE_HEIGHT, 171 SERVER_IMAGE_BITS,info_pattern, 172 NULL); 173 174 image_set = (Panel_item)xv_create(rgb_info_panel1,PANEL_CHOICE, 175 XV_X,x1, 176 XV_Y,y, 177 PANEL_CHOICE_IMAGE,0,rgb_info_image, 178 PANEL_ITEM_COLOR,info_color_image, 179 NULL); 180 (void)xv_create( rgb_info_panel1,PANEL_MESSAGE, 181 XV_X,x2, 182 XV_Y,y, 183 PANEL_LABEL_STRING,SYS_TEXT_RGB_INFO, 184 PANEL_LABEL_BOLD,TRUE, 185 NULL); 186 187 rgb_info_disp1 = (Panel_item)xv_create(rgb_info_panel1,PANEL_CHECK_BOX, 188 PANEL_CHOOSE_ONE,FALSE, 189 PANEL_CHOICE_STRINGS, 190 SYS_TEXT_INFO_BLACK, 191 NULL, 192 PANEL_CHOICE_XS, 193 x3,NULL, 194 PANEL_CHOICE_YS, 195 y - SYS_PANEL_CHOICE,NULL, 196 NULL); 197 198 rgb_info_disp2 = (Panel_item)xv_create(rgb_info_panel1,PANEL_CHECK_BOX, 199 PANEL_CHOOSE_ONE,FALSE, 200 PANEL_CHOICE_STRINGS, 201 SYS_TEXT_INFO_BORDER, 202 NULL, 203 PANEL_CHOICE_XS, 204 x3+choice,NULL, 205 PANEL_CHOICE_YS, 206 y - SYS_PANEL_CHOICE,NULL, 207 NULL); 208 209 y += SYS_PANEL_GAP_Y; 210 211 rgb_info_disp3 = (Panel_item)xv_create(rgb_info_panel1,PANEL_CHECK_BOX, 212 PANEL_CHOICE_STRINGS, 213 SYS_TEXT_PLANE0, 214 SYS_TEXT_PLANE1, 215 SYS_TEXT_PLANE2, 216 SYS_TEXT_PLANE3, 217 NULL, 218 PANEL_CHOICE_XS, 219 x3,x3+choice,x3+choice*2,x3+choice*3,NULL, 220 PANEL_CHOICE_YS, 221 y - SYS_PANEL_CHOICE,NULL, 222 NULL); 223 224 y += SYS_PANEL_GAP_Y; 225 226 (void)xv_create( rgb_info_panel1,PANEL_MESSAGE, 227 XV_X,x2, 228 XV_Y,y, 229 PANEL_LABEL_STRING,SYS_TEXT_DISPPLANE, 230 PANEL_LABEL_BOLD,TRUE, 231 NULL); 232 233 rgb_info_disp4 = (Panel_item)xv_create(rgb_info_panel1,PANEL_CHECK_BOX, 234 PANEL_CHOICE_STRINGS, 235 SYS_TEXT_PLANE0, 236 SYS_TEXT_PLANE1, 237 SYS_TEXT_PLANE2, 238 SYS_TEXT_PLANE3, 239 NULL, 240 PANEL_CHOICE_XS, 241 x3,x3+choice,x3+choice*2,x3+choice*3,NULL, 242 PANEL_CHOICE_YS, 243 y - SYS_PANEL_CHOICE,NULL, 244 NULL); 245 246 y += SYS_PANEL_GAP_Y; 247 248 249 rgb_info_plane = (Panel_item)xv_create( rgb_info_panel1,PANEL_MESSAGE, 250 XV_X,panel_l, 251 XV_Y,y, 252 PANEL_LABEL_BOLD,TRUE, 253 NULL); 254 255 (void)xv_create( rgb_info_panel1,PANEL_MESSAGE, 256 XV_X,x11, 257 XV_Y,y, 258 PANEL_LABEL_STRING,SYS_TEXT_INFO_NUM, 259 PANEL_LABEL_BOLD,TRUE, 260 NULL); 261 262 rgb_info_num = (Panel_item)xv_create( rgb_info_panel1,PANEL_MESSAGE, 263 XV_X,x12, 264 XV_Y,y, 265 PANEL_LABEL_BOLD,TRUE, 266 NULL); 267 268 (void)xv_create(rgb_info_frame,PANEL, 269 XV_X,0, 270 XV_Y,height, 271 XV_WIDTH,panel_l, 272 XV_HEIGHT,info_canvas_h, 273 NULL); 274 275 276 rgb_info_canvas = (Canvas)xv_create( rgb_info_frame,CANVAS, 277 XV_X,panel_l, 278 XV_Y,height, 279 XV_WIDTH,info_canvas_w, 280 XV_HEIGHT,info_canvas_h, 281 CANVAS_WIDTH,info_canvas_w, 282 CANVAS_HEIGHT,info_canvas_h, 283 CANVAS_X_PAINT_WINDOW,TRUE, 284 CANVAS_AUTO_SHRINK,FALSE, 285 CANVAS_AUTO_EXPAND,FALSE, 286 NULL); 287 288 rgb_info_xwin = (Xv_Window)canvas_paint_window(rgb_info_canvas); 289 290 rgb_info_scroll = (Scrollbar)xv_create(rgb_info_canvas,SCROLLBAR, 291 WIN_DYNAMIC_VISUAL,FALSE, 292 SCROLLBAR_DIRECTION,SCROLLBAR_VERTICAL, 293 SCROLLBAR_PIXELS_PER_UNIT,SYS_PANEL_LIST_H3, 294 NULL); 295 296 xv_set(rgb_info_canvas,WIN_CMS,sys_cms,NULL); 297 298 rgb_info_color = (PULONG)xv_get(rgb_info_canvas,WIN_X_COLOR_INDICES); 299 300 301 rgb_info_gc = XCreateGC((Display *)xv_get(base_frame,XV_DISPLAY), 302 (Window)xv_get(canvas_paint_window(rgb_info_canvas), 303 XV_XID)); 304 dpy = (Display *)xv_get(rgb_info_frame,XV_DISPLAY); 305 306 XSetForeground( dpy,rgb_info_gc,0xffffffff); 307 308 XSetBackground( dpy,rgb_info_gc,0); 309 310 #ifdef OW_I18N 311 rgb_info_font = (Font)xv_get((Xv_Font)xv_get(rgb_info_canvas,XV_FONT), 312 FONT_SET_ID); 313 #endif 314 315 (void)xv_create(rgb_info_frame,PANEL, 316 XV_X,panel_l + info_canvas_w, 317 XV_Y,height, 318 XV_WIDTH,panel_l, 319 XV_HEIGHT,info_canvas_h, 320 NULL); 321 322 y = SYS_PANEL_GAP_YB; 323 324 rgb_info_panel2 = (Panel)xv_create(rgb_info_frame,PANEL, 325 XV_X,0, 326 XV_Y,height + info_canvas_h, 327 XV_WIDTH,width, 328 XV_HEIGHT,y + SYS_PANEL_GAP_YBB, 329 NULL); 330 331 (void)xv_create(rgb_info_panel2,PANEL_BUTTON, 332 XV_X,x10, 333 XV_Y,y, 334 PANEL_LABEL_STRING,SYS_TEXT_BEFORE_PLANE, 335 PANEL_NOTIFY_PROC,rgb_info_before_plane, 336 NULL); 337 338 (void)xv_create(rgb_info_panel2,PANEL_BUTTON, 339 XV_X,x9, 340 XV_Y,y, 341 PANEL_LABEL_STRING,SYS_TEXT_NEXT_PLANE, 342 PANEL_NOTIFY_PROC,rgb_info_next_plane, 343 NULL); 344 345 (void)xv_create(rgb_info_panel2,PANEL_BUTTON, 346 XV_X,x8, 347 XV_Y,y, 348 PANEL_LABEL_STRING,SYS_TEXT_BEFORE, 349 PANEL_NOTIFY_PROC,rgb_info_before_page, 350 NULL); 351 352 (void)xv_create(rgb_info_panel2,PANEL_BUTTON, 353 XV_X,x7, 354 XV_Y,y, 355 PANEL_LABEL_STRING,SYS_TEXT_NEXT, 356 PANEL_NOTIFY_PROC,rgb_info_next_page, 357 NULL); 358 359 rgb_info_quit_button = (Panel_item)xv_create(rgb_info_panel2,PANEL_BUTTON, 360 XV_X,x6, 361 XV_Y,y, 362 PANEL_LABEL_STRING,SYS_TEXT_EXIT, 363 PANEL_NOTIFY_PROC,rgb_info_quit, 364 NULL); 365 366 window_fit(rgb_info_frame); 367 } |