UNIVERS  15.3
UNIVERS base processing software API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ZBaseInline.H
1 /* ZBaseInline.H */
2 /* $Id: ZBaseInline.H,v 1.7 2005/06/14 12:31:13 vlad Exp $ */
3 #ifndef __ZBaseInline_H
4 #define __ZBaseInline_H
5 
6 #include <malloc.h>
7 #include <stdlib.h>
8 
9 /*************************************************************
10  * << Class ZPoint >>
11  * Pixel point, place
12  *************************************************************/
13 
14 /*************************************************************/
15 INLINE ZPoint::ZPoint ()
16 {
17  x = y = 0;
18 }
19 
20 
21 /*************************************************************/
22 INLINE ZPoint::ZPoint (int x_coord, int y_coord)
23 {
24  x = x_coord;
25  y = y_coord;
26 }
27 
28 
29 /*************************************************************/
30 INLINE ZPoint::ZPoint (const ZPoint& zpoint)
31 {
32  x = zpoint.x;
33  y = zpoint.y;
34 }
35 
36 
37 /*************************************************************/
38 INLINE ZPoint::operator XPoint () const
39 {
40  XPoint xpoint;
41  xpoint.x = (short)x;
42  xpoint.y = (short)y;
43 
44  return xpoint;
45 }
46 
47 
48 /*************************************************************/
49 INLINE void
50 ZPoint::add_offset (const ZSize& zsize)
51 {
52  x += zsize.w;
53  y += zsize.h;
54 }
55 
56 
57 /*************************************************************/
58 INLINE void
59 ZPoint::sub_offset (const ZSize& zsize)
60 {
61  x -= zsize.w;
62  y -= zsize.h;
63 }
64 
65 
66 /*************************************************************/
67 INLINE void
68 ZPoint::print (const char* szEnd) const
69 {
70  printf("ZPoint:: x=%d, y=%d %s", x, y, szEnd);
71 }
72 
73 
74 /*************************************************************/
75 INLINE bool
76 ZPoint::operator== (const ZPoint& zpoint) const
77 {
78  return x == zpoint.x && y == zpoint.y;
79 }
80 
81 
82 /*************************************************************/
83 INLINE bool
84 ZPoint::operator!= (const ZPoint& zpoint) const
85 {
86  return !operator==(zpoint);
87 }
88 
89 
90 /*************************************************************
91  * << Class ZSize >>
92  * Pixel size, box with undefined place
93  *************************************************************/
94 
95 /*************************************************************/
96 INLINE ZSize::ZSize ()
97 {
98  w = h = 0;
99 }
100 
101 
102 /*************************************************************/
103 INLINE ZSize::ZSize (int width, int height)
104 {
105  w = width;
106  h = height;
107 }
108 
109 
110 /*************************************************************/
111 INLINE ZSize::ZSize (const ZSize& zsize)
112 {
113  w = zsize.w;
114  h = zsize.h;
115 }
116 
117 
118 /*************************************************************/
119 INLINE void
120 ZSize::difference (const ZPoint& zpoint1, const ZPoint& zpoint2)
121 {
122  w = zpoint1.x - zpoint2.x;
123  h = zpoint1.y - zpoint2.y;
124 }
125 
126 
127 /*************************************************************/
128 INLINE void
129 ZSize::print (const char* szEnd) const
130 {
131  printf("ZSize:: w=%d, h=%d %s", w, h, szEnd);
132 }
133 
134 
135 /*************************************************************/
136 INLINE bool
137 ZSize::operator== (const ZSize& zsize) const
138 {
139  return w == zsize.w && h == zsize.h;
140 }
141 
142 
143 /*************************************************************/
144 INLINE bool
145 ZSize::operator!= (const ZSize& zsize) const
146 {
147  return !operator==(zsize);
148 }
149 
150 
151 /*************************************************************
152  * << Class ZRect >>
153  * Real box, rectangle
154  *************************************************************/
155 
156 /*************************************************************/
157 INLINE ZRect::ZRect ()
158 {
159 }
160 
161 /*************************************************************/
162 INLINE ZRect::ZRect (const ZPoint& zpoint1,
163  const ZPoint& zpoint2)
164 : ZPoint(MIN(zpoint1.x, zpoint2.x), MIN(zpoint1.y, zpoint2.y)),
165  ZSize(ABS(zpoint1.x - zpoint2.x), ABS(zpoint1.y - zpoint2.y))
166 {
167 }
168 
169 
170 /*************************************************************/
171 INLINE ZRect::ZRect (const ZPoint& zpoint,
172  const ZSize& zsize, ZCorner zcorner)
173 : ZPoint(0, 0), ZSize(zsize)
174 {
175  move(zpoint, zcorner);
176 }
177 
178 
179 /*************************************************************/
180 INLINE ZRect::ZRect (const ZRect& zrect)
181 : ZPoint(zrect), ZSize(zrect)
182 {
183 }
184 
185 
186 /*************************************************************/
187 INLINE void
188 ZRect::print (const char* szEnd) const
189 {
190  printf("ZRect:: x=%d, y=%d, w=%d, h=%d %s", x, y, w, h, szEnd);
191 }
192 
193 
194 /*************************************************************/
195 INLINE bool
196 ZRect::operator== (const ZRect& zrect) const
197 {
198  return ZPoint::operator==(zrect) && ZSize::operator==(zrect);
199 }
200 
201 
202 /*************************************************************/
203 INLINE bool
204 ZRect::operator!= (const ZRect& zrect) const
205 {
206  return !operator==(zrect);
207 }
208 
209 
210 
211 /*************************************************************
212  * << Class ZConnect >>
213  * Link to the X server
214  *************************************************************/
215 
216 
217 /*************************************************************
218  * << Class ZWindow >>
219  * X Window determination
220  *************************************************************/
221 
222 /*************************************************************
223  * Returns window id of root window
224  *************************************************************/
225 INLINE Window
226 ZConnect::root_wid () const
227 {
228  register Window wid = RootWindow(dpy, scr_no);
229  x_error((int)wid);
230 
231  return wid;
232 }
233 
234 
235 /*************************************************************
236  * Performs XFlush(dpy)
237  *************************************************************/
238 INLINE void
239 ZConnect::flush ()
240 {
241  XFlush(dpy);
242 }
243 
244 
245 /*************************************************************
246  * Returns ZRect of root window
247  *************************************************************/
248 INLINE ZRect
249 ZConnect::rect () const
250 {
251  return rect(root_wid());
252 }
253 
254 
255 /*************************************************************
256  * Recturn depth of pointed drawable
257  *************************************************************/
258 INLINE int
259 ZConnect::depth (Drawable drawable) const
260 {
261  Window root_wid;
262  unsigned int dummy;
263  unsigned int d;
264 
265  XGetGeometry(dpy, drawable, &root_wid, (int*)&dummy,
266  (int*)&dummy, &dummy, &dummy, &dummy, &d);
267 
268  return d;
269 }
270 
271 
272 /*************************************************************
273  * Returns white color handle of screen
274  *************************************************************/
275 INLINE ColorPixel
276 ZConnect::white () const
277 {
278  return WhitePixel(dpy, scr_no);
279 }
280 
281 
282 /*************************************************************
283  * Returns black color handle of screen
284  *************************************************************/
285 INLINE ColorPixel
286 ZConnect::black () const
287 {
288  return BlackPixel(dpy, scr_no);
289 }
290 
291 
292 /*************************************************************
293  * Returns handle of needed color
294  *************************************************************/
295 INLINE ColorPixel
296 ZConnect::color (const char* szColorName) const
297 {
298  return zcp_color_pixel(szColorName);
299 }
300 
301 
302 /*************************************************************
303  * << Class ZGEnv >>
304  * X Graphics Environment: newly created GC.
305  *************************************************************/
306 
307 
308 /*************************************************************
309  * Text information
310  *************************************************************/
311 
312 /*************************************************************
313  * Return width of pointed text (in pixel) on screen
314  *************************************************************/
315 INLINE int
316 ZGEnv::text_width (const char* szText) const
317 {
318  if(szText == NULL) Throw(ERROR__NULL);
319 
320  if(szText[0] == '\0')
321  return 0;
322 
323  return XTextWidth(font, szText, strlen(szText));
324 }
325 
326 
327 /*************************************************************
328  * Return width of some text with n chars (in pixel) on screen
329  *************************************************************/
330 INLINE int
331 ZGEnv::text_width (int n) const
332 {
333  return n * font->max_bounds.width;
334 }
335 
336 
337 /*************************************************************
338  * Return ascent of text (in pixel) on screen
339  *************************************************************/
340 INLINE int
341 ZGEnv::text_ascent () const
342 {
343  return font->ascent;
344 }
345 
346 
347 /*************************************************************
348  * Return descent of text (in pixel) on screen
349  *************************************************************/
350 INLINE int
351 ZGEnv::text_descent () const
352 {
353  return font->descent;
354 }
355 
356 
357 /*************************************************************
358  * Return height of text (in pixel) on screen
359  *************************************************************/
360 INLINE int
361 ZGEnv::text_height () const
362 {
363  return text_ascent() + text_descent();
364 }
365 
366 
367 /*************************************************************
368  * Draw text in some drawable attached to some point.
369  *************************************************************/
370 INLINE void
371 ZGEnv::draw_text (Drawable id, int x, int y, int attachment,
372  const char* szText) const
373 {
374  if(szText == NULL) Throw(ERROR__NULL);
375 
376  ZRect r = text_rect(x, y, attachment, szText);
377  XDrawString(dpy, id, gc, r.x, r.y + r.h - 1 - text_descent(),
378  szText, strlen(szText));
379 }
380 
381 
382 /*************************************************************
383  * GC operations
384  *************************************************************/
385 
386 /*************************************************************/
387 INLINE void
388 ZGEnv::set_foreground (ColorPixel cp)
389 {
390  XSetForeground(dpy, gc, cp);
391  changed_state(ChangedForeground);
392 
393  if(NULL != fg_name)
394  {
395  if(!strcmp(fg_name, "black"))
396  return;
397  free(fg_name);
398  }
399  fg_name = strdup("black");
400 }
401 
402 
403 /*************************************************************/
404 INLINE void
405 ZGEnv::set_foreground (const char* szColorName)
406 {
407  set_foreground(color(szColorName));
408 
409  if(NULL != fg_name)
410  {
411  if(!strcmp(fg_name, szColorName))
412  return;
413  free(fg_name);
414  }
415  fg_name = strdup(szColorName);
416 }
417 
418 
419 /*************************************************************/
420 INLINE ColorPixel
421 ZGEnv::get_foreground () const
422 {
423  XGCValues gc_val;
424  Status rc = XGetGCValues(dpy, gc, GCForeground, &gc_val);
425  if(0 == rc)
426  x_error(ERROR__X_GET_GC_VALUES);
427  return gc_val.foreground;
428 }
429 
430 
431 /*************************************************************/
432 INLINE const char*
433 ZGEnv::get_foreground_name () const
434 {
435  return fg_name;
436 }
437 
438 
439 /*************************************************************/
440 INLINE void
441 ZGEnv::set_background (ColorPixel cp)
442 {
443  XSetBackground(dpy, gc, cp);
444  changed_state(ChangedBackground);
445 
446  if(NULL != bg_name)
447  {
448  if(!strcmp(bg_name, "white"))
449  return;
450  free(bg_name);
451  }
452  bg_name = strdup("white");
453 }
454 
455 
456 /*************************************************************/
457 INLINE void
458 ZGEnv::set_background (const char* szColorName)
459 {
460  set_background(color(szColorName));
461 
462  if(NULL != bg_name)
463  {
464  if(!strcmp(bg_name, szColorName))
465  return;
466  free(bg_name);
467  }
468  bg_name = strdup(szColorName);
469 }
470 
471 
472 /*************************************************************/
473 INLINE ColorPixel
474 ZGEnv::get_background () const
475 {
476  XGCValues gc_val;
477  Status rc = XGetGCValues(dpy, gc, GCBackground, &gc_val);
478  if(0 == rc)
479  x_error(ERROR__X_GET_GC_VALUES);
480  return gc_val.background;
481 }
482 
483 
484 /*************************************************************/
485 INLINE const char*
486 ZGEnv::get_background_name () const
487 {
488  return bg_name;
489 }
490 
491 
492 /*************************************************************/
493 INLINE void
494 ZGEnv::set_line_width (int new_width)
495 {
496  XGCValues gc_val;
497  gc_val.line_width = new_width;
498  XChangeGC(dpy, gc, GCLineWidth, &gc_val);
499 
500  changed_state(ChangedLineWidth);
501 }
502 
503 
504 /*************************************************************/
505 INLINE int
506 ZGEnv::get_line_width () const
507 {
508  XGCValues gc_val;
509  Status rc = XGetGCValues(dpy, gc, GCLineWidth, &gc_val);
510  if(0 == rc)
511  x_error(ERROR__X_GET_GC_VALUES);
512  return gc_val.line_width;
513 }
514 
515 
516 /*************************************************************/
517 INLINE void
518 ZGEnv::set_line_style (int new_style, int dash, int hole)
519 {
520  XGCValues gc_val;
521  gc_val.line_style = new_style;
522  XChangeGC(dpy, gc, GCLineStyle, &gc_val);
523 
524  char dash_hole[2];
525  dash_hole[0] = dash;
526  dash_hole[1] = hole;
527  XSetDashes(dpy, gc, 0, dash_hole, NUMBER(dash_hole));
528 
529  changed_state(ChangedLineStyle);
530 }
531 
532 
533 /*************************************************************/
534 INLINE int
535 ZGEnv::get_line_style () const
536 {
537  XGCValues gc_val;
538  Status rc = XGetGCValues(dpy, gc, GCLineStyle, &gc_val);
539  if(0 == rc)
540  x_error(ERROR__X_GET_GC_VALUES);
541  return gc_val.line_style;
542 }
543 
544 
545 /*************************************************************/
546 INLINE const char*
547 ZGEnv::get_font_name () const
548 {
549  return font_name;
550 }
551 
552 
553 /*************************************************************/
554 INLINE void
555 ZGEnv::set_font_as (const ZGEnv& zgenv)
556 {
557  set_font(zgenv.get_font_name());
558 }
559 
560 
561 /*************************************************************/
562 INLINE Font
563 ZGEnv::get_font () const
564 {
565  XGCValues gc_val;
566  Status rc = XGetGCValues(dpy, gc, GCFont, &gc_val);
567  if(0 == rc)
568  x_error(ERROR__X_GET_GC_VALUES);
569  return gc_val.font;
570 }
571 
572 
573 /*************************************************************
574  * << Class ZWindow >>
575  * X Window determination
576  *************************************************************/
577 
578 /*************************************************************/
579 INLINE ZWindow::ZWindow (const ZConnect& zconnect, Window window)
580 : ZConnect(zconnect), ZGEnv(zconnect)
581 {
582  wid = window;
583 }
584 
585 
586 /*************************************************************/
587 INLINE ZWindow::ZWindow (const ZWindow& zwindow)
588 : ZConnect(zwindow), ZGEnv(zwindow)
589 {
590  wid = zwindow.wid;
591 }
592 
593 
594 /*************************************************************
595  * Draw attached text
596  *************************************************************/
597 INLINE void
598 ZWindow::draw_text (int x, int y, int attachment,
599  const char* szText) const
600 {
601  ZGEnv::draw_text(wid, x, y, attachment, szText);
602 }
603 
604 
605 /*************************************************************
606  * Draw aligned text.
607  *************************************************************/
608 INLINE void
609 ZWindow::draw_text (const ZRect& box, int alignment,
610  const char* szText) const
611 {
612  ZGEnv::draw_text(wid, box, alignment, szText);
613 }
614 
615 
616 /*************************************************************
617  * << Class ZDrawable >>
618  * X Drawable determination
619  *************************************************************/
620 
621 /*************************************************************/
622 INLINE ZDrawable::ZDrawable (const ZConnect& zconnect, Drawable drawable)
623 : ZConnect(zconnect), ZGEnv(zconnect)
624 {
625  did = drawable;
626 }
627 
628 
629 /*************************************************************/
630 INLINE ZDrawable::ZDrawable (const ZDrawable& zdrawable)
631 : ZConnect(zdrawable), ZGEnv(zdrawable)
632 {
633  did = zdrawable.did;
634 }
635 
636 
637 /*************************************************************
638  * Draw attached text
639  *************************************************************/
640 INLINE void
641 ZDrawable::draw_text (int x, int y, int attachment,
642  const char* szText) const
643 {
644  ZGEnv::draw_text(did, x, y, attachment, szText);
645 }
646 
647 
648 /*************************************************************
649  * Draw aligned text.
650  *************************************************************/
651 INLINE void
652 ZDrawable::draw_text (const ZRect& box, int alignment,
653  const char* szText) const
654 {
655  ZGEnv::draw_text(did, box, alignment, szText);
656 }
657 
658 
659 /*************************************************************
660  * << Class ZArea >>
661  * Newly created pixmap with default depth
662  *************************************************************/
663 
664 /*************************************************************/
665 INLINE ZArea::ZArea (const ZConnect& zconnect, const ZSize& zsize)
666 : ZConnect(zconnect),
667  ZDrawable(zconnect,
668  (Drawable)XCreatePixmap(zconnect.dpy,
669  zconnect.root_wid(), zsize.w, zsize.h,
670  zconnect.depth(zconnect.root_wid())))
671 {
672  x_error((int)did);
673 }
674 
675 
676 /*************************************************************/
677 INLINE ZArea::ZArea (const ZArea& zarea)
678 : ZConnect(zarea),
679  ZDrawable(zarea,
680  (Drawable)XCreatePixmap(zarea.dpy, zarea.root_wid(),
681  zarea.rect().w,
682  zarea.rect().h,
683  zarea.depth(zarea.did)))
684 {
685  x_error((int)did);
686  XCopyArea(dpy, zarea.did, did, gc, 0, 0,
687  zarea.rect().w, zarea.rect().h, 0, 0);
688 }
689 
690 
691 /*************************************************************
692  * Create new pixmap with new size
693  *************************************************************/
694 INLINE void
695 ZArea::resize (const ZSize& zsize)
696 {
697  XFreePixmap(dpy, did);
698  did = (Drawable)XCreatePixmap(dpy, root_wid(), zsize.w, zsize.h,
699  depth(root_wid()));
700  x_error((int)did);
701 }
702 
703 
704 /*************************************************************
705  * << Class ZWidget >>
706  * Widget based object.
707  *************************************************************/
708 
709 /*************************************************************/
710 INLINE ZWidget::ZWidget (Widget w)
711 : ZConnect(XtDisplay(w)), wptr(w)
712 {
713  // dummy
714 }
715 
716 
717 #endif /* ZBaseInline.H */
Definition: ZBase.H:156
Definition: ZBase.H:234
Definition: ZBase.H:87
Definition: ZBase.H:291
Definition: ZBase.H:58
Definition: ZBase.H:118
Definition: ZBase.H:30
Definition: ZBase.H:259